Repository navigation
Add rendering trace debug for transcript and semantic channel ownership #171
Description
Problem
We keep hitting feed rendering regressions where the committed transcript channel and the live semantic/proxy channel disagree about ownership of the same visible chat content.
Recent symptoms from debug bundles:
- assistant response duplicated: committed JSONL row plus live semantic row rendered the same text
- live assistant progress row appeared to replace prior assistant commentary while JSONL was catching up
- mid-turn/follow-up prompt scenarios are hard to diagnose because the current debug bundle spreads evidence across
feed-debug.jsonl,proxy-semantic.json, raw HTML, clean HTML, state snapshots, and proxy wire logs
The hard part is not only the bug itself. The hard part is that we do not have one timeline that shows the two channels and renderer decisions together.
Desired Tool
Add a rendering trace debug command/script that prints one ordered timeline for a debug bundle, including:
- committed transcript/JSONL updates
- semantic/proxy turn updates
- semantic history/currentTurn state
- optimistic user rows and queued/follow-up prompt state
- visible row decisions: added/removed/hidden rows, keys, slots, labels
- flow selection/ignored-flow events
- lifecycle violations or mismatched turn ids
- HTML presence checks for final visible rows when possible
The output should make channel ownership explicit, e.g. for each user-visible message/tool row:
- committed owner key / uuid, if any
- semantic owner turnId/blockIndex/itemId, if any
- current rendered row key(s)
- whether renderer suppressed, replaced, duplicated, or failed to paint it
Why
Right now every investigation requires manually correlating several files. That makes it easy to jump to the wrong layer: duplicates, missing rows, overwritten live rows, and mid-turn prompt issues all look similar from the UI, but have different ownership failures.
We need a deterministic rendering trace before attempting a larger rework of transcript + semantic channel coordination.
References
Recent bundles that motivated this:
2026-05-16T17-51-43-433-f2395303: duplicate committed assistant + live semantic assistant text2026-05-16T18-05-46-189-f4b37c29: live semantic/commentary replacement symptom while committed transcript caught up2026-05-16T18-08-15-424-f4b37c29: mid-turn/follow-up prompt suspicion and hard-to-correlate proxy flow state
Acceptance Criteria
- A command can be run against a saved debug bundle path.
- It emits a concise, chronological rendering trace to stdout.
- It labels events by channel:
JSONL,SEM,RENDER,STATE,HTML,PROXY. - It highlights suspicious states: duplicate visible ownership, semantic-only finalized text, committed-only missing HTML, ignored active proxy flows, queued prompt without visible optimistic/committed row.
- It works on the three bundle paths above without crashing.
Activity