ForgeKitFORGEKIT

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.

AlloyChargeIgniteQuenchBug Fix
5
real schema columns added
2
real rail bugs found and fixed
3
phase screens rebuilt (Orient polish, Charge, Ignite)

Timeline

Start
Orient CSS/scrollbar fixes
Multiple rounds on Working Agreement layout, header dividers, icons
+1hr
Charge Workshop built
Real GPT-backed conversational Charge shaping, Tickets 1-2 of 2
+2hr
Orient rail bug root-caused
arc_started vs info event-type collision found and fixed
+3hr
Ignite fully rebuilt
503-line dashboard cut to 5 real panels, unified admission checks
+4hr
Forge rail bugs found and fixed
Two distinct bugs: Orient never-visited, connector-line-on-wrong-node
+4.5hr
Quench rebuild started
Ticket 1 (chargeAcceptanceCriteria schema) landed, session ended on account-switch

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.

Zeb, on the Forge Arc rail bug — the instruction that ended 2 sessions' worth of guessing and led to the actual fix