Build Log
Alloy: Quench Ticket 2 checkpointed — blocked on missing Charge acceptance-criteria authoring
July 26, 2026
Built the full criterion-verification plumbing for Quench Ticket 2 (schema, event type, action, query, conditional UI) — then, before continuing the Quench redesign, discovered zero Arcs have any acceptance criteria to verify because Charge has no authoring surface. Stopped and checkpointed honestly rather than continue building on top of an unusable dependency.
Timeline
What shipped
products/alloy/lib/db/schema.ts — criterion_verified value added to arcEventTypeEnum (live DB enum, pg_enum-verified); AcceptanceCriterion interface exported; chargeAcceptanceCriteria column typed as .$type<AcceptanceCriterion[]>()
products/alloy/lib/db/queries.ts — CRITERION_VERIFICATION_STATUSES/CriterionVerificationStatus, CriterionVerificationPayload type, getCriterionVerifications (Map of criterionId -> latest status, same 'most recent event wins' precedent as getLatestVerification)
products/alloy/lib/actions.ts — recordCriterionVerification server action: targets one specific criterionId, validates status against the real enum, requires rationale for not_applicable/exception_accepted and authority for exception_accepted, append-only event write
products/alloy/app/quench/page.tsx — fetches getCriterionVerifications, converts the server-only Map to a plain array before crossing into the 'use client' ArcQuenchPanel
products/alloy/components/ArcQuenchPanel.tsx — new CriterionRow component (one row per criterion: statement, blocking badge, status badge, evidence/rationale/authority display, re-verify toggle); Verification card now branches — renders the new matrix when arc.chargeAcceptanceCriteria has entries, otherwise falls back to the original single-verdict Pass/Partial/Fail form (this fallback is the ONLY path currently reachable in the real product)
“Continuing the Quench redesign now would be building the scoreboard before the game can define what counts as a point.”