{"entry":{"fixtureId":"bridge-settlement-v0","appSlug":"bridge-settlement-monitor","appName":"Bridge Settlement Monitor","reportId":"lab_bridge-settlement-v0_20260610225855203","generatedAt":"2026-06-10T22:58:55.203Z","status":"pass","jsonPath":"/bundle/server-functions/default/.nocklab/bridge-settlement.report.json","markdownPath":"/bundle/server-functions/default/.nocklab/bridge-settlement.report.md","reportHash":"sha256:54f1191c0a6d4e541b7eea489221c4c98e1680858f57fdf82f5cedca1ee994d0","snapshotRoot":"cb8f95e54b03705e","badgeCandidate":{"id":"badge-candidate-bridge-settlement-monitor","label":"Bridge Settlement Monitor Verification Candidate","reportSlug":"bridge-settlement-monitor","fixtureId":"bridge-settlement-v0","status":"ready","evidenceKind":"model-attested","statusReDerived":"pass","statusConsistent":true,"kernelHash":null,"kernelVerified":false,"baseDeploymentHash":null,"baseVerified":false,"signatureStatus":"unsigned","evidence":{"reportHash":"sha256:54f1191c0a6d4e541b7eea489221c4c98e1680858f57fdf82f5cedca1ee994d0","snapshotRoot":"cb8f95e54b03705e","invariantPacks":[]}},"stepsPassed":5,"stepsTotal":5,"invariantsPassed":3,"invariantsTotal":3,"alertsTriggered":0,"snapshotsCaptured":6,"adapterObservationCount":0,"invariantPackCount":0},"report":{"reportId":"lab_bridge-settlement-v0_20260610225855203","fixtureId":"bridge-settlement-v0","generatedAt":"2026-06-10T22:58:55.203Z","app":{"name":"Bridge Settlement Monitor","slug":"bridge-settlement-monitor","version":"0.0.1","kernel":"mock-bridge-monitor-v0"},"environment":{"mode":"mock-fakenet","grpcEndpoint":"127.0.0.1:5555","fakenetCommand":"nockchain --fakenet --bind-public-grpc-addr 127.0.0.1:5555 --no-default-peers","notes":["Mock bridge lifecycle for 30-day report contracts.","Uses the same report engine as NockApp test fixtures."]},"summary":{"status":"pass","stepsPassed":5,"stepsFailed":0,"invariantsPassed":3,"invariantsFailed":0,"alertsClear":2,"alertsTriggered":0,"snapshotsCaptured":6,"durationMs":85,"expectRejected":false,"rawStatus":"pass"},"invariantPacks":[],"steps":[{"id":"boot-fakenet","type":"fakenet","title":"Boot mock bridge monitor fakenet","status":"pass","expectation":"gRPC endpoint configured at 127.0.0.1:5555","observed":"mock-fakenet profile ready at 127.0.0.1:5555","beforeHash":"b372b28166c370df","afterHash":"b372b28166c370df","stateDiffs":[],"durationMs":19},{"id":"observe-base-lock","type":"bridge","title":"Observe Base-side lock","status":"pass","target":"/settlement","expectation":"settlement.observedOnBase == true","observed":"true","beforeHash":"b372b28166c370df","afterHash":"f4d229f2f16ad672","stateDiffs":[{"path":"settlement.status","before":"initiated","after":"observed"},{"path":"settlement.observedOnBase","before":"false","after":"true"}],"durationMs":26},{"id":"observe-proof","type":"bridge","title":"Observe settlement proof","status":"pass","target":"/settlement","expectation":"settlement.proofSeen == true","observed":"true","beforeHash":"f4d229f2f16ad672","afterHash":"684d36e0fb331cb5","stateDiffs":[{"path":"settlement.status","before":"observed","after":"proof-seen"},{"path":"settlement.proofSeen","before":"false","after":"true"}],"durationMs":33},{"id":"finalize-settlement","type":"bridge","title":"Finalize settlement","status":"pass","target":"/settlement","expectation":"settlement.status == finalized","observed":"finalized","beforeHash":"684d36e0fb331cb5","afterHash":"cb8f95e54b03705e","stateDiffs":[{"path":"settlement.status","before":"proof-seen","after":"finalized"},{"path":"settlement.finalized","before":"false","after":"true"}],"durationMs":40},{"id":"peek-alerts","type":"peek","title":"Read alert status","status":"pass","target":"/alerts","expectation":"alerts.failed == false","observed":"false","beforeHash":"cb8f95e54b03705e","afterHash":"cb8f95e54b03705e","stateDiffs":[],"durationMs":47}],"invariants":[{"id":"bridge-terminal-state","title":"Bridge reaches finalized state","severity":"critical","status":"pass","observed":"finalized","expected":"settlement.status == finalized"},{"id":"proof-seen-before-finalized","title":"Proof is seen before finalization","severity":"critical","status":"pass","observed":"true","expected":"settlement.proofSeen == true"},{"id":"no-failure-alert","title":"Failure alert remains clear","severity":"high","status":"pass","observed":"false","expected":"alerts.failed == false"}],"alerts":[{"id":"settlement-delayed","title":"Settlement delay","severity":"warning","state":"clear","observed":"false","condition":"alerts.delayed == true","message":"Settlement is not delayed."},{"id":"settlement-failed","title":"Settlement failure","severity":"critical","state":"clear","observed":"false","condition":"alerts.failed == true","message":"No settlement failure detected."}],"adapterObservations":[],"stateSnapshots":[{"label":"Initial state","stateHash":"b372b28166c370df","state":{"settlement":{"status":"initiated","observedOnBase":false,"proofSeen":false,"finalized":false,"amount":250},"alerts":{"delayed":false,"failed":false}}},{"label":"After boot-fakenet","stateHash":"b372b28166c370df","state":{"settlement":{"status":"initiated","observedOnBase":false,"proofSeen":false,"finalized":false,"amount":250},"alerts":{"delayed":false,"failed":false}},"stepId":"boot-fakenet"},{"label":"After observe-base-lock","stateHash":"f4d229f2f16ad672","state":{"settlement":{"status":"observed","observedOnBase":true,"proofSeen":false,"finalized":false,"amount":250},"alerts":{"delayed":false,"failed":false}},"stepId":"observe-base-lock"},{"label":"After observe-proof","stateHash":"684d36e0fb331cb5","state":{"settlement":{"status":"proof-seen","observedOnBase":true,"proofSeen":true,"finalized":false,"amount":250},"alerts":{"delayed":false,"failed":false}},"stepId":"observe-proof"},{"label":"After finalize-settlement","stateHash":"cb8f95e54b03705e","state":{"settlement":{"status":"finalized","observedOnBase":true,"proofSeen":true,"finalized":true,"amount":250},"alerts":{"delayed":false,"failed":false}},"stepId":"finalize-settlement"},{"label":"After peek-alerts","stateHash":"cb8f95e54b03705e","state":{"settlement":{"status":"finalized","observedOnBase":true,"proofSeen":true,"finalized":true,"amount":250},"alerts":{"delayed":false,"failed":false}},"stepId":"peek-alerts"}],"stateDiffs":[{"path":"settlement.status","before":"initiated","after":"finalized"},{"path":"settlement.observedOnBase","before":"false","after":"true"},{"path":"settlement.proofSeen","before":"false","after":"true"},{"path":"settlement.finalized","before":"false","after":"true"}],"nextActions":["Replace mock poke and peek execution with local fakenet adapter calls.","Replace command-backed fakenet metadata probes with stable gRPC-native probes once node surfaces are available.","Persist generated reports under a project workspace.","Add app-specific invariant packs as the NockApp interface stabilizes."]},"markdown":"# ✅ Bridge Settlement Monitor Lab Report\n\n> **PASS** — 5/5 steps · 3/3 invariants · 0 alerts · 85ms\n\n| Field | Value |\n| --- | --- |\n| Report | `lab_bridge-settlement-v0_20260610225855203` |\n| Fixture | `bridge-settlement-v0` |\n| Status | ✅ pass |\n| Steps | 5 passed, 0 failed |\n| Invariants | 3 passed, 0 failed |\n| Alerts | 2 clear, 0 triggered |\n| Snapshots | 6 |\n\n## Steps\n\n- ✅ `boot-fakenet` — mock-fakenet profile ready at 127.0.0.1:5555 _(gRPC endpoint configured at 127.0.0.1:5555)_; b372b28166c370df -> b372b28166c370df\n- ✅ `observe-base-lock` — true _(settlement.observedOnBase == true)_; b372b28166c370df -> f4d229f2f16ad672\n  - settlement.status: initiated -> observed\n  - settlement.observedOnBase: false -> true\n- ✅ `observe-proof` — true _(settlement.proofSeen == true)_; f4d229f2f16ad672 -> 684d36e0fb331cb5\n  - settlement.status: observed -> proof-seen\n  - settlement.proofSeen: false -> true\n- ✅ `finalize-settlement` — finalized _(settlement.status == finalized)_; 684d36e0fb331cb5 -> cb8f95e54b03705e\n  - settlement.status: proof-seen -> finalized\n  - settlement.finalized: false -> true\n- ✅ `peek-alerts` — false _(alerts.failed == false)_; cb8f95e54b03705e -> cb8f95e54b03705e\n\n## Invariants\n\n- ✅ `bridge-terminal-state` — finalized _(expected settlement.status == finalized)_\n- ✅ `proof-seen-before-finalized` — true _(expected settlement.proofSeen == true)_\n- ✅ `no-failure-alert` — false _(expected alerts.failed == false)_\n\n## Alerts\n\n- CLEAR settlement-delayed: false (alerts.delayed == true)\n- CLEAR settlement-failed: false (alerts.failed == true)\n\n## Adapter Observations\n\n- No adapter observations captured.\n\n## State Diffs\n\n- settlement.status: initiated -> finalized\n- settlement.observedOnBase: false -> true\n- settlement.proofSeen: false -> true\n- settlement.finalized: false -> true\n\n## Snapshot Timeline\n\n- Initial state: b372b28166c370df\n- After boot-fakenet: b372b28166c370df\n- After observe-base-lock: f4d229f2f16ad672\n- After observe-proof: 684d36e0fb331cb5\n- After finalize-settlement: cb8f95e54b03705e\n- After peek-alerts: cb8f95e54b03705e\n\n","evidence":{"stateDiffCount":4,"snapshotCount":6,"alertCount":2,"triggeredAlertCount":0,"clearAlertCount":2,"triggeredCriticalAlertCount":0,"triggeredWarningAlertCount":0,"triggeredInfoAlertCount":0,"environmentMode":"mock-fakenet","grpcEndpoint":"127.0.0.1:5555","environmentNoteCount":2,"nextActionCount":4,"firstNextAction":"Replace mock poke and peek execution with local fakenet adapter calls.","invariantPackCount":0,"invariantPackIds":[],"invariantPackDomains":[],"firstInvariantPackPath":"","changedPaths":["settlement.status","settlement.observedOnBase","settlement.proofSeen","settlement.finalized"],"markdownPreview":"# ✅ Bridge Settlement Monitor Lab Report"}}