feat: persist repository rename identity
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 24s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a049a4-ee9f-78e1-9d66-2cb0f9bea3e3
This commit is contained in:
tegwick 2026-08-28 22:08:21 +02:00
parent 13f7a10018
commit 8988a093f2
10 changed files with 1454 additions and 4 deletions

View file

@ -188,7 +188,7 @@ are explicit target-workplan boundaries.
```task
id: STATE-WP-0085-T02
status: todo
status: done
priority: high
state_hub_task_id: "c9e6c8c5-c254-5f4d-982c-c161f6ed6d29"
```
@ -219,6 +219,22 @@ Acceptance:
- no migration rewrites workplan, task, progress, decision, token, or SBOM
identities.
Result (2026-08-28): migration `f3c4d5e6a7b8` adds an explicitly unverified or
verified Forge identity per managed-repository UUID, a global canonical/alias
slug registry, and a phased rename-operation journal. Composite foreign keys
prevent operations for unverified or mismatched repository identities; partial
unique indexes reserve one canonical slug, one active operation per repository,
and one active target slug. Database history guards prevent verified Forge
identity, protected slug, and operation-assertion rewrites or deletion while
leaving phase/evidence/error progress updateable. Existing repositories are
backfilled only with an unverified marker and their current canonical slug;
Forge coordinates are not guessed. Both API and direct classification
registration create the same initial records. PostgreSQL tests prove protected
alias conflicts, unique Forge identity, active-operation locks, a non-mutating
`flex-auth`/Forgejo-id-42 preflight representation with all existing identities
preserved, isolated migration upgrade/downgrade, and full-chain migration. The
full Python suite passes (765 tests).
## Implement preflight, apply, resume, verify, and rollback APIs
```task