Skip to content

feat(rendering): slice 14 — view bridge: ledger rows → legacy FeedRenderItems#443

Merged
Juliusolsson05 merged 1 commit into
integration/rendering-pipelinefrom
feat/rendering-slice14-viewbridge
Jul 7, 2026
Merged

feat(rendering): slice 14 — view bridge: ledger rows → legacy FeedRenderItems#443
Juliusolsson05 merged 1 commit into
integration/rendering-pipelinefrom
feat/rendering-slice14-viewbridge

Conversation

@Juliusolsson05

Copy link
Copy Markdown
Owner

The last structural piece before the cutover slice: view/ledgerFeedItems.ts maps RenderLedger rows to the FeedRenderItem shape Feed already renders, so AGENT_CODE_RENDER_PIPELINE=1 will swap ONE call site — the decision core — while LazyEntry, the memo structure, autoscroll's tail-signature, and TextProse/StreamingProse survive untouched. SemanticStreamingTurn keeps rendering semantic items until the final cutover deletes it atomically with ghost rule 3 (plan D6).

  • Order contract: items emit in ledger order with order fields engineered so legacy sortFeedRenderItems is a no-op over them (matching phase partition, null timeMs, constant source, index-based sequence) — the D4 chronological merge stays authoritative even though the legacy sorter still runs.
  • Payload identity: the bridge hands Feed the runtime's own Entry / SemanticLiveTurn object references, asserted in tests — anything else would re-render every memoized row per tick (the D11 churn class).
  • No silent drops: candidates whose uuid/turnId can't resolve land in dropped for the caller to surface — a silently missing row is the Optimistic submitted user prompts are buried behind semantic/work rows #239 failure class this rewrite exists to kill.
  • Bridge output is compared item-for-item against legacy deriveFeedRenderModel on runtime scenarios (streaming, ghost fallback, optimistic, empty).

83 pipeline tests; tsc gate (node + web) clean.

🤖 Generated with Claude Code

…derItems

ledgerToFeedItems maps RenderLedger rows to the FeedRenderItem shape Feed
already renders, so the Stage 3 flag swap replaces ONE call site (the
decision core) while LazyEntry, memo structure, autoscroll tail-signature
and TextProse/StreamingProse survive untouched. SemanticStreamingTurn
keeps rendering semantic items until the final cutover slice deletes it
with ghost rule 3 (D6) — decoupling the decision-core swap from a row-
component rewrite.

Order contract: items emit in LEDGER order with order fields engineered
so legacy sortFeedRenderItems is a no-op (matching phase partition, null
timeMs, constant source, index sequence). Payload references are the
runtime's own objects (Entry / SemanticLiveTurn) so downstream memos hold.
Unresolvable candidates surface in `dropped`, never silently omitted.

83 pipeline tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Juliusolsson05 Juliusolsson05 merged commit 903ddd4 into integration/rendering-pipeline Jul 7, 2026
@Juliusolsson05 Juliusolsson05 deleted the feat/rendering-slice14-viewbridge branch July 7, 2026 21:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant