sanad: coder panel P1b — panel spine, request cards, gated Coder tab - #3
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
P1b of the coder-panel effort (spec: docs/superpowers/specs/2026-08-12-coder-agent-panel-design.md, plan: docs/superpowers/plans/2026-08-13-coder-panel-p1b-panel-spine.md).
The browser gets the Coder panel spine:
lib/ndjson.ts); architect client behaviorally unchangedlib/coder/{types,client,transcript}: conversation lifecycle with one-time-ticket discipline (open falls through to create with a re-mint), journal-driven fold with the full request lifecycle — LAST-WINS semantics, decided blocks frozen against stale replays, post-enditems foldedcoderslot (pending-never-persisted enforced at the zod layer) + server-computedcoderEnabledflagRequestCards: inline Approval (allow / allow-for-session / deny / deny-with-feedback) + Question (multi-select, synthetic Other) cards, interactive only whilestate === "pending"CoderPanel(adapts ArchitectPanel's proven resilience machinery): ensure-conversation begin, server-authoritative reload resume, pending-request recovery, respond wiring with off-stream optimistic folds, stall watchdog, queueSANAD_CODER_PANEL_EMAILSallows the userReview trail: per-task gates (2 fix rounds: transcript replay freeze; three CoderPanel findings), then a final whole-branch review that caught a Critical cross-task seam — persisted conversationId was never adopted after async hydration (reload leaked conversations to the cap) — fixed and re-verified in one fix wave.
Verification: web suite 283 passed, tsc clean; terminal-server 179 passed. Manual QA required before enabling for real users (script in the PR discussion): set backend
CODER_ENABLED=1+SANAD_CODER_PANEL_EMAILS, exercise the approval flow, reload mid-approval, deny-with-feedback, question multi-select/Other, allow-for-session, and reload-resume.Known fork-CI noise: pr-title-checker + typos fail on upstream Kimi artifacts (same as PRs #1–2) — not required checks.