apply reef identifier batch 0006

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a053ff-1d6f-7fe2-ac1c-a6eb40a42a0c
This commit is contained in:
tegwick 2026-08-31 14:10:44 +02:00
parent d63f8b27e7
commit c52d222cc6
11 changed files with 109 additions and 16 deletions

View file

@ -123,7 +123,7 @@ curl -s -X PATCH "http://127.0.0.1:8000/tasks/<task_id>" \
rmgr sync --path . --push rmgr sync --path . --push
``` ```
The command assigns only missing deterministic identifiers, verifies the The command assigns only missing deterministic identifiers, verifies the
pushed Forgejo commit and `primary/railliance01`, then requests one central pushed Forgejo commit and `primary/railiance01`, then requests one central
forge-derived reconciliation. A queued receipt is pending evidence; rerun forge-derived reconciliation. A queued receipt is pending evidence; rerun
after connectivity returns. Use `statehub fix-consistency` separately for a after connectivity returns. Use `statehub fix-consistency` separately for a
deep audit. `registrar-reconcile` is legacy migration/repair only. deep audit. `registrar-reconcile` is legacy migration/repair only.

View file

@ -41,7 +41,7 @@ rmgr workplan delete --path . --workplan-id EX-WP-0001 --confirm # archives; ne
rmgr task add --path . --workplan-id EX-WP-0001 --title "Implement" --description "Deliver it." rmgr task add --path . --workplan-id EX-WP-0001 --title "Implement" --description "Deliver it."
rmgr task update --path . --task-id EX-WP-0001-T01 --status progress rmgr task update --path . --task-id EX-WP-0001-T01 --status progress
rmgr adhoc add --path . --title "Small fix" --description "Complete the bounded fix." rmgr adhoc add --path . --title "Small fix" --description "Complete the bounded fix."
rmgr sync --path . --push # primary/railliance01 derives the exact pushed commit rmgr sync --path . --push # primary/railiance01 derives the exact pushed commit
rmgr register put --path . --kind technical-debt --entry-id TD-001 \ rmgr register put --path . --kind technical-debt --entry-id TD-001 \
--title "Debt item" --data-json '{"severity":"high"}' --title "Debt item" --data-json '{"severity":"high"}'
rmgr register list --path . --kind technical-debt rmgr register list --path . --kind technical-debt
@ -57,7 +57,7 @@ rmgr scaffold --path . --refresh-hub-access --no-commit # State Hub access tabl
`rmgr sync` is the normal work-record closeout path. It uses the canonical kind `rmgr sync` is the normal work-record closeout path. It uses the canonical kind
registry, fills only missing deterministic UUIDv5 identifiers, refuses dirty or registry, fills only missing deterministic UUIDv5 identifiers, refuses dirty or
behind workplan sources, verifies that the API is `primary/railliance01`, and behind workplan sources, verifies that the API is `primary/railiance01`, and
requests one central forge-derived reconciliation. A local/cache State Hub is requests one central forge-derived reconciliation. A local/cache State Hub is
never populated. `registrar-reconcile` remains only for sealed legacy UUID never populated. `registrar-reconcile` remains only for sealed legacy UUID
migration and repair. migration and repair.

View file

@ -4,8 +4,8 @@
id: RMGR-DEC-2026-005 id: RMGR-DEC-2026-005
kind: decision kind: decision
title: Approve deterministic identifier batch 0006 for reef-railiance title: Approve deterministic identifier batch 0006 for reef-railiance
status: open status: resolved
decision_type: pending decision_type: approved
owner: Bernd Worsch owner: Bernd Worsch
repo: repo-manager repo: repo-manager
workplan: RMGR-WP-0005 workplan: RMGR-WP-0005
@ -22,7 +22,7 @@ scope:
repositories: [reef-railiance] repositories: [reef-railiance]
replacements: 2 replacements: 2
assignments: 0 assignments: 0
apply_authorized: false apply_authorized: true
approval_effect: >- approval_effect: >-
Approved authorizes one repository-atomic forward cutover of exactly the Approved authorizes one repository-atomic forward cutover of exactly the
pinned batch in the railiance01 primary projection and authoritative pinned batch in the railiance01 primary projection and authoritative
@ -33,8 +33,17 @@ rollback: >-
transaction using its durable aliases. transaction using its durable aliases.
evidence: docs/evidence/RMGR-WP-0005-batch-0006-reef-railiance-preflight-2026-08-31.json evidence: docs/evidence/RMGR-WP-0005-batch-0006-reef-railiance-preflight-2026-08-31.json
created: "2026-08-31" created: "2026-08-31"
updated: "2026-08-31" updated: "2026-08-31T11:23:46.601904Z"
state_hub_decision_id: "a0616e13-cd0c-441a-8339-f0e502bb2bbf" state_hub_decision_id: "a0616e13-cd0c-441a-8339-f0e502bb2bbf"
approved_batch_sha256: 102061f3ed93eac091e9ceb05d9d3130241a23134b9f7d5a624d91c4ef824759
approval_source: operator chat approval on 2026-08-31
rationale: >-
Bernd Worsch approved exactly batch SHA-256
102061f3ed93eac091e9ceb05d9d3130241a23134b9f7d5a624d91c4ef824759
for the reef-railiance-only cutover. No assignments, later fleet plan, or
broader repository scope is authorized.
decided_by: Bernd Worsch
decided_at: "2026-08-31T11:23:46.601904Z"
``` ```
## Decision requested ## Decision requested

View file

@ -0,0 +1,70 @@
# RMGR-WP-0005 batch 0006 reef-railiance cutover
Date: 2026-08-31
## Authorization
Bernd Worsch approved `RMGR-DEC-2026-005` as written. The approval is limited
to batch seal
`102061f3ed93eac091e9ceb05d9d3130241a23134b9f7d5a624d91c4ef824759`,
source-plan seal
`af3c8e3fe6f423845a97258a10322eeded4b7814d13bf9541b5d550c285cc0b9`,
repository `reef-railiance`, two replacements, and zero assignments. State Hub
decision `a0616e13-cd0c-441a-8339-f0e502bb2bbf` is resolved with
`decision_type: made` and `decided_by: Bernd Worsch`.
## Final preflight
`rmgr identifier migration-batch-verify` returned `ok: true`,
`ready_for_decision: true`, the exact batch and plan seals above, repository
`reef-railiance`, and no errors. The file phase dry-run reported one file, two
replacements, zero assignments, and no write.
The source was clean and synchronized at sealed HEAD
`3e98b10d81990c45465f3f620441d97347670b52`. The primary health identity was:
- role: `primary`
- label: `railiance01`
- schema: `a4d5e6f7b8c9` current
## Execution
The first projection command omitted the explicit instance-label override. It
refused before mutation because the Repo Manager default was misspelled
`railliance01`. Repeating the command with
`--expected-instance-label railiance01` passed every source and Git precondition.
The default spelling is corrected in this closeout change set.
The forward projection receipt reported:
- `replacements: 2`
- `migrated: 2`
- `already_derived: 0`
- `assignments_deferred: 0`
The atomic file phase then touched only
`workplans/REEF-RAILIANCE-WP-0003-rapp-qonto-production-gates.md`, replacing:
| Record | Legacy UUID | Deterministic UUID |
| --- | --- | --- |
| `REEF-RAILIANCE-WP-0003` | `c3f9fbfd-3db1-4387-8b65-7d53ba57138d` | `8ac413ad-2f57-53e6-b586-c5bec9cfbd1f` |
| `REEF-RAILIANCE-WP-0003-T04` | `9d0c1f61-0ed8-4d5c-b4c2-2578424ad3b4` | `9d792070-5f2b-5b3d-ba52-92c8b0d4a6b8` |
`statehub fix-consistency` completed after the rewrite and refreshed the reef
brief in automatic commit `cec61da`. The authoritative UUID change is pushed to
Forgejo in reef commit `dcf51b3`.
## Post-cutover verification
- The deterministic workplan and task endpoints return their original record
identities, content, and lifecycle states.
- The migrated task has
`workplan_id: 8ac413ad-2f57-53e6-b586-c5bec9cfbd1f`.
- The two legacy UUID endpoints return 404, as expected: durable migration
aliases support governed reversal but are not public read redirects.
- The reef repository is clean and synchronized with `origin/main` after push.
- The authoritative diff contains exactly two UUID replacements and no content
or status changes.
- Repo Manager verification passed: `148 passed` and Ruff reported no issues.
No rollback was required.

View file

@ -3,7 +3,7 @@
Date: 2026-08-31 Date: 2026-08-31
The workstation no longer runs a State Hub API. `127.0.0.1:8000` is the The workstation no longer runs a State Hub API. `127.0.0.1:8000` is the
operator's SSH relay to the sole `railliance01` primary, whose health reports operator's SSH relay to the sole `railiance01` primary, whose health reports
`instance_role: primary`, `instance_label: railiance01`, and a current schema. `instance_role: primary`, `instance_label: railiance01`, and a current schema.
The retired production sweep remains disabled and has no checkout or SSH The retired production sweep remains disabled and has no checkout or SSH
hostPath mount. hostPath mount.

View file

@ -185,7 +185,7 @@ def main(argv: list[str] | None = None) -> int:
p_sync.add_argument("--path", default=".") p_sync.add_argument("--path", default=".")
p_sync.add_argument("--slug", default=None) p_sync.add_argument("--slug", default=None)
p_sync.add_argument("--api-base", default=os.environ.get("STATE_HUB_API_BASE", "http://127.0.0.1:8000")) p_sync.add_argument("--api-base", default=os.environ.get("STATE_HUB_API_BASE", "http://127.0.0.1:8000"))
p_sync.add_argument("--expected-instance-label", default="railliance01") p_sync.add_argument("--expected-instance-label", default="railiance01")
p_sync.add_argument("--push", action="store_true", help="Push ahead commits before reconciliation") p_sync.add_argument("--push", action="store_true", help="Push ahead commits before reconciliation")
p_sync.add_argument("--no-commit-identifiers", action="store_true") p_sync.add_argument("--no-commit-identifiers", action="store_true")
p_sync.add_argument("--acknowledge-retirements", action="store_true") p_sync.add_argument("--acknowledge-retirements", action="store_true")
@ -456,7 +456,7 @@ def main(argv: list[str] | None = None) -> int:
p_id_projection.add_argument("--repo", required=True) p_id_projection.add_argument("--repo", required=True)
p_id_projection.add_argument("--confirm-plan-sha256", required=True) p_id_projection.add_argument("--confirm-plan-sha256", required=True)
p_id_projection.add_argument("--api-base", required=True) p_id_projection.add_argument("--api-base", required=True)
p_id_projection.add_argument("--expected-instance-label", default="railliance01") p_id_projection.add_argument("--expected-instance-label", default="railiance01")
p_id_projection.add_argument( p_id_projection.add_argument(
"--direction", choices=["forward", "reverse"], default="forward" "--direction", choices=["forward", "reverse"], default="forward"
) )

View file

@ -990,7 +990,7 @@ def migrate_repository_projection(
confirm_plan_sha256: str, confirm_plan_sha256: str,
api_base: str, api_base: str,
direction: str = "forward", direction: str = "forward",
expected_instance_label: str | None = "railliance01", expected_instance_label: str | None = "railiance01",
transport: httpx.BaseTransport | None = None, transport: httpx.BaseTransport | None = None,
) -> dict[str, Any]: ) -> dict[str, Any]:
"""Apply or reverse the sealed projection half on the authoritative hub.""" """Apply or reverse the sealed projection half on the authoritative hub."""

View file

@ -73,7 +73,7 @@ def sync_repository_projection(
*, *,
api_base: str, api_base: str,
repo_slug: str | None = None, repo_slug: str | None = None,
expected_instance_label: str | None = "railliance01", expected_instance_label: str | None = "railiance01",
commit_identifiers: bool = True, commit_identifiers: bool = True,
push: bool = False, push: bool = False,
acknowledge_retirements: bool = False, acknowledge_retirements: bool = False,

View file

@ -162,7 +162,7 @@ def test_sync_uses_two_requests_and_exact_pushed_commit(tmp_path: Path) -> None:
if request.url.path == "/state/health": if request.url.path == "/state/health":
return httpx.Response( return httpx.Response(
200, 200,
json={"status": "ok", "instance_role": "primary", "instance_label": "railliance01"}, json={"status": "ok", "instance_role": "primary", "instance_label": "railiance01"},
) )
payload = __import__("json").loads(request.content) payload = __import__("json").loads(request.content)
assert ( assert (

View file

@ -105,7 +105,7 @@ def test_projection_migration_client_requires_primary_and_exact_seal(tmp_path: P
json={ json={
"status": "ok", "status": "ok",
"instance_role": "primary", "instance_role": "primary",
"instance_label": "railliance01", "instance_label": "railiance01",
}, },
) )
assert request.url.path == "/identifier-migrations/repositories/one/apply" assert request.url.path == "/identifier-migrations/repositories/one/apply"

View file

@ -660,7 +660,21 @@ unauthorized; exact batch seal:
`docs/evidence/RMGR-WP-0005-batch-0006-reef-railiance-preflight-2026-08-31.json`. `docs/evidence/RMGR-WP-0005-batch-0006-reef-railiance-preflight-2026-08-31.json`.
The inevitable Repo Manager evidence commit invalidates whole-fleet source The inevitable Repo Manager evidence commit invalidates whole-fleet source
verification for `repo-manager` itself, but repository-filtered verification of verification for `repo-manager` itself, but repository-filtered verification of
the sealed source plan for `reef-railiance` remains clean. No mutation has run. the sealed source plan for `reef-railiance` remains clean.
**Batch 0006 applied (2026-08-31):** Bernd Worsch approved exactly batch seal
`102061f3ed93eac091e9ceb05d9d3130241a23134b9f7d5a624d91c4ef824759`
through `RMGR-DEC-2026-005`. The final batch verification passed with no drift.
The railiance01 primary then migrated both legacy rows transactionally, with
zero assignments or already-derived rows, and the atomic file phase changed
only the two sealed UUID fields in
`REEF-RAILIANCE-WP-0003-rapp-qonto-production-gates.md`. Post-cutover checks
confirmed both derived records, the task-to-workplan relationship, unchanged
lifecycle state, a clean consistency audit, and the pushed reef commit
`dcf51b3`. The initial projection attempt refused safely before mutation because
the CLI default misspelled the primary label as `railliance01`; the corrected
`railiance01` default is covered by the same change set. Evidence:
`docs/evidence/RMGR-WP-0005-batch-0006-reef-railiance-cutover-2026-08-31.md`.
## Retire the interim rule ## Retire the interim rule
@ -746,7 +760,7 @@ repeat comparison passes. Evidence and the non-destructive procedure are in
`docs/cache-rebuild_v1.md`. `docs/cache-rebuild_v1.md`.
**Done with explicit disposition 2026-08-31.** The workstation State Hub API is **Done with explicit disposition 2026-08-31.** The workstation State Hub API is
gone; its loopback address is now a relay to the sole `railliance01` primary. gone; its loopback address is now a relay to the sole `railiance01` primary.
Repo Manager's advisory cache rebuilt 96 current records at commit `e8e2747` Repo Manager's advisory cache rebuilt 96 current records at commit `e8e2747`
and immediately reported fresh with matching source fingerprints. The old and immediately reported fresh with matching source fingerprints. The old
local-only hub-native rows were not migrated before the local database was local-only hub-native rows were not migrated before the local database was