Build Log · July 22, 2026
Alloy Milestone 4, Tickets 1-4 — One History
Alloy gained source-aware Arc, Product-work, and recorded-next-item history without pretending historical JSON and live Neon records share identity or ownership.
- Alloy
- History
- Authorization
- Projection
- tickets accepted
- 4
- feature commits
- 4
- owners in authenticated acceptance
- 2
tickets accepted
feature commits
owners in authenticated acceptance
Timeline
Ticket 1
One Arc-history boundary
Combined owner-scoped live Arcs and global historical sessions through source-aware adapters.
Ticket 2
Explicit Product association
Added owner-specific, auditable historical-session classification without inferred identity.
Ticket 3
Product work history
Migrated the Product Workpieces route onto one discriminated live/historical query boundary.
Ticket 4
Recorded Next Items
Reframed open items as read-only recorded history because resolution is not tracked.
What shipped
products/alloy/lib/history/ — shared source-aware Arc-history projection with live and historical adapters
products/alloy/lib/history/actions.ts and products/alloy/lib/db/schema.ts — explicit owner-scoped historical Product association ledger
products/alloy/lib/work-history/ — discriminated Product work-history projection
products/alloy/lib/recorded-next-items/ — live and historical recorded-next-item projection
products/alloy/tests/e2e/milestone4-ticket1-history.spec.ts — authenticated Ticket 1 acceptance
products/alloy/tests/e2e/milestone4-ticket2-product-association.spec.ts — two-owner association acceptance
products/alloy/tests/e2e/milestone4-ticket3-work-history.spec.ts — Product work-history acceptance
products/alloy/tests/e2e/milestone4-ticket4-recorded-next-items.spec.ts — recorded-next-item isolation and degraded-state acceptance
products/alloy/docs/milestone-4-one-history.md and Ticket 1-4 browser-acceptance records
“One history is a read contract, not one database.”