Build Log
Alloy: Orient rail bugs, Charge Workshop, Ignite rebuild, Quench Ticket 1
July 25, 2026
Fixed two real rail bugs (Orient never-visited, connector lines lit on the wrong node), built real GPT-backed Charge Workshop with auto-save, rebuilt Ignite from a 503-line dashboard to 5 real panels, and started the Quench rebuild with a real acceptance-criteria schema.
Timeline
What shipped
products/alloy/lib/db/schema.ts — chargeHeardAs, chargeExplicitNonGoals, chargeOneKeyUnknown, chargeRevision, chargeAcceptanceCriteria columns; charge_direction/crucible_response/arc_started event types
products/alloy/components/ChargeWorkshop.tsx, ChargeWorkshopAndForm.tsx — new real GPT-backed Charge-shaping conversation UI
products/alloy/lib/actions.ts — sendChargeDirection, buildChargeFromWorkshop, extractChargeFields, persistChargeDraft, getFullIgniteAdmissionChecks wiring, finalizeCharge merged with phase-transition-to-Ignite
products/alloy/components/ChargeContractPanel.tsx — full redesign: 6 required fields in compact grid with live status dots, 4 optional fields in a tabbed single-textarea, compact Crucible selector strip, completion-condition feature fully removed
products/alloy/components/IgnitePanel.tsx, IgniteRail.tsx — full rebuild from a 503-line Forge-dashboard-in-disguise to 5 real panels (Finalized Charge, Execution Plan, Admission Checks, Safeguards, Launch Confirmation) + compact 3-panel rail
products/alloy/lib/execution-context.ts — getFullIgniteAdmissionChecks (unified, async, real I/O-backed admission check list shared by the page and startExecution's actual enforcement)
products/alloy/lib/visit-evidence.ts — real bug fix: phase_transition's `from` field now also counts as visit evidence (closes the 'Orient can never show as visited' structural gap)
products/alloy/components/ForgeArcRail.tsx — real bug fix: connector line lit-state now driven by whether the NEXT node was reached, not the current node's own state
products/alloy/components/OrientBriefing.tsx — historical-view dead-button fix (real 'Go to Charge →' action replacing a disabled button), removed a redundant duplicate banner, icon+white-text panel headers throughout
products/alloy/components/LiveArcPanel.tsx — added a real 'Submit → Quench' button (reuses setPhase, gated by the same canMutate every other action on the page checks)
products/alloy/lib/db/schema.ts — chargeAcceptanceCriteria (jsonb) column added, Quench rebuild Ticket 1 of 6
“Root cause first. Then we fix.”