record D2 Fabric dual-read cutover evidence
Assistant: codex Assistant-Model: gpt-5.6-sol Assistant-Session: 01a053ff-1d6f-7fe2-ac1c-a6eb40a42a0c
This commit is contained in:
parent
cdff3b7e08
commit
803bb95e1d
2 changed files with 109 additions and 0 deletions
88
docs/evidence/STATE-WP-0079-d2-dual-read-20260831.md
Normal file
88
docs/evidence/STATE-WP-0079-d2-dual-read-20260831.md
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
# 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.
|
||||
|
|
@ -404,6 +404,27 @@ remaining repo-manager/hub-core/activity-core/ops-hub families, and explicit
|
|||
authorization for production writer changes. It must resume from a fresh
|
||||
caller scan, not from the obsolete 2026-08-20 snapshot.
|
||||
|
||||
**D2 dual-read evidence completed 2026-08-31.** The deterministic authority
|
||||
snapshot is now the active `railiance01` read model at import
|
||||
`47e5358e-d04b-4969-99a2-ca88423ad054`: 131 nodes, 117 edges, 2 actors, 1
|
||||
fabric, 0 unresolved, content hash `caae6679…`, snapshot-set revision
|
||||
`991bca29…`. `finhub fabric-cutover-check` is green on every schema, content,
|
||||
count, and provenance check; exact re-ingest is idempotent. A receiver contract
|
||||
drift/column-width defect was fixed in `cf40c7b` and deployed with migration
|
||||
`b5e6f7a8c9d0` as Helm revision 56. Immutable-import activation was added in
|
||||
`cdff3b7` and deployed as revision 57. Production rollback to retained import
|
||||
`f844733d…` (49/58) and roll-forward to `47e5358e…` (131/117) were both
|
||||
exercised, followed by another green gate.
|
||||
|
||||
The fresh named-repo caller scan found no runtime consumers of
|
||||
`/fabric/graph*`; only contracts, docs, and retirement inventory matched. The
|
||||
owner service is still workstation-local and its accepted-snapshot freshness is
|
||||
not automated, so hosted runtime/persistence/auth/freshness and the eventual
|
||||
direct route are live owner residual `RAIL-FAB-WP-0028`. Evidence:
|
||||
`docs/evidence/STATE-WP-0079-d2-dual-read-20260831.md`. T04 remains `wait` on
|
||||
the non-D2 repo-manager/hub-core/activity-core/ops-hub route receipts and the
|
||||
explicit writer-change authorization already stated above.
|
||||
|
||||
## Retire legacy surfaces
|
||||
|
||||
```task
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue