Build Log
Alloy: Quench Ticket 5 — the actual 9-panel page rebuild
July 26, 2026
Full replacement of the 404-line ArcQuenchPanel with a real 9-panel Quench page reading from ONE QuenchSnapshot (Ticket 4) — Phase Header, Charge Baseline, Actual Outcome, Verification Matrix, Workspace Integrity, Scope & Safeguards, Evidence Tray, Cracks & Routing, Quench Verdict — plus a 3-panel right rail and a renamed Verification Ledger. Live-verified by Zeb in the browser, every panel showing correct real or honest-empty state.
Timeline
What shipped
products/alloy/components/QuenchPanel.tsx — new, 9 real panels (Phase Header, Charge Baseline, Actual Outcome, Verification Matrix, Workspace Integrity, Scope & Safeguards, Evidence Tray, Cracks & Routing, Quench Verdict), reads from one QuenchSnapshot prop. CriterionRow carried forward unchanged from the pre-rebuild ArcQuenchPanel (Ticket 2's read/write path was already correct). New CrackRow/NewCrackForm — first real UI consumer of Ticket 3's crack plumbing.
products/alloy/components/QuenchRail.tsx — new, 3-panel right rail (Quench Readiness, Execution State, Quench Snapshot), matching IgniteRail.tsx's exact Server Component convention
products/alloy/components/VerificationLedgerPanel.tsx — new, Quench-scoped ledger (criterion_verified/crack_discovered/crack_resolved events only), replacing the generic Command Ledger on this specific page per the plan's instruction
products/alloy/app/quench/page.tsx — rewired to call buildQuenchSnapshot(arc.id) once, compute runtimeMode via resolveArcRuntimeMode, and pass both down to QuenchPanel/QuenchRail — no more scattered getLatestVerification/getCriterionVerifications calls in the page itself
products/alloy/components/ArcQuenchPanel.tsx — DELETED, fully superseded, zero remaining imports
products/alloy/lib/arc-presentation-wiring.test.ts — updated MUTABLE_SCREEN_FILES and propOnlyPanels to reference QuenchPanel.tsx instead of ArcQuenchPanel.tsx, since the new file receives runtimeMode as a typed prop (reads from QuenchSnapshot, not the raw arc row) rather than deriving it internally
products/alloy/lib/vitals-components.test.ts — replaced 2 tests asserting on the now-deleted pass/fail/partial SelectorCard (that fallback form no longer exists — the Verification Matrix is the only real path now) with 2 tests reflecting current reality: recordVerification/VERIFICATION_RESULTS remain real legacy code in lib/actions.ts (not deleted out from under anything), and the new SelectorCard usages (status/severity/route) are confirmed real, with the one legitimate <select> (crack-criterion picker, a variable-length list) explicitly distinguished from a dropdown regression