docs: complete repository rename operator handoff
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a049a4-ee9f-78e1-9d66-2cb0f9bea3e3
This commit is contained in:
tegwick 2026-08-29 15:46:43 +02:00
parent 0ec5b9a98d
commit f7402bd711
11 changed files with 735 additions and 10 deletions

View file

@ -27,6 +27,11 @@ be followed by classification registration.
For the full onboarding journey see **[Repo Integration](/docs/repo-integration)**.
For a lineage-preserving Forgejo coordinate change, see
**[Repository Renames](/docs/repository-renames)**. The old repository route
continues to resolve through a protected alias; the dashboard is verification,
not the mutation surface.
---
## KPI row
@ -86,4 +91,4 @@ Use the **Add Repo** form or:
# 2. Register / reclassify
make register-from-classification PATH=/path/to/repo
statehub fix-consistency
```
```

View file

@ -0,0 +1,70 @@
---
title: Repository Renames — Operator Reference
---
# Repository renames
State Hub preserves repository history across a Forgejo name change by keeping
the repository UUID and Forge numeric ID unchanged. The new slug becomes
canonical and the former slug remains a protected alias.
The dashboard is a read surface. Execute and recover renames with the
`statehub repo rename` CLI and the repository-owned migration workplan.
## What to inspect here
After the `statehub-rebound` phase:
1. Open `/repos/<old-slug>`. An amber banner must identify the requested slug
as an alias and link to the canonical repository page.
2. Open `/repos/<new-slug>`. Both pages must report the same repository UUID;
the canonical page lists the old alias.
3. Review workplans/tasks, dispatch, token totals, SBOM, services,
capabilities, inbox, interface changes, and stale external references.
4. Treat stale Fabric or external projections as owner handoffs. Their source
is not silently rewritten by State Hub.
Matching dashboard counts are useful but insufficient. Final verification uses
the per-record relationship checksums returned by:
```text
statehub repo rename verify <operation-id> --json
```
## Read the achieved phase
```text
statehub repo rename status <operation-id> --json
```
The `phase` is the last durable achievement. An `error_code` describes the last
failed attempt and does not advance the phase. Follow `next_safe_action`; reuse
the same operation UUID for retries.
| Phase | Next normal action |
| --- | --- |
| `preflighted` | Apply `forge-renamed`. |
| `forge-renamed` | Apply `statehub-rebound`; never register a replacement repository. |
| `statehub-rebound` | Verify/register a fresh canonical clone, then apply `source-synced`. |
| `source-synced` | Collect owner handoff evidence and apply `consumers-verified`. |
| `consumers-verified` | Re-run verification and apply `completed`. |
| `completed` | Soak, hand off residuals, then request cleanup approval. |
| `rollback-preflight` | Review blockers and irreversible effects before `--execute`. |
| `rolled-back` | Verify old canonical routes and affected consumers. |
## Safety boundaries
- Repository rename approval does not rename products, packages, APIs,
namespaces, environment variables, policies, or telemetry labels.
- Forgejo credentials stay in their approved custodian; they never enter State
Hub commands or evidence.
- External repositories own and close their own file-backed handoff tasks.
- Rollback does not undo consumer commits, deployments, published artifacts,
external caches, or historical telemetry.
- The old checkout is removed last, after terminal verification, soak, live
residual handoffs, and explicit path-specific approval.
- The protected old alias remains. Alias retirement is a separate decision.
The complete source runbook is `docs/repository-rename-operations.md`; its
versioned handoff contract is
`docs/schemas/repository-rename-handoff-v1.schema.json`.