feat: finish register receiving and authority routing

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a023c0-a0a3-7c03-b395-5a0d2757214d
This commit is contained in:
tegwick 2026-08-21 23:15:48 +02:00
parent 6d134425df
commit d103955217
28 changed files with 970 additions and 48 deletions

View file

@ -438,7 +438,7 @@ ADR-010's older example list.
```task
id: RMGR-WP-0005-T09
status: progress
status: done
priority: high
state_hub_task_id: "d40cc4a8-4280-4940-ac1d-dc1049f1b678"
```
@ -475,11 +475,18 @@ paths are captured in
to repair those seven bindings and retain/export the 217 closed rows before T07
replaces the cache.
**Result (2026-08-21):** the preferred binding-sync API accepted all seven
verified file mappings atomically (`updated: 7`), without changing repository
files or lifecycle state. The cache now has zero unbound live workplans. The
remaining 217 unbound rows are exclusively closed provenance (201 `finished`,
16 `archived`) and are explicitly retained in the untouched current database;
T07 must export or preserve them as its pre-rebuild gate.
## Assign one authoritative hub per record
```task
id: RMGR-WP-0005-T10
status: wait
status: done
priority: medium
state_hub_task_id: "15f0f167-a8d0-4d5c-8576-3e93b1e8792f"
```
@ -494,6 +501,15 @@ peer-database divergence this workplan exists to remove recurs at larger scale.
Coordinate with the hub-extension architecture in
`prj-state-hub-retirement/architecture/`; `hub-core` owns the hub-native side.
**Result (2026-08-21):** the T08 machine-readable inventory is now an
executable, fail-closed routing contract. `rmgr authority route` resolves every
known record type to exactly one owner; file-derived routes require repository
and domain context, while hub-native/cache routes name their central owner.
Unknown record types and claimed-owner mismatches are rejected. Contract-wide
tests prove all 42 current record types resolve once. Finished `HUB-WP-0004`
accepts the complementary boundary: repository authority stays with Repo
Manager and hub-core owns the named hub-native projection/event ports.
## Protect lifecycle status from automation
```task

View file

@ -4,7 +4,7 @@ type: workplan
title: "Receiving surface for work records and repository registers"
domain: infotech
repo: repo-manager
status: active
status: finished
owner: codex
topic_slug: infotech
created: "2026-08-20"
@ -158,7 +158,7 @@ the replaceable index. Their authority remains the workplan file.
```task
id: RMGR-WP-0008-T05
status: progress
status: done
priority: high
state_hub_task_id: "902c71da-1ba5-4e76-bf20-0d9f697edf7a"
```
@ -180,19 +180,28 @@ 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.
Progress (2026-08-21): the shared spine is live for all six kinds as versioned
Result (2026-08-21): the shared spine is live for all six kinds as versioned
`registers/<kind>.yaml` files, with parser/index support and governed
`put`/`defer`/`note` commands. Kind-specific required fields cover the existing
State Hub create contracts, and the generic `rm_update_register_entry` adapter
can route compatibility writes. Remaining before `done`: lockfile ingestion,
licence/copyleft derived reports, route-level cutover fixtures, and migration of
the live register rows.
can route compatibility writes. `rmgr sbom scan|licence-report` derives
versioned, provenance-bearing snapshots from current lockfiles (plus a reviewed
tool manifest), with direct-production copyleft findings. The State Hub adapter
and route-level fixture cover the read/derive call.
The 22 historical State Hub snapshots were reconciled rather than copied: the
newest projection for each of 18 repositories was compared with a fresh scan,
all repositories parsed, and 9 counts matched exactly. Current lockfiles yield
1,565 entries versus 2,659 in months-old projections. Copying stale cache rows
would invert repository authority, so cutover rebuilds from source and retains
old snapshot identifiers only as retirement provenance. Evidence:
`docs/evidence/RMGR-WP-0008-sbom-cutover-2026-08-21.md`.
## Topic and classification contract
```task
id: RMGR-WP-0008-T06
status: progress
status: done
priority: medium
state_hub_task_id: "ef7934de-a1e2-4541-8068-e75876446b60"
```
@ -204,18 +213,19 @@ 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`).
Progress (2026-08-21): published
Result (2026-08-21): published
`docs/repository-classification-contract_v1.0.{md,yaml}` and made observation
reject invalid controlled values, repeated primary domains, malformed lists,
and non-kebab capability tags. Remaining: hub-core acknowledges the projection
boundary and A5 consumers are routed to the contract. Coordination request
`bca85a3f-83be-44e3-a95e-e3d4b4d812eb` is with `hub-core`.
and non-kebab capability tags. Finished `HUB-WP-0004` explicitly accepts that
repository classification remains authoritative here while hub-core owns
cross-domain projections. That is the required boundary agreement; consumer
route switching remains in the existing `STATE-WP-0079` retirement workplan.
## Owner-side UI
```task
id: RMGR-WP-0008-T07
status: wait
status: done
priority: low
state_hub_task_id: "24ee329d-85dd-4e11-9c87-2f20b8f86e81"
```
@ -225,16 +235,26 @@ Slice **A4** (22 items, `replace`) assumes an owner-side dashboard.
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.
Resolved in `docs/adr-003-projection-ui-ownership.md`: Repo Manager owns its
governed CLI/API contracts, not a dashboard. hub-core owns cross-repository
projection/query and surviving hub UI capabilities; ops/domain UIs are clients
of those contracts. A4 is therefore a hub-core/projection-client replacement,
not a UI migration into Repo Manager.
## Acceptance
- [x] Workplan write path live, A2b routable through the adapter
- [x] Intake and decision parsers + write paths live; `resolve_decision`
guarantee preserved
- [ ] Register spine live, A3's six registers routable
- [ ] Topic/classification contract published; agreement with hub-core pending
- [ ] A4 ownership decided and recorded
- [ ] Compatibility tests per slice, matching the RMGR-WP-0002 evidence pattern
- [x] Register spine live, A3's six registers routable
- [x] Topic/classification contract published and accepted at the hub-core boundary
- [x] A4 ownership decided and recorded
- [x] Compatibility tests per slice, matching the RMGR-WP-0002 evidence pattern
## Completion and handoff
Repo Manager's receiving surfaces are complete. The remaining State Hub route
flags, redirects, projection rebuilds, retention, and destructive retirement
gates already remain live in `STATE-WP-0079`; they are consumers of this work,
not residual Repo Manager implementation. No actionable Repo Manager residual
is being parked in this finished workplan.