Build Log · July 26, 2026

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

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.

  • Alloy
  • Architecture Correction
  • Harvest
  • Bank
commits shipped
2

commits shipped

Unified Wrap tickets built
7

Unified Wrap tickets built

critical bug caught by audit before it reached use
1

critical bug caught by audit before it reached use

new/updated tests, all real (DB + parser + filesystem)
9

new/updated tests, all real (DB + parser + filesystem)

Timeline

  1. Start

    Resumed prior session's nextItems

    Temper Workshop v1, LiveArcPanel dedup, legacy learning retirement

  2. Polish

    Cosmetic layout pass on Temper

    Iterative screenshot-driven fixes to Session Dynamics/Summary tables, Continuity Packet, Arc Episode header controls

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

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

  5. Audit

    Ticket 0 — full architecture audit

    Traced Quench/Temper/the real ForgeKit wrap process before writing a single line of the new design

  6. Build

    All 7 tickets built in one pass

    Quench hardening, Workshop retirement, Harvest (real session resume via continue_arc), Bank retrospective projection

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

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