{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"b334eace-7419-41e4-aff2-84974c5a0e82","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"26c394db9652c9e0bf3f0c2a75fa69e3698e7b791af24929c5eaab1252ca9635","dependsOn":["token_logo","build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"6d419f2ee4d58c8c43547b303bf8e12876171978a2eb9c9e7a60788054a76473","dependsOn":["token_logo","build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"59b9cd6d2d8eadab68af71783f4f9b090d4d2b9a7e1e7dfbcc21236cda002665","dependsOn":["token_logo","build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"15dd3670552dc199e26664749144a1f28519bc4e19f0babf5206772cb3eba0f5","dependsOn":["token_logo","build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"73497fa2da870eaafe18c2aa9c1f1b1a9c71759980e5c22e865fe2c9f5539376","dependsOn":["token_logo","build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"dc902d7109d9bef9c9a861c84e4aedba7157451e4a963a2eeb01466f5a42e690","dependsOn":["token_logo"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6e3e328aa196f6965a2821b098b101e9ff09eef55cdaafaec1d6ea18007b96f6","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6e3e328aa196f6965a2821b098b101e9ff09eef55cdaafaec1d6ea18007b96f6","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"2d83a49e42499aa5991638834469107dbffd3ce54b517621aa78b3cf3f952354","dependsOn":["token_logo","build_contract_project","write_foundry_tests"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"25b75906ee3b121707f72c95a1851d6796ee43aa73fe9af9cefbcb8e214a72cf","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":["tool:image"],"skillHash":"9fa92c5200aa48ce2c9551714aaa720e895a50b88afa3346815752b923cb8378","skillId":"token-logo","tools":["image"]},"key":"token_logo","kind":"code","role":"implement","skillHash":"9fa92c5200aa48ce2c9551714aaa720e895a50b88afa3346815752b923cb8378","skillId":"token-logo","state":"accepted"},{"acceptedSubmissionHash":"61b1a4e24e65ff44b327d2d5294a49942927bdd9f72a3140b1d630cd87c5ffff","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"[SIMD-LAUNCH]\nA custom token: Proof Network (PROOF).\nToken name: Proof Network\nToken symbol: PROOF\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nMinting after launch: none, the supply is fixed forever.\nTransfer rules: plain ERC-20 transfers with no fee, tax or limit.\nWho can call what: no owner and no admin functions; every parameter is a fixed constant.\n\nBuild requirements (mandatory):\n- Context: an ordinary, legitimate token launch on Ethereum. The coin's name, story and theme are branding only; nothing here is real-world harm or offensive security work.\n- A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = \"none\", so the build is reproducible and verifiable: deployed contracts live in src/ and every import resolves to a committed file.\n- Token contract: PROOFToken. No selfdestruct and no delegatecall anywhere. No proxies, no owner, no upgradeability.\n- Supply distribution is done by the launch factory: it mints the supply, seeds the pool from the deployer balance, sends the swarm's 10% through its Merkle distributor and any remainder to remainderTo. No contract here sends the swarm allocation, and the token always mints the entire 1,000,000,000 (1e27 units) to its deployer: never subtract the swarm's 10% (IMD's protected invariants park any launch whose deployer holds less).\n- Chain: Ethereum mainnet (set by the order, not a launch.json field). Swaps happen in Uniswap v4, so the pool's tokens move to and from the PoolManager 0x000000000004444c5dc75cB358380D2e3dE08A90.\n- launch.json top-level keys, exactly: kind (\"custom_token\"), token {contract, name, symbol, decimals, constructorArgs, totalSupply}, contracts ([] if none), pool, economics, notes (one string). No chainId or other keys.\n- launch.json pool: pairedCurrency 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tickSpacing 60, initialPrice \"125270724187523965593206900\" (paired-currency minor units per PROOF minor unit with PROOF as currency0, provenance only; the deployer derives the real opening price from the economics using the deployed currency order). launch.json also carries the economics block below.\n- launch.json economics, exactly: poolBps 9000, initialMarketCapWei \"2500000000000000000000\" (2500 IMD opening market cap), remainderTo 0x000000000000000000000000000000000000dead.","parentJobId":null,"planHash":"06c795d97206f12bcd8655ee7c811302c0db0d283eeb471dd65f3fee354067c3","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"b334eace-7419-41e4-aff2-84974c5a0e82","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1253-proof-network"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51139","feedbackHash":"44874d6c952d136d3293ae20b50470af79efb2b0e45ec82b3bec8afb69f396f9","nodeKey":"audit_economics","submissionHash":"26c394db9652c9e0bf3f0c2a75fa69e3698e7b791af24929c5eaab1252ca9635","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52391","feedbackHash":"1837b9fc2c8f419424b4ed64d32d7fb62006289f70d4e856d291641d7d9b5573","nodeKey":"audit_flow","submissionHash":"6d419f2ee4d58c8c43547b303bf8e12876171978a2eb9c9e7a60788054a76473","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51027","feedbackHash":"55062c4fc70daaf827f86e6e8711eb3cc8b28148d1dec5f52b2bdcee4ec7dfb7","nodeKey":"audit_judge","submissionHash":"59b9cd6d2d8eadab68af71783f4f9b090d4d2b9a7e1e7dfbcc21236cda002665","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50955","feedbackHash":"063cee8416e693c89cf2ec607e922113d0db8a0322c9f85dea8dca60c8029942","nodeKey":"audit_math","submissionHash":"15dd3670552dc199e26664749144a1f28519bc4e19f0babf5206772cb3eba0f5","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50959","feedbackHash":"5f09d7cd94d7d6e282112779b12616ed3ce802f50a80f74738b16cc15c03e278","nodeKey":"audit_permissions","submissionHash":"73497fa2da870eaafe18c2aa9c1f1b1a9c71759980e5c22e865fe2c9f5539376","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51153","feedbackHash":"a824bb97faa32cdabb7ae0404d047549efd23a7590fad4625b714bcfb3899a0c","nodeKey":"build_contract_project","submissionHash":"dc902d7109d9bef9c9a861c84e4aedba7157451e4a963a2eeb01466f5a42e690","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51001","feedbackHash":"a7e560495f396d096fa3bbaa88f2dbcb3324e676c815bc4f32a6f31908d5e302","nodeKey":"manifest","submissionHash":"2d83a49e42499aa5991638834469107dbffd3ce54b517621aa78b3cf3f952354","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51517","feedbackHash":"31e96bcc28897ca6e6dd83f458a0281d78379c5e68e5bf0ab011ebbd62162f5e","nodeKey":"token_logo","submissionHash":"25b75906ee3b121707f72c95a1851d6796ee43aa73fe9af9cefbcb8e214a72cf","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51003","feedbackHash":"bf6c3f4d1b79ec29cf495785345853bd3eb24dbfadbed5bdbddce003a36b33f0","nodeKey":"write_foundry_tests","submissionHash":"61b1a4e24e65ff44b327d2d5294a49942927bdd9f72a3140b1d630cd87c5ffff","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"17a9db3cd33ebed23ebf8b5818b8aa4acf541cbd10ae3a10d39a648df944c491","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3c7630b22a73c1fb","findings":[],"hash":"15dd3670552dc199e26664749144a1f28519bc4e19f0babf5206772cb3eba0f5","nodeId":"bd9f8f50-017e-4b83-8f01-07fd6c6eb47d","outcome":"completed","summary":"The review is complete and the findings file is written. No tracked file was changed.\n\n**Result: no defects found in the assigned area.** The findings file at the repository root holds an empty findings list and nine coverage rows, one for each of the three entry points plus the invariants and manifest numbers I checked.\n\n**What I covered, against the Math Precision, Boundary and Numerical Gap guides:**\n\n- **Arithmetic surface.** The token contains two subtractions and one addition and nothing else. Each subtraction is preceded by the exact comparison that makes it safe. The addition cannot overflow because the sum of all balances is pinned at the 1e27 minted once in the constructor. There is no division, scaling, decimals conversion, downcast, shift or unchecked block, so the rounding and intermediate-overflow checks have no operand to bite on.\n- **Boundaries.** No external calls, no payable or fallback paths, no bytes decoding. The only sentinel branches are the zero-address guards, which revert on both sides including for zero-value transfers.\n- **Edge inputs, verified by a scratch test I ran.** Transfers of balance plus one and of the maximum uint revert without wrapping. Self-transfer of the whole balance is an identity. An allowance equal to the spend ends at zero and the next unit reverts. Only the maximum uint is treated as infinite, and maximum minus one is consumed normally. A revert on the balance check leaves the allowance untouched. Conservation held over 2000 fuzzed eight-hop sequences.\n- **Manifest numbers.** The provenance sqrtPriceX96 is exactly the floor of the value derived from the 2500 IMD opening cap over the 1e27 supply, and sits well inside Uniswap v4's price and tick range in either currency order. The schema, pool and economics values match the order, and the project's own manifest checker passes.\n- **Static-analysis lead.** The aderyn large-numeric-literal line is the compile-time supply constant, which evaluates to exactly the manifest's total supply. Not a defect.\n\n**Not reached or outside scope.** I did not re-audit the vendored v4 PoolManager test fixtures beyond confirming their price and liquidity derivation is consistent in both currency orders. Live-fork behaviour against the deployed PoolManager and IMD remains owed to the launch platform, as the project's test README already states.","treeHash":null,"usage":{"cachedInputTokens":849699,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":12735,"runtime":"claude","turns":21,"wallClockMs":184551}},{"artifacts":[],"attempt":1,"bundleHash":"9715ab0864db8226e5d6b9a956e46fd22d47821a4ad49275c53a98a861df82ee","device":"3803f4e24aa0cff8","findings":[],"hash":"25b75906ee3b121707f72c95a1851d6796ee43aa73fe9af9cefbcb8e214a72cf","nodeId":"592db6c1-bb40-4b95-9595-ed64232de124","outcome":"completed","summary":"Completed the token project, exact launch manifest and five 1024×1024 logo options.\n\nOpenAI image generation drew five drafts; all were retained. Option 2 is saved as `artifacts/logo.png` and passed the 32-pixel circle review. Descriptions, prompts and provenance are in [logos/README.md](/home/imd-worker/.identitymd/work/b334eace-7419-41e4-aff2-84974c5a0e82/592db6c1-bb40-4b95-9595-ed64232de124/logos/README.md).\n\n`forge build` and `forge test` passed: 17 tests, including 2,000 fuzz cases. Live Uniswap swaps were not tested.","treeHash":"fab9e963b7244ba4fcd714cc89a2c5c8a560f94a","usage":{"cachedInputTokens":777728,"inputTokens":58523,"model":"gpt-6-astra","outputTokens":17952,"runtime":"codex","turns":8,"wallClockMs":559672}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8d26cb1a4eaeb75a","findings":[{"citation":"resolved","description":"This is the ERC-20 approve race documented in EIP-20 itself and shared by OpenZeppelin's ERC20; it is reported at info level only so the requester can decide whether to add nothing (recommended for a 'plain ERC-20'), or document that holders should set an allowance to 0 before changing it. No launch flow (factory transfer to the distributor, pool seed through the PoolManager, remainder transfer, swaps) uses approve/transferFrom on this token, so the launch itself is unaffected. Economic impact is limited to a holder who voluntarily approves a non-trusted spender and later reduces the allowance; conservation of supply and all other balances are unaffected.","line":38,"path":"src/PROOFToken.sol","reproduction":"State: Alice holds 1000 PROOF. 1) Alice calls approve(Bob, 100). 2) Alice broadcasts approve(Bob, 50) intending to lower Bob's allowance. 3) Bob sees step 2 in the mempool and submits transferFrom(Alice, Bob, 100) with higher priority; it executes first: allowance -> 0, Alice balance 900. 4) Alice's approve(Bob, 50) executes: allowance -> 50. 5) Bob calls transferFrom(Alice, Bob, 50): succeeds. Expected by Alice: Bob can move at most 50 after the reduction (or at most 100 in total). Actual: Bob moved 150 PROOF. No test in the committed suite covers this ordering (the invariant handler's independent ledger models the same overwrite semantics, so it passes by construction).","severity":"info","snippet":"        allowance[msg.sender][spender] = value;","title":"approve() overwrites allowance in place, so a spender can front-run a reduction and spend old plus new allowance (inherent ERC-20 property, not a deviation from the requested plain ERC-20 design)"}],"hash":"26c394db9652c9e0bf3f0c2a75fa69e3698e7b791af24929c5eaab1252ca9635","nodeId":"d18fce6f-0479-46f4-abae-cd911a13757b","outcome":"completed","summary":"The review is complete. The findings file is valid JSON, the scratch directory is removed, and the working tree has no stray files. The findings file is excluded by the repository's git exclude list, which is the harness's own setting.\n\n**Outcome:** no defect in the Economic Security, Invariant or Flow Gap area. The token is a 62-line fixed-supply ERC-20 with no external calls, no roles, no fee and no mutable parameter, and every flow the launch depends on moves exactly the requested amount.\n\n**What I checked, in depth:**\n- **Conservation.** The constructor credits exactly 1e27 to the factory, totalSupply is a constant with no mutator, and every balance write is a matched debit and credit. Self-transfers re-read storage, so they conserve. The committed 40-test suite including the stateful invariant campaign passes.\n- **Launch flows.** Factory to distributor, distributor to claimant, factory to PoolManager, PoolManager to trader and remainder to the dead address each arrive whole. The token returns true, so Uniswap v4's bool check and balance-delta settle both see the full amount.\n- **Economics in the manifest.** Keys, types, lowercase addresses, constructorArgs matching the parameterless constructor, and the economics block copied verbatim from the order. I reproduced the provenance sqrt price numerically: it yields a 2,500 IMD opening cap over the full supply with PROOF as currency0.\n- **Privilege surface.** Only approve, transfer and transferFrom change state. No fallback, receive, mint, burn, pause or forbidden opcode.\n\n**One info-level note recorded:** the inherent EIP-20 approve race, where a spender front-runs an allowance reduction and spends old plus new allowance. It is standard behaviour shared by OpenZeppelin's ERC20, no launch flow uses approve, and it needs no fix for a \"plain ERC-20\" design. It is in the file with a concrete call sequence so the judge can decide.\n\n**Coverage record:** all three entry points answered, plus rows for the supply invariant, the privilege invariant, the manifest and the v4 flow. The only unreached items are a live-mainnet fork against the deployed PoolManager and IMD, and the platform's own factory, liquidity and distributor contracts, which are not in this tree.","treeHash":null,"usage":{"cachedInputTokens":1001696,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":11573,"runtime":"claude","turns":18,"wallClockMs":194889}},{"artifacts":[],"attempt":1,"bundleHash":"e3148907b89b7581bc6c2c57f285b99f2c369f2b7a1c0a4dcfe4f3e0149e9a73","device":"6156e0902980b6f9","findings":[],"hash":"2d83a49e42499aa5991638834469107dbffd3ce54b517621aa78b3cf3f952354","nodeId":"c8079016-76af-4fc1-9788-c30e922f61d7","outcome":"completed","summary":"Finalized [launch.json](/Users/zhuminquan/.identitymd/work/b334eace-7419-41e4-aff2-84974c5a0e82/c8079016-76af-4fc1-9788-c30e922f61d7/launch.json), preserving the exact token, pool and economics values and clarifying notes.\n\nVerified offline: build succeeded, all 40 Foundry tests and 5 manifest checks passed. Only `launch.json` changed.","treeHash":"9d37fead35277acb652f6200087e89278c78cf88","usage":{"cachedInputTokens":213376,"inputTokens":43675,"model":"gpt-6-astra","outputTokens":1862,"runtime":"codex","turns":3,"wallClockMs":60303}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"61b4050710026370","findings":[{"citation":"resolved","description":"Reported by audit_economics; reproduced by the judge against HEAD 84a130d with a scratch Foundry test (removed afterwards). approve(spender, value) sets the allowance unconditionally, which is exactly what EIP-20 specifies and what OpenZeppelin's ERC20 does; the brief asks for 'plain ERC-20 transfers' and no increaseAllowance/decreaseAllowance helpers, so this is the documented standard race, not a defect in the requested design. No launch flow (factory transfer to the distributor, PoolManager seed, remainder transfer, swaps through the PoolManager) calls approve or transferFrom on this token, so the launch is unaffected. Supply conservation and every other holder's balance are unaffected; only a holder who approves an untrusted spender and later lowers the allowance can be affected, and only up to old + new allowance. Recommended action: none in code; optionally document in README that holders should set an allowance to 0 before changing it to a different non-zero value.","line":38,"path":"src/PROOFToken.sol","reproduction":"State: fresh PROOFToken, deployer transfers 1000 to Alice. 1) prank(Alice): approve(Bob, 100). 2) Alice intends to lower it and broadcasts approve(Bob, 50). 3) Bob orders transferFrom(Alice, Bob, 100) first: allowance[Alice][Bob] = 0, balanceOf[Alice] = 900. 4) Alice's approve(Bob, 50) executes: allowance = 50. 5) prank(Bob): transferFrom(Alice, Bob, 50) succeeds. Expected by Alice: Bob can move at most 100 in total. Actual: balanceOf[Bob] == 150 and balanceOf[Alice] == 850 (confirmed by a scratch test asserting exactly those two values, which passed on this code).","severity":"info","snippet":"        allowance[msg.sender][spender] = value;","title":"approve() overwrites the allowance in place, so a spender can front-run a reduction and spend old plus new allowance (inherent EIP-20 property, not a deviation from the requested plain ERC-20)"},{"citation":"resolved","description":"Reported by audit_flow; reproduced by the judge. README.md line 3 and logos/README.md line 11 both name artifacts/logo.png as the selected wallet mark ('an identical copy of option 2'). The working tree has no artifacts directory, `git ls-files artifacts` is empty and `git log --all -- artifacts` shows no commit ever added it. The selection is still recoverable: logos/provenance.json records walletMark = logos/logo-2.png (sha256 fafdf9dd...), and logos/logo-2.png is committed, so nothing is lost; but a publication step that follows the README link finds nothing. The same README (line 37-39) also describes the suite as 18 tests with a pool test that 'does not simulate AMM pricing', whereas the tree now has 40 tests including an in-place PoolManager seed-and-swap integration (test/PROOFTokenPoolManager.t.sol). Documentation drift only; no token behaviour, manifest field or launch flow is affected. Fix: either commit artifacts/logo.png (copy of logos/logo-2.png) or change both READMEs to point at logos/logo-2.png, and refresh the test paragraph.","line":3,"path":"README.md","reproduction":"State: HEAD 84a130d, clean working tree. Run `ls artifacts/logo.png` and `git ls-files artifacts` at the repository root. Expected: the file named at README.md:3 and logos/README.md:11 exists. Actual: `ls: artifacts: No such file or directory` and `git ls-files` prints nothing. Run `forge test --offline`: 40 tests pass across 4 suites, not the 18 the README describes.","severity":"info","snippet":"This repository contains the fixed-supply token, its launch manifest, and five logo options. The selected image-generated wallet mark is [artifacts/logo.png](artifacts/logo.png); the options and generation record are described in [logos/README.md](logos/README.md).","title":"README and logos/README point to artifacts/logo.png as the selected wallet mark, but no artifacts/ path is committed; README test description is also stale"}],"hash":"59b9cd6d2d8eadab68af71783f4f9b090d4d2b9a7e1e7dfbcc21236cda002665","nodeId":"5244207c-72c4-4fe4-a86a-06025f9e1f41","outcome":"completed","summary":"Review complete. The findings file is written and the tree is otherwise unchanged.\n\n**Outcome:** the PROOFToken launch is clean at the code level. No critical, high, medium or low defect was found. Two info-level specialist findings reproduced and are kept; one static-analysis lead was dropped.\n\n**What I verified**\n\n- The token is a 62-line standalone ERC-20 with a parameterless constructor that mints 1e27 to the deployer. Supply, name, symbol and decimals are constants, there is no owner, mint, burn, pause, fee or external call.\n- All three state-changing entry points trace cleanly. The protected harness's attempt to pull a holder's balance from the factory reverts on allowance as required.\n- I scanned the compiled runtime myself: no DELEGATECALL, CALLCODE, SELFDESTRUCT or any call opcode, and sizes are far below the limits. CREATE2 deployment with an empty constructor needs nothing the factory does not give.\n- The manifest has exactly the required keys, lowercase addresses, the order's pool and economics copied verbatim, and a provenance price consistent with the 2500 IMD cap.\n- The committed suite of 40 tests, including the in-place PoolManager seed and swap, passes offline.\n\n**Findings kept, both info**\n\n1. The approve overwrite race at `src/PROOFToken.sol:38`. I reproduced the specialist's trace in a scratch test, which was removed afterwards. It is inherent EIP-20 behaviour and matches the requested plain design, so it opens no revision.\n2. Both READMEs link the selected wallet mark at `artifacts/logo.png`, which was never committed. The selection is recoverable from `logos/provenance.json`. The README's test description is also stale. Documentation only.\n\n**Dropped:** the aderyn large-numeric-literal line. The literal already uses separators and equals the manifest supply.\n\n**Coverage:** all three entry points answered, plus four invariant rows.","treeHash":null,"usage":{"cachedInputTokens":503124,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":8932,"runtime":"claude","turns":18,"wallClockMs":126056}},{"artifacts":[],"attempt":1,"bundleHash":"97296e649ec2d6df38007e90e70ac05ec31ed802cd0c79beccd13113c033ac76","device":"2d977abd7ffb09d4","findings":[],"hash":"61b1a4e24e65ff44b327d2d5294a49942927bdd9f72a3140b1d630cd87c5ffff","nodeId":"7a586146-3d17-4ed8-a614-065915f80b34","outcome":"completed","summary":"Implemented entirely under `test/`.\n\n- 40 Foundry tests pass, covering failures, fuzzing, invariants, and actual fee-bearing PoolManager swaps.\n- 4,096 randomized invariant calls pass.\n- Token coverage is 100%.\n- Clean offline `forge build` and `forge test` pass.\n- Five manifest/build checks pass.\n\nNo token defects found. Production code and configuration remain unchanged. Live-mainnet fork testing remains unperformed.","treeHash":"aea547ec2f7eaf4b3e8e33a6602b60fd47bf2742","usage":{"cachedInputTokens":1190528,"inputTokens":92731,"model":"gpt-6-astra","outputTokens":24214,"runtime":"codex","turns":7,"wallClockMs":557605}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"743b05d8a235188d","findings":[{"citation":"resolved","description":"Outside the assigned control-flow area; recorded because it is a concrete, verifiable gap in the committed deliverable. README.md line 3 and logos/README.md line 11 both state that the selected wallet mark is `artifacts/logo.png`, 'an identical copy of option 2'. No `artifacts/` directory exists in the working tree, `git ls-files` lists no such path, and `git log --all -- artifacts` is empty, so the file was never committed. The selection is still recoverable from `logos/provenance.json` (`walletMark: logos/logo-2.png`, sha256 fafdf9dd...), so nothing is lost, but any publication step that follows the README link will not find the mark. The same README also describes the test suite as it was before the second contributor's commit (18 tests, pool test 'does not simulate AMM pricing', fuzz runs of 1,000) whereas the tree now has 40 tests including an in-place PoolManager integration; this is documentation drift only. No token behaviour is affected.","line":3,"path":"README.md","reproduction":"State: HEAD 84a130d. Run `ls artifacts/logo.png` or `git ls-files artifacts` at the repository root. Expected: the file the README and logos/README name as the selected wallet mark exists. Actual: `ls: cannot access 'artifacts': No such file or directory`; `git ls-files` returns nothing for that path.","severity":"info","snippet":"This repository contains the fixed-supply token, its launch manifest, and five logo options. The selected image-generated wallet mark is [artifacts/logo.png](artifacts/logo.png); the options and generation record are described in [logos/README.md](logos/README.md).","title":"README links the selected wallet mark at artifacts/logo.png, which is not in the tree"}],"hash":"6d419f2ee4d58c8c43547b303bf8e12876171978a2eb9c9e7a60788054a76473","nodeId":"32a5ff16-eacd-416e-b7f0-d2eb2bb41742","outcome":"completed","summary":"The review is complete. The findings file is valid JSON and no tracked file was changed. Only the untracked `.imd-findings.json` was written.\n\n**Outcome: no defects in the token.** The PROOFToken contract at `src/PROOFToken.sol` is 62 lines with no imports, no external calls and no privileged roles. All three entry points hold under the Execution Trace, Periphery and First Principles guides.\n\n**What I traced**\n\n- **transfer and transferFrom.** Zero sender and receiver revert, the balance is checked before the debit, self-transfer nets to zero, and the credit cannot overflow because the balance sum is pinned at the constant supply. The finite allowance debit is rolled back atomically when the inner transfer reverts. The infinite-allowance sentinel skips the debit, which is standard ERC-20 behaviour.\n- **approve.** Writes one slot and emits one event. The approve-race is inherent to the plain ERC-20 the brief asked for, so it is not reported.\n- **Constructor and supply.** Mints exactly 1e27 to the deployer once, with no swarm subtraction. Supply is a compile-time constant and the ABI exposes no mint, burn, pause, owner or upgrade selector.\n- **Bytecode.** An opcode walk of the compiled runtime found no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL, STATICCALL or CREATE.\n- **Periphery.** The test helpers and the vendored Uniswap v4 PoolManager were checked. The vendored files match upstream commit e50237c apart from formatting and the documented import-path change. There are no submodules and no `lib/` directory, so the offline verifier can resolve every import.\n- **Manifest.** `launch.json` has exactly the six required keys, the pool and economics copied verbatim, and the provenance price matches the derived sqrtPriceX96 for the 2500 IMD cap.\n- **Checks run.** `forge build` with no warnings, all 40 tests passing, `forge fmt --check`, and the repo's own `test/check_launch.py`.\n\n**One info-level note outside my area.** The root README and `logos/README.md` both point to `artifacts/logo.png` as the selected wallet mark, but that file was never committed. The selection is recoverable from `logos/provenance.json`, which names logo-2 as the mark, so nothing is lost. The README also still describes the earlier 18-test suite rather than the current 40-test one.\n\n**Coverage.** All three listed entry points are marked `holds`, plus six invariant and manifest rows. No proof tests were written because nothing reached medium severity or above.","treeHash":null,"usage":{"cachedInputTokens":1059765,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":14657,"runtime":"claude","turns":23,"wallClockMs":243511}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"468e82a89b9bfe18","findings":[],"hash":"73497fa2da870eaafe18c2aa9c1f1b1a9c71759980e5c22e865fe2c9f5539376","nodeId":"937426c9-d2cf-4b99-a796-f7e5d57a6e96","outcome":"completed","summary":"The review is complete and the findings file is written. No tracked file was changed; the untracked entries in the status output are the sandbox's own device nodes and harness directories, not edits of mine.\n\n**Result: no defects found** in the assigned area. The file `.imd-findings.json` holds an empty findings list plus a coverage record with all three ABI entry points marked `holds` and five invariant rows.\n\n**What I checked, from the Access Control, Asymmetry and Trust Gap guides:**\n- The permission map is empty. The compiled ABI exposes only the nine standard ERC-20 functions and a parameterless constructor. There is no owner, modifier, initializer, fallback, receive, payable function, proxy or upgrade path, so every guide item about inconsistent guards, escalation, confused deputies and storage collisions has no surface.\n- The only guards are the caller's balance and the `allowance[from][msg.sender]` slot. Both are enforced on every path. The infinite-allowance skip in transferFrom mirrors OpenZeppelin v5 and is exercised by the suite.\n- transfer and transferFrom share one private `_transfer` with no fee, tax, exemption or caller-class branch, so the factory, distributor and PoolManager flows move exact amounts.\n- The runtime bytecode has no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL, STATICCALL or CREATE opcodes.\n- The constant supply is 1e27, credited whole to msg.sender in the constructor, matching the manifest's totalSupply.\n- launch.json has exactly the required keys, an empty constructorArgs matching the constructor, lowercase addresses, no odd-length hex, and economics copied from the order.\n\n**Re-run locally:** offline build and the 40-test suite (all pass), ABI and bytecode inspection, manifest key checks, the repo's own check_launch.py, and forge fmt check.\n\n**Static-analysis leads:** Slither reported nothing. Aderyn's large-numeric-literal line is the supply constant, which is correct.\n\n**Not reached:** a live-mainnet fork against the deployed PoolManager and IMD token, and the factory and MerkleDistributor code, which are outside this repository.","treeHash":null,"usage":{"cachedInputTokens":567242,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":7394,"runtime":"claude","turns":9,"wallClockMs":130071}},{"artifacts":[],"attempt":1,"bundleHash":"5ab954af83ace9ad03bcdbb7c997535f8e8bdaf274f6745546504b93d3fe525c","device":"294694a214b6ec04","findings":[],"hash":"dc902d7109d9bef9c9a861c84e4aedba7157451e4a963a2eeb01466f5a42e690","nodeId":"98f04bf6-6cbb-4c82-858a-896340f74e1b","outcome":"completed","summary":"Completed on top of the accepted work. Verified PROOFToken and the exact launch manifest; added a transfer-failure smoke test and deployment documentation.\n\nAll checks pass with Solidity 0.8.26:\n\n- `forge build`\n- `forge test` — 18 passed\n- `forge fmt --check`\n\nProtected configuration and dependencies are unchanged. Live pool initialization and swaps remain platform checks.","treeHash":"bb6a1622795a59dee3caf6f99bb59c9d267304e2","usage":{"cachedInputTokens":401152,"inputTokens":72011,"model":"gpt-6-astra","outputTokens":5387,"runtime":"codex","turns":4,"wallClockMs":139443}}],"verification":[{"checks":[{"durationMs":287,"exitCode":0,"name":"build","output":"Compiling 2 files with Solc 0.8.26\nSolc 0.8.26 finished in 245.58ms\nCompiler run successful!\n","passed":true},{"durationMs":279,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 17 tests for test/PROOFToken.t.sol:PROOFTokenTest\n[PASS] testFuzz_DelegatedRoundTrip(uint256,uint256) (runs: 1000, μ: 223405, ~: 224351)\n[PASS] testFuzz_SequencesConserveSupply(bytes32) (runs: 1000, μ: 3424010, ~: 3438708)\n[PASS] test_AdminSelectorsAreAbsentForDeployerAndStrangers() (gas: 568630)\n[PASS] test_ApprovalCanBeOverwrittenAndRevoked() (gas: 141876)\n[PASS] test_ConstructorEmitsOneMint() (gas: 6556)\n[PASS] test_DelegatedSelfTransferConsumesOnlyAllowance() (gas: 98372)\n[PASS] test_EntireSupplyCanMoveWithoutLimits() (gas: 112595)\n[PASS] test_ExactAllowanceIsConsumed() (gas: 113459)\n[PASS] test_FactoryDistributionClaimsAndPoolTransfersAreExact() (gas: 303396)\n[PASS] test_InfiniteAllowanceIsPreserved() (gas: 107873)\n[PASS] test_InsufficientAllowanceCannotMoveTokens() (gas: 89041)\n[PASS] test_InsufficientBalanceRevertsAtomically() (gas: 97880)\n[PASS] test_LaunchMetadataAndEntireSupplyBelongToDeployer() (gas: 37443)\n[PASS] test_RuntimeHasNoForbiddenOpcodes() (gas: 357534)\n[PASS] test_TransferAndApprovalEvents() (gas: 110467)\n[PASS] test_ZeroAndSelfTransfersConserveBalances() (gas: 144317)\n[PASS] test_ZeroRecipientAndSpenderAreRejected() (gas: 166130)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 234.20ms (264.18ms CPU time)\n\nRan 1 test suite in 234.74ms (234.20ms CPU time): 17 tests passed, 0 failed, 0 skipped (17 total tests)\n","passed":true},{"durationMs":105,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PROOFToken.approve(address,uint256)\",\"PROOFToken.transfer(address,uint256)\",\"PROOFToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":22,\"foundry.toml\":10,\"launch.json\":24,\"logos/PROMPTS.md\":23,\"logos/README.md\":13,\"logos/logo-1.png\":4366,\"logos/logo-2.png\":2788,\"logos/logo-3.png\":3354,\"logos/logo-4.png\":6092,\"logos/logo-5.png\":6007,\"logos/provenance.json\":83,\"src/PROOFToken.sol\":62,\"test/PROOFToken.t.sol\":260},\"excluded\":[\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":439,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":217,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/PROOFToken.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"25b75906ee3b121707f72c95a1851d6796ee43aa73fe9af9cefbcb8e214a72cf","verifiedTreeHash":"fab9e963b7244ba4fcd714cc89a2c5c8a560f94a","verifierVersion":"0.1.0+4ba55555"},{"checks":[{"durationMs":1236,"exitCode":0,"name":"build","output":"Compiling 53 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.16s\nCompiler run successful!\n","passed":true},{"durationMs":1074,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 7 tests for test/PROOFTokenPoolManager.t.sol:PROOFTokenPoolManagerTest\n[PASS] testFuzz_ExactInputRoundTripHasNoTokenTax(uint256,bool) (runs: 256, μ: 1548150, ~: 1542232)\n[PASS] test_ExactOutputBuyAndSellSettleWholeAmounts() (gas: 1456380)\n[PASS] test_SingleSidedLaunchBuySellAndCollectFees_PROOFIsCurrency0() (gas: 2000392)\n[PASS] test_SingleSidedLaunchBuySellAndCollectFees_PROOFIsCurrency1() (gas: 2013909)\n[PASS] test_UnfundedSellerCannotCreateTokensThroughSettlement() (gas: 1820045)\n[PASS] test_UnpaidSwapRevertsAndRollsBackOutputAndPoolState() (gas: 1823841)\n[PASS] test_ZeroSwapIsRejectedWithoutMovingTokens() (gas: 946259)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 57.16ms (64.61ms CPU time)\n\nRan 13 tests for test/PROOFTokenEdges.t.sol:PROOFTokenEdgesTest\n[PASS] testFuzz_InsufficientAllowanceIsAtomic(uint256,uint256) (runs: 256, μ: 158129, ~: 158952)\n[PASS] testFuzz_OverdrawRollsBackFiniteAllowance(uint256,uint256) (runs: 256, μ: 186603, ~: 186897)\n[PASS] testFuzz_SelfTransfersStillRequireBalance(uint256) (runs: 256, μ: 195490, ~: 196134)\n[PASS] testFuzz_ZeroRecipientRollsBackEveryAllowance(uint256,uint256) (runs: 256, μ: 103536, ~: 103620)\n[PASS] test_AllowanceIsScopedToBothHolderAndSpender() (gas: 220363)\n[PASS] test_ConstructorMintsToCallingContractNotTransactionOrigin() (gas: 213447)\n[PASS] test_InfiniteApprovalSurvivesRepeatedSpendsButCanBeRevoked() (gas: 273504)\n[PASS] test_MaxUintTransferAndSelfTransferCannotWrapBalances() (gas: 157867)\n[PASS] test_NoFallbackReceiveOrPayableTokenFunction() (gas: 89640)\n[PASS] test_NoHiddenAdministrativeOrBurnSurface() (gas: 927394)\n[PASS] test_OwnerAlsoNeedsAllowanceForTransferFrom() (gas: 137982)\n[PASS] test_ZeroApprovalAndTransferFromStillEmitEvents() (gas: 75389)\n[PASS] test_ZeroSenderAndApproverAreRejected() (gas: 87968)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 57.18ms (53.77ms CPU time)\n\nRan 18 tests for test/PROOFToken.t.sol:PROOFTokenTest\n[PASS] testFuzz_DelegatedRoundTrip(uint256,uint256) (runs: 256, μ: 223984, ~: 224423)\n[PASS] testFuzz_SequencesConserveSupply(bytes32) (runs: 256, μ: 3430599, ~: 3442968)\n[PASS] test_AdminSelectorsAreAbsentForDeployerAndStrangers() (gas: 568542)\n[PASS] test_ApprovalCanBeOverwrittenAndRevoked() (gas: 141876)\n[PASS] test_ConstructorEmitsOneMint() (gas: 6578)\n[PASS] test_DelegatedSelfTransferConsumesOnlyAllowance() (gas: 98372)\n[PASS] test_EntireSupplyCanMoveWithoutLimits() (gas: 112595)\n[PASS] test_ExactAllowanceIsConsumed() (gas: 113459)\n[PASS] test_FactoryDistributionClaimsAndPoolTransfersAreExact() (gas: 303418)\n[PASS] test_InfiniteAllowanceIsPreserved() (gas: 107873)\n[PASS] test_InsufficientAllowanceCannotMoveTokens() (gas: 89041)\n[PASS] test_InsufficientBalanceRevertsAtomically() (gas: 97902)\n[PASS] test_LaunchMetadataAndEntireSupplyBelongToDeployer() (gas: 37465)\n[PASS] test_RuntimeHasNoForbiddenOpcodes() (gas: 357534)\n[PASS] test_TransferAboveBalanceRevertsWithoutFreezingHolder() (gas: 166814)\n[PASS] test_TransferAndApprovalEvents() (gas: 110467)\n[PASS] test_ZeroAndSelfTransfersConserveBalances() (gas: 144317)\n[PASS] test_ZeroRecipientAndSpenderAreRejected() (gas: 166130)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 95.28ms (109.06ms CPU time)\n\nRan 2 tests for test/PROOFTokenInvariant.t.sol:PROOFTokenInvariantTest\n[PASS] invariant_FixedSupplyAndExactBalancesAndAllowances() (runs: 128, calls: 4096, reverts: 0)\n\n╭-------------------+-------------------------+-------+---------+----------╮\n| Contract          | Selector                | Calls | Reverts | Discards |\n+==========================================================================+\n| PROOFTokenHandler | approve                 | 681   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | rejectOverdraw          | 688   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | rejectUnauthorizedSpend | 692   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | rejectZeroRecipient     | 630   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | transfer                | 715   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | transferFrom            | 690   | 0       | 0        |\n╰-------------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_HandlerExercisesSuccessfulAndRejectedActions() (gas: 1262291)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.02s (1.02s CPU time)\n\nRan 4 test suites in 1.02s (1.23s CPU time): 40 tests passed, 0 failed, 0 skipped (40 total tests)\n","passed":true},{"durationMs":143,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PROOFToken.approve(address,uint256)\",\"PROOFToken.transfer(address,uint256)\",\"PROOFToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":39,\"foundry.toml\":10,\"launch.json\":24,\"logos/PROMPTS.md\":23,\"logos/README.md\":13,\"logos/logo-1.png\":4366,\"logos/logo-2.png\":2788,\"logos/logo-3.png\":3354,\"logos/logo-4.png\":6092,\"logos/logo-5.png\":6007,\"logos/provenance.json\":83,\"src/PROOFToken.sol\":62,\"test/PROOFToken.t.sol\":271,\"test/PROOFTokenEdges.t.sol\":223,\"test/PROOFTokenInvariant.t.sol\":172,\"test/PROOFTokenPoolManager.t.sol\":281,\"test/README.md\":51,\"test/check_launch.py\":94,\"test/helpers/TokenTestBase.sol\":45,\"test/helpers/V4Accounts.sol\":124,\"test/vendor/README.md\":17,\"test/vendor/solmate/LICENSE\":661,\"test/vendor/solmate/src/auth/Owned.sol\":44,\"test/vendor/v4-core/licenses/BUSL_LICENSE\":63,\"test/vendor/v4-core/licenses/MIT_LICENSE\":7,\"test/vendor/v4-core/src/ERC6909.sol\":90,\"test/vendor/v4-core/src/ERC6909Claims.sol\":23,\"test/vendor/v4-core/src/Extsload.sol\":64,\"test/vendor/v4-core/src/Exttload.sol\":40,\"test/vendor/v4-core/src/NoDelegateCall.sol\":33,\"test/vendor/v4-core/src/PoolManager.sol\":392,\"test/vendor/v4-core/src/ProtocolFees.sol\":71,\"test/vendor/v4-core/src/interfaces/IExtsload.sol\":21,\"test/vendor/v4-core/src/interfaces/IExttload.sol\":15,\"test/vendor/v4-core/src/interfaces/IHooks.sol\":155,\"test/vendor/v4-core/src/interfaces/IPoolManager.sol\":235,\"test/vendor/v4-core/src/interfaces/IProtocolFees.sol\":52,\"test/vendor/v4-core/src/interfaces/callback/IUnlockCallback.sol\":10,\"test/vendor/v4-core/src/interfaces/external/IERC20Minimal.sol\":48,\"test/vendor/v4-core/src/interfaces/external/IERC6909Claims.sol\":66,\"test/vendor/v4-core/src/libraries/BitMath.sol\":49,\"test/vendor/v4-core/src/libraries/CurrencyDelta.sol\":42,\"test/vendor/v4-core/src/libraries/CurrencyReserves.sol\":39,\"test/vendor/v4-core/src/libraries/CustomRevert.sol\":120,\"test/vendor/v4-core/src/libraries/FixedPoint128.sol\":8,\"test/vendor/v4-core/src/libraries/FixedPoint96.sol\":10,\"test/vendor/v4-core/src/libraries/FullMath.sol\":117,\"test/vendor/v4-core/src/libraries/Hooks.sol\":343,\"test/vendor/v4-core/src/libraries/LPFeeLibrary.sol\":79,\"test/vendor/v4-core/src/libraries/LiquidityMath.sol\":20,\"test/vendor/v4-core/src/libraries/Lock.sol\":28,\"test/vendor/v4-core/src/libraries/NonzeroDeltaCount.sol\":35,\"test/vendor/v4-core/src/libraries/ParseBytes.sol\":29,\"test/vendor/v4-core/src/libraries/Pool.sol\":620,\"test/vendor/v4-core/src/libraries/Position.sol\":103,\"test/vendor/v4-core/src/libraries/ProtocolFeeLibrary.sol\":47,\"test/vendor/v4-core/src/libraries/SafeCast.sol\":60,\"test/vendor/v4-core/src/libraries/SqrtPriceMath.sol\":292,\"test/vendor/v4-core/src/libraries/StateLibrary.sol\":345,\"test/vendor/v4-core/src/libraries/SwapMath.sol\":108,\"test/vendor/v4-core/src/libraries/TickBitmap.sol\":121,\"test/vendor/v4-core/src/libraries/TickMath.sol\":238,\"test/vendor/v4-core/src/libraries/TransientStateLibrary.sol\":48,\"test/vendor/v4-core/src/libraries/UnsafeMath.sol\":29,\"test/vendor/v4-core/src/types/BalanceDelta.sol\":72,\"test/vendor/v4-core/src/types/BeforeSwapDelta.sol\":38,\"test/vendor/v4-core/src/types/Currency.sol\":118,\"test/vendor/v4-core/src/types/PoolId.sol\":17,\"test/vendor/v4-core/src/types/PoolKey.sol\":22,\"test/vendor/v4-core/src/types/Slot0.sol\":95},\"excluded\":[\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2d83a49e42499aa5991638834469107dbffd3ce54b517621aa78b3cf3f952354","verifiedTreeHash":"9d37fead35277acb652f6200087e89278c78cf88","verifierVersion":"0.1.0+4ba55555"},{"checks":[{"durationMs":1308,"exitCode":0,"name":"build","output":"Compiling 53 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.23s\nCompiler run successful!\n","passed":true},{"durationMs":1083,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 7 tests for test/PROOFTokenPoolManager.t.sol:PROOFTokenPoolManagerTest\n[PASS] testFuzz_ExactInputRoundTripHasNoTokenTax(uint256,bool) (runs: 256, μ: 1548705, ~: 1542247)\n[PASS] test_ExactOutputBuyAndSellSettleWholeAmounts() (gas: 1456380)\n[PASS] test_SingleSidedLaunchBuySellAndCollectFees_PROOFIsCurrency0() (gas: 2000392)\n[PASS] test_SingleSidedLaunchBuySellAndCollectFees_PROOFIsCurrency1() (gas: 2013909)\n[PASS] test_UnfundedSellerCannotCreateTokensThroughSettlement() (gas: 1820045)\n[PASS] test_UnpaidSwapRevertsAndRollsBackOutputAndPoolState() (gas: 1823841)\n[PASS] test_ZeroSwapIsRejectedWithoutMovingTokens() (gas: 946259)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 82.21ms (87.88ms CPU time)\n\nRan 13 tests for test/PROOFTokenEdges.t.sol:PROOFTokenEdgesTest\n[PASS] testFuzz_InsufficientAllowanceIsAtomic(uint256,uint256) (runs: 256, μ: 158214, ~: 158952)\n[PASS] testFuzz_OverdrawRollsBackFiniteAllowance(uint256,uint256) (runs: 256, μ: 186431, ~: 186897)\n[PASS] testFuzz_SelfTransfersStillRequireBalance(uint256) (runs: 256, μ: 196001, ~: 196086)\n[PASS] testFuzz_ZeroRecipientRollsBackEveryAllowance(uint256,uint256) (runs: 256, μ: 103523, ~: 103630)\n[PASS] test_AllowanceIsScopedToBothHolderAndSpender() (gas: 220363)\n[PASS] test_ConstructorMintsToCallingContractNotTransactionOrigin() (gas: 213447)\n[PASS] test_InfiniteApprovalSurvivesRepeatedSpendsButCanBeRevoked() (gas: 273504)\n[PASS] test_MaxUintTransferAndSelfTransferCannotWrapBalances() (gas: 157867)\n[PASS] test_NoFallbackReceiveOrPayableTokenFunction() (gas: 89640)\n[PASS] test_NoHiddenAdministrativeOrBurnSurface() (gas: 927394)\n[PASS] test_OwnerAlsoNeedsAllowanceForTransferFrom() (gas: 137982)\n[PASS] test_ZeroApprovalAndTransferFromStillEmitEvents() (gas: 75389)\n[PASS] test_ZeroSenderAndApproverAreRejected() (gas: 87968)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 112.41ms (53.89ms CPU time)\n\nRan 18 tests for test/PROOFToken.t.sol:PROOFTokenTest\n[PASS] testFuzz_DelegatedRoundTrip(uint256,uint256) (runs: 256, μ: 223603, ~: 224471)\n[PASS] testFuzz_SequencesConserveSupply(bytes32) (runs: 256, μ: 3425581, ~: 3444149)\n[PASS] test_AdminSelectorsAreAbsentForDeployerAndStrangers() (gas: 568542)\n[PASS] test_ApprovalCanBeOverwrittenAndRevoked() (gas: 141876)\n[PASS] test_ConstructorEmitsOneMint() (gas: 6578)\n[PASS] test_DelegatedSelfTransferConsumesOnlyAllowance() (gas: 98372)\n[PASS] test_EntireSupplyCanMoveWithoutLimits() (gas: 112595)\n[PASS] test_ExactAllowanceIsConsumed() (gas: 113459)\n[PASS] test_FactoryDistributionClaimsAndPoolTransfersAreExact() (gas: 303418)\n[PASS] test_InfiniteAllowanceIsPreserved() (gas: 107873)\n[PASS] test_InsufficientAllowanceCannotMoveTokens() (gas: 89041)\n[PASS] test_InsufficientBalanceRevertsAtomically() (gas: 97902)\n[PASS] test_LaunchMetadataAndEntireSupplyBelongToDeployer() (gas: 37465)\n[PASS] test_RuntimeHasNoForbiddenOpcodes() (gas: 357534)\n[PASS] test_TransferAboveBalanceRevertsWithoutFreezingHolder() (gas: 166814)\n[PASS] test_TransferAndApprovalEvents() (gas: 110467)\n[PASS] test_ZeroAndSelfTransfersConserveBalances() (gas: 144317)\n[PASS] test_ZeroRecipientAndSpenderAreRejected() (gas: 166130)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 112.51ms (127.26ms CPU time)\n\nRan 2 tests for test/PROOFTokenInvariant.t.sol:PROOFTokenInvariantTest\n[PASS] invariant_FixedSupplyAndExactBalancesAndAllowances() (runs: 128, calls: 4096, reverts: 0)\n\n╭-------------------+-------------------------+-------+---------+----------╮\n| Contract          | Selector                | Calls | Reverts | Discards |\n+==========================================================================+\n| PROOFTokenHandler | approve                 | 660   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | rejectOverdraw          | 679   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | rejectUnauthorizedSpend | 710   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | rejectZeroRecipient     | 690   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | transfer                | 673   | 0       | 0        |\n|-------------------+-------------------------+-------+---------+----------|\n| PROOFTokenHandler | transferFrom            | 684   | 0       | 0        |\n╰-------------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_HandlerExercisesSuccessfulAndRejectedActions() (gas: 1262291)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.03s (1.03s CPU time)\n\nRan 4 test suites in 1.03s (1.33s CPU time): 40 tests passed, 0 failed, 0 skipped (40 total tests)\n","passed":true},{"durationMs":136,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PROOFToken.approve(address,uint256)\",\"PROOFToken.transfer(address,uint256)\",\"PROOFToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":39,\"foundry.toml\":10,\"launch.json\":24,\"logos/PROMPTS.md\":23,\"logos/README.md\":13,\"logos/logo-1.png\":4366,\"logos/logo-2.png\":2788,\"logos/logo-3.png\":3354,\"logos/logo-4.png\":6092,\"logos/logo-5.png\":6007,\"logos/provenance.json\":83,\"src/PROOFToken.sol\":62,\"test/PROOFToken.t.sol\":271,\"test/PROOFTokenEdges.t.sol\":223,\"test/PROOFTokenInvariant.t.sol\":172,\"test/PROOFTokenPoolManager.t.sol\":281,\"test/README.md\":51,\"test/check_launch.py\":94,\"test/helpers/TokenTestBase.sol\":45,\"test/helpers/V4Accounts.sol\":124,\"test/vendor/README.md\":17,\"test/vendor/solmate/LICENSE\":661,\"test/vendor/solmate/src/auth/Owned.sol\":44,\"test/vendor/v4-core/licenses/BUSL_LICENSE\":63,\"test/vendor/v4-core/licenses/MIT_LICENSE\":7,\"test/vendor/v4-core/src/ERC6909.sol\":90,\"test/vendor/v4-core/src/ERC6909Claims.sol\":23,\"test/vendor/v4-core/src/Extsload.sol\":64,\"test/vendor/v4-core/src/Exttload.sol\":40,\"test/vendor/v4-core/src/NoDelegateCall.sol\":33,\"test/vendor/v4-core/src/PoolManager.sol\":392,\"test/vendor/v4-core/src/ProtocolFees.sol\":71,\"test/vendor/v4-core/src/interfaces/IExtsload.sol\":21,\"test/vendor/v4-core/src/interfaces/IExttload.sol\":15,\"test/vendor/v4-core/src/interfaces/IHooks.sol\":155,\"test/vendor/v4-core/src/interfaces/IPoolManager.sol\":235,\"test/vendor/v4-core/src/interfaces/IProtocolFees.sol\":52,\"test/vendor/v4-core/src/interfaces/callback/IUnlockCallback.sol\":10,\"test/vendor/v4-core/src/interfaces/external/IERC20Minimal.sol\":48,\"test/vendor/v4-core/src/interfaces/external/IERC6909Claims.sol\":66,\"test/vendor/v4-core/src/libraries/BitMath.sol\":49,\"test/vendor/v4-core/src/libraries/CurrencyDelta.sol\":42,\"test/vendor/v4-core/src/libraries/CurrencyReserves.sol\":39,\"test/vendor/v4-core/src/libraries/CustomRevert.sol\":120,\"test/vendor/v4-core/src/libraries/FixedPoint128.sol\":8,\"test/vendor/v4-core/src/libraries/FixedPoint96.sol\":10,\"test/vendor/v4-core/src/libraries/FullMath.sol\":117,\"test/vendor/v4-core/src/libraries/Hooks.sol\":343,\"test/vendor/v4-core/src/libraries/LPFeeLibrary.sol\":79,\"test/vendor/v4-core/src/libraries/LiquidityMath.sol\":20,\"test/vendor/v4-core/src/libraries/Lock.sol\":28,\"test/vendor/v4-core/src/libraries/NonzeroDeltaCount.sol\":35,\"test/vendor/v4-core/src/libraries/ParseBytes.sol\":29,\"test/vendor/v4-core/src/libraries/Pool.sol\":620,\"test/vendor/v4-core/src/libraries/Position.sol\":103,\"test/vendor/v4-core/src/libraries/ProtocolFeeLibrary.sol\":47,\"test/vendor/v4-core/src/libraries/SafeCast.sol\":60,\"test/vendor/v4-core/src/libraries/SqrtPriceMath.sol\":292,\"test/vendor/v4-core/src/libraries/StateLibrary.sol\":345,\"test/vendor/v4-core/src/libraries/SwapMath.sol\":108,\"test/vendor/v4-core/src/libraries/TickBitmap.sol\":121,\"test/vendor/v4-core/src/libraries/TickMath.sol\":238,\"test/vendor/v4-core/src/libraries/TransientStateLibrary.sol\":48,\"test/vendor/v4-core/src/libraries/UnsafeMath.sol\":29,\"test/vendor/v4-core/src/types/BalanceDelta.sol\":72,\"test/vendor/v4-core/src/types/BeforeSwapDelta.sol\":38,\"test/vendor/v4-core/src/types/Currency.sol\":118,\"test/vendor/v4-core/src/types/PoolId.sol\":17,\"test/vendor/v4-core/src/types/PoolKey.sol\":22,\"test/vendor/v4-core/src/types/Slot0.sol\":95},\"excluded\":[\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"61b1a4e24e65ff44b327d2d5294a49942927bdd9f72a3140b1d630cd87c5ffff","verifiedTreeHash":"aea547ec2f7eaf4b3e8e33a6602b60fd47bf2742","verifierVersion":"0.1.0+4ba55555"},{"checks":[{"durationMs":312,"exitCode":0,"name":"build","output":"Compiling 2 files with Solc 0.8.26\nSolc 0.8.26 finished in 264.63ms\nCompiler run successful!\n","passed":true},{"durationMs":263,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/PROOFToken.t.sol:PROOFTokenTest\n[PASS] testFuzz_DelegatedRoundTrip(uint256,uint256) (runs: 1000, μ: 223696, ~: 224363)\n[PASS] testFuzz_SequencesConserveSupply(bytes32) (runs: 1000, μ: 3430496, ~: 3443941)\n[PASS] test_AdminSelectorsAreAbsentForDeployerAndStrangers() (gas: 568542)\n[PASS] test_ApprovalCanBeOverwrittenAndRevoked() (gas: 141876)\n[PASS] test_ConstructorEmitsOneMint() (gas: 6578)\n[PASS] test_DelegatedSelfTransferConsumesOnlyAllowance() (gas: 98372)\n[PASS] test_EntireSupplyCanMoveWithoutLimits() (gas: 112595)\n[PASS] test_ExactAllowanceIsConsumed() (gas: 113459)\n[PASS] test_FactoryDistributionClaimsAndPoolTransfersAreExact() (gas: 303418)\n[PASS] test_InfiniteAllowanceIsPreserved() (gas: 107873)\n[PASS] test_InsufficientAllowanceCannotMoveTokens() (gas: 89041)\n[PASS] test_InsufficientBalanceRevertsAtomically() (gas: 97902)\n[PASS] test_LaunchMetadataAndEntireSupplyBelongToDeployer() (gas: 37465)\n[PASS] test_RuntimeHasNoForbiddenOpcodes() (gas: 357534)\n[PASS] test_TransferAboveBalanceRevertsWithoutFreezingHolder() (gas: 166814)\n[PASS] test_TransferAndApprovalEvents() (gas: 110467)\n[PASS] test_ZeroAndSelfTransfersConserveBalances() (gas: 144317)\n[PASS] test_ZeroRecipientAndSpenderAreRejected() (gas: 166130)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 221.22ms (249.44ms CPU time)\n\nRan 1 test suite in 221.92ms (221.22ms CPU time): 18 tests passed, 0 failed, 0 skipped (18 total tests)\n","passed":true},{"durationMs":107,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PROOFToken.approve(address,uint256)\",\"PROOFToken.transfer(address,uint256)\",\"PROOFToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":39,\"foundry.toml\":10,\"launch.json\":24,\"logos/PROMPTS.md\":23,\"logos/README.md\":13,\"logos/logo-1.png\":4366,\"logos/logo-2.png\":2788,\"logos/logo-3.png\":3354,\"logos/logo-4.png\":6092,\"logos/logo-5.png\":6007,\"logos/provenance.json\":83,\"src/PROOFToken.sol\":62,\"test/PROOFToken.t.sol\":273},\"excluded\":[\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"dc902d7109d9bef9c9a861c84e4aedba7157451e4a963a2eeb01466f5a42e690","verifiedTreeHash":"bb6a1622795a59dee3caf6f99bb59c9d267304e2","verifierVersion":"0.1.0+4ba55555"}]}