{"entry":{"fixtureId":"payment-flow-v0","appSlug":"payment-flow","appName":"Payment Flow","reportId":"lab_payment-flow-v0_20260605165557212","generatedAt":"2026-06-05T16:55:57.212Z","status":"pass","jsonPath":"/bundle/server-functions/default/.nocklab/payment-flow.report.json","markdownPath":"/bundle/server-functions/default/.nocklab/payment-flow.report.md","reportHash":"sha256:4cade57672628cbe3441d134eff67d6c589a8d94c70ff989a61da26d67430c91","snapshotRoot":"3a6d6bff59cb624f","badgeCandidate":{"id":"badge-candidate-payment-flow","label":"Payment Flow Verification Candidate","reportSlug":"payment-flow","fixtureId":"payment-flow-v0","status":"ready","signatureStatus":"unsigned","evidence":{"reportHash":"sha256:4cade57672628cbe3441d134eff67d6c589a8d94c70ff989a61da26d67430c91","snapshotRoot":"3a6d6bff59cb624f","invariantPacks":["payments-core-v0"]}},"stepsPassed":5,"stepsTotal":5,"invariantsPassed":5,"invariantsTotal":5,"alertsTriggered":0,"snapshotsCaptured":6,"adapterObservationCount":0,"invariantPackCount":1},"report":{"reportId":"lab_payment-flow-v0_20260605165557212","fixtureId":"payment-flow-v0","generatedAt":"2026-06-05T16:55:57.212Z","app":{"name":"Payment Flow","slug":"payment-flow","version":"0.1.0","kernel":"mock-payment-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 payment lifecycle for escrowed settlement runs.","Uses invariant packs to prove payment safety conditions before a real adapter exists."]},"summary":{"status":"pass","stepsPassed":5,"stepsFailed":0,"invariantsPassed":5,"invariantsFailed":0,"alertsClear":0,"alertsTriggered":0,"snapshotsCaptured":6,"durationMs":85},"invariantPacks":[{"id":"payments-core-v0","name":"Payments Core","domain":"payments","version":"0.1.0","path":"../packs/payments.invariants.json"}],"steps":[{"id":"boot-fakenet","type":"fakenet","title":"Boot mock payment 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":"08337dad0704df79","afterHash":"08337dad0704df79","stateDiffs":[],"durationMs":19},{"id":"lock-customer-funds","type":"poke","title":"Customer locks payment funds","status":"pass","actor":"customer","target":"/payment/lock","expectation":"payment.status == locked","observed":"locked","beforeHash":"08337dad0704df79","afterHash":"e135b8264951963f","stateDiffs":[{"path":"ledger.balances.customer","before":"2500","after":"1300"},{"path":"ledger.balances.escrow","before":"0","after":"1200"},{"path":"payment.status","before":"created","after":"locked"},{"path":"payment.events","before":"[]","after":"[{\"type\":\"locked\",\"actor\":\"customer\"}]"}],"durationMs":26},{"id":"merchant-accepts-payment","type":"poke","title":"Merchant accepts payment terms","status":"pass","actor":"merchant","target":"/payment/accept","expectation":"payment.receiptId == receipt-001","observed":"receipt-001","beforeHash":"e135b8264951963f","afterHash":"9c21c9c8ddf8f839","stateDiffs":[{"path":"payment.status","before":"locked","after":"accepted"},{"path":"payment.receiptId","before":"null","after":"receipt-001"},{"path":"payment.events","before":"[{\"type\":\"locked\",\"actor\":\"customer\"}]","after":"[{\"type\":\"locked\",\"actor\":\"customer\"},{\"type\":\"accepted\",\"actor\":\"merchant\"}]"}],"durationMs":33},{"id":"release-to-merchant","type":"poke","title":"Escrow releases settled payment","status":"pass","actor":"escrow-agent","target":"/payment/release","expectation":"ledger.balances.merchant == 8700","observed":"8700","beforeHash":"9c21c9c8ddf8f839","afterHash":"3a6d6bff59cb624f","stateDiffs":[{"path":"ledger.balances.merchant","before":"7500","after":"8700"},{"path":"ledger.balances.escrow","before":"1200","after":"0"},{"path":"payment.status","before":"accepted","after":"settled"},{"path":"payment.events","before":"[{\"type\":\"locked\",\"actor\":\"customer\"},{\"type\":\"accepted\",\"actor\":\"merchant\"}]","after":"[{\"type\":\"locked\",\"actor\":\"customer\"},{\"type\":\"accepted\",\"actor\":\"merchant\"},{\"type\":\"settled\",\"actor\":\"escrow-agent\"}]"}],"durationMs":40},{"id":"peek-payment-status","type":"peek","title":"Read settled payment status","status":"pass","target":"/payment","expectation":"payment.status == settled","observed":"settled","beforeHash":"3a6d6bff59cb624f","afterHash":"3a6d6bff59cb624f","stateDiffs":[],"durationMs":47}],"invariants":[{"id":"payments-supply-conserved","title":"Payment ledger conserves supply","severity":"critical","status":"pass","observed":"total=10000, supply=10000","expected":"ledger.balances sum equals ledger.totalSupply"},{"id":"payments-terminal-settled","title":"Payment reaches settled terminal state","severity":"critical","status":"pass","observed":"settled","expected":"payment.status == settled"},{"id":"payments-authorized-actors","title":"Payment pokes are performed by authorized actors","severity":"high","status":"pass","observed":"3/3 poke actors authorized","expected":"actors in [customer, merchant, escrow-agent]"},{"id":"payment-receipt-recorded","title":"Payment settlement records a receipt","severity":"high","status":"pass","observed":"receipt-001","expected":"payment.receiptId == receipt-001"},{"id":"payment-no-failure-alert","title":"Payment failure alert remains clear","severity":"critical","status":"pass","observed":"false","expected":"alerts.failed == false"}],"alerts":[],"adapterObservations":[],"stateSnapshots":[{"label":"Initial state","stateHash":"08337dad0704df79","state":{"ledger":{"totalSupply":10000,"balances":{"merchant":7500,"customer":2500,"escrow":0}},"payment":{"status":"created","amount":1200,"receiptId":null,"events":[]},"alerts":{"failed":false}}},{"label":"After boot-fakenet","stateHash":"08337dad0704df79","state":{"ledger":{"totalSupply":10000,"balances":{"merchant":7500,"customer":2500,"escrow":0}},"payment":{"status":"created","amount":1200,"receiptId":null,"events":[]},"alerts":{"failed":false}},"stepId":"boot-fakenet"},{"label":"After lock-customer-funds","stateHash":"e135b8264951963f","state":{"ledger":{"totalSupply":10000,"balances":{"merchant":7500,"customer":1300,"escrow":1200}},"payment":{"status":"locked","amount":1200,"receiptId":null,"events":[{"type":"locked","actor":"customer"}]},"alerts":{"failed":false}},"stepId":"lock-customer-funds"},{"label":"After merchant-accepts-payment","stateHash":"9c21c9c8ddf8f839","state":{"ledger":{"totalSupply":10000,"balances":{"merchant":7500,"customer":1300,"escrow":1200}},"payment":{"status":"accepted","amount":1200,"receiptId":"receipt-001","events":[{"type":"locked","actor":"customer"},{"type":"accepted","actor":"merchant"}]},"alerts":{"failed":false}},"stepId":"merchant-accepts-payment"},{"label":"After release-to-merchant","stateHash":"3a6d6bff59cb624f","state":{"ledger":{"totalSupply":10000,"balances":{"merchant":8700,"customer":1300,"escrow":0}},"payment":{"status":"settled","amount":1200,"receiptId":"receipt-001","events":[{"type":"locked","actor":"customer"},{"type":"accepted","actor":"merchant"},{"type":"settled","actor":"escrow-agent"}]},"alerts":{"failed":false}},"stepId":"release-to-merchant"},{"label":"After peek-payment-status","stateHash":"3a6d6bff59cb624f","state":{"ledger":{"totalSupply":10000,"balances":{"merchant":8700,"customer":1300,"escrow":0}},"payment":{"status":"settled","amount":1200,"receiptId":"receipt-001","events":[{"type":"locked","actor":"customer"},{"type":"accepted","actor":"merchant"},{"type":"settled","actor":"escrow-agent"}]},"alerts":{"failed":false}},"stepId":"peek-payment-status"}],"stateDiffs":[{"path":"ledger.balances.merchant","before":"7500","after":"8700"},{"path":"ledger.balances.customer","before":"2500","after":"1300"},{"path":"payment.status","before":"created","after":"settled"},{"path":"payment.receiptId","before":"null","after":"receipt-001"},{"path":"payment.events","before":"[]","after":"[{\"type\":\"locked\",\"actor\":\"customer\"},{\"type\":\"accepted\",\"actor\":\"merchant\"},{\"type\":\"settled\",\"actor\":\"escrow-agent\"}]"}],"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":"# Payment Flow Lab Report\n\n- Report: lab_payment-flow-v0_20260605165557212\n- Fixture: payment-flow-v0\n- Status: pass\n- Steps: 5 passed, 0 failed\n- Invariants: 5 passed, 0 failed\n- Alerts: 0 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); 08337dad0704df79 -> 08337dad0704df79\n- PASS lock-customer-funds: locked (payment.status == locked); 08337dad0704df79 -> e135b8264951963f\n- PASS merchant-accepts-payment: receipt-001 (payment.receiptId == receipt-001); e135b8264951963f -> 9c21c9c8ddf8f839\n- PASS release-to-merchant: 8700 (ledger.balances.merchant == 8700); 9c21c9c8ddf8f839 -> 3a6d6bff59cb624f\n- PASS peek-payment-status: settled (payment.status == settled); 3a6d6bff59cb624f -> 3a6d6bff59cb624f\n\n## Invariants\n\n- PASS payments-supply-conserved: total=10000, supply=10000 expected ledger.balances sum equals ledger.totalSupply\n- PASS payments-terminal-settled: settled expected payment.status == settled\n- PASS payments-authorized-actors: 3/3 poke actors authorized expected actors in [customer, merchant, escrow-agent]\n- PASS payment-receipt-recorded: receipt-001 expected payment.receiptId == receipt-001\n- PASS payment-no-failure-alert: false expected alerts.failed == false\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.merchant: 7500 -> 8700\n- ledger.balances.customer: 2500 -> 1300\n- payment.status: created -> settled\n- payment.receiptId: null -> receipt-001\n- payment.events: [] -> [{\"type\":\"locked\",\"actor\":\"customer\"},{\"type\":\"accepted\",\"actor\":\"merchant\"},{\"type\":\"settled\",\"actor\":\"escrow-agent\"}]\n\n## Snapshot Timeline\n\n- Initial state: 08337dad0704df79\n- After boot-fakenet: 08337dad0704df79\n- After lock-customer-funds: e135b8264951963f\n- After merchant-accepts-payment: 9c21c9c8ddf8f839\n- After release-to-merchant: 3a6d6bff59cb624f\n- After peek-payment-status: 3a6d6bff59cb624f\n\n","evidence":{"stateDiffCount":5,"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":["payments-core-v0"],"invariantPackDomains":["payments"],"firstInvariantPackPath":"../packs/payments.invariants.json","changedPaths":["ledger.balances.merchant","ledger.balances.customer","payment.status","payment.receiptId","payment.events"],"markdownPreview":"# Payment Flow Lab Report"}}