Skip to content

Compaction rendering has split ownership between condition strip, semantic stream, and committed rows #343

Closed

Description

@Juliusolsson05

Problem

Compaction has three disconnected render paths that can disagree:

  1. Out-of-feed condition strip from claude.compaction.
  2. Live semantic placeholder gated by turn.isCompactionSynthesis.
  3. Committed compact boundary/summary rows after transcript entries arrive.

In saved bundles, the condition can say compaction is running while the feed renders raw semantic synthesis text.

Evidence

Bundle:

~/.config/agent-code/debug-bundles/manual/2026-06-22T12-42-54-045-c973322e

  • claude.compaction condition is visible/running.
  • proxy-semantic.json.currentTurn.text starts with <analysis>.
  • The semantic turn lacks isCompactionSynthesis.

Relevant Paths

  • src/renderer/src/workspace/tile-tree/TileLeaf/CompactionStrip.tsx
  • src/renderer/src/workspace/tile-tree/TileLeaf.tsx
  • src/renderer/src/features/feed/ui/rows/CompactBoundaryRow.tsx
  • src/renderer/src/features/feed/ui/rows/CompactSummaryRow.tsx
  • src/renderer/src/features/feed/ui/semantic/StreamingTurn.tsx
  • src/renderer/src/features/feed/model/renderModel.ts

Expected

There should be one ownership rule for compaction rendering. If any reliable signal says compaction is active, raw synthesis content should be suppressed in the feed.

Activity

  1. Juliusolsson05 commented on Jun 22, 2026

    @Juliusolsson05
    OwnerAuthor

    Linking this back to #172. This issue is directly about render ownership: compaction currently has separate condition-strip, semantic-stream, and committed-row render paths that can disagree.

    The #172 rendering engine work should give compaction a single owner in the ordered feed plan. After #172 lands, this issue should be re-tested and either closed as covered or narrowed to any remaining provider-specific compaction signal problems.

  2. Juliusolsson05 commented on Aug 30, 2026

    @Juliusolsson05
    OwnerAuthor

    Closing as resolved by the 2026-07 ownership-ledger rewrite (PR #555, merged 2026-07-18).

    This issue describes split compaction ownership across three painters — the condition strip, the semantic stream, and committed rows. That architecture no longer exists. Verified on current main:

    • One model. src/providers/shared/renderer/protocols/compaction/model.ts defines a single CompactionRenderModel.
    • One painter. CompactionView.tsx renders every compaction state (boundary, progress, summary) from that model. There is no longer a separate condition-strip rendering of compaction competing with a feed row.
    • One ownership decision. The ledger carries compact-boundary and compact-summary row kinds (rendering/model/types.ts:62-63) and a compaction-synthesis RenderReason (types.ts:173). Visibility is decided in the ledger, not by each painter.
    • Coverage. protocols/compaction/compaction.renderer.test.tsx.

    The general fix was structural: the rewrite collapsed all visibility/ownership decisions into one decision point, which is exactly what this issue asked for. Per the rendering design principles, ownership is now decided per block with a recorded reason for every candidate.

    If compaction rendering misbehaves again, it will be a different defect against the current pipeline — please file it fresh with a debug bundle or session recording rather than reopening this one, since the code it describes is gone.

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

    bugSomething isn't workingprovider:claudeAffects Claude Code integration

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions