Build Log · July 19, 2026
Alloy — Real Workpiece Grouping and the Open Items Screen
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.
- Alloy
- ForgeKit OS
- Workpiece
- Data Model
- sessions re-grouped from a 1:1 alias into real multi-session workpiece_id values
- 163
- real workpieces produced by the reviewed grouping heuristic (14 multi-session, 30 singleton)
- 44
- real open items now aggregated and rendered on Alloy's new Open Items screen
- 607
- already-committed prior implementation of the same feature discovered mid-session and reconciled (same underlying bug, different architecture)
- 1
sessions re-grouped from a 1:1 alias into real multi-session workpiece_id values
real workpieces produced by the reviewed grouping heuristic (14 multi-session, 30 singleton)
real open items now aggregated and rendered on Alloy's new Open Items screen
already-committed prior implementation of the same feature discovered mid-session and reconciled (same underlying bug, different architecture)
Timeline
Start
Reviewed data-model gaps across all unbuilt Alloy screens
Review-mode pass — identified Workpiece entity as the one real blocking data-model decision, Open Items as the cleanest next screen to build on it
+30m
Designed and iterated the grouping heuristic live with Zeb
3 rounds of AskUserQuestion — slug-prefix+tag rule, then leading-token+tag-family majority rule after two dry runs produced zero merges
+1h
Applied the reviewed 44-workpiece grouping to all 163 real session files
Clean, additive diff (workpiece_id field only), verified all files still parse
+1.5h
Built lib/workpieces.ts and the Open Items screen in Alloy
Real nextItems[] aggregation, NoDataBadge for mockup fields with no real source (priority, owner, due date, routing history)
+2h
Zeb confirmed the visual result, asked to wrap the session
+2.1h
Discovered an already-committed prior implementation of the same feature
git log on the files about to be committed surfaced commit 48fa139 — a forgekit-os/workpieces/ stored-entity directory (164 files) with the same 1:1-alias bug this session's backfill fixed, never checked before this session started building
End
Reconciled: kept this session's real grouping, deleted the stale entity directory + its scripts/tests/plan doc
Zeb chose the recommended option directly
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”