Assistant: codex Assistant-Model: gpt-5.6-sol Assistant-Session: 01a053ff-1d6f-7fe2-ac1c-a6eb40a42a0c
88 lines
4.1 KiB
Markdown
88 lines
4.1 KiB
Markdown
# STATE-WP-0079 D2 dual-read cutover evidence — 2026-08-31
|
|
|
|
## Outcome
|
|
|
|
The Railiance Fabric authority snapshot is active on the `railiance01` State
|
|
Hub read model and the executable fin-hub parity gate is green. Import
|
|
idempotency and production rollback/roll-forward were exercised against
|
|
retained immutable imports.
|
|
|
|
This completes the D2 dual-read evidence. It does not authorize retirement of
|
|
State Hub or claim a hosted Railiance Fabric owner service; that operational
|
|
residual is `RAIL-FAB-WP-0028`.
|
|
|
|
## Authority snapshot
|
|
|
|
- Producer: `railiance-fabric`
|
|
- Contract: `railiance.fabric/v1alpha2`, `financial-fabric-v1`
|
|
- Revision: `snapshot-set:sha256:991bca294474e76a65e28011d813aace15d040aa7c173fcf8874a5d548aa7b35`
|
|
- Source path: `registry://accepted-snapshots`
|
|
- Exported at: `2026-08-31T20:44:15Z`
|
|
- Content hash: `caae66795ce8e969b086609f7905c129206e4a027eb60c65086fc183e88613a2`
|
|
- Counts: 131 nodes, 117 edges, 2 actors, 1 fabric, 0 unresolved references
|
|
- State Hub import: `47e5358e-d04b-4969-99a2-ca88423ad054`
|
|
|
|
## Compatibility defect and deployment
|
|
|
|
The first production import correctly failed closed, but exposed two receiver
|
|
defects: the Pydantic receiver omitted the contract's `deployment_overlay`, and
|
|
`fabric_graph_imports.source_commit` was `varchar(80)` while deterministic
|
|
snapshot-set revisions are 84 characters. The invalid-import diagnostic then
|
|
also hit that width constraint and returned HTTP 500 instead of 422.
|
|
|
|
State Hub commit `cf40c7b` aligned the receiver, bounded invalid provenance
|
|
metadata, added migration `b5e6f7a8c9d0`, and added regression coverage. It was
|
|
deployed atomically as image `main-cf40c7b`, Helm revision 56. Commit `cdff3b7`
|
|
then added immutable-import activation for operational rollback and was deployed
|
|
as image `main-cdff3b7`, Helm revision 57. Final health reported
|
|
`primary/railiance01`, database connected, and schema `b5e6f7a8c9d0` applied.
|
|
|
|
Verification:
|
|
|
|
- Full State Hub suite before the first deployment: 828 passed; dashboard build
|
|
completed (one pre-existing SQLAlchemy resource warning and one broken-link
|
|
warning).
|
|
- Focused activation/financial/import tests after the rollback addition: 5
|
|
passed.
|
|
- The exact saved authority payload validated as 131 nodes / 117 edges before
|
|
deployment.
|
|
|
|
## Parity and idempotency
|
|
|
|
`finhub fabric-cutover-check` compared the saved authority export with
|
|
`/fabric/graph/summary`. All checks passed: API/schema/kind, content hash,
|
|
node/edge/actor/fabric/unresolved counts, source revision/path, and export time.
|
|
The result was `ready: true` with no failures.
|
|
|
|
Posting the identical saved payload a second time returned `created: false`,
|
|
`idempotent: true`, and the same import id. No duplicate graph was created.
|
|
|
|
## Exercised rollback and roll-forward
|
|
|
|
The previous valid import remained intact as
|
|
`f844733d-bfc2-4809-a3c6-8cc8fbb5a84d` (49 nodes, 58 edges, content hash
|
|
`9d08056060753445727cff8cff7a7be1525b113dabcf45c4039bce98a1f5e912`).
|
|
|
|
1. Activating that import changed the live summary to 49 nodes / 58 edges and
|
|
reported the 131/117 import as the previous import.
|
|
2. Activating `47e5358e-d04b-4969-99a2-ca88423ad054` restored 131 nodes / 117
|
|
edges and reported the old import as previous.
|
|
3. The full fin-hub cutover gate was rerun after roll-forward and again returned
|
|
`ready: true` with zero failures.
|
|
|
|
Activation changes only the per-source latest marker; both graph imports remain
|
|
immutable and readable.
|
|
|
|
## Caller and owner-surface review
|
|
|
|
A fresh code scan of repo-manager, fin-hub, hub-core, activity-core, ops-hub,
|
|
railiance-fabric, and the retirement project found no runtime callers of the
|
|
State Hub `/fabric/graph*` routes. Matches were contracts, operator docs, and
|
|
retirement inventory only.
|
|
|
|
Railiance Fabric currently documents a workstation-local registry service at
|
|
`127.0.0.1:8765`; no Kubernetes/Helm production deployment was found in
|
|
railiance-apps, railiance-cluster, rail-kubernetes, or railiance-fabric. Its
|
|
accepted snapshot set is deterministic, but many component snapshots predate
|
|
this cutover. `RAIL-FAB-WP-0028` owns the hosted runtime, persistence,
|
|
authentication, freshness, recovery, and eventual direct-consumer switch.
|