feat: add repository rename lifecycle API
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Multi-Context Image / build-and-push (push) Successful in 25s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a049a4-ee9f-78e1-9d66-2cb0f9bea3e3
This commit is contained in:
tegwick 2026-08-29 03:17:37 +02:00
parent 9e77a4a9a2
commit 82ea38b180
11 changed files with 2464 additions and 3 deletions

View file

@ -8,7 +8,7 @@ status: active
owner: codex
topic_slug: infotech
created: "2026-08-28"
updated: "2026-08-28"
updated: "2026-08-29"
reviewed_at: "2026-08-28"
reviewed_by: codex
reviewed_against_commit: "41d80429a77ffeb640f4b34091ebee5c91585373"
@ -239,7 +239,7 @@ full Python suite passes (765 tests).
```task
id: STATE-WP-0085-T03
status: todo
status: done
priority: high
state_hub_task_id: "2cb4d7ac-0192-5d46-aa87-7412e99b0cef"
```
@ -276,6 +276,24 @@ Acceptance:
- API tests interrupt and resume after every phase;
- the managed-repository UUID is asserted unchanged throughout.
Implemented 2026-08-29. UUID-addressed endpoints now verify immutable Forgejo
identity, produce HMAC-signed non-mutating preflights, create discoverable
operation journals, apply one compare-and-set phase at a time, verify baseline
identity continuity, and preflight/apply bounded rollback. The Forge adapter
uses authenticated absence proofs and a separate rename credential; API tests
replace it with an in-memory boundary and cannot touch live Forgejo. Resume
recognizes a Forge rename that committed before its journal phase, completed
phase replays are no-ops with the same operation UUID, and rollback recognizes
the corresponding unrecorded-Forge state. Baseline IDs must remain present
while append-only telemetry may grow during the operation. The follow-on
migration permits a protected alias to become canonical only for its own
operation in `rollback-preflight`; all other alias mutation remains rejected.
Tests cover dry-run persistence, expiry and confirmation, occupied slugs,
queued edge writes, wrong Forge ID, moved head/stale evidence, unreadable Forge,
phase interruption/replay, telemetry append continuity, rollback, trigger
guarding, and full migration upgrade/downgrade. The full Python suite passes
(771 tests).
## Make State Hub reads and routing alias-aware
```task