{"entry":{"fixtureId":"token-issuance-v0","appSlug":"token-issuance","appName":"Token Issuance","reportId":"lab_token-issuance-v0_20260605165557221","generatedAt":"2026-06-05T16:55:57.221Z","status":"pass","jsonPath":"/bundle/server-functions/default/.nocklab/token-issuance.report.json","markdownPath":"/bundle/server-functions/default/.nocklab/token-issuance.report.md","reportHash":"sha256:a7f0b2aebd17a3c5e727072e56d612da7a93b178c9e5bda598bd54c2b378c1ed","snapshotRoot":"cd7cc46d9b8d0f59","badgeCandidate":{"id":"badge-candidate-token-issuance","label":"Token Issuance Verification Candidate","reportSlug":"token-issuance","fixtureId":"token-issuance-v0","status":"ready","signatureStatus":"unsigned","evidence":{"reportHash":"sha256:a7f0b2aebd17a3c5e727072e56d612da7a93b178c9e5bda598bd54c2b378c1ed","snapshotRoot":"cd7cc46d9b8d0f59","invariantPacks":["token-issuance-core-v0"]}},"stepsPassed":5,"stepsTotal":5,"invariantsPassed":6,"invariantsTotal":6,"alertsTriggered":0,"snapshotsCaptured":6,"adapterObservationCount":0,"invariantPackCount":1},"report":{"reportId":"lab_token-issuance-v0_20260605165557221","fixtureId":"token-issuance-v0","generatedAt":"2026-06-05T16:55:57.221Z","app":{"name":"Token Issuance","slug":"token-issuance","version":"0.1.0","kernel":"mock-token-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 token issuance lifecycle for future native token compatibility reports.","Focuses on issuer authority, metadata, and supply accounting."]},"summary":{"status":"pass","stepsPassed":5,"stepsFailed":0,"invariantsPassed":6,"invariantsFailed":0,"alertsClear":0,"alertsTriggered":0,"snapshotsCaptured":6,"durationMs":85},"invariantPacks":[{"id":"token-issuance-core-v0","name":"Token Issuance Core","domain":"token-issuance","version":"0.1.0","path":"../packs/tokens.invariants.json"}],"steps":[{"id":"boot-fakenet","type":"fakenet","title":"Boot mock token 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":"16abe5e4a6a9235c","afterHash":"16abe5e4a6a9235c","stateDiffs":[],"durationMs":19},{"id":"mint-treasury-allocation","type":"poke","title":"Issuer mints treasury allocation","status":"pass","actor":"issuer","target":"/token/mint","expectation":"token.totalSupply == 1250","observed":"1250","beforeHash":"16abe5e4a6a9235c","afterHash":"77c8cd088df78654","stateDiffs":[{"path":"token.totalSupply","before":"1000","after":"1250"},{"path":"token.balances.treasury","before":"0","after":"250"},{"path":"token.issuance.status","before":"draft","after":"minted"},{"path":"token.issuance.events","before":"[]","after":"[{\"type\":\"minted\",\"actor\":\"issuer\",\"amount\":250}]"}],"durationMs":26},{"id":"distribute-holder-allocation","type":"poke","title":"Treasury distributes holder allocation","status":"pass","actor":"treasury","target":"/token/transfer","expectation":"token.balances.holder == 100","observed":"100","beforeHash":"77c8cd088df78654","afterHash":"22a29172eb9b7906","stateDiffs":[{"path":"token.balances.treasury","before":"250","after":"150"},{"path":"token.balances.holder","before":"0","after":"100"},{"path":"token.issuance.events","before":"[{\"type\":\"minted\",\"actor\":\"issuer\",\"amount\":250}]","after":"[{\"type\":\"minted\",\"actor\":\"issuer\",\"amount\":250},{\"type\":\"distributed\",\"actor\":\"treasury\",\"amount\":100}]"}],"durationMs":33},{"id":"finalize-token-issuance","type":"poke","title":"Issuer finalizes token issuance","status":"pass","actor":"issuer","target":"/token/finalize","expectation":"token.issuance.status == finalized","observed":"finalized","beforeHash":"22a29172eb9b7906","afterHash":"cd7cc46d9b8d0f59","stateDiffs":[{"path":"token.issuance.status","before":"minted","after":"finalized"},{"path":"token.issuance.events","before":"[{\"type\":\"minted\",\"actor\":\"issuer\",\"amount\":250},{\"type\":\"distributed\",\"actor\":\"treasury\",\"amount\":100}]","after":"[{\"type\":\"minted\",\"actor\":\"issuer\",\"amount\":250},{\"type\":\"distributed\",\"actor\":\"treasury\",\"amount\":100},{\"type\":\"finalized\",\"actor\":\"issuer\"}]"}],"durationMs":40},{"id":"peek-token-metadata","type":"peek","title":"Read token metadata","status":"pass","target":"/token/metadata","expectation":"token.metadata.name == Mock Token","observed":"Mock Token","beforeHash":"cd7cc46d9b8d0f59","afterHash":"cd7cc46d9b8d0f59","stateDiffs":[],"durationMs":47}],"invariants":[{"id":"token-supply-conserved","title":"Token balances conserve total supply","severity":"critical","status":"pass","observed":"total=1250, supply=1250","expected":"token.balances sum equals token.totalSupply"},{"id":"token-issuance-finalized","title":"Token issuance reaches finalized state","severity":"critical","status":"pass","observed":"finalized","expected":"token.issuance.status == finalized"},{"id":"token-metadata-decimals-stable","title":"Token decimal metadata remains stable","severity":"medium","status":"pass","observed":"6","expected":"token.metadata.decimals == 6"},{"id":"token-authorized-actors","title":"Token pokes are performed by issuance authorities","severity":"high","status":"pass","observed":"3/3 poke actors authorized","expected":"actors in [issuer, treasury]"},{"id":"token-final-total-supply","title":"Token total supply matches minted allocation","severity":"critical","status":"pass","observed":"1250","expected":"token.totalSupply == 1250"},{"id":"token-no-failure-alert","title":"Token failure alert remains clear","severity":"critical","status":"pass","observed":"false","expected":"alerts.failed == false"}],"alerts":[],"adapterObservations":[],"stateSnapshots":[{"label":"Initial state","stateHash":"16abe5e4a6a9235c","state":{"token":{"symbol":"MOCK","totalSupply":1000,"maxSupply":2000,"mintAuthority":"issuer","burnAuthority":"issuer","metadata":{"name":"Mock Token","decimals":6},"balances":{"issuer":1000,"treasury":0,"holder":0},"issuance":{"status":"draft","events":[]}},"alerts":{"failed":false}}},{"label":"After boot-fakenet","stateHash":"16abe5e4a6a9235c","state":{"token":{"symbol":"MOCK","totalSupply":1000,"maxSupply":2000,"mintAuthority":"issuer","burnAuthority":"issuer","metadata":{"name":"Mock Token","decimals":6},"balances":{"issuer":1000,"treasury":0,"holder":0},"issuance":{"status":"draft","events":[]}},"alerts":{"failed":false}},"stepId":"boot-fakenet"},{"label":"After mint-treasury-allocation","stateHash":"77c8cd088df78654","state":{"token":{"symbol":"MOCK","totalSupply":1250,"maxSupply":2000,"mintAuthority":"issuer","burnAuthority":"issuer","metadata":{"name":"Mock Token","decimals":6},"balances":{"issuer":1000,"treasury":250,"holder":0},"issuance":{"status":"minted","events":[{"type":"minted","actor":"issuer","amount":250}]}},"alerts":{"failed":false}},"stepId":"mint-treasury-allocation"},{"label":"After distribute-holder-allocation","stateHash":"22a29172eb9b7906","state":{"token":{"symbol":"MOCK","totalSupply":1250,"maxSupply":2000,"mintAuthority":"issuer","burnAuthority":"issuer","metadata":{"name":"Mock Token","decimals":6},"balances":{"issuer":1000,"treasury":150,"holder":100},"issuance":{"status":"minted","events":[{"type":"minted","actor":"issuer","amount":250},{"type":"distributed","actor":"treasury","amount":100}]}},"alerts":{"failed":false}},"stepId":"distribute-holder-allocation"},{"label":"After finalize-token-issuance","stateHash":"cd7cc46d9b8d0f59","state":{"token":{"symbol":"MOCK","totalSupply":1250,"maxSupply":2000,"mintAuthority":"issuer","burnAuthority":"issuer","metadata":{"name":"Mock Token","decimals":6},"balances":{"issuer":1000,"treasury":150,"holder":100},"issuance":{"status":"finalized","events":[{"type":"minted","actor":"issuer","amount":250},{"type":"distributed","actor":"treasury","amount":100},{"type":"finalized","actor":"issuer"}]}},"alerts":{"failed":false}},"stepId":"finalize-token-issuance"},{"label":"After peek-token-metadata","stateHash":"cd7cc46d9b8d0f59","state":{"token":{"symbol":"MOCK","totalSupply":1250,"maxSupply":2000,"mintAuthority":"issuer","burnAuthority":"issuer","metadata":{"name":"Mock Token","decimals":6},"balances":{"issuer":1000,"treasury":150,"holder":100},"issuance":{"status":"finalized","events":[{"type":"minted","actor":"issuer","amount":250},{"type":"distributed","actor":"treasury","amount":100},{"type":"finalized","actor":"issuer"}]}},"alerts":{"failed":false}},"stepId":"peek-token-metadata"}],"stateDiffs":[{"path":"token.totalSupply","before":"1000","after":"1250"},{"path":"token.balances.treasury","before":"0","after":"150"},{"path":"token.balances.holder","before":"0","after":"100"},{"path":"token.issuance.status","before":"draft","after":"finalized"},{"path":"token.issuance.events","before":"[]","after":"[{\"type\":\"minted\",\"actor\":\"issuer\",\"amount\":250},{\"type\":\"distributed\",\"actor\":\"treasury\",\"amount\":100},{\"type\":\"finalized\",\"actor\":\"issuer\"}]"}],"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":"# Token Issuance Lab Report\n\n- Report: lab_token-issuance-v0_20260605165557221\n- Fixture: token-issuance-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- PASS boot-fakenet: mock-fakenet profile ready at 127.0.0.1:5555 (gRPC endpoint configured at 127.0.0.1:5555); 16abe5e4a6a9235c -> 16abe5e4a6a9235c\n- PASS mint-treasury-allocation: 1250 (token.totalSupply == 1250); 16abe5e4a6a9235c -> 77c8cd088df78654\n- PASS distribute-holder-allocation: 100 (token.balances.holder == 100); 77c8cd088df78654 -> 22a29172eb9b7906\n- PASS finalize-token-issuance: finalized (token.issuance.status == finalized); 22a29172eb9b7906 -> cd7cc46d9b8d0f59\n- PASS peek-token-metadata: Mock Token (token.metadata.name == Mock Token); cd7cc46d9b8d0f59 -> cd7cc46d9b8d0f59\n\n## Invariants\n\n- PASS token-supply-conserved: total=1250, supply=1250 expected token.balances sum equals token.totalSupply\n- PASS token-issuance-finalized: finalized expected token.issuance.status == finalized\n- PASS token-metadata-decimals-stable: 6 expected token.metadata.decimals == 6\n- PASS token-authorized-actors: 3/3 poke actors authorized expected actors in [issuer, treasury]\n- PASS token-final-total-supply: 1250 expected token.totalSupply == 1250\n- PASS token-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- token.totalSupply: 1000 -> 1250\n- token.balances.treasury: 0 -> 150\n- token.balances.holder: 0 -> 100\n- token.issuance.status: draft -> finalized\n- token.issuance.events: [] -> [{\"type\":\"minted\",\"actor\":\"issuer\",\"amount\":250},{\"type\":\"distributed\",\"actor\":\"treasury\",\"amount\":100},{\"type\":\"finalized\",\"actor\":\"issuer\"}]\n\n## Snapshot Timeline\n\n- Initial state: 16abe5e4a6a9235c\n- After boot-fakenet: 16abe5e4a6a9235c\n- After mint-treasury-allocation: 77c8cd088df78654\n- After distribute-holder-allocation: 22a29172eb9b7906\n- After finalize-token-issuance: cd7cc46d9b8d0f59\n- After peek-token-metadata: cd7cc46d9b8d0f59\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":["token-issuance-core-v0"],"invariantPackDomains":["token-issuance"],"firstInvariantPackPath":"../packs/tokens.invariants.json","changedPaths":["token.totalSupply","token.balances.treasury","token.balances.holder","token.issuance.status","token.issuance.events"],"markdownPreview":"# Token Issuance Lab Report"}}