HUB-WP-0006: record A5 packet intake and T07 alias seed + RM_SLICE_TOPICSPINE
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / pytest-smoke (push) Failing after 3s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 356991@bnt-lap001
Assistant-Session: 5d99ea69-ed55-4a1e-8d97-f4f312db247f
This commit is contained in:
tegwick 2026-10-13 23:34:05 +02:00
parent 9e4d5ba23c
commit 3c5255ff82

View file

@ -9,7 +9,7 @@ flavor: implementation
owner: codex
topic_slug: custodian
created: "2026-08-22"
updated: "2026-10-04"
updated: "2026-10-13"
parent_project: prj-state-hub-retirement
parent_workplan: STATE-WP-0079
related:
@ -200,6 +200,65 @@ placement/networking outside this repository. Marking the workplan `blocked`
rather than `active` since nothing further can move here until that external
gate closes.
A5 packet intake 2026-10-13: State Hub delivered the comparison packet
(`state-hub/docs/a5-topic-spine-comparison-packet.md`, cases
`docs/evidence/a5-topic-spine-comparison-cases.json`, A5-C01..C10). It named two
hub-core gaps: no alias source, and no `RM_SLICE_TOPICSPINE`. T07 closes both in
code. The flag stays `off` everywhere, so T06 remains `wait` for the deployed
candidate run and the switch window.
## Seed legacy topic aliases and implement the A5 rollback switch
```task
id: HUB-WP-0006-T07
status: done
priority: high
depends_on: []
```
Done 2026-10-13 (commit `9e4d5ba`). Not pushed or deployed. The flag has not
been changed in any environment.
- **Alias source:** `hub_core/runtime/data/legacy_topic_aliases.json`, alias set
`2026-10-13.1`. It holds the 16 active topics from State Hub's 2026-10-13
`GET /topics/?status=active` capture. Each maps to `primary_domain` =
`domain_slug`, with `residual_owner` `STATE-WP-0079` and `expires_at`
`2027-03-31T23:59:59Z`. The expiry is a conservative choice: it covers the
switch window plus a dual run, and it can be renewed by editing the seed and
bumping its version. The seed is validated against the 1.0.0
`legacyTopicAlias` schema and is never fetched live. Topic UUIDs are kept
verbatim. Three slugs with underscores (`inter_hub`, `vergabe_teilnahme`,
`citation_evidence_mvp`) are emitted with hyphens, because the 1.0.0 pattern
forbids `_`. Emitting the exact spelling needs a contract patch.
- **Flag:** `RM_SLICE_TOPICSPINE` takes `off`, `shadow` or `on`; the default is
`off`.
- `off` leaves the output byte-for-byte unchanged (`legacy_topic_aliases: []`).
- `shadow` serves the aliases for comparison only.
- `on` declares hub-core the switched A5 read source.
Rollback is setting the flag back to `off`. The values are documented in
`docs/runtime.md`.
- **Local comparison against fixtures:** see `tests/test_legacy_topic_aliases.py`.
- Pass: A5-C01 (16/16 aliases equal after the `_`→`-` normalisation), A5-C02
and the identity part of A5-C08 (each topic id resolves to exactly one alias),
and the hub-core half of A5-C10 (`off` withdraws the aliases).
- A5-C03 differs from the packet's expectation. An unknown domain returns
`400`, because the runtime validates the controlled vocabulary; it does not
return `200` with an empty list. A known domain with no repositories returns
`200 []`.
- A5-C04, C05, C06 and C07 need the deployed registry. The fixtures hold only
two synthetic repositories.
- A5-C09 has nothing to compare.
- The State Hub half of C10 is a legacy read.
- **Tests:** full suite: 488 passed, 3 skipped.
- **Still needed before T06 can run live:**
- deploy an image containing `9e4d5ba` and set `shadow` on the candidate only,
after approval;
- a verified candidate base URL and auth;
- the 154 vs 123 repository gap (out of scope here and unexplained);
- topic-route usage figures from the legacy meter;
- caller-owner switch plans.
## Acceptance
- [x] Repo Manager v1.0 authority and projection contract accepted