Skip to content

Add rendering trace debug for transcript and semantic channel ownership #171

Closed

Description

@Juliusolsson05

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 text
  • 2026-05-16T18-05-46-189-f4b37c29: live semantic/commentary replacement symptom while committed transcript caught up
  • 2026-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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions