ForgeKitFORGEKIT

Build Log

Alloy Milestone 3, Tickets 6-8 — verified, disposition, invariants, acceptance

July 21, 2026

Live-browser-verified Milestone 3 tickets 1-5 before building further, then shipped the Workpiece disposition decision, all 7 Bank invariants, and a preserved acceptance run — all 8 tickets now implemented and verified.

AlloyMilestone 3PlaywrightCrucible
3
tickets shipped (6, 7, 8)
20
real Playwright tests added, all passing
2
real Clerk edge cases found and fixed

What shipped

products/alloy/playwright.config.ts (new — first Playwright setup for Alloy)

products/alloy/tests/e2e/global.setup.ts (new — real Clerk sign-in via @clerk/testing's ticket strategy, two-user support)

products/alloy/tests/e2e/milestone3-verification.spec.ts (new — 16 tests, tickets 1-6)

products/alloy/tests/e2e/milestone3-ticket7-invariants.spec.ts (new — 7 invariant tests, tickets 7)

products/alloy/lib/db/schema.ts (1 new arc_event_type enum value: workpiece_disposition_recorded)

products/alloy/lib/actions.ts (recordWorkpieceDisposition)

products/alloy/lib/db/queries.ts (getLatestWorkpieceDisposition)

products/alloy/components/WorkpieceDispositionPanel.tsx (new)

products/alloy/app/bank/page.tsx (wired disposition panel in)

products/alloy/drizzle/migrations/0011_robust_gertrude_yorkes.sql (generated and applied to live DB)

products/alloy/docs/milestone-3-first-complete-arc.md (Ticket 6 design record, session status updates)

products/alloy/docs/milestone-3-browser-acceptance.md (new — Ticket 8 deliverable)

products/alloy/.gitignore (playwright/.clerk/, test-results/, playwright-report/)

ok, if this is all good. then commit and lets wrap the session

Zeb, confirming the cross-owner invariant test passed clean and closing the session