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

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)
44

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
607

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)
1

already-committed prior implementation of the same feature discovered mid-session and reconciled (same underlying bug, different architecture)

Timeline

  1. 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

  2. +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

  3. +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

  4. +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)

  5. +2h

    Zeb confirmed the visual result, asked to wrap the session

  6. +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

  7. 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”
— Zeb, confirming the Open Items screen before the git-log check surfaced the prior-commit conflict