diff --git a/workplans/RMGR-WP-0008-work-record-and-register-receiving-surface.md b/workplans/RMGR-WP-0008-work-record-and-register-receiving-surface.md new file mode 100644 index 0000000..dc32209 --- /dev/null +++ b/workplans/RMGR-WP-0008-work-record-and-register-receiving-surface.md @@ -0,0 +1,195 @@ +--- +id: RMGR-WP-0008 +type: workplan +title: "Receiving surface for work records and repository registers" +domain: infotech +repo: repo-manager +status: proposed +owner: codex +topic_slug: infotech +created: "2026-08-20" +updated: "2026-08-20" +parent_project: prj-state-hub-retirement +parent_workplan: SHR-WP-0001 +related: + - STATE-WP-0079 + - RMGR-WP-0002 + - RMGR-WP-0003 + - RMGR-WP-0004 + - HUB-WP-0004 +--- + +# Receiving surface for work records and repository registers + +## Goal + +Build the repo-manager surfaces that `STATE-WP-0079`'s cutover slices need in +order to move. Today most of those slices have nowhere to land, and that — not +anything inside State Hub — is what blocks the retirement. + +## Why this exists + +`STATE-WP-0079-T02` produced a cutover slice plan +(`state-hub/docs/retirement-cutover-slice-plan.md`) assigning all 425 +`SHR-INV-0001` items to slices. Its first owner-readiness pass read readiness off +workplan status: RMGR-WP-0001/0002/0003 are `finished`, so all 167 +repo-manager-owned items were marked receivable. + +That was wrong, and the correction (2026-08-20) is the reason for this workplan. +Verified against `src/repo_manager/`: + +- `parse/` contains **only** `workplan.py` +- `rmgr` subcommands are `observe`, `reconcile`, `task-status`, `conform`, + `prefix`, `scaffold`, `dual-run-status` +- the source tree has **no** reference to `sbom`, `repo_goal`, `contribution`, + `technical_debt`, or `extension_point` +- the State Hub adapter calls exactly three operations — + `rm_update_task_status`, `rm_reconcile`, `rm_scaffold` + +What RMGR-WP-0001/0002/0003 delivered is work-record dual-run for **task +status**, repository observation, and scaffolding. Not a general work-record +write path, and not a register surface at all. + +**Net effect:** of 425 inventory items, roughly **6** can move today (slice A2a, +task status + reconcile). The rest wait on surfaces built here or in `hub-core`. + +## Scope boundary + +This workplan builds **receiving surfaces in repo-manager**. It does not change +State Hub beyond the adapter calls that route to these surfaces. + +Building any of this in State Hub instead is inadmissible under +`state-hub/policies/retirement-freeze.md`: it would establish new permanent +ownership in the component being retired, and would build the capability twice. + +Per `SCOPE.md`, file-backed records in domain repos stay authoritative; these +surfaces index and govern them, they do not become a second source of truth. + +## Workplan write path + +```task +id: RMGR-WP-0008-T01 +status: todo +priority: high +``` + +Extend the work-record write path beyond task status to workplan create, update, +status change, and delete. `parse/workplan.py` already reads workplans; this +adds the governed mutation side and an `rm_update_workplan` counterpart to +`rm_update_task_status`. + +Unblocks slice **A2b** (~9 routes plus `table:workplans`). + +Follow the RMGR-WP-0002 dual-run shape — writeback, reconcile, mutation meter — +rather than inventing a second mechanism. + +## Intake records + +```task +id: RMGR-WP-0008-T02 +status: todo +priority: medium +``` + +Add an intake parser and index entry kind, plus the write path for create, +route, note, and close. Intake is the successor to the retired suggestion +backlog, so this is the discovery surface's permanent home. + +Unblocks slice **A2c** (9 items: 7 routes, `table:intakes`, `table:intake_notes`). + +## Decision records + +```task +id: RMGR-WP-0008-T03 +status: todo +priority: medium +``` + +Add a decision parser, index entry kind, and write path including resolve. + +Note the coupling: `resolve_decision` is one of only two write operations +sanctioned against the hub in the fleet agent instructions. Whatever replaces it +must keep that guarantee — agents rely on it being available and safe. + +Unblocks slice **A2d** (8 items, including `caller:agentic-resources`). + +## Dependencies and human-flag records + +```task +id: RMGR-WP-0008-T04 +status: todo +priority: low +``` + +Workplan dependency edges and human-intervention flags. Smallest of the +work-record slices and the least coupled; a reasonable first cut if T01 proves +too large to land in one piece. + +Unblocks slice **A2e** (~6 items) and the dependency routes inside A2b. + +## Repository registers + +```task +id: RMGR-WP-0008-T05 +status: todo +priority: high +``` + +The largest gap. Six registers with no counterpart in repo-manager at all: + +| Register | Items | Notes | +| --- | --- | --- | +| `sbom-inventory` | 10 | lockfile ingest, licence report, copyleft detection | +| `repo-goals` | 9 | | +| `upstream-contributions` | 9 | | +| `register-technical-debt` | 9 | also backs dashboard UI feedback — check before moving | +| `register-extension-points` | 6 | | +| `register-entries` | 6 | MCP tools only | + +Unblocks slice **A3** (49 items). + +Treat as one register spine with per-kind schemas rather than six unrelated +features — they share repo scoping, append-mostly write patterns, and the same +file-backed-authority rule. + +## Topic and classification contract + +```task +id: RMGR-WP-0008-T06 +status: todo +priority: medium +``` + +`observe`/`load_classification` read `.repo-classification.yaml` today. Slice +**A5** (`topic-spine`, 8 items) is dispositioned `replace`, so it needs a +published contract rather than a lift-and-shift of the hub's tables. + +Coordinate with HUB-WP-0004: the topic spine sits on the boundary between +repository classification (here) and cross-domain projection (`hub-core`). + +## Owner-side UI + +```task +id: RMGR-WP-0008-T07 +status: wait +priority: low +``` + +Slice **A4** (22 items, `replace`) assumes an owner-side dashboard. +`rmgr` is a CLI; there is none, and it is not obvious there should be one — the +work-coordination and repo views may belong to `hub-core`'s projection layer +instead. + +Deliberately `wait`: settle ownership before building. Resolve with HUB-WP-0004 +and record the outcome as a decision. Do not default to building a dashboard +here just because the inventory named repo-manager. + +## Acceptance + +- [ ] Workplan write path live, A2b routable through the adapter +- [ ] Intake and decision parsers + write paths live; `resolve_decision` + guarantee preserved +- [ ] Register spine live, A3's six registers routable +- [ ] Topic/classification contract published and agreed with hub-core +- [ ] A4 ownership decided and recorded +- [ ] Compatibility tests per slice, matching the RMGR-WP-0002 evidence pattern