# Core Hub private-shadow preflight — 2026-08-20

This records non-secret source/target metadata gathered for
`RPF-WP-0021-T05`. It is preparation only: no source data was dumped or
restored because the governed credential projections under T04 are not yet
live.

## Target admission

At `2026-08-20T21:31:13Z` on railiance01:

- namespace `core-hub` was Active and carried
  `railiance.io/postgres-client=platform-pg` plus the package identity labels;
- CNPG `Database/core-hub` reported `status.applied=true` against
  `platform-pg`, with reclaim policy `retain` and owner `core_hub_owner`;
- the `core_hub` database existed but intentionally contained no application
  tables before the rehearsal restore; and
- the KV store, database store and three ExternalSecret manifests all passed
  Kubernetes server-side dry-run after namespace creation.

A disposable `postgres:16-alpine` pod was then allowed to become Ready in the
`core-hub` namespace. DNS resolved
`platform-pg-rw.databases.svc.cluster.local` to its ClusterIP and `pg_isready`
reported port 5432 accepting connections. The probe used no database
credential and was deleted immediately afterward. This verifies the reviewed
namespace label and `platform-pg` consumer NetworkPolicy path.

## Source snapshot inventory

A read-only query ran through the existing `coulombcore` SSH route against
`apps-pg/core_hub`. No Secret or connection value was read. The live source
writer remained enabled, so these counts are a rehearsal baseline and must be
captured again with the eventual consistent dump.

| Object | Rows |
| --- | ---: |
| `public.alembic_version` | 1 |
| `public.api_consumers` | 3 |
| `public.api_keys` | 10 |
| `public.hub_capability_manifests` | 2 |
| `public.hubs` | 2 |
| `public.interaction_events` | 3 |
| `public.migration_runs` | 2 |
| `public.widgets` | 16 |

The source Alembic revision was `20260627_0002`. No user-defined sequence was
reported. The table set and counts are small enough for a bounded logical-copy
rehearsal, but the restore remains gated on T04 so that migration and runtime
checks use the intended distinct dynamic leases rather than a bootstrap login.
