{"entry":{"fixtureId":"bridge-delayed-v0","appSlug":"bridge-delayed-alert","appName":"Bridge Delayed Alert","reportId":"lab_bridge-delayed-v0_20260605165557207","generatedAt":"2026-06-05T16:55:57.207Z","status":"warn","jsonPath":"/bundle/server-functions/default/.nocklab/bridge-delayed.report.json","markdownPath":"/bundle/server-functions/default/.nocklab/bridge-delayed.report.md","reportHash":"sha256:3685d7324976fccf213c2b5492897cf239e93a9d97efe5bd83d7c199a3b0c2d4","snapshotRoot":"81036a3844183134","badgeCandidate":{"id":"badge-candidate-bridge-delayed-alert","label":"Bridge Delayed Alert Verification Candidate","reportSlug":"bridge-delayed-alert","fixtureId":"bridge-delayed-v0","status":"watch","signatureStatus":"unsigned","evidence":{"reportHash":"sha256:3685d7324976fccf213c2b5492897cf239e93a9d97efe5bd83d7c199a3b0c2d4","snapshotRoot":"81036a3844183134","invariantPacks":[]}},"stepsPassed":3,"stepsTotal":3,"invariantsPassed":2,"invariantsTotal":2,"alertsTriggered":1,"snapshotsCaptured":4,"adapterObservationCount":0,"invariantPackCount":0},"report":{"reportId":"lab_bridge-delayed-v0_20260605165557207","fixtureId":"bridge-delayed-v0","generatedAt":"2026-06-05T16:55:57.207Z","app":{"name":"Bridge Delayed Alert","slug":"bridge-delayed-alert","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 alert-state reports.","This fixture intentionally triggers a warning, not a failing strict exit."]},"summary":{"status":"warn","stepsPassed":3,"stepsFailed":0,"invariantsPassed":2,"invariantsFailed":0,"alertsClear":1,"alertsTriggered":1,"snapshotsCaptured":4,"durationMs":51},"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":"5603da2e160a12bd","afterHash":"5603da2e160a12bd","stateDiffs":[],"durationMs":19},{"id":"age-settlement","type":"bridge","title":"Age settlement past delay threshold","status":"pass","target":"/settlement","expectation":"alerts.delayed == true","observed":"true","beforeHash":"5603da2e160a12bd","afterHash":"81036a3844183134","stateDiffs":[{"path":"settlement.status","before":"observed","after":"delayed"},{"path":"settlement.ageBlocks","before":"18","after":"32"},{"path":"alerts.delayed","before":"false","after":"true"}],"durationMs":26},{"id":"peek-delay-state","type":"peek","title":"Read delayed alert state","status":"pass","target":"/alerts","expectation":"settlement.status == delayed","observed":"delayed","beforeHash":"81036a3844183134","afterHash":"81036a3844183134","stateDiffs":[],"durationMs":33}],"invariants":[{"id":"bridge-status-delayed","title":"Bridge reaches delayed state","severity":"medium","status":"pass","observed":"delayed","expected":"settlement.status == delayed"},{"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":"triggered","observed":"true","condition":"alerts.delayed == true","message":"Settlement is delayed and needs operator attention."},{"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":"5603da2e160a12bd","state":{"settlement":{"status":"observed","observedOnBase":true,"proofSeen":false,"finalized":false,"amount":250,"ageBlocks":18},"alerts":{"delayed":false,"failed":false}}},{"label":"After boot-fakenet","stateHash":"5603da2e160a12bd","state":{"settlement":{"status":"observed","observedOnBase":true,"proofSeen":false,"finalized":false,"amount":250,"ageBlocks":18},"alerts":{"delayed":false,"failed":false}},"stepId":"boot-fakenet"},{"label":"After age-settlement","stateHash":"81036a3844183134","state":{"settlement":{"status":"delayed","observedOnBase":true,"proofSeen":false,"finalized":false,"amount":250,"ageBlocks":32},"alerts":{"delayed":true,"failed":false}},"stepId":"age-settlement"},{"label":"After peek-delay-state","stateHash":"81036a3844183134","state":{"settlement":{"status":"delayed","observedOnBase":true,"proofSeen":false,"finalized":false,"amount":250,"ageBlocks":32},"alerts":{"delayed":true,"failed":false}},"stepId":"peek-delay-state"}],"stateDiffs":[{"path":"settlement.status","before":"observed","after":"delayed"},{"path":"settlement.ageBlocks","before":"18","after":"32"},{"path":"alerts.delayed","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 Delayed Alert Lab Report\n\n- Report: lab_bridge-delayed-v0_20260605165557207\n- Fixture: bridge-delayed-v0\n- Status: warn\n- Steps: 3 passed, 0 failed\n- Invariants: 2 passed, 0 failed\n- Alerts: 1 clear, 1 triggered\n- Snapshots: 4\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); 5603da2e160a12bd -> 5603da2e160a12bd\n- PASS age-settlement: true (alerts.delayed == true); 5603da2e160a12bd -> 81036a3844183134\n- PASS peek-delay-state: delayed (settlement.status == delayed); 81036a3844183134 -> 81036a3844183134\n\n## Invariants\n\n- PASS bridge-status-delayed: delayed expected settlement.status == delayed\n- PASS no-failure-alert: false expected alerts.failed == false\n\n## Alerts\n\n- TRIGGERED settlement-delayed: true (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: observed -> delayed\n- settlement.ageBlocks: 18 -> 32\n- alerts.delayed: false -> true\n\n## Snapshot Timeline\n\n- Initial state: 5603da2e160a12bd\n- After boot-fakenet: 5603da2e160a12bd\n- After age-settlement: 81036a3844183134\n- After peek-delay-state: 81036a3844183134\n\n","evidence":{"stateDiffCount":3,"snapshotCount":4,"alertCount":2,"triggeredAlertCount":1,"clearAlertCount":1,"triggeredCriticalAlertCount":0,"triggeredWarningAlertCount":1,"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.ageBlocks","alerts.delayed"],"markdownPreview":"# Bridge Delayed Alert Lab Report"}}