Build Log · July 26, 2026

Alloy Bank Phase — Completion

Finished Alloy's Bank phase rebuild — the 7th and final Arc lifecycle phase — closing out the full Orient through Bank arc, then a live adversarial audit found and fixed 3 real bugs before wrap.

  • Alloy
  • Feature
  • Testing
  • Milestone
remaining Bank tickets completed
6

remaining Bank tickets completed

real bugs found and fixed by adversarial audit
3

real bugs found and fixed by adversarial audit

unit/integration tests, all passing
9

unit/integration tests, all passing

e2e tests in bank-phase-contract.spec.ts passing (1 known-failing: 'Historical Bank', root cause undetermined)
4/5

e2e tests in bank-phase-contract.spec.ts passing (1 known-failing: 'Historical Bank', root cause undetermined)

Timeline

  1. Start

    Resumed the paused Bank build

    Ticket 1 (schema) was already done from a prior session; Tickets 2-7 remained

  2. Build

    Tickets 2-7 built in one pass

    repository-custody.ts, bank-snapshot.ts, actions.ts extensions, BankPanels.tsx + page rebuild, e2e spec

  3. Anvil

    Zeb: is this recreating what the OS session already does?

    Checked against the Crucible-is-the-only-second-model Strike — confirmed Bank's new fields are real Arc/repo/Workpiece bookkeeping, not a duplicate retro narrative

  4. Polish

    Iterative screenshot-driven layout pass

    Title fix (Workpiece name not raw UUID), stacked Learnings/Open Items, moved Confirm Bank button to the right rail, fancier button treatment, panel-size tuning

  5. Audit

    Independent adversarial audit dispatched before wrap

    Dogfooded the Adversarial Build Audit Gate written earlier this session — found 3 real bugs

  6. Fix

    Fixed the critical + moderate findings

    Rename-parsing bug, a second self-discovered leading-space bug, and wired real server-side readiness enforcement into bankArc

  7. Close

    Debugged one e2e failure to a dead end, stopped, documented honestly

What shipped

  • products/alloy/lib/repository-custody.ts — resolveRepositoryCustody, real git shell-out (branch/HEAD/ahead-behind/working-tree-status), fixed a rename-parsing bug and a leading-space-trim bug found by its own regression test

  • products/alloy/lib/repository-custody.test.ts — 4 new real-git tests (rename, plain modification, clean tree, non-git directory)

  • products/alloy/lib/bank-snapshot.ts — buildBankSnapshot, deriveBankReadiness (uncommitted-changes rule downgraded from blocking to attention)

  • products/alloy/lib/actions.ts — bankArc extended to collect new closure fields, resolve real custody server-side, and enforce readiness before mutation; recordWorkpieceDisposition widened to also write the 5-way bankWorkpieceDisposition column; transitionArcPhase's close CTE widened with COALESCE clauses for all new bank* fields

  • products/alloy/lib/db/bank-close-cte.integration.test.ts — 3 new real-DB tests proving the widened close CTE (full field set, COALESCE-preserves-unset-fields, stale-control-version fence)

  • products/alloy/components/BankPanels.tsx — 9 real panels (BankReadinessPanel, ArcOutcomePanel, RepositoryCustodyPanel, DeliveryStatusPanel, BankDecisionsInterventionsPanel, ContinuitySealPanel, VerificationPanel, BankArcForm, ConfirmBankButton), all using the shared PanelHeader convention

  • products/alloy/app/bank/page.tsx — rebuilt to consume one BankSnapshot, height-bounded 3-column + rail layout matching Quench/Temper's convention, Workpiece-title page header instead of raw Arc UUID

  • products/alloy/tests/e2e/bank-phase-contract.spec.ts — 5 real browser e2e tests, 4 passing + 1 known-failing (documented in-file)

  • products/alloy/components/BankArcForm.tsx — retired (superseded by the same-named function inside BankPanels.tsx)