Skip to content

Tabbed living canvas: additive ledgers + model extraction with mechanical receipts#830

Merged
spashii merged 1 commit into
mainfrom
sameer/tabbed-canvas
Jul 8, 2026
Merged

Tabbed living canvas: additive ledgers + model extraction with mechanical receipts#830
spashii merged 1 commit into
mainfrom
sameer/tabbed-canvas

Conversation

@spashii

@spashii spashii commented Jul 8, 2026

Copy link
Copy Markdown
Member

Implements the tab model from the 2026-07-08 owner conversations plus Oren's design handoff (distilled to docs/plans/canvas-ux-handoff.md).

  • Tabs with fixed shapes (v1: Crux, Concept cloud, Story) rendered as one sanitized fragment; CSS-only tab bar + trace expansion survive the sanitizer (round-trip tested)
  • Additive ledgers persisted on agent_loop: quotes, concepts, crux + history, host items, story slides — ticks append, nothing rebuilds, unchanged tabs render unchanged
  • Model proposes, code verifies: one structured Flash extraction per content-bearing tick with the judgment checklists in the prompt; mechanical receipt validation (verbatim-substring grep test for quotes, concepts must live inside an accepted quote, no receipt = no underline); rejections recorded on the run, never silently swallowed
  • Caps in code: exactly 3 XL / ~20 tiles, crux updated never appended; model failure = no_op with previous wall intact
  • addToCanvas / removeFromCanvas agent verbs: host-made items stored exactly, routed to a tab, manual tick fires immediately ("put Cesare's reflection on the wall")
  • Idempotent Directus migration for the ledger fields; existing loops default to the v1 tab set on next tick

Gates: server ruff + 36 canvas tests, agent 97 tests. Reports: wave28-REPORT.md, wave28b-REPORT.md (28b restored model-driven extraction after the first pass went fully deterministic).

🤖 Generated with Claude Code

…h mechanical receipts

The canvas becomes fixed-shape tabs (Crux, Concept cloud, Story) over
persisted additive ledgers on agent_loop (quotes, concepts, crux
history, host items, story slides). Each content-bearing tick runs one
structured MULTI_MODAL_FAST extraction carrying the judgment-layer
checklists from docs/plans/canvas-ux-handoff.md; code then enforces the
receipts mechanically: a quote is accepted only if it appears verbatim
in the gathered transcript, a concept only if its phrase lives inside
an accepted quote, and slide trace markup only for accepted ids. Caps
(3 XL / ~20 tiles) and crux update-not-append are enforced in code.
Model failure no_ops the tick with previous state intact.

Rendering is a deterministic sanitized fragment: CSS-only tab bar and
trace expansion (sanitizer round-trip tested), brand kit v2 per the
handoff. addToCanvas/removeFromCanvas agent verbs store exact host text
into a target tab and enqueue a manual tick immediately. Idempotent
migration adds the ledger JSON fields.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@spashii spashii merged commit e1ae279 into main Jul 8, 2026
11 checks passed
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