Build Log · July 25, 2026

Alloy: Orient rail bugs, Charge Workshop, Ignite rebuild, Quench Ticket 1

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.

  • Alloy
  • Charge
  • Ignite
  • Quench
  • Bug Fix
real schema columns added
5

real schema columns added

real rail bugs found and fixed
2

real rail bugs found and fixed

phase screens rebuilt (Orient polish, Charge, Ignite)
3

phase screens rebuilt (Orient polish, Charge, Ignite)

Timeline

  1. Start

    Orient CSS/scrollbar fixes

    Multiple rounds on Working Agreement layout, header dividers, icons

  2. +1hr

    Charge Workshop built

    Real GPT-backed conversational Charge shaping, Tickets 1-2 of 2

  3. +2hr

    Orient rail bug root-caused

    arc_started vs info event-type collision found and fixed

  4. +3hr

    Ignite fully rebuilt

    503-line dashboard cut to 5 real panels, unified admission checks

  5. +4hr

    Forge rail bugs found and fixed

    Two distinct bugs: Orient never-visited, connector-line-on-wrong-node

  6. +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