Update RAIL-HO-WP-0005: migration ladder complete, backup cron fixed
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s

Mark T01 and T10 done after paginated forge comparison shows 0 Gitea-only
repos and all State Hub remotes on Forgejo. Advance T11 to progress with
per-repo cutover complete; Gitea read-only marking awaits operator signoff.

Refresh forgejo-migration-inventory.md with 2026-07-08 closure addendum.
Document backup cron PATH fix and 3/7 gate status after manual run.
This commit is contained in:
tegwick 2026-07-08 15:20:19 +02:00
parent 36fcfd4d85
commit b3a065a1c9
2 changed files with 72 additions and 35 deletions

View file

@ -109,19 +109,19 @@ Integration evidence now comes from **in-production probes and repo pilots**:
| 1 | `coulomb/glas-harness` | Non-production git+SSH+CI routing drill | **done** |
| 2 | `coulomb/key-cape` | Image-build workflow + registry pull on railiance01 | **done** |
| 2.5 | `railiance-enablement`, `railiance-infra`, `railiance-apps`, `railiance-platform`, `railiance-cluster` | Stack repos on Forgejo + S4 templates | **done** |
| 3 | Production set (`state-hub`, `issue-core`, …) | Canonical remotes, sweep paths, deploy loops | **in progress** (`state-hub` cutover 2026-07-06) |
| 3 | Production set (`state-hub`, `issue-core`, …) | Canonical remotes, sweep paths, deploy loops | **done** (2026-07-08) |
Each tier must pass before the next. T03 (isolated probe namespace) is cancelled;
acceptance criteria below are tracked across T05, T07, T08, and T10 instead.
Still to prove before T11:
Still to prove before T11 closeout:
- ~~SMTP/password reset end-to-end (T06).~~ **done** (2026-07-08).
- ~~Backup restore from offsite artifact (T09).~~ **done** (2026-07-08); 7-day
scheduled backup gate still counting.
- Issues/releases/wiki/LFS per inventory classification (T10 matrix) for ~40
remaining Gitea-only repos.
scheduled backup gate **3/7** (cron PATH fixed 2026-07-08).
- ~~Repo migration ladder (T10).~~ **done** (2026-07-08); 0 Gitea-only repos.
- ~~Operator SSH on Forgejo as `tegwick` (T05/T10).~~ **done**.
- Gitea read-only marking + operator signoff (T11).
## Target Architecture
@ -143,7 +143,7 @@ operator / agents / developers
```task
id: RAIL-HO-WP-0005-T01
status: progress
status: done
priority: high
state_hub_task_id: "cf59d171-5629-45c9-9d44-8d6499827ffc"
```
@ -166,11 +166,11 @@ Minimum inventory:
Forgejo before cutover and classifies each migration item as automatic,
manual, unsupported, or explicitly out of scope.
**Gap (2026-07-08):** Gitea partial inventory via org API (50 repos, 2 members,
2 teams, 0 org hooks; sample deploy keys/hooks zero). Full Gitea user/token sweep
needs PAT with `read:admin`. Migration gap: **40 repos** on Gitea not yet on
Forgejo (16 mirrored). Hub drift for Forgejo-hosted repos **cleared** (incl.
`ops-warden` 2026-07-08).
**Done (2026-07-08):** Paginated org comparison — Gitea **79**, Forgejo **84**,
**0** Gitea-only repos. State Hub **82 Forgejo** / 0 Gitea remotes. Workstation
checkouts: no `gitea-remote` origins remain. Gitea admin partial (no `read:admin`
PAT); sample deploy keys/webhooks zero on both forges. Inventory artifact current
in `docs/forgejo-migration-inventory.md`.
---
@ -250,14 +250,15 @@ Minimum scope:
packages, Actions artifacts, and logs.
- Restore runbook for database and blob/package data.
**Partial (2026-07-07):** `forgejo-db` CNPG cluster healthy on railiance01.
**Partial (2026-07-08):** `forgejo-db` CNPG cluster healthy on railiance01.
SOPS secret path and network policies in `railiance-platform`. **Backup target
decided (Option A, Nextcloud).** **Automation:** `railiance-platform`
`make forgejo-backup` / `docs/forgejo-backup.md` — daily `forgejo dump` +
`pg_dump` → age → Nextcloud `forgejo/`. **First production backup succeeded
2026-07-07** (~686M dump + 2.1M pg_dump uploaded). Daily cron installed
(02:15 UTC). **Nextcloud restore drill passed 2026-07-08.** Remaining: 7-day
success gate (2/7 as of 2026-07-08).
`pg_dump` → age → Nextcloud `forgejo/`. Daily cron 02:15 UTC; **cron PATH fixed
2026-07-08** (`kubectl` was missing from cron env — Jul 8 02:15 run failed).
**Nextcloud restore drill passed 2026-07-08.** Manual backup
`20260708T131118Z` (~890M dump + 13M pg_dump) succeeded. Remaining: 7-day
success gate (**3/7** as of 2026-07-08).
**Done when:** platform dependencies can be deployed and restored without the
Forgejo app running.
@ -456,12 +457,14 @@ Makefile targets. **First scheduled backup:** 20260707T180844Z (~686M, 14 repos)
Daily cron 02:15 UTC. **Nextcloud restore drill passed 2026-07-08** — decrypt
uploaded `.age` artifact, chunked copy, 14 org repos restored in
`forgejo-restore-drill` (evidence: `docs/forgejo-restore-drill-evidence.md`).
Remaining: 7 consecutive backup successes (gate counting); Nextcloud file-drop
is upload-only — read-lane TBD for DR without workstation cache.
Remaining: 7 consecutive backup successes (**3/7** as of 2026-07-08); cron PATH
fixed so nightly runs resume. Nextcloud file-drop is upload-only — read-lane TBD
for DR without workstation cache.
**Done when:** a fresh backup restores to a working isolated Forgejo instance
with repository, package, and user recovery checks passing **and** scheduled
backups run without manual intervention.
backups run without manual intervention. Restore drill **met**; scheduled
automation **met** pending 7-day gate.
---
@ -469,7 +472,7 @@ backups run without manual intervention.
```task
id: RAIL-HO-WP-0005-T10
status: progress
status: done
priority: high
state_hub_task_id: "6befde73-00bc-4643-be0b-a7ce7944e75f"
```
@ -515,12 +518,14 @@ Hub: **12 Forgejo** / 51 Gitea remotes (Forgejo-hosted registered repos aligned)
**Wave 2 tier-2 (2026-07-08):** `ops-bridge`, `open-reuse`, `artifact-store`
promoted to Forgejo + hub `remote_url` patched. Forgejo org now **20 repos**.
**Remaining:** tier-3 promotion for remaining production repos (`llm-connect`,
`the-custodian`, `flex-auth`, …); scheduled backups 7-day gate (2/7);
stabilization closeout + operator signoff before coulombcore teardown.
**Done (2026-07-08):** Paginated forge comparison shows **0** Gitea-only repos;
all 79 Gitea org repos mirrored on Forgejo (84 total). State Hub remotes all
Forgejo; workstation `gitea-remote` origins **0**. Tier-3 production set
(incl. `state-hub`, `the-custodian`, `llm-connect`, `flex-auth`) on Forgejo.
Evidence: `docs/forgejo-migration-inventory.md` addendum 2026-07-08.
**Done when:** tiers 02 pass with written result matrices and no unknown
critical migration gaps remain for production repos. **Tiers 02.5: met.**
critical migration gaps remain for production repos. **Met.**
---
@ -528,7 +533,7 @@ critical migration gaps remain for production repos. **Tiers 02.5: met.**
```task
id: RAIL-HO-WP-0005-T11
status: todo
status: progress
priority: high
needs_human: true
state_hub_task_id: "b1b66687-ca33-4971-b312-743c8e059c5e"
@ -550,6 +555,12 @@ operator approval per `CUST-WP-0054` drain sequence.
**Emergency fallback only:** org-wide freeze-all — not the primary plan; use if
staged drift becomes unacceptable (document rollback before invoking).
**Partial (2026-07-08):** Per-repo promotion **complete** — all Gitea org
repos exist on Forgejo; State Hub remotes and workstation origins on
`forgejo-remote`. Remaining for operator signoff: mark Gitea repos read-only
(per-repo or org-wide), document rollback runbook closeout, confirm no active
workflows still target `gitea-remote`.
**Done when:** all Railiance/Custodian repos use Forgejo as primary, Gitea is
read-only fallback, and rollback instructions are documented.
@ -599,13 +610,11 @@ T05+T08 ──► T10 migration ladder ──► T11 production cutover ──
T03 isolated probe: CANCELLED (superseded by T05 + in-production pilots)
```
**Current focus (2026-07-08):** T05/T06/T07/T08 **done**; T09 restore drill **passed**;
backup 7-day gate **2/7** (chunked `forgejo-backup` fix in `railiance-platform`;
cron 02:15 UTC). T10: tier-1 `ihp-railiance-probe` + tier-2 `ops-bridge`,
`open-reuse`, `artifact-store` promoted; Forgejo org **20 repos**; hub remotes
patched for all promoted registered repos.
Next: backup gate (passive), tier-3 wave with operator approval (`llm-connect`,
`the-custodian`, `flex-auth`).
**Current focus (2026-07-08):** T01/T05/T06/T07/T08/T10 **done**; T04/T09
await 7-day backup gate (**3/7**; cron PATH fixed 2026-07-08). Forgejo org
**84 repos**; **0** Gitea-only; State Hub **82 Forgejo** remotes. T11 **in
progress** — per-repo cutover complete; operator signoff for Gitea read-only +
rollback doc closeout. T12 blocked on T11 stabilization.
**Absorbed by `CUST-WP-0054-T04`:** forge + CI on railiance01; workstation
build retirement; staged repo promotion before State Hub primary move (T05).