| name | formax-expanded-transcript-workflow |
| description | Use when implementing/debugging Ctrl+O Expanded Transcript (second view) and thinking persistence in the REPL. |
formax-expanded-transcript-workflow
Goal
Use this skill when changing Ctrl+O expanded transcript behavior, thinking persistence, or compact / expanded projection boundaries in the REPL.
Read First
docs/contracts/transcript-surface-contract.md
docs/contracts/semantics-contract.md
docs/runbooks/repl-surface-debugging.md when the change can affect clear / remount behavior
These docs are canonical. If stable expanded-transcript behavior changes, update them before or with code.
If the change touches clear / remount ownership directly, also use formax-surface-reset-workflow.
Code Map
- Key handling:
packages/core/src/screens/repl/hotkeys.ts
- View wiring + footer:
packages/core/src/screens/REPL.tsx
- Compact projection:
packages/core/src/screens/repl/compactProjection.ts
- Transcript rendering:
packages/core/src/screens/repl/transcript.tsx
- Thinking persistence:
packages/core/src/features/repl/controller/streaming/streaming.ts
- Expanded Transcript panels:
packages/core/src/screens/repl/panels.tsx
- Compact command lifecycle:
packages/core/src/features/repl/controller/send/send.ts
- Surface reset owner:
packages/core/src/screens/repl/useSurfaceTransitionManager.ts
High-Signal Patterns
- No fake thinking:
thinking_delta is the only source of truth
- never synthesize thinking rows from timers or summaries
- Avoid
Static hacks for toggles:
Static is append-only; if content must disappear, use reset / remount ownership instead of trying to "unrender" it
- One footer:
- prefer a single global footer; avoid per-panel footer duplication
- Compact ordering contract:
- keep
banner -> summary (expanded only) -> > /compact ... -> compact subline
- UI vs LLM orthogonality:
- transcript slicing and
ui.kind remain independent from prompt-history packing and reminder injection
Minimal Workflow
- Lock the semantic source first:
thinking_delta persistence and transcript projection rules before renderer polish.
- Keep default transcript low-noise and Expanded Transcript read-only.
- Preserve compact / expanded ordering before adjusting footer or panel layout.
- If clear / remount logic changes, route through the shared surface reset path instead of local
Static workarounds.
- Run the regression set below before review.
Minimum Regression
bun run test -- packages/core/src/screens/repl/compactProjection.test.ts packages/core/src/screens/repl/expandedTranscript.test.tsx packages/core/src/screens/repl/hotkeys.test.tsx
bun run test -- packages/core/src/screens/repl/surfaceSmoke.test.tsx
bun run test:surface-screen-model
bun run type-check
Guardrails
- Do not introduce synthetic thinking or show thinking when the model did not emit
thinking_delta.
- Do not let
Ctrl+O steal input while prompt mode or overlays are active.
- Do not move header / messages outside
Static to “fix” duplication; solve ownership and remount boundaries instead.
- Expanded Transcript stays read-only; do not quietly turn it into an interactive input surface.