{"entry":{"fixtureId":"bridge-settlement-v0","appSlug":"bridge-settlement-monitor","appName":"Bridge Settlement Monitor","reportId":"lab_bridge-settlement-v0_20260605165557201","generatedAt":"2026-06-05T16:55:57.201Z","status":"pass","jsonPath":"/bundle/server-functions/default/.nocklab/bridge-settlement.report.json","markdownPath":"/bundle/server-functions/default/.nocklab/bridge-settlement.report.md","reportHash":"sha256:2b22341ef4554ddc0ae39355377909d3a5b80e01483abb63361951c16474dba3","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","signatureStatus":"unsigned","evidence":{"reportHash":"sha256:2b22341ef4554ddc0ae39355377909d3a5b80e01483abb63361951c16474dba3","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_20260605165557201","fixtureId":"bridge-settlement-v0","generatedAt":"2026-06-05T16:55:57.201Z","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},"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- Report: lab_bridge-settlement-v0_20260605165557201\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- PASS boot-fakenet: mock-fakenet profile ready at 127.0.0.1:5555 (gRPC endpoint configured at 127.0.0.1:5555); b372b28166c370df -> b372b28166c370df\n- PASS observe-base-lock: true (settlement.observedOnBase == true); b372b28166c370df -> f4d229f2f16ad672\n- PASS observe-proof: true (settlement.proofSeen == true); f4d229f2f16ad672 -> 684d36e0fb331cb5\n- PASS finalize-settlement: finalized (settlement.status == finalized); 684d36e0fb331cb5 -> cb8f95e54b03705e\n- PASS peek-alerts: false (alerts.failed == false); cb8f95e54b03705e -> cb8f95e54b03705e\n\n## Invariants\n\n- PASS bridge-terminal-state: finalized expected settlement.status == finalized\n- PASS proof-seen-before-finalized: true expected settlement.proofSeen == true\n- PASS 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"}}