{"version":"v0","service":"nocksperimental","canonicalBaseUrl":"https://nocksperimental.com","publishedAt":"2026-06-05T16:38:26.558Z","endpoints":[{"id":"registry","path":"/api/registry","description":"Public registry manifest","url":"https://nocksperimental.com/api/registry"},{"id":"registry-checkpoint","path":"/api/registry/checkpoint","description":"Registry integrity checkpoint","url":"https://nocksperimental.com/api/registry/checkpoint"},{"id":"verification-index","path":"/api/verify","description":"Verification endpoint index","url":"https://nocksperimental.com/api/verify"},{"id":"health","path":"/api/health","description":"Public runtime readiness probe","url":"https://nocksperimental.com/api/health"},{"id":"local-fakenet-readiness","path":"/api/fakenet","description":"Local fakenet readiness summary","url":"https://nocksperimental.com/api/fakenet"},{"id":"bring-your-own-fakenet","path":"/api/fakenet/connect","description":"Bring your own fakenet connection profile","url":"https://nocksperimental.com/api/fakenet/connect"},{"id":"local-fakenet-evidence","path":"/api/fakenet/evidence","description":"Local fakenet evidence capsule","url":"https://nocksperimental.com/api/fakenet/evidence"},{"id":"fakenet-evidence-submit","path":"/api/fakenet/evidence/submit","description":"Submit bring-your-own fakenet evidence","url":"https://nocksperimental.com/api/fakenet/evidence/submit"},{"id":"local-fakenet-evidence-verifier","path":"/api/fakenet/evidence/verify","description":"Local fakenet evidence verifier","url":"https://nocksperimental.com/api/fakenet/evidence/verify"},{"id":"local-fakenet-commands","path":"/api/fakenet/commands","description":"Local fakenet command kit","url":"https://nocksperimental.com/api/fakenet/commands"},{"id":"local-fakenet-diagnostics","path":"/api/fakenet/diagnostics","description":"Local fakenet diagnostics","url":"https://nocksperimental.com/api/fakenet/diagnostics"},{"id":"local-fakenet-support-bundle","path":"/api/fakenet/support-bundle","description":"Local fakenet support bundle","url":"https://nocksperimental.com/api/fakenet/support-bundle"},{"id":"local-fakenet-support-markdown","path":"/api/fakenet/support-bundle.md","description":"Local fakenet support bundle markdown","url":"https://nocksperimental.com/api/fakenet/support-bundle.md"},{"id":"local-fakenet-runbook","path":"/api/fakenet/runbook.sh","description":"Local fakenet shell runbook","url":"https://nocksperimental.com/api/fakenet/runbook.sh"},{"id":"workspace-evidence","path":"/api/workspaces/launch-lab-private/evidence","description":"Workspace evidence capsule","url":"https://nocksperimental.com/api/workspaces/launch-lab-private/evidence"},{"id":"workspace-upload-policy","path":"/api/workspaces/launch-lab-private/upload-policy","description":"Workspace upload policy","url":"https://nocksperimental.com/api/workspaces/launch-lab-private/upload-policy"},{"id":"workspace-upload-token","path":"/api/workspaces/launch-lab-private/upload-token","description":"Workspace upload token gate","url":"https://nocksperimental.com/api/workspaces/launch-lab-private/upload-token"},{"id":"workspace-upload-token-verifier","path":"/api/workspaces/upload-token/verify","description":"Workspace upload token verifier","url":"https://nocksperimental.com/api/workspaces/upload-token/verify"},{"id":"workspace-evidence-verifier","path":"/api/workspaces/evidence/verify","description":"Workspace evidence verifier","url":"https://nocksperimental.com/api/workspaces/evidence/verify"},{"id":"trust-overview","path":"/api/trust","description":"Trust registry overview","url":"https://nocksperimental.com/api/trust"},{"id":"verified-badges","path":"/api/trust/badges","description":"Verified badge registry","url":"https://nocksperimental.com/api/trust/badges"},{"id":"trust-feed","path":"/api/trust/feed","description":"Chronological trust registry event feed","url":"https://nocksperimental.com/api/trust/feed"},{"id":"generated-reports","path":"/api/reports/generated","description":"Generated lab report index","url":"https://nocksperimental.com/api/reports/generated"},{"id":"registry-updates","path":"/api/trust/updates","description":"Signed trust registry update log","url":"https://nocksperimental.com/api/trust/updates"}],"counts":{"badges":5,"trustConsumers":4,"generatedReports":7,"trustUpdates":4},"latestTrustUpdate":{"status":"verified","rootHash":"root-score-history-v0","signedEntries":4,"validSignatures":4},"modules":[{"rank":1,"name":"NockApp Test Runner","category":"Core testing","horizon":"Now","thesis":"Every serious NockApp will need deterministic local tests before value can safely flow through it.","revenue":["CI subscriptions","Team workspaces","Paid audit reports"],"capitalIntensity":"Low","upside":"High","firstMilestone":"Model a test run with fakenet setup, scripted pokes, peeks, and pass/fail output.","deliverables":["Fakenet profile schema","Scripted interaction format","Run report JSON"]},{"rank":2,"name":"State Replay + Invariants","category":"Security analysis","horizon":"Now","thesis":"The long-term trust layer is not app discovery; it is proving state transitions obey economic invariants.","revenue":["Verification badges","Audit retainers","Private report exports"],"capitalIntensity":"Low","upside":"Very high","firstMilestone":"Define invariant fixtures for conservation, authorization, upgrade migration, and invalid input handling.","deliverables":["Invariant catalog","Snapshot diff format","Shareable report page"]},{"rank":3,"name":"Intent Simulator","category":"Solver tooling","horizon":"Next","thesis":"As intent-based apps emerge, builders will need to simulate solver behavior before exposing real settlement paths.","revenue":["Solver QA plans","Execution-quality reports","Market-maker tooling"],"capitalIntensity":"Low-medium","upside":"Very high","firstMilestone":"Create a mock intent lifecycle from declaration through solver response and settlement result.","deliverables":["Intent fixture schema","Solver replay log","Failure classification"]},{"rank":4,"name":"Bridge + Settlement Monitor","category":"Operations","horizon":"Next","thesis":"Bridge users, funds, and apps need reconciliation, stuck-withdrawal alerts, and proof/status timelines.","revenue":["Ops subscriptions","Alert seats","Treasury monitoring"],"capitalIntensity":"Low-medium","upside":"High","firstMilestone":"Ship a monitor model that tracks a transfer lifecycle and emits alert-ready states.","deliverables":["Transfer timeline","Alert policy schema","Reconciliation report"]},{"rank":5,"name":"Native Token Test Harness","category":"Standards readiness","horizon":"Later","thesis":"Before native tokens get crowded, own the testing surface for issuers, wallets, and protocol integrators.","revenue":["Issuer verification","Wallet compatibility checks","Compliance exports"],"capitalIntensity":"Low","upside":"High","firstMilestone":"Draft token invariants for supply, mint/burn authority, metadata, and transfer behavior.","deliverables":["Token invariant pack","Compatibility checklist","Issuer report"]},{"rank":6,"name":"Compute Benchmark Reports","category":"Compute markets","horizon":"Later","thesis":"Compute brokers will be contested; neutral benchmarking and provider reputation can be built before markets mature.","revenue":["Provider reports","Benchmark leaderboards","Job-quality attestations"],"capitalIntensity":"Medium-high","upside":"Very high","firstMilestone":"Define benchmark report formats without operating hardware or routing live jobs.","deliverables":["Benchmark spec","Provider profile","SLA scoring model"]}],"phases":[{"timeframe":"0-30 days","objective":"Make the wedge concrete.","ship":["Static NockApp Lab dashboard","Run report schema","Invariant catalog v0","Mock fakenet/test-run fixtures"],"proofOfValue":"A developer can understand what would be tested and what report they would get."},{"timeframe":"30-90 days","objective":"Connect to real developer workflows.","ship":["CLI command for local report generation","Fixture-driven peek/poke simulation","CI-friendly JSON and Markdown reports","Bridge monitor model with alert states"],"proofOfValue":"A NockApp repo can run a repeatable check and publish a report artifact."},{"timeframe":"3-6 months","objective":"Become the default pre-audit layer.","ship":["State snapshot diffing","Invariant packs for payments, intents, and token issuance","Hosted report history","Private team workspaces"],"proofOfValue":"Teams use the lab before launch, audits, upgrades, and integrations."},{"timeframe":"6-18 months","objective":"Turn testing data into ecosystem trust infrastructure.","ship":["Verified report badges","Solver execution-quality scoring","Native token compatibility reports","Compute provider benchmark profiles"],"proofOfValue":"Apps, wallets, funds, and providers use Nocksperimental reports as trust signals."}],"parallelTracks":[{"name":"Bridge + Settlement Monitor","whyItMatters":"Bridge activity creates operational pain early: stuck transfers, reconciliation, proof status, and alerts.","sharedCore":"Reuses event ingestion, timelines, report exports, and alert policies.","firstArtifact":"A mock transfer timeline with states for initiated, observed, finalized, delayed, and failed."},{"name":"Native Token Test Harness","whyItMatters":"The native token standard is later on the roadmap, but issuers will need safety checks as soon as it lands.","sharedCore":"Reuses invariant packs, snapshot diffs, and compatibility reports.","firstArtifact":"A supply-conservation and authority-check invariant pack."},{"name":"Intent Simulator","whyItMatters":"Intent-based execution needs simulation before solver networks and private DeFi become production-grade.","sharedCore":"Reuses scripted runs, failure classification, and execution-quality scoring.","firstArtifact":"A fixture format for intent declaration, solver response, proof status, and settlement result."},{"name":"Compute Benchmark Reports","whyItMatters":"Compute markets will be capital intensive; neutral benchmarking lets us enter without owning hardware.","sharedCore":"Reuses report identity, scoring, provider profiles, and verification badges.","firstArtifact":"A benchmark report schema for providers and job classes."}],"invariantCatalog":{"version":"v0","items":[{"id":"state.numeric-min.v0","kind":"numeric-min","name":"Numeric floor","purpose":"Verify a state value never drops below a configured minimum.","requiredFields":["path","min"],"example":"counter >= 0"},{"id":"state.equals.v0","kind":"state-equals","name":"Expected state value","purpose":"Verify a path has an exact expected value after scripted interactions.","requiredFields":["path","equals"],"example":"bridge.status == finalized"},{"id":"actors.poke-declared.v0","kind":"poke-actors-declared","name":"Poke actor declared","purpose":"Verify every poke in the fixture has a declared actor.","requiredFields":[],"example":"2/2 poke steps declare actors from fixture.actors"},{"id":"balances.supply-conserved.v0","kind":"supply-conservation","name":"Supply conservation","purpose":"Verify account balances sum to the declared supply after a run.","requiredFields":["balancesPath","supplyPath"],"example":"sum(balances) == totalSupply"},{"id":"timeline.expected-state.v0","kind":"timeline-state","name":"Expected timeline state","purpose":"Verify an operational lifecycle reaches a required terminal state.","requiredFields":["path","equals"],"example":"settlement.status == finalized"},{"id":"actors.authorized.v0","kind":"authorized-actor","name":"Authorized actor","purpose":"Verify all steps of a type are performed by an allowed actor set.","requiredFields":["actors","stepType"],"example":"all poke actors in [merchant, treasury]"}]},"trustSignals":{"$schema":"../../schemas/nockapp-trust-signal.schema.json","version":"v0","verifiedBadges":[{"id":"badge-payment-flow-verified","label":"Payment Flow Verified","kind":"app-report","status":"verified","reportSlug":"payment-flow","fixtureId":"payment-flow-v0","issuedAt":"2026-05-30T02:00:00.000Z","expiresAt":"2027-05-30T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","evidence":{"reportHash":"sha256:3a6d6bff59cb624f-payment-flow","snapshotRoot":"3a6d6bff59cb624f","signature":"nocklab-sig-payment-flow-v0","invariantPacks":["payments-core-v0"]}},{"id":"badge-payment-flow-legacy","label":"Payment Flow Legacy","kind":"app-report","status":"revoked","reportSlug":"payment-flow","fixtureId":"payment-flow-alpha","issuedAt":"2026-05-20T02:00:00.000Z","expiresAt":"2027-05-20T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","evidence":{"reportHash":"sha256:legacy-payment-flow-alpha","snapshotRoot":"payment-flow-alpha-root","signature":"nocklab-sig-payment-flow-alpha","invariantPacks":["payments-core-v0"]}},{"id":"badge-solver-a-qualified","label":"Solver A Qualified","kind":"solver-score","status":"verified","reportSlug":"intent-settlement","fixtureId":"intent-settlement-v0","issuedAt":"2026-05-30T02:00:00.000Z","expiresAt":"2027-05-30T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","evidence":{"reportHash":"sha256:b84c2c688d08c3c2-intent-settlement","snapshotRoot":"b84c2c688d08c3c2","signature":"nocklab-sig-solver-a-v0","invariantPacks":["intents-core-v0"]}},{"id":"badge-mock-token-compatible","label":"MOCK Token Compatible","kind":"token-compatibility","status":"verified","reportSlug":"token-issuance","fixtureId":"token-issuance-v0","issuedAt":"2026-05-30T02:00:00.000Z","expiresAt":"2027-05-30T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","evidence":{"reportHash":"sha256:cd7cc46d9b8d0f59-token-issuance","snapshotRoot":"cd7cc46d9b8d0f59","signature":"nocklab-sig-token-compatible-v0","invariantPacks":["token-issuance-core-v0"]}},{"id":"badge-compute-provider-alpha","label":"Alpha Compute Benchmark","kind":"compute-benchmark","status":"verified","reportSlug":"compute-benchmark-alpha","fixtureId":"compute-benchmark-profile-v0","issuedAt":"2026-05-30T02:00:00.000Z","expiresAt":"2027-05-30T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","evidence":{"reportHash":"sha256:benchmark-alpha-provider-profile","snapshotRoot":"compute-alpha-jobclass-root","signature":"nocklab-sig-compute-alpha-v0","invariantPacks":[]}}],"badgeIssuanceReceipts":[{"id":"issue-payment-flow-v0","badgeId":"badge-payment-flow-verified","issuedAt":"2026-05-30T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","issuerKeyId":"nocksperimental-registry-ed25519-dev-v0","payloadDigest":"sha256:issue-payment-flow-v0-3a6d6bff59cb624f","signature":"ed25519-dev-sig-issue-payment-flow-v0","signedPayload":{"badgeId":"badge-payment-flow-verified","status":"verified","reportHash":"sha256:3a6d6bff59cb624f-payment-flow","snapshotRoot":"3a6d6bff59cb624f","issuedAt":"2026-05-30T02:00:00.000Z","expiresAt":"2027-05-30T02:00:00.000Z"},"verification":{"status":"valid","algorithm":"ed25519-devnet-v0","checkedAt":"2026-05-30T02:10:00.000Z"}},{"id":"issue-payment-flow-alpha","badgeId":"badge-payment-flow-legacy","issuedAt":"2026-05-20T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","issuerKeyId":"nocksperimental-registry-ed25519-dev-v0","payloadDigest":"sha256:issue-payment-flow-alpha-payment-flow-alpha-root","signature":"ed25519-dev-sig-issue-payment-flow-alpha","signedPayload":{"badgeId":"badge-payment-flow-legacy","status":"verified","reportHash":"sha256:legacy-payment-flow-alpha","snapshotRoot":"payment-flow-alpha-root","issuedAt":"2026-05-20T02:00:00.000Z","expiresAt":"2027-05-20T02:00:00.000Z"},"verification":{"status":"valid","algorithm":"ed25519-devnet-v0","checkedAt":"2026-05-20T02:10:00.000Z"}},{"id":"issue-solver-a-v0","badgeId":"badge-solver-a-qualified","issuedAt":"2026-05-30T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","issuerKeyId":"nocksperimental-registry-ed25519-dev-v0","payloadDigest":"sha256:issue-intent-settlement-v0-b84c2c688d08c3c2","signature":"ed25519-dev-sig-issue-solver-a-v0","signedPayload":{"badgeId":"badge-solver-a-qualified","status":"verified","reportHash":"sha256:b84c2c688d08c3c2-intent-settlement","snapshotRoot":"b84c2c688d08c3c2","issuedAt":"2026-05-30T02:00:00.000Z","expiresAt":"2027-05-30T02:00:00.000Z"},"verification":{"status":"valid","algorithm":"ed25519-devnet-v0","checkedAt":"2026-05-30T02:10:00.000Z"}},{"id":"issue-token-compatible-v0","badgeId":"badge-mock-token-compatible","issuedAt":"2026-05-30T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","issuerKeyId":"nocksperimental-registry-ed25519-dev-v0","payloadDigest":"sha256:issue-token-issuance-v0-cd7cc46d9b8d0f59","signature":"ed25519-dev-sig-issue-token-compatible-v0","signedPayload":{"badgeId":"badge-mock-token-compatible","status":"verified","reportHash":"sha256:cd7cc46d9b8d0f59-token-issuance","snapshotRoot":"cd7cc46d9b8d0f59","issuedAt":"2026-05-30T02:00:00.000Z","expiresAt":"2027-05-30T02:00:00.000Z"},"verification":{"status":"valid","algorithm":"ed25519-devnet-v0","checkedAt":"2026-05-30T02:10:00.000Z"}},{"id":"issue-compute-alpha-v0","badgeId":"badge-compute-provider-alpha","issuedAt":"2026-05-30T02:00:00.000Z","issuer":"Nocksperimental Trust Registry","issuerKeyId":"nocksperimental-registry-ed25519-dev-v0","payloadDigest":"sha256:issue-compute-alpha-v0-compute-alpha-jobclass-root","signature":"ed25519-dev-sig-issue-compute-alpha-v0","signedPayload":{"badgeId":"badge-compute-provider-alpha","status":"verified","reportHash":"sha256:benchmark-alpha-provider-profile","snapshotRoot":"compute-alpha-jobclass-root","issuedAt":"2026-05-30T02:00:00.000Z","expiresAt":"2027-05-30T02:00:00.000Z"},"verification":{"status":"valid","algorithm":"ed25519-devnet-v0","checkedAt":"2026-05-30T02:10:00.000Z"}}],"badgeRevocations":[{"id":"revocation-payment-flow-legacy-v0","badgeId":"badge-payment-flow-legacy","statusBeforeRevocation":"verified","revokedAt":"2026-05-30T02:05:00.000Z","revokedBy":"Nocksperimental Trust Registry","reason":"Superseded by payment-flow-v0 evidence bundle.","replacementBadgeId":"badge-payment-flow-verified","evidence":{"reportHash":"sha256:3a6d6bff59cb624f-payment-flow","snapshotRoot":"3a6d6bff59cb624f","signature":"nocklab-sig-revoke-payment-flow-legacy-v0"}}],"solverScorecards":[{"id":"solver-score-solver-a-v0","solverSlug":"solver-a","solverName":"Solver A","status":"qualified","score":94,"grade":"A","reportSlug":"intent-settlement","fixtureId":"intent-settlement-v0","metrics":{"fillRate":0.99,"failureRate":0,"medianSettlementMs":740,"proofLatencyMs":1180,"replayCount":128},"signals":["settles intent lifecycle","records chosen solver","keeps failure alert clear","passes replay determinism check"]}],"tokenCompatibilityReports":[{"id":"token-compat-mock-v0","tokenSymbol":"MOCK","issuerWorkspace":"issuer-upgrade-private","status":"compatible","score":96,"reportSlug":"token-issuance","fixtureId":"token-issuance-v0","badgeId":"badge-mock-token-compatible","wallets":[{"name":"Reference Wallet","status":"pass","notes":"Reads metadata, total supply, holder balance, and transfer events."},{"name":"Treasury Wallet","status":"pass","notes":"Accepts issuer and treasury authority model."},{"name":"Indexer Wallet","status":"pass","notes":"Can display issuance lifecycle and stable decimal metadata."}],"requirements":{"supplyConserved":true,"metadataStable":true,"authorizedIssuance":true,"transferCompatible":true}}],"computeBenchmarkProfiles":[{"id":"compute-profile-alpha-v0","providerSlug":"alpha-compute","providerName":"Alpha Compute","status":"qualified","score":91,"benchmarkReportSlug":"compute-benchmark-alpha","badgeId":"badge-compute-provider-alpha","jobClasses":[{"name":"noun-eval-small","score":94,"p50Ms":180,"p95Ms":420,"reproducibility":0.995},{"name":"proof-batch-medium","score":89,"p50Ms":1280,"p95Ms":2440,"reproducibility":0.982},{"name":"state-replay-large","score":90,"p50Ms":3120,"p95Ms":6100,"reproducibility":0.976}],"sla":{"uptime":0.998,"failureRate":0.004,"sampleSize":512}}],"trustConsumers":[{"id":"consumer-payments-app","name":"Payment Flow App","category":"app","uses":[{"kind":"badge","badgeId":"badge-payment-flow-verified","reportSlug":"payment-flow","purpose":"Display launch readiness to users before routing value."}]},{"id":"consumer-reference-wallet","name":"Reference Wallet","category":"wallet","uses":[{"kind":"token-compatibility","compatibilityReportId":"token-compat-mock-v0","purpose":"Gate token listing by compatibility score and issuer authority evidence."}]},{"id":"consumer-audit-fund","name":"Audit Readiness Fund","category":"fund","uses":[{"kind":"solver-score","scorecardId":"solver-score-solver-a-v0","purpose":"Screen solver quality before routing intent flow."},{"kind":"badge","badgeId":"badge-payment-flow-verified","reportSlug":"payment-flow","purpose":"Require verified reports before integration diligence."}]},{"id":"consumer-alpha-provider","name":"Alpha Compute","category":"provider","uses":[{"kind":"compute-benchmark","benchmarkProfileId":"compute-profile-alpha-v0","purpose":"Publish neutral benchmark evidence for provider reputation."}]}]},"sampleReport":{"reportId":"lab_hello_counter_001","fixtureId":"hello-counter-v0","generatedAt":"2026-05-30T00:00:00.000Z","app":{"name":"Hello Counter","slug":"hello-counter","version":"0.0.1","kernel":"hoon-counter-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":["Modeled after the official local fakenet flow.","This report is mock-backed until the adapter can call a live node."]},"summary":{"status":"pass","stepsPassed":4,"stepsFailed":0,"invariantsPassed":4,"invariantsFailed":0,"alertsClear":0,"alertsTriggered":0,"snapshotsCaptured":5,"durationMs":128},"invariantPacks":[],"steps":[{"id":"boot-fakenet","type":"fakenet","title":"Boot mock fakenet profile","status":"pass","expectation":"gRPC endpoint configured at 127.0.0.1:5555","observed":"Mock endpoint accepted for deterministic run","beforeHash":"7f278f7d37bf2b99","afterHash":"7f278f7d37bf2b99","stateDiffs":[],"durationMs":24},{"id":"poke-increment-alice","type":"poke","title":"Alice increments counter","status":"pass","actor":"alice","target":"/counter","expectation":"counter moves from 0 to 1","observed":"counter=1","beforeHash":"7f278f7d37bf2b99","afterHash":"3e0e6d4db4892e2d","stateDiffs":[{"path":"counter","before":"0","after":"1"}],"durationMs":31},{"id":"poke-increment-bob","type":"poke","title":"Bob increments counter","status":"pass","actor":"bob","target":"/counter","expectation":"counter moves from 1 to 2","observed":"counter=2","beforeHash":"3e0e6d4db4892e2d","afterHash":"937aeb078db9aa10","stateDiffs":[{"path":"counter","before":"1","after":"2"},{"path":"balances.alice","before":"1000","after":"700"},{"path":"balances.bob","before":"0","after":"300"}],"durationMs":29},{"id":"peek-counter","type":"peek","title":"Read counter value","status":"pass","target":"/counter","expectation":"peek returns 2","observed":"2","beforeHash":"937aeb078db9aa10","afterHash":"937aeb078db9aa10","stateDiffs":[],"durationMs":44}],"invariants":[{"id":"counter-non-negative","title":"Counter is never negative","severity":"critical","status":"pass","observed":"2","expected":">= 0"},{"id":"counter-final-value","title":"Counter final value matches fixture","severity":"medium","status":"pass","observed":"2","expected":"2"},{"id":"poke-actors-declared","title":"Every poke has a declared actor","severity":"high","status":"pass","observed":"2/2 poke steps declared actors","expected":"all poke steps declare actors"},{"id":"supply-conserved","title":"NOCK-denominated balances conserve supply","severity":"critical","status":"pass","observed":"alice=700, bob=300, total=1000","expected":"totalSupply=1000"}],"alerts":[],"adapterObservations":[],"stateSnapshots":[{"label":"Initial state","stateHash":"7f278f7d37bf2b99","state":{"counter":0,"totalSupply":1000,"balances":{"alice":1000,"bob":0}}},{"label":"After boot-fakenet","stepId":"boot-fakenet","stateHash":"7f278f7d37bf2b99","state":{"counter":0,"totalSupply":1000,"balances":{"alice":1000,"bob":0}}},{"label":"After poke-increment-alice","stepId":"poke-increment-alice","stateHash":"3e0e6d4db4892e2d","state":{"counter":1,"totalSupply":1000,"balances":{"alice":1000,"bob":0}}},{"label":"After poke-increment-bob","stepId":"poke-increment-bob","stateHash":"937aeb078db9aa10","state":{"counter":2,"totalSupply":1000,"balances":{"alice":700,"bob":300}}},{"label":"After peek-counter","stepId":"peek-counter","stateHash":"937aeb078db9aa10","state":{"counter":2,"totalSupply":1000,"balances":{"alice":700,"bob":300}}}],"stateDiffs":[{"path":"counter","before":"0","after":"2"},{"path":"balances.bob","before":"0","after":"300"}],"nextActions":["Replace mock step execution with a local fakenet gRPC adapter.","Persist generated reports under a project workspace.","Add per-app invariant packs for payment, intent, bridge, and token workflows."]}}