# T05 Phase 2 Evidence — Data Migration to railiance01 (2026-07-06) Workplan: `CUST-WP-0054-T05` Parent runbook: `docs/state-hub-railiance01-cutover-plan.md` `no_secret_material_recorded: true` ## Checklist | Step | Action | Result | Evidence | | --- | --- | --- | --- | | 2.1 | Pre-freeze `pg_dump` (coulombcore) | **pass** | `/tmp/state-hub-prefreeze-20260706T165001Z.dump` (3.0 MiB) | | 2.2 | Freeze coulombcore writer | **pass** | `deployment/state-hub` scaled to 0 | | 2.3 | Final `pg_dump` after freeze | **pass** | `/tmp/state-hub-final-20260706T165019Z.dump` (3.0 MiB) | | 2.4 | Restore into railiance01 `state-hub-db` | **pass** | DROP/CREATE `state_hub` + `pg_restore --role=state_hub` | | 2.5 | Exact-count comparison | **pass** | All 7 baseline tables match ±0 | | 2.6 | Scale railiance01 API + verify | **pass** | Forgejo `main-d1a4fcf`; `/state/health` ok | **Phase 2 status: complete.** Phase 3 (rewire access paths) not started. ## Baseline counts (pre-freeze gate) Captured from coulombcore `state-hub-db-1` @ 2026-07-06T16:50Z: | Table | Count | | --- | ---: | | `workplans` | 640 | | `tasks` | 4002 | | `topics` | 14 | | `progress_events` | 8723 | | `token_events` | 1936 | | `managed_repos` | 74 | | `decisions` | 79 | Post-restore counts on railiance01 matched exactly. ## Production state after Phase 2 | Cluster | API | DB writer | | --- | --- | --- | | **railiance01** | Running 1/1 (`forgejo…:main-d1a4fcf`) | **primary** (restored data) | | **coulombcore** | Scaled to **0** (frozen, rollback-capable) | Unchanged CNPG (source dump retained) | Workstation `http://127.0.0.1:8000` still tunnels to coulombcore — **unreachable until Phase 3**. ## API verification (port-forward `18081:8000`) ```json {"status":"ok","db":"connected"} ``` `GET /state/summary` totals: topics=14, workstreams=640, tasks=4002, decisions=79. ## Rollback - coulombcore dump files retained under `/tmp/state-hub-*-20260706T*.dump` on workstation - Scale coulombcore `state-hub` back to 1; do **not** delete railiance01 data until Phase 5 stabilizes ## Next: Phase 3 - Repoint `state-hub-primary` tunnel → railiance01 ClusterIP `10.43.68.154:8000` - activity-core in-cluster URL; retire `fleet-state-hub-coulombcore` - Smoke `POST /progress/` through production path