ForgeKitFORGEKIT

Build Log

Alloy Unified Wrap Architecture — Quench Hardening, Harvest, Bank Retrospective

July 26, 2026

Corrected a dangerous architectural drift in Alloy's Temper AI feature, then built the full 7-ticket Unified Wrap architecture it should have been — and a critical audit caught a shipped bug tests never touched.

AlloyArchitecture CorrectionHarvestBank
2
commits shipped
7
Unified Wrap tickets built
1
critical bug caught by audit before it reached use
9
new/updated tests, all real (DB + parser + filesystem)

Timeline

Start
Resumed prior session's nextItems
Temper Workshop v1, LiveArcPanel dedup, legacy learning retirement
Polish
Cosmetic layout pass on Temper
Iterative screenshot-driven fixes to Session Dynamics/Summary tables, Continuity Packet, Arc Episode header controls
Anvil
Zeb challenged Workshop's design
"isn't Alloy's primary goal to allow the claude code arc experience via a UI? this seems dangerous" — Workshop v2 was a fresh OpenAI call judging Temper content from DB rows alone, disconnected from the real session
Correction
Principle locked: Crucible is the only second-model pattern
A second AI model inside a ForgeKit product must be the Crucible fed real session context — never a fresh model reasoning cold from stored rows. Captured as a Strike/Anvil pair.
Audit
Ticket 0 — full architecture audit
Traced Quench/Temper/the real ForgeKit wrap process before writing a single line of the new design
Build
All 7 tickets built in one pass
Quench hardening, Workshop retirement, Harvest (real session resume via continue_arc), Bank retrospective projection
Critical audit
Zeb: "critical eye — list what's outstanding before we wrap"
Independent audit found runHarvest completely non-functional — shipped in the 'feature complete' commit with zero test coverage catching it
Close
All 7 audit findings resolved
Fixed the CTE bug, added the missing test coverage, verified schema completeness against the live DB

What shipped

products/alloy/lib/actions.ts — runHarvest server action, buildHarvestDirective, recordCriterionVerification evidence requirement, saveCharge Quench-lock, quenchArc in-progress-Execution guard, bankArc's projectBankRetrospective call

products/alloy/lib/db/queries.ts — createControlledExecution's CTE fixed to accept directiveKind='harvest' in the follow_up-shaped branch

products/alloy/lib/harvest-proposal.ts — HarvestProposal type contract, parseHarvestProposal, extractJsonCandidate fence/brace extraction fallback

products/alloy/lib/bank-retrospective.ts — projectBankRetrospective, real session-JSON writer, slug-collision fix (arcId suffix), real error logging in the catch-all

products/alloy/lib/temper-snapshot.ts — extended with harvestProposal/harvestStatus/recordedQuenchVerdict fields

products/alloy/components/TemperDynamicsAndSummary.tsx — TemperWorkshopPanel rebuilt into the real Harvest UI (Decision/Intervention/Learning/Episode/Continuity/Recommendation draft rows)

products/alloy/app/temper/page.tsx, components/TemperPanel.tsx, components/QuenchPanel.tsx — provider-binding checks, Harvest submission key, evidence-required Verification Matrix form

products/alloy/lib/db/schema.ts — executionDirectiveKindEnum extended with 'harvest', pushed live and independently verified

products/alloy/lib/db/harvest-execution.integration.test.ts — new real-DB regression test proving the fixed CTE branch, plus a negative case

products/alloy/lib/harvest-proposal.test.ts — 7 new unit tests for parseHarvestProposal/extractJsonCandidate

products/alloy/lib/bank-retrospective.test.ts — 2 new tests proving a real file write and the null-on-nonexistent-arc contract

products/alloy/components/LiveArcPanel.tsx, components/OpenItemsAndLearnings.tsx, components/TemperDecisionsAndInterventions.tsx, app/forge/page.tsx — dedup and layout polish from Chapter 1

forgekit-os/journal/strikes.md, forgekit-os/journal/anvils.md — Crucible-is-the-only-second-model Strike/Anvil pair

Alloy Unified Wrap Architecture — Quench Hardening, Harvest, Bank Retrospective — July 26, 2026 · ForgeKit