Context
Sister of #5. log-frame.tsx's eventToAtom falls back to legacy ink rendering for three remaining roles; this issue covers plan-replay.
plan-replay fires when the user runs /replay and the historical plan is reconstructed step-by-step. Existing renderer is in src/cli/ui/EventLog.tsx around line 482. Event payload includes event.archivedPlan (steps + meta).
Task
- Add
planReplayFrame(event, width): Frame near planFrame in log-frame.tsx.
- Branch in
eventToAtom so event.role === 'plan-replay' returns a frame atom.
- Visually match the existing
<EventRow> output for that role. Distinct from plan-resumed (subtler header, archived treatment).
plan-replay is rarer than plan-resumed — easiest way to see it live is /replay <session-name>.
Why it's a good first PR
Context
Sister of #5.
log-frame.tsx'seventToAtomfalls back to legacy ink rendering for three remaining roles; this issue coversplan-replay.plan-replayfires when the user runs/replayand the historical plan is reconstructed step-by-step. Existing renderer is insrc/cli/ui/EventLog.tsxaround line 482. Event payload includesevent.archivedPlan(steps + meta).Task
planReplayFrame(event, width): FramenearplanFrameinlog-frame.tsx.eventToAtomsoevent.role === 'plan-replay'returns aframeatom.<EventRow>output for that role. Distinct fromplan-resumed(subtler header, archived treatment).plan-replayis rarer thanplan-resumed— easiest way to see it live is/replay <session-name>.Why it's a good first PR
plan-resumedrole from ink to frame #5 — both can land in parallel.borderLeft,vstack,pad,text).