{"entry":{"fixtureId":"intent-settlement-v0","appSlug":"intent-settlement","appName":"Intent Settlement","reportId":"lab_intent-settlement-v0_20260610225855207","generatedAt":"2026-06-10T22:58:55.207Z","status":"pass","jsonPath":"/bundle/server-functions/default/.nocklab/intent-settlement.report.json","markdownPath":"/bundle/server-functions/default/.nocklab/intent-settlement.report.md","reportHash":"sha256:3f8b82444e644b014b353c76861abbd08e3b06a5c410b5d1c73f708bd6359328","snapshotRoot":"b84c2c688d08c3c2","badgeCandidate":{"id":"badge-candidate-intent-settlement","label":"Intent Settlement Verification Candidate","reportSlug":"intent-settlement","fixtureId":"intent-settlement-v0","status":"ready","evidenceKind":"model-attested","statusReDerived":"pass","statusConsistent":true,"kernelHash":null,"kernelVerified":false,"baseDeploymentHash":null,"baseVerified":false,"signatureStatus":"unsigned","evidence":{"reportHash":"sha256:3f8b82444e644b014b353c76861abbd08e3b06a5c410b5d1c73f708bd6359328","snapshotRoot":"b84c2c688d08c3c2","invariantPacks":["intents-core-v0"]}},"stepsPassed":5,"stepsTotal":5,"invariantsPassed":6,"invariantsTotal":6,"alertsTriggered":0,"snapshotsCaptured":6,"adapterObservationCount":0,"invariantPackCount":1},"report":{"reportId":"lab_intent-settlement-v0_20260610225855207","fixtureId":"intent-settlement-v0","generatedAt":"2026-06-10T22:58:55.207Z","app":{"name":"Intent Settlement","slug":"intent-settlement","version":"0.1.0","kernel":"mock-intent-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 intent lifecycle from declaration through solver response and settlement.","Uses pack-level invariants to model a future solver QA workflow."]},"summary":{"status":"pass","stepsPassed":5,"stepsFailed":0,"invariantsPassed":6,"invariantsFailed":0,"alertsClear":0,"alertsTriggered":0,"snapshotsCaptured":6,"durationMs":85,"expectRejected":false,"rawStatus":"pass"},"invariantPacks":[{"id":"intents-core-v0","name":"Intent Settlement Core","domain":"intents","version":"0.1.0","path":"../packs/intents.invariants.json","upstreamBasis":{"repo":"nockchain/nockchain","commit":"33ba97b1e206dd89b15c61b72b7802caf2136c18","build":"build-33ba97b1e206dd89b15c61b72b7802caf2136c18","protocolTrack":"intent-settlement"},"sourceAnchors":[]}],"steps":[{"id":"boot-fakenet","type":"fakenet","title":"Boot mock intent 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":"890773812347dc11","afterHash":"890773812347dc11","stateDiffs":[],"durationMs":19},{"id":"declare-intent","type":"poke","title":"User declares an execution intent","status":"pass","actor":"user","target":"/intent/declare","expectation":"intent.status == open","observed":"open","beforeHash":"890773812347dc11","afterHash":"9c90bfd0db39b254","stateDiffs":[{"path":"intent.status","before":"declared","after":"open"},{"path":"intent.events","before":"[]","after":"[{\"type\":\"declared\",\"actor\":\"user\"}]"}],"durationMs":26},{"id":"solver-quotes","type":"poke","title":"Solver responds with executable quote","status":"pass","actor":"solver-a","target":"/intent/quote","expectation":"intent.solver == solver-a","observed":"solver-a","beforeHash":"9c90bfd0db39b254","afterHash":"fa601ac078417ad6","stateDiffs":[{"path":"intent.status","before":"open","after":"quoted"},{"path":"intent.solver","before":"null","after":"solver-a"},{"path":"intent.quote","before":"null","after":"{\"outputAmount\":475,\"fee\":5}"},{"path":"intent.events","before":"[{\"type\":\"declared\",\"actor\":\"user\"}]","after":"[{\"type\":\"declared\",\"actor\":\"user\"},{\"type\":\"quoted\",\"actor\":\"solver-a\"}]"}],"durationMs":33},{"id":"settle-intent","type":"poke","title":"Solver settles the intent","status":"pass","actor":"solver-a","target":"/intent/settle","expectation":"intent.status == settled","observed":"settled","beforeHash":"fa601ac078417ad6","afterHash":"b84c2c688d08c3c2","stateDiffs":[{"path":"ledger.balances.user","before":"1000","after":"1075"},{"path":"ledger.balances.liquidity-pool","before":"5000","after":"4925"},{"path":"intent.status","before":"quoted","after":"settled"},{"path":"intent.settlement","before":"null","after":"{\"result\":\"filled\",\"outputAmount\":475}"},{"path":"intent.events","before":"[{\"type\":\"declared\",\"actor\":\"user\"},{\"type\":\"quoted\",\"actor\":\"solver-a\"}]","after":"[{\"type\":\"declared\",\"actor\":\"user\"},{\"type\":\"quoted\",\"actor\":\"solver-a\"},{\"type\":\"settled\",\"actor\":\"solver-a\"}]"}],"durationMs":40},{"id":"peek-intent-settlement","type":"peek","title":"Read settled intent result","status":"pass","target":"/intent","expectation":"intent.settlement.result == filled","observed":"filled","beforeHash":"b84c2c688d08c3c2","afterHash":"b84c2c688d08c3c2","stateDiffs":[],"durationMs":47}],"invariants":[{"id":"intent-terminal-settled","title":"Intent reaches settled terminal state","severity":"critical","status":"pass","observed":"settled","expected":"intent.status == settled"},{"id":"intent-solver-recorded","title":"Settled intent records the chosen solver","severity":"high","status":"pass","observed":"solver-a","expected":"intent.solver == solver-a"},{"id":"intent-authorized-actors","title":"Intent pokes are performed by authorized actors","severity":"high","status":"pass","observed":"3/3 poke actors authorized","expected":"actors in [user, solver-a]"},{"id":"intent-no-failure-alert","title":"Intent failure alert remains clear","severity":"critical","status":"pass","observed":"false","expected":"alerts.failed == false"},{"id":"intent-ledger-supply-conserved","title":"Intent ledger conserves supply","severity":"critical","status":"pass","observed":"total=6000, supply=6000","expected":"ledger.balances sum equals ledger.totalSupply"},{"id":"intent-settlement-filled","title":"Intent settlement result is filled","severity":"high","status":"pass","observed":"filled","expected":"intent.settlement.result == filled"}],"alerts":[],"adapterObservations":[],"stateSnapshots":[{"label":"Initial state","stateHash":"890773812347dc11","state":{"ledger":{"totalSupply":6000,"balances":{"user":1000,"solver-a":0,"liquidity-pool":5000}},"intent":{"status":"declared","amount":400,"solver":null,"quote":null,"settlement":null,"events":[]},"alerts":{"failed":false}}},{"label":"After boot-fakenet","stateHash":"890773812347dc11","state":{"ledger":{"totalSupply":6000,"balances":{"user":1000,"solver-a":0,"liquidity-pool":5000}},"intent":{"status":"declared","amount":400,"solver":null,"quote":null,"settlement":null,"events":[]},"alerts":{"failed":false}},"stepId":"boot-fakenet"},{"label":"After declare-intent","stateHash":"9c90bfd0db39b254","state":{"ledger":{"totalSupply":6000,"balances":{"user":1000,"solver-a":0,"liquidity-pool":5000}},"intent":{"status":"open","amount":400,"solver":null,"quote":null,"settlement":null,"events":[{"type":"declared","actor":"user"}]},"alerts":{"failed":false}},"stepId":"declare-intent"},{"label":"After solver-quotes","stateHash":"fa601ac078417ad6","state":{"ledger":{"totalSupply":6000,"balances":{"user":1000,"solver-a":0,"liquidity-pool":5000}},"intent":{"status":"quoted","amount":400,"solver":"solver-a","quote":{"outputAmount":475,"fee":5},"settlement":null,"events":[{"type":"declared","actor":"user"},{"type":"quoted","actor":"solver-a"}]},"alerts":{"failed":false}},"stepId":"solver-quotes"},{"label":"After settle-intent","stateHash":"b84c2c688d08c3c2","state":{"ledger":{"totalSupply":6000,"balances":{"user":1075,"solver-a":0,"liquidity-pool":4925}},"intent":{"status":"settled","amount":400,"solver":"solver-a","quote":{"outputAmount":475,"fee":5},"settlement":{"result":"filled","outputAmount":475},"events":[{"type":"declared","actor":"user"},{"type":"quoted","actor":"solver-a"},{"type":"settled","actor":"solver-a"}]},"alerts":{"failed":false}},"stepId":"settle-intent"},{"label":"After peek-intent-settlement","stateHash":"b84c2c688d08c3c2","state":{"ledger":{"totalSupply":6000,"balances":{"user":1075,"solver-a":0,"liquidity-pool":4925}},"intent":{"status":"settled","amount":400,"solver":"solver-a","quote":{"outputAmount":475,"fee":5},"settlement":{"result":"filled","outputAmount":475},"events":[{"type":"declared","actor":"user"},{"type":"quoted","actor":"solver-a"},{"type":"settled","actor":"solver-a"}]},"alerts":{"failed":false}},"stepId":"peek-intent-settlement"}],"stateDiffs":[{"path":"ledger.balances.user","before":"1000","after":"1075"},{"path":"ledger.balances.liquidity-pool","before":"5000","after":"4925"},{"path":"intent.status","before":"declared","after":"settled"},{"path":"intent.solver","before":"null","after":"solver-a"},{"path":"intent.quote","before":"null","after":"{\"outputAmount\":475,\"fee\":5}"},{"path":"intent.settlement","before":"null","after":"{\"result\":\"filled\",\"outputAmount\":475}"},{"path":"intent.events","before":"[]","after":"[{\"type\":\"declared\",\"actor\":\"user\"},{\"type\":\"quoted\",\"actor\":\"solver-a\"},{\"type\":\"settled\",\"actor\":\"solver-a\"}]"}],"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":"# ✅ Intent Settlement Lab Report\n\n> **PASS** — 5/5 steps · 6/6 invariants · 0 alerts · 85ms\n\n| Field | Value |\n| --- | --- |\n| Report | `lab_intent-settlement-v0_20260610225855207` |\n| Fixture | `intent-settlement-v0` |\n| Status | ✅ pass |\n| Steps | 5 passed, 0 failed |\n| Invariants | 6 passed, 0 failed |\n| Alerts | 0 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)_; 890773812347dc11 -> 890773812347dc11\n- ✅ `declare-intent` — open _(intent.status == open)_; 890773812347dc11 -> 9c90bfd0db39b254\n  - intent.status: declared -> open\n  - intent.events: [] -> [{\"type\":\"declared\",\"actor\":\"user\"}]\n- ✅ `solver-quotes` — solver-a _(intent.solver == solver-a)_; 9c90bfd0db39b254 -> fa601ac078417ad6\n  - intent.status: open -> quoted\n  - intent.solver: null -> solver-a\n  - intent.quote: null -> {\"outputAmount\":475,\"fee\":5}\n  - intent.events: [{\"type\":\"declared\",\"actor\":\"user\"}] -> [{\"type\":\"declared\",\"actor\":\"user\"},{\"type\":\"quoted\",\"actor\":\"solver-a\"}]\n- ✅ `settle-intent` — settled _(intent.status == settled)_; fa601ac078417ad6 -> b84c2c688d08c3c2\n  - ledger.balances.user: 1000 -> 1075\n  - ledger.balances.liquidity-pool: 5000 -> 4925\n  - intent.status: quoted -> settled\n  - intent.settlement: null -> {\"result\":\"filled\",\"outputAmount\":475}\n  - intent.events: [{\"type\":\"declared\",\"actor\":\"user\"},{\"type\":\"quoted\",\"actor\":\"solver-a\"}] -> [{\"type\":\"declared\",\"actor\":\"user\"},{\"type\":\"quoted\",\"actor\":\"solver-a\"},{\"type\":\"settled\",\"actor\":\"solver-a\"}]\n- ✅ `peek-intent-settlement` — filled _(intent.settlement.result == filled)_; b84c2c688d08c3c2 -> b84c2c688d08c3c2\n\n## Invariants\n\n- ✅ `intent-terminal-settled` — settled _(expected intent.status == settled)_\n- ✅ `intent-solver-recorded` — solver-a _(expected intent.solver == solver-a)_\n- ✅ `intent-authorized-actors` — 3/3 poke actors authorized _(expected actors in [user, solver-a])_\n- ✅ `intent-no-failure-alert` — false _(expected alerts.failed == false)_\n- ✅ `intent-ledger-supply-conserved` — total=6000, supply=6000 _(expected ledger.balances sum equals ledger.totalSupply)_\n- ✅ `intent-settlement-filled` — filled _(expected intent.settlement.result == filled)_\n\n## Alerts\n\n- No alert policies configured.\n\n## Adapter Observations\n\n- No adapter observations captured.\n\n## State Diffs\n\n- ledger.balances.user: 1000 -> 1075\n- ledger.balances.liquidity-pool: 5000 -> 4925\n- intent.status: declared -> settled\n- intent.solver: null -> solver-a\n- intent.quote: null -> {\"outputAmount\":475,\"fee\":5}\n- intent.settlement: null -> {\"result\":\"filled\",\"outputAmount\":475}\n- intent.events: [] -> [{\"type\":\"declared\",\"actor\":\"user\"},{\"type\":\"quoted\",\"actor\":\"solver-a\"},{\"type\":\"settled\",\"actor\":\"solver-a\"}]\n\n## Snapshot Timeline\n\n- Initial state: 890773812347dc11\n- After boot-fakenet: 890773812347dc11\n- After declare-intent: 9c90bfd0db39b254\n- After solver-quotes: fa601ac078417ad6\n- After settle-intent: b84c2c688d08c3c2\n- After peek-intent-settlement: b84c2c688d08c3c2\n\n","evidence":{"stateDiffCount":7,"snapshotCount":6,"alertCount":0,"triggeredAlertCount":0,"clearAlertCount":0,"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":1,"invariantPackIds":["intents-core-v0"],"invariantPackDomains":["intents"],"firstInvariantPackPath":"../packs/intents.invariants.json","changedPaths":["ledger.balances.user","ledger.balances.liquidity-pool","intent.status","intent.solver","intent.quote","intent.settlement","intent.events"],"markdownPreview":"# ✅ Intent Settlement Lab Report"}}