plans/prompts/wave_1/pr_a6a_streaming_status.md
Implement PR A6a of plans/cleanup-state-machines.md, unblocked by design gate G1a — read the "G1a — DECIDED" section first; it is the contract this PR implements and wins over both this prompt and the appendix. Prereqs: A2 (#4091) landed; rebase over A3 (#4092) (shared files: useStreamChat, DyadMarkdownParser, chat_stream/commands.ts). Update the plan's A6a status; remove the atoms' A1 allowlist entries.
Appendix recipes: "chat_stream: isStreamingByIdAtom (L)" and "chat_stream: chatErrorByIdAtom (M)" carry the verified reader-by-reader map.
Scope — the ordered stack:
external-error event — the ONE sanctioned
transition delta (isolated commit, exhaustive matrix updated, called
out in PR description). Last-error durability: bounded
lastErrorByChatId map on the manager, cleared on next submit and chat
deletion.Verify: typecheck, full unit tests, lint, then the full streaming E2E suite locally (widest reader blast radius in Phase A). /deep-review; fix confirmed findings. Branch cleanup-a6a-streaming-status; /pr-push. PR description: G1a contract implemented, sanctioned transition delta, disposal-observation test, #4077 deletion rationale.