Build Log
Alloy — Real Workpiece Grouping and the Open Items Screen
July 19, 2026
Backfilled workpiece_id into 44 real multi-session groupings (was a 1:1 alias for all 163 sessions), built Alloy's Open Items screen on top of it, then discovered and reconciled an already-committed prior implementation of the same feature that had the same bug.
Timeline
What shipped
forgekit-os/scripts/propose-workpiece-groupings.mjs — real, reusable dry-run script computing workpiece_id groupings from slug leading-token + tags[0] family majority
163 session JSONs backfilled with real workpiece_id values (44 real workpieces, replacing the prior 1:1-alias placeholder)
forgekit-os/sessions/_SCHEMA.md — new §workpiece_id section documenting the real meaning and the backfill logic
products/alloy/lib/workpieces.ts — reads real sessions off disk, groups by workpiece_id, aggregates nextItems[] across each group
products/alloy/app/open-items/page.tsx + components/OpenItemsTable.tsx — real Open Items screen: stat strip, tag-filter tabs, table, detail panel, all reading real fields with NoDataBadge for fabricated mockup fields
Reconciliation: deleted forgekit-os/workpieces/ (164 stale 1:1-aliased entity files), scripts/workpieces/{index,backfill-workpieces}.mjs, scripts/tests/workpieces.test.mjs, scratch/workpiece-entity-plan.md — all from an already-committed (48fa139) prior implementation of the same feature that was not checked before this session started
forgekit-os/package.json — removed the dangling workpieces:backfill script (pointed at the deleted file), added workpieces:propose pointing at the new script
“looks really good”