Skip to content

Commit e71e388

Browse files
committed
Add FlowChain ops snapshot reporting
1 parent e4d8b2d commit e71e388

13 files changed

Lines changed: 542 additions & 218 deletions

docs/OPERATIONS/FLOWCHAIN_OWNER_OPERATED_PUBLIC_RPC.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ The repository now provides:
99
- `npm run flowchain:service:start` for supervised node and control-plane processes on Windows.
1010
- `npm run flowchain:service:status` for safe process, bind, height, backup, and bridge status.
1111
- `npm run flowchain:service:monitor` for repeated live service sampling that proves height progression over an operator-selected window.
12+
- `npm run flowchain:ops:snapshot` for one no-secret operator report that classifies critical incidents, public-readiness blockers, and incident commands.
1213
- `npm run flowchain:service:stop` and `npm run flowchain:service:restart`, which preserve runtime state.
1314
- `npm run flowchain:public-rpc:check` for endpoint, TLS, CORS, rate-limit, health, discovery, readiness, state, and response-hygiene checks.
1415
- `npm run flowchain:public-rpc:edge-template` for a no-values Nginx public-edge template that proxies this chain's private RPC origin through owner TLS and rate limiting.

docs/agent-runs/live-product-infra-rpc/ARCHITECTURE_AUDIT.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# FlowChain Architecture Audit
22

3-
Generated: 2026-05-16T04:55:11.3580976Z
3+
Generated: 2026-05-16T05:36:25.7062445Z
44
Status: blocked
55
Blocked only on known external owner inputs: True
66

@@ -21,8 +21,8 @@ Blocked only on known external owner inputs: True
2121

2222
| Layer | Requirement | Status | Evidence |
2323
| --- | --- | --- | --- |
24-
| L1 runtime | The block-producing node and service lifecycle are separated from RPC, run in live profile, and expose fresh state evidence. | passed | serviceStatus=passed, liveProfile=True, maxBlocks=0, nodeRunning=True, controlPlaneRunning=True, latestHeight=25361, finalizedHeight=25361 |
25-
| Operations | Operations has explicit status, monitor, and emergency-stop controls that do not depend on public deployment being live. | passed | monitorStatus=passed, samples=2, heightAdvanced=True |
24+
| L1 runtime | The block-producing node and service lifecycle are separated from RPC, run in live profile, and expose fresh state evidence. | passed | serviceStatus=passed, liveProfile=True, maxBlocks=0, nodeRunning=True, controlPlaneRunning=True, latestHeight=31145, finalizedHeight=31145 |
25+
| Operations | Operations has explicit status, monitor, ops snapshot, and emergency controls that classify incidents separately from owner-input blockers. | passed | monitorStatus=passed, samples=2, heightAdvanced=True, opsSnapshot=blocked, criticalCount=0 |
2626
| RPC/API | The control-plane API has explicit health/discovery/readiness/CORS/rate-limit validation before it can be exposed publicly. | passed | validationStatus=passed, corsAllowed=True, corsRejected=True, endpointChecks=True, rateLimitProbe=True, rateLimitRejected=True, rateLimitRetryAfter=True, responseHygiene=True |
2727
| Public edge | External RPC exposure is a distinct owner-operated edge with TLS, allowed origins, rate limits, endpoint checks, and response hygiene. | blocked | publicRpcStatus=blocked, publicRpcReady=False |
2828
| Public edge | Public RPC exposure has a no-values owner edge template for HTTPS reverse proxying, rate limiting, and CORS-origin forwarding. | passed | edgeTemplateStatus=passed, repoOwned=True, requiresTls=True, requiresRateLimit=True, forwardsOrigin=True |
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# FlowChain Ops Snapshot
2+
3+
Generated: 2026-05-16T05:36:14.4745825Z
4+
Status: blocked
5+
Latest height: 31145
6+
Finalized height: 31145
7+
8+
## Findings
9+
10+
- blocked: public-rpc-not-ready - Public RPC is not ready to share.
11+
- blocked: backup-not-ready - State backup is not ready for public operation.
12+
- blocked: bridge-not-ready - Base 8453 bridge readiness is not ready for external funded testing.
13+
- blocked: external-tester-not-shareable - External tester packet must remain not-shareable.
14+
- blocked: deployment-contract-not-ready - Public deployment contract is not ready.
15+
16+
## Incident Commands
17+
18+
### status
19+
- npm run flowchain:ops:snapshot
20+
- npm run flowchain:service:status
21+
- npm run flowchain:service:monitor -- -DurationSeconds 300 -PollSeconds 30
22+
23+
### restart
24+
- npm run flowchain:service:restart -- -LiveProfile
25+
- npm run flowchain:service:status
26+
27+
### backupRecovery
28+
- npm run flowchain:backup:restore:validate
29+
- npm run flowchain:backup:create
30+
- npm run flowchain:backup:restore:verify
31+
32+
### publicExposure
33+
- npm run flowchain:public-rpc:check
34+
- npm run flowchain:external-tester:packet
35+
36+
### emergency
37+
- npm run flowchain:emergency:stop-local
38+
- npm run flowchain:bridge:emergency-stop
39+
- npm run flowchain:emergency:export-evidence

docs/agent-runs/live-product-infra-rpc/PUBLIC_DEPLOYMENT_CONTRACT.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# FlowChain Public Deployment Contract
22

3-
Generated: 2026-05-16T05:03:10.1702319Z
3+
Generated: 2026-05-16T05:36:25.5576427Z
44
Status: blocked
55
Deployment ready: False
66
Packet shareable: False
@@ -12,13 +12,14 @@ This file records deployment gates, commands, and env names only. It must not co
1212

1313
| Requirement | Status | Evidence |
1414
| --- | --- | --- |
15-
| The deployment contract evaluates reports freshly generated by this command or an explicit caller such as the completion audit. | passed | refreshPerformed=True, delegatedToCaller=False, failedSteps=0 |
15+
| The deployment contract evaluates reports freshly generated by this command or an explicit caller such as the completion audit. | passed | refreshPerformed=False, delegatedToCaller=True, failedSteps=0 |
1616
| Owner onboarding clearly distinguishes repo-owned FlowChain RPC from the external Base 8453 RPC dependency without values and documents local owner env-file loading. | passed | onboardingStatus=passed, flowChainRpcIsOurs=True, publicRpcRequiresOwnerPublicEdge=True, base8453RpcIsExternalChainDependency=True, localEnvFileSupported=True |
1717
| Owner signup checklist maps every public RPC, backup, and Base 8453 bridge value to the exact thing the owner must get without requesting secrets in chat. | passed | signupStatus=passed, itemCount=8, externalSignupCount=3, missingCoverage=0, repoOwned=True, localEnvFileSupported=True |
1818
| Owner env-file setup has a command-generated local scaffold whose target path is git-ignored before owner values are added. | passed | templateStatus=passed, pathIsGitIgnored=True, requiredEnvNameCount=15, includesAllRequired=True |
1919
| Public RPC exposure has a no-values owner edge template for HTTPS reverse proxying, rate limiting, and CORS-origin forwarding. | passed | edgeTemplateStatus=passed, repoOwned=True, requiresTls=True, requiresRateLimit=True, forwardsOrigin=True |
20-
| The public deployment origin service is running privately in live profile before any owner TLS edge is considered shareable. | passed | serviceStatus=passed, privateBind=True, latestHeight=30727, finalizedHeight=30727 |
20+
| The public deployment origin service is running privately in live profile before any owner TLS edge is considered shareable. | passed | serviceStatus=passed, privateBind=True, latestHeight=31145, finalizedHeight=31145 |
2121
| The deployment has recent service-monitor evidence that block height advances over multiple samples. | passed | monitorStatus=passed, samples=2, heightAdvanced=True |
22+
| Owner deployment has a no-secret ops snapshot that separates critical incidents from expected owner-input blockers and lists incident commands. | passed | opsSnapshot=blocked, criticalCount=0, blockedCount=5 |
2223
| The owner deployment contract validates the required public RPC, backup, and Base 8453 input names without values. | blocked | ownerInputsStatus=blocked, ownerInputReady=False |
2324
| The owner TLS edge must pass endpoint, CORS, rate-limit, readiness, and response-hygiene checks before sharing. | blocked | publicRpcStatus=blocked, publicRpcReady=False, validationStatus=passed, validationPassed=True |
2425
| Backup tooling must create a manifest-backed state snapshot, verify a restore rehearsal, and detect corrupted snapshots without owner secrets. | passed | validationStatus=passed, hashRoundTrip=True, corruptionDetected=True |
@@ -32,6 +33,7 @@ This file records deployment gates, commands, and env names only. It must not co
3233

3334
- npm run flowchain:service:status
3435
- npm run flowchain:service:monitor -- -DurationSeconds 300 -PollSeconds 30
36+
- npm run flowchain:ops:snapshot -- -AllowBlocked
3537
- npm run flowchain:owner:onboarding
3638
- npm run flowchain:owner-env:template
3739
- npm run flowchain:owner-inputs

docs/agent-runs/live-product-infra-rpc/flowchain-architecture-audit-report.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schema": "flowchain.architecture_audit_report.v0",
3-
"generatedAt": "2026-05-16T04:55:11.3580976Z",
3+
"generatedAt": "2026-05-16T05:36:25.7062445Z",
44
"status": "blocked",
55
"blockedOnlyOnKnownExternalOwnerInputs": true,
66
"objectiveDeliverables": [
@@ -27,7 +27,7 @@
2727
"layer": "L1 runtime",
2828
"requirement": "The block-producing node and service lifecycle are separated from RPC, run in live profile, and expose fresh state evidence.",
2929
"status": "passed",
30-
"evidence": "serviceStatus=passed, liveProfile=True, maxBlocks=0, nodeRunning=True, controlPlaneRunning=True, latestHeight=25361, finalizedHeight=25361",
30+
"evidence": "serviceStatus=passed, liveProfile=True, maxBlocks=0, nodeRunning=True, controlPlaneRunning=True, latestHeight=31145, finalizedHeight=31145",
3131
"files": [
3232
"crates/flowmemory-devnet/src/cli.rs",
3333
"crates/flowmemory-devnet/src/storage.rs",
@@ -47,16 +47,18 @@
4747
{
4848
"id": "ops-observability-boundary",
4949
"layer": "Operations",
50-
"requirement": "Operations has explicit status, monitor, and emergency-stop controls that do not depend on public deployment being live.",
50+
"requirement": "Operations has explicit status, monitor, ops snapshot, and emergency controls that classify incidents separately from owner-input blockers.",
5151
"status": "passed",
52-
"evidence": "monitorStatus=passed, samples=2, heightAdvanced=True",
52+
"evidence": "monitorStatus=passed, samples=2, heightAdvanced=True, opsSnapshot=blocked, criticalCount=0",
5353
"files": [
5454
"infra/scripts/flowchain-service-monitor.ps1",
55+
"infra/scripts/flowchain-ops-snapshot.ps1",
5556
"infra/scripts/flowchain-emergency-stop-local.ps1",
5657
"infra/scripts/flowchain-node-stop.ps1"
5758
],
5859
"commands": [
5960
"npm run flowchain:service:monitor",
61+
"npm run flowchain:ops:snapshot -- -AllowBlocked",
6062
"npm run flowchain:emergency:stop-local"
6163
],
6264
"blockers": [
@@ -532,6 +534,7 @@
532534
"reportPaths": {
533535
"serviceStatus": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\service-status-report.json",
534536
"serviceMonitor": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\service-monitor-report.json",
537+
"opsSnapshot": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\ops-snapshot-report.json",
535538
"liveWallet": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\live-service-wallet-e2e-report.json",
536539
"testerNetwork": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\live-service-tester-network-e2e-report.json",
537540
"publicRpcReadiness": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\public-rpc-readiness-report.json",
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
{
2+
"schema": "flowchain.ops_snapshot_report.v1",
3+
"generatedAt": "2026-05-16T05:36:14.4745825Z",
4+
"status": "blocked",
5+
"refresh": {
6+
"performed": true,
7+
"steps": [
8+
{
9+
"name": "service-status",
10+
"exitCode": 0,
11+
"outputLineCount": 9
12+
},
13+
{
14+
"name": "service-monitor",
15+
"exitCode": 0,
16+
"outputLineCount": 4
17+
}
18+
]
19+
},
20+
"chain": {
21+
"latestHeight": "31145",
22+
"finalizedHeight": "31145",
23+
"stateFileLastWriteAgeSeconds": 2,
24+
"monitorStatus": "passed",
25+
"monitorSamples": 2,
26+
"monitorHeightAdvanced": true
27+
},
28+
"reportStatuses": {
29+
"serviceStatus": "passed",
30+
"serviceMonitor": "passed",
31+
"publicRpc": "blocked",
32+
"backup": "blocked",
33+
"bridgeLive": "blocked",
34+
"bridgeInfra": "blocked",
35+
"externalTester": "blocked",
36+
"publicDeployment": "blocked",
37+
"noSecret": "passed"
38+
},
39+
"findings": [
40+
{
41+
"severity": "blocked",
42+
"code": "public-rpc-not-ready",
43+
"message": "Public RPC is not ready to share.",
44+
"commands": [
45+
"npm run flowchain:public-rpc:check",
46+
"npm run flowchain:public-rpc:validate"
47+
]
48+
},
49+
{
50+
"severity": "blocked",
51+
"code": "backup-not-ready",
52+
"message": "State backup is not ready for public operation.",
53+
"commands": [
54+
"npm run flowchain:backup:restore:validate",
55+
"npm run flowchain:backup:check"
56+
]
57+
},
58+
{
59+
"severity": "blocked",
60+
"code": "bridge-not-ready",
61+
"message": "Base 8453 bridge readiness is not ready for external funded testing.",
62+
"commands": [
63+
"npm run flowchain:bridge:live:check",
64+
"npm run flowchain:bridge:infra:check",
65+
"npm run flowchain:bridge:emergency-stop"
66+
]
67+
},
68+
{
69+
"severity": "blocked",
70+
"code": "external-tester-not-shareable",
71+
"message": "External tester packet must remain not-shareable.",
72+
"commands": [
73+
"npm run flowchain:tester:readiness",
74+
"npm run flowchain:external-tester:packet"
75+
]
76+
},
77+
{
78+
"severity": "blocked",
79+
"code": "deployment-contract-not-ready",
80+
"message": "Public deployment contract is not ready.",
81+
"commands": [
82+
"npm run flowchain:public-deployment:contract -- -AllowBlocked"
83+
]
84+
}
85+
],
86+
"criticalCount": 0,
87+
"blockedCount": 5,
88+
"incidentCommands": {
89+
"status": [
90+
"npm run flowchain:ops:snapshot",
91+
"npm run flowchain:service:status",
92+
"npm run flowchain:service:monitor -- -DurationSeconds 300 -PollSeconds 30"
93+
],
94+
"restart": [
95+
"npm run flowchain:service:restart -- -LiveProfile",
96+
"npm run flowchain:service:status"
97+
],
98+
"backupRecovery": [
99+
"npm run flowchain:backup:restore:validate",
100+
"npm run flowchain:backup:create",
101+
"npm run flowchain:backup:restore:verify"
102+
],
103+
"publicExposure": [
104+
"npm run flowchain:public-rpc:check",
105+
"npm run flowchain:external-tester:packet"
106+
],
107+
"emergency": [
108+
"npm run flowchain:emergency:stop-local",
109+
"npm run flowchain:bridge:emergency-stop",
110+
"npm run flowchain:emergency:export-evidence"
111+
]
112+
},
113+
"reportPaths": {
114+
"serviceStatus": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\service-status-report.json",
115+
"serviceMonitor": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\service-monitor-report.json",
116+
"publicRpc": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\public-rpc-readiness-report.json",
117+
"backup": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\backup-readiness-report.json",
118+
"bridgeLive": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\bridge-live-readiness-report.json",
119+
"bridgeInfra": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\bridge-infra-readiness-report.json",
120+
"externalTester": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\external-tester-readiness-report.json",
121+
"publicDeployment": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\public-deployment-contract-report.json",
122+
"noSecret": "E:\\FlowMemory\\flowmemory-live-infra-rpc\\docs\\agent-runs\\live-product-infra-rpc\\no-secret-scan-report.json"
123+
},
124+
"broadcasts": false,
125+
"envValuesPrinted": false,
126+
"noSecrets": true
127+
}

0 commit comments

Comments
 (0)