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.
Timeline
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