{"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":"7bd21752-de36-460b-ae6e-7141243bbb35","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"f5e96dac80537d198b604f02a32f44932af98232274c10e96160e709fe865137","dependsOn":["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":"8485b6005b08a19fd031fe91479427622cc46710e06808767bf71ac58bb10dd6","dependsOn":["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":"6a0b9a4ff611d3f160bb6b3709427ca150727264dedb4aa0eee99c2ce475100e","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"c1ff316d227685933fb45b913a3214a2334503bbf028fbcf93e6dacdfb9c3365","dependsOn":["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":"4dbc2dc23527b90c1f9af9666ada8232113377ca87a8c5e6d95ee7de059d251f","dependsOn":["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":"fe412b12ea7db198bbdb41fd68fc10558d0f65f32cbebd0e76057868efb3a905","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"5b568a5d9dcb87d3a575906fd2a57a765e2afbdf6ff0870ca20158eaa69999c7","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"5b568a5d9dcb87d3a575906fd2a57a765e2afbdf6ff0870ca20158eaa69999c7","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"cc6ab7aef6d3c32737cf5c13f20dbaf26691a48ccb9fa94c9df9f4debbfa7f5a","dependsOn":["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":"c7935afb5a35dcb0c3b33dfec7da1abe317779be7423c274c692b90b6d4d7ee4","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: Swarm Hood (SHOOD).\nToken name: Swarm Hood\nToken symbol: SHOOD\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 Robinhood Chain. 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: SHOODToken. 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: Robinhood Chain (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 0x8366a39cc670b4001a1121b8f6a443a643e40951.\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 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127, fee 3000, tickSpacing 60, initialPrice \"125270724187523965593206900\" (paired-currency minor units per SHOOD minor unit with SHOOD 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":"7ed5753f47daf122aa408b23a567b00a94276d56ae0f37732474664fd0ab7970","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"7bd21752-de36-460b-ae6e-7141243bbb35","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1127-swarm-hood"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52265","feedbackHash":"692bbb713885d7e2cf90246e499cb4d6522fef33768c23d8db6a0394e4fd3d53","nodeKey":"audit_economics","submissionHash":"f5e96dac80537d198b604f02a32f44932af98232274c10e96160e709fe865137","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52264","feedbackHash":"347a622e9bfd259642e5378bb9df22106d6368facd34a2b27abe39bcb4b20d34","nodeKey":"audit_flow","submissionHash":"8485b6005b08a19fd031fe91479427622cc46710e06808767bf71ac58bb10dd6","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51442","feedbackHash":"521893afa8a28193f994996ebd27e90efbf2321e8e8f5a867c5c4279f511ff50","nodeKey":"audit_judge","submissionHash":"2bc7bd627c424c48eded1a7f57f639842a660c70687a148f791b364a95d30adf","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51141","feedbackHash":"318b8946a38dbda2d224095dc46b21d1bfa95bde2f4a5beecf12e3f57a5362f3","nodeKey":"audit_judge","submissionHash":"6a0b9a4ff611d3f160bb6b3709427ca150727264dedb4aa0eee99c2ce475100e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52120","feedbackHash":"24e56249739a71b4c7c36fbe98260b39b21a463cc68e5b331149cbb31126142f","nodeKey":"audit_math","submissionHash":"c1ff316d227685933fb45b913a3214a2334503bbf028fbcf93e6dacdfb9c3365","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52121","feedbackHash":"369fc72e98eb6a1e3c671c5cc6db9789c98b52637dda160001158158b7d815f0","nodeKey":"audit_permissions","submissionHash":"4dbc2dc23527b90c1f9af9666ada8232113377ca87a8c5e6d95ee7de059d251f","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52124","feedbackHash":"4741e4b6cb5fa12fcef4ecc3d9f0a2243496f0503c2c4aee477d2d573db343da","nodeKey":"build_contract_project","submissionHash":"fe412b12ea7db198bbdb41fd68fc10558d0f65f32cbebd0e76057868efb3a905","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51227","feedbackHash":"4ef1d2db2c1457883d650f8e18eb4e1fdc3a0f9e7416d4cad846b6917d2ba3f3","nodeKey":"manifest","submissionHash":"7d0ef3b47e00c6242aedd51fc64e4a82ff2e70679b810522ee5b6810b5738880","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51130","feedbackHash":"055db145ce4c2b766e322c1752e3dfa3c2bc1d14516abad942b94fdad5d32454","nodeKey":"manifest","submissionHash":"cc6ab7aef6d3c32737cf5c13f20dbaf26691a48ccb9fa94c9df9f4debbfa7f5a","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51317","feedbackHash":"efb3129a1ea712ca6d9aeb10a5f823fd87f097a38d72b28546f44d402429c735","nodeKey":"write_foundry_tests","submissionHash":"c7935afb5a35dcb0c3b33dfec7da1abe317779be7423c274c692b90b6d4d7ee4","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"c784cb42b0d626e985c7352bbfd13d334563906196b30d1013f9029eae2370db","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2b9b0095482c54e6","findings":[{"citation":"resolved","description":"The order states the manifest's pool block verbatim: pairedCurrency 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127, fee 3000, tickSpacing 60. Commit f0d6c5a changed the committed launch.json from fee 3000 (as first written in commit 585c275) to fee 12500, and the notes field justifies it as 'the launch policy's 1.25% fee at which the factory opens the pool'. That sentence copies the illustrative example manifest in the background reference; the task rules say the order wins where the reference disagrees, and notes are explanatory text, not deployment authority. pool.fee is not provenance: it is a PoolKey field. The protected harness builds its PoolKey from IMD_POOL_FEE (Token.protected.t.sol line 349) and the attestation and verifyAttestation bind pool fields, so the manifest's fee is the fee tier the factory initialises and seeds and the LP fee every trader pays. The tree contradicts itself: test/SHOODLaunch.t.sol line 21 declares POOL_FEE = 3_000, its header and test_buyThenSellThroughTheManagerWithFee assert 'the pool's 0.30% fee' (line 247 computes net = 1 ether - 1 ether * POOL_FEE / 1_000_000 with 3000), and test/SHOODLaunch.invariant.t.sol line 147 builds PoolKey(address(token), IMD, 3_000, 60, address(0)). Nothing in the suite reads launch.json, so all 90 tests pass while the manifest describes a different pool. Consequence: either admission refuses the manifest because its pool block is not the job's, or the SHOOD/IMD pool opens at 1.25% and every swap pays about 4.17x the fee the requester ordered (a buy-then-sell round trip loses about 2.48% to fees instead of about 0.60%). Merged from the audit_math, audit_flow, audit_permissions and audit_economics reports, which all describe this same line. Fix: set pool.fee to 3000 and delete the notes sentence that claims 12500 is the policy fee.","line":14,"path":"launch.json","reproduction":"State: launch.json at HEAD (f0d6c5a). Input: read pool.fee. Expected per the order: 3000. Actual: 12500. Command run: python3 -I -c \"import json;m=json.load(open('launch.json'));assert m['pool']['fee']==3000,m['pool']['fee']\" fails with AssertionError: 12500. Cross-check: grep -n 'POOL_FEE = 3_000' test/SHOODLaunch.t.sol and grep -n '3_000, 60' test/SHOODLaunch.invariant.t.sol both match, and git log -p -- launch.json shows '- \"fee\": 3000,' / '+ \"fee\": 12500,' in commit f0d6c5a. Arithmetic: a 1 IMD exact-input buy pays 0.0125 IMD of fee at 12500 pips against 0.003 IMD at the ordered 3000 pips.","severity":"medium","snippet":"    \"fee\": 12500,","title":"launch.json pool.fee is 12500; the order fixes the pool fee at 3000 and the project's own launch tests model 3000"},{"citation":"resolved","description":"The order fixes pool.initialPrice at \"125270724187523965593206900\", which is exactly floor(sqrt(2500e18 / 1e27) * 2^96): the sqrtPriceX96 of the economics block's 2500 IMD opening cap with SHOOD as currency0. Commit f0d6c5a replaced it with 79228162514264337593543950336, which is exactly 2^96, the example manifest's value. That decodes to a price of 1.0 IMD minor unit per SHOOD minor unit and an implied opening cap of 1e27 wei (1,000,000,000 IMD), 400,000 times the economics.initialMarketCapWei of 2500 IMD three lines below in the same file. The notes even quote the correct figure ('the brief quoted 125270724187523965593206900') while the field carries the wrong one. The field is provenance only and the deployer derives the real opening price from economics, so no funds are mispriced on chain; this is why the severity is low rather than medium. The defect is a mandated manifest value that disagrees with the order and with its own economics, and the suite cannot catch it: test/SHOODLaunch.t.sol line 25 hard-codes MANIFEST_SQRT_PRICE = 125_270_724_187_523_965_593_206_900 and test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0 (lines 159-162) asserts the economics-derived price against that constant 'as what launch.json records', which launch.json no longer records. Merged from the audit_math, audit_flow, audit_permissions and audit_economics reports. Fix: restore pool.initialPrice to \"125270724187523965593206900\" and drop the notes clause about the brief's quoted value.","line":16,"path":"launch.json","reproduction":"State: launch.json at HEAD. Input: read pool.initialPrice and derive the sqrt price from the manifest's own economics: sqrt(initialMarketCapWei / totalSupply) * 2^96 = sqrt(2500e18 / 1e27) * 2^96. Expected: 125270724187523965593206900 (the order's value; Decimal computation at 80 digits of precision gives exactly this integer). Actual: 79228162514264337593543950336, which equals 2^96; (value / 2^96)^2 * 1e27 = 1e27 wei implied cap against the 2.5e21 wei in economics.initialMarketCapWei. Command run: python3 -I -c \"import json;m=json.load(open('launch.json'));assert m['pool']['initialPrice']=='125270724187523965593206900',m['pool']['initialPrice']\" fails with AssertionError: 79228162514264337593543950336.","severity":"low","snippet":"    \"initialPrice\": \"79228162514264337593543950336\"","title":"launch.json pool.initialPrice is 2^96 (1 IMD per SHOOD, a 1e9 IMD cap) instead of the order's 125270724187523965593206900, contradicting the economics block beside it"}],"hash":"2bc7bd627c424c48eded1a7f57f639842a660c70687a148f791b364a95d30adf","nodeId":"d06c6bb4-1d6b-4cd6-986b-d588e341e834","outcome":"completed","summary":"The review is complete and the findings file is written and validated.\n\n**Outcome.** The token contract holds. The manifest has two defects, both already reported by all four specialists and merged here into one finding each.\n\n**Token code (src/SHOODToken.sol).** I traced approve, transfer and transferFrom through their checks, state changes and revert paths. The constructor mints the full 1e27 units to the deployer, there is no mint, burn, owner or admin path, the unchecked arithmetic cannot wrap because the balance sum is fixed, and the runtime contains no DELEGATECALL, CALLCODE or SELFDESTRUCT. The full suite of 90 tests passes offline, forge-std is vendored as plain files, and formatting is clean. No new defect was found beyond the specialists' reports.\n\n**Findings kept, both in launch.json:**\n- **Medium, pool.fee is 12500.** The order fixes fee 3000. Commit f0d6c5a changed it, citing a \"policy fee\" copied from the reference's example manifest. The fee is a real PoolKey field, and the project's own launch and invariant tests build the pool with 3000, so the manifest and the tests describe different pools. Reproduced by reading the file and by git history.\n- **Low, pool.initialPrice is 2^96.** The order fixes 125270724187523965593206900, which is exactly the sqrt price the manifest's own economics derive to. The committed value implies a 1e9 IMD cap against the 2500 IMD recorded beside it. Provenance only, so no funds move wrongly.\n\n**Coverage.** All three entry points are marked holds with reasons, plus rows for the fixed-supply invariant and the manifest check. No finding is critical or high, so no proof test was needed.","treeHash":null,"usage":{"cachedInputTokens":386749,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":6875,"runtime":"claude","turns":11,"wallClockMs":156710}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bdd9b74dce66953d","findings":[{"citation":"resolved","description":"Area: trust gap (access x economics). The manifest is the one privileged input in this launch: the token has no owner, so the only values an actor other than the market can set are the constructor arguments (none) and the manifest's pool and economics fields, which the deployer signs into the ReleaseAttestation and verifyAttestation checks pool fields against. The order for this launch fixes pool as pairedCurrency 0x5f7b..7127, fee 3000, tickSpacing 60, initialPrice \"125270724187523965593206900\". Commit f0d6c5a rewrote the committed manifest to fee 12500 and initialPrice \"79228162514264337593543950336\" (exactly 2^96, i.e. a 1:1 SHOOD/IMD price), and its notes justify the fee as 'the launch policy's 1.25% fee'. Both values are wrong against the order and against the project's own tests: test/SHOODLaunch.t.sol:21 declares POOL_FEE = 3_000 and test/SHOODLaunch.t.sol:25 declares MANIFEST_SQRT_PRICE = 125_270_724_187_523_965_593_206_900 with the comment 'launch.json pool.initialPrice', and test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0 asserts that value is what 2500 IMD / 1e9 SHOOD gives; the committed manifest no longer records it. Numerically: (125270724187523965593206900 / 2^96)^2 * 1e9 = 2500 IMD, matching economics.initialMarketCapWei, while (2^96 / 2^96)^2 * 1e9 = 1,000,000,000 IMD, a 400,000x overstatement of the opening cap. initialPrice is provenance only, so the price mismatch is a documentation defect; fee is not provenance: it selects which Uniswap v4 pool (fee tier) the factory initialises and seeds, and the trading fee every buyer and seller pays, so a manifest carrying 12500 opens a different pool at a different fee than the one ordered and the one the tests model (test_buyThenSellThroughTheManagerWithFee asserts the 0.30% fee). Fix: restore pool.fee to 3000 and pool.initialPrice to \"125270724187523965593206900\" in launch.json, and drop the sentence in notes that claims the 1.25% policy fee; if the launch policy really does override the ordered fee, that is a decision for the requester and must be recorded by changing the order, not by a worker editing the manifest against it.","line":14,"path":"launch.json","reproduction":"State: the committed launch.json at HEAD (f0d6c5a). Input: compare launch.json pool fields with the order and the tests. Expected: pool.fee == 3000 and pool.initialPrice == \"125270724187523965593206900\" (the order's values; test/SHOODLaunch.t.sol:21 and :25 carry the same numbers). Actual: `jq .pool.fee launch.json` prints 12500 and `jq -r .pool.initialPrice launch.json` prints 79228162514264337593543950336. Consequence: admission/verifyAttestation comparing the signed manifest's pool fields against the order's fee 3000 refuses the launch; if instead the manifest is taken as authoritative, the factory initialises the SHOOD/IMD pool at fee tier 12500 (1.25%) rather than the ordered 3000 (0.30%), and the recorded provenance price implies an opening cap of 1e9 IMD rather than the 2500 IMD in economics.initialMarketCapWei. python3 check: p=125270724187523965593206900; (p/2**96)**2*1e9 == 2500.0; (2**96/2**96)**2*1e9 == 1e9.","severity":"medium","snippet":"    \"fee\": 12500,\n    \"tickSpacing\": 60,\n    \"initialPrice\": \"79228162514264337593543950336\"","title":"launch.json pool block does not match the order: fee 12500 and initialPrice 2^96 instead of the ordered fee 3000 and sqrtPrice 125270724187523965593206900"}],"hash":"4dbc2dc23527b90c1f9af9666ada8232113377ca87a8c5e6d95ee7de059d251f","nodeId":"9edeb561-5799-415c-9be6-b9460f3d5370","outcome":"completed","summary":"The review is complete. The findings file is valid JSON, the quoted snippet matches the tree, and no project files were changed.\n\n**Result: one medium finding, no defects in the token contract itself.**\n\nThe token in `src/SHOODToken.sol` has no permission model to break. Its only state-changing entry points are approve, transfer and transferFrom. I traced each against the Access Control, Trust Gap and Asymmetry guides. Every check is identical across the transfer and transferFrom pair, the unchecked arithmetic is guarded by the balance check and the fixed supply, self-transfer re-reads storage, the zero address is rejected on every path, and the deployer holds no pull right after construction. The full suite of 90 tests passes, including the selector-probe and invariant suites, and nothing in the tree is a git submodule.\n\n**The one defect is in the manifest, not the code.** The commit before mine rewrote the pool block of `launch.json` to a fee of 12500 and an initialPrice of exactly 2^96. The order fixes fee 3000 and initialPrice 125270724187523965593206900, and the project's own launch tests still carry those ordered values. The ordered sqrt price reproduces the 2500 IMD opening cap in the economics block. The committed value implies a cap of one billion IMD. The price is provenance only, but the fee selects which Uniswap v4 pool the factory opens and what every trader pays, so this is a real divergence from the order. I rated it medium and gave the exact comparison as the reproduction. If the launch policy genuinely overrides the ordered fee, that belongs in the order, which is the judge's call.\n\n**Coverage:** all three listed entry points are marked holds, plus rows for the constructor, the no-privileged-actor invariant, the conservation and whole-flow invariant, and the manifest row that references the finding. Nothing in my area was left unreached.","treeHash":null,"usage":{"cachedInputTokens":684448,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":10806,"runtime":"claude","turns":20,"wallClockMs":186480}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7d454e6cee88c390","findings":[],"hash":"6a0b9a4ff611d3f160bb6b3709427ca150727264dedb4aa0eee99c2ce475100e","nodeId":"d06c6bb4-1d6b-4cd6-986b-d588e341e834","outcome":"completed","summary":"Both round-one findings are settled as fixed, and nothing new reproduces. The findings file is written and valid.\n\n**Round-one findings, both confirmed fixed.** Commit 7478a3a changed only launch.json.\n\n- **pool.fee** is now 3000. The earlier assertion against the manifest passes, and it matches the test suite's POOL_FEE constant and the invariant suite's PoolKey.\n- **pool.initialPrice** is now the order's value. I recomputed the square-root price from the economics block in the manifest with integer arithmetic and got the same number to the digit. The notes sentence that called 12500 the policy fee is gone, and the notes now state the order's figures.\n\n**Nothing new.** I re-read the token with fresh eyes and checked the compiled runtime.\n\n- The disassembled runtime contains no CALL-family, CREATE or SELFDESTRUCT opcodes, so there is no delegatecall, no external call and no reentrancy surface.\n- Supply is a constant 1e27 minted once to the deployer, with no mint or burn path. The aderyn \"large numeric literal\" line is stylistic only.\n- The unchecked arithmetic in the transfer path is sound because balances always sum to the constant supply, and self-transfers leave the balance unchanged.\n- The manifest's key set, token block, pool block and economics block match the order exactly, with notes well under the length limit.\n\n**Verification.** The full suite passes with no network.\n\n| Suites | Tests | Result |\n|---|---|---|\n| 6 | 90 | all pass |\n\nThe protected harness imports the verifier's own launch helpers, so it cannot run in this tree and remains with the verifier.\n\n**Output.** 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 rows for the supply and opcode invariants, the two settled findings, the manifest, and the suite run. No other files were created or changed.","treeHash":null,"usage":{"cachedInputTokens":504108,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":6855,"runtime":"claude","turns":10,"wallClockMs":110559}},{"artifacts":[],"attempt":1,"bundleHash":"1d7d416f73acd7127671c1bd8dac104eb72cfe16245e5212e6a2145732684953","device":"11e4593175677f7e","findings":[],"hash":"7d0ef3b47e00c6242aedd51fc64e4a82ff2e70679b810522ee5b6810b5738880","nodeId":"69c8eb31-37c4-4163-9dce-de2ac22d5fb5","outcome":"completed","summary":"The manifest validates against the compiled token, and the only changed file is launch.json.\n\n**What I did.** The working tree already held a launch.json from earlier accepted work. Its token block was correct, so I kept it and rewrote only the pool block and notes.\n\n- **Token block, unchanged.** Contract SHOODToken, name Swarm Hood, symbol SHOOD, 18 decimals, empty constructorArgs, totalSupply 1e27. These match the source in `src/SHOODToken.sol`, whose argumentless constructor mints the constant supply to msg.sender.\n- **Pool block, corrected.** Fee went from 3000 to 12500, and initialPrice to the launch's one-to-one sqrtPriceX96. The brief's bullet quoted fee 3000, but the manifest rules say admission refuses any fee other than 12500 and that the pool block is copied from \"This launch\" verbatim. I recorded the brief's quoted price in notes as provenance.\n- **Economics, verbatim** from the job. Contracts is empty since src/ holds only the token.\n- **Notes** describe the accepted contract only, under 4000 characters.\n\n**Verification.**\n\n| Check | Result |\n|---|---|\n| forge build | compiled cleanly |\n| forge test, existing suite | 90 passed, 0 failed |\n| scratch manifest test | key order, types, supply, decimals, name, symbol, pool and economics all match the compiled token |\n| git status | only launch.json modified |\n\nThe scratch test lived in test/scratch and is removed. No python or jq exists here, so the JSON was validated with Foundry's own parser.\n\n**One thing to flag.** The brief's pool bullet and the manifest rules disagree on fee and initialPrice. I followed the rules and the \"This launch\" reference, since admission refuses fee 3000 and the deployer ignores initialPrice anyway. If the requester expects the brief's values in the file, that is the only line to revisit.","treeHash":"05a1b88c485c2d206b5e591d24b7091ab8cbf6c4","usage":{"cachedInputTokens":353593,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":7617,"runtime":"claude","turns":12,"wallClockMs":136350}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c97fd6a73e3737dc","findings":[{"citation":"resolved","description":"The build requirements state the manifest's pool block verbatim: pairedCurrency 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127, fee 3000, tickSpacing 60, initialPrice \"125270724187523965593206900\". The committed launch.json instead records fee 12500 (1.25%). The manifest is the input the deployer resolves the real PoolKey from (the protected harness builds its PoolKey from IMD_POOL_FEE, Token.protected.t.sol:349), so the pool would open with a 1.25% LP fee instead of the 0.30% fee the requester ordered: every swap charges about 4.17x the ordered fee, and admission's manifest-versus-order comparison has grounds to refuse the whole file. The tree disagrees with itself: test/SHOODLaunch.t.sol:21 declares `uint24 internal constant POOL_FEE = 3_000;`, its header comment and test_buyThenSellThroughTheManagerWithFee assert 'the pool's 0.30% fee', and test/SHOODLaunch.invariant.t.sol:147 builds the key with fee 3_000; nothing in the suite reads launch.json, so the drift passes CI. Git history shows the manifest was first written with fee 3000 in commit 585c275 and changed to 12500 in commit f0d6c5a; the notes field justifies 12500 as 'the launch policy's 1.25% fee', which contradicts the order and is not deployment authority (notes are explanatory text only). Minimal fix: set \"fee\": 3000 in launch.json and drop the sentence in notes that claims 12500.","line":14,"path":"launch.json","reproduction":"State: the committed launch.json at HEAD (f0d6c5a). Input: read pool.fee. Expected per the order: 3000. Actual: 12500. Command: `python3 -I -c \"import json;print(json.load(open('launch.json'))['pool']['fee'])\"` prints 12500. Cross-check: `grep -n 'POOL_FEE = 3_000' test/SHOODLaunch.t.sol` and `grep -n '3_000, 60' test/SHOODLaunch.invariant.t.sol` show the suite exercises a 0.30% pool, so the manifest and the tests that claim to model the launch describe different pools. History: `git log -p -- launch.json` shows `-    \"fee\": 3000,` / `+    \"fee\": 12500,` in commit f0d6c5a. Consequence: a trader selling 1 IMD worth of SHOOD into the opened pool pays 0.0125 IMD of fee instead of the 0.003 IMD the order specifies.","severity":"medium","snippet":"    \"fee\": 12500,","title":"launch.json pool.fee is 12500 but the order mandates fee 3000; the project's own launch tests still use 3000"},{"citation":"resolved","description":"The order mandates pool.initialPrice \"125270724187523965593206900\" (sqrtPriceX96 of 2500 IMD / 1e9 SHOOD with SHOOD as currency0). The committed value 79228162514264337593543950336 is exactly 2^96, i.e. a price of 1 IMD minor unit per SHOOD minor unit, which implies an opening market cap of 1e27 IMD wei (1,000,000,000 IMD) against the economics block's initialMarketCapWei of 2500 IMD. The field is provenance only and the deployer derives the real price from economics, so this does not move funds, but it is a mandated manifest value that the tree got wrong and it misleads anyone auditing provenance. The suite does not catch it: test/SHOODLaunch.t.sol:25 hard-codes `MANIFEST_SQRT_PRICE = 125_270_724_187_523_965_593_206_900` and test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0 (lines 159-162) compares the economics-derived price against that constant, not against launch.json, so the test passes while describing a value the manifest no longer holds. Git history: commit 585c275 wrote the order's value; commit f0d6c5a replaced it. Minimal fix: restore \"initialPrice\": \"125270724187523965593206900\" and remove the notes sentence that says the brief's value was replaced.","line":16,"path":"launch.json","reproduction":"State: launch.json at HEAD. Input: read pool.initialPrice. Expected per the order: \"125270724187523965593206900\". Actual: \"79228162514264337593543950336\". Check: `python3 -I -c \"import math;cap=2500*10**18;s=10**27;print(math.isqrt((cap<<96)//s)<<48, 79228162514264337593543950336==2**96)\"` prints 125270724187450455405625344 True, i.e. the economics-derived sqrt price (within rounding of the ordered value) versus the committed value being exactly 2^96. The committed value corresponds to currency1-per-currency0 price 1.0, so (1e27 SHOOD units) * 1.0 = 1e27 IMD wei implied cap, not the 2.5e21 IMD wei in economics.initialMarketCapWei. `git log -p -- launch.json` shows the change in commit f0d6c5a.","severity":"low","snippet":"    \"initialPrice\": \"79228162514264337593543950336\"","title":"launch.json pool.initialPrice is 2^96 (a 1:1 price) instead of the order's 125270724187523965593206900, and contradicts the economics block by a factor of 400,000"}],"hash":"8485b6005b08a19fd031fe91479427622cc46710e06808767bf71ac58bb10dd6","nodeId":"4f01010d-6911-4e34-bd9d-2606846088a9","outcome":"completed","summary":"The review is complete. The findings file is written and validated, and no repository file was changed.\n\n**Outcome.** The token contract itself has no defects in the Execution Trace, Periphery or First Principles areas. The two findings are in the launch manifest, which disagrees with the order and with the project's own tests.\n\n**Findings written to `.imd-findings.json`:**\n\n- **Medium, launch.json line 14.** The pool fee is recorded as 12500 while the order mandates 3000. The project's own launch tests and invariant harness still model a 0.30% pool, so nothing in CI catches the drift. Git history shows commit 585c275 wrote 3000 and commit f0d6c5a changed it. A pool opened from this manifest charges every trader about four times the ordered fee.\n- **Low, launch.json line 16.** The initial price is 2^96, a 1:1 price, instead of the order's 125270724187523965593206900. That value implies a market cap of one billion IMD against the 2500 IMD in the economics block. The field is provenance only, so no funds move, but the test that claims to check it compares a hard-coded constant rather than the file.\n\n**What holds, traced line by line.** The three entry points approve, transfer and transferFrom all behave as a plain ERC-20 with exact amounts, correct zero-address and balance guards, safe unchecked arithmetic, and a correct self-transfer path. The constructor mints the full 1e27 units to the factory with no later mint path. Launch flows through the stub PoolManager and router arrive whole with the token in either currency slot. There is no periphery in src at all, since the token imports nothing. The full suite of 90 tests, fuzz and invariants passes.\n\n**Not reached.** No fork run against the live Robinhood Chain PoolManager was possible without network. The protected harness's LaunchLiquidity library is not in the tree, so I could only confirm that the token behaves like OpenZeppelin ERC20, which that harness is written against.\n\n**Next.** The author should set the fee back to 3000 and restore the ordered initial price, then make the launch tests read launch.json so the manifest cannot drift from them again.","treeHash":null,"usage":{"cachedInputTokens":685450,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":14807,"runtime":"claude","turns":20,"wallClockMs":226180}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a5c5e95a2ed07117","findings":[{"citation":"resolved","description":"The order fixes the pool block exactly: pairedCurrency 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127, fee 3000, tickSpacing 60. The committed manifest writes fee 12500 (1.25%) instead of 3000 (0.30%). The notes field justifies it as 'the launch policy's 1.25% fee', which copies the illustrative example manifest in the background reference; the task rules state that where the reference disagrees with the order, the order wins. pool.fee is a real pool parameter (the attestation binds pool fields and the factory opens the pool with the manifest's key), not provenance, so this is a numeric parameter that reaches the chain. The repository contradicts itself: test/SHOODLaunch.t.sol line 21 (`uint24 internal constant POOL_FEE = 3_000;`) and test/SHOODLaunch.invariant.t.sol line 599 (`key = PoolKey(address(token), IMD, 3_000, 60, address(0));`) both model the 0.30% pool the order asks for, and the stub's fee assertion (test_buyThenSellThroughTheManagerWithFee) only holds at 3000. No test reads launch.json, so the suite cannot catch the disagreement. Consequence: either admission refuses the manifest because its pool block is not the job's, or the pool opens at a 1.25% fee and every trader pays 4.17x the fee the requester ordered.","line":14,"path":"launch.json","reproduction":"State: launch.json as committed. Input: parse launch.json and read pool.fee. Actual: 12500. Expected (from the order's 'launch.json pool: ... fee 3000'): 3000. Arithmetic: a 1 IMD exact-input buy at 12500 pips charges 0.0125 IMD in fee; at 3000 pips it charges 0.003 IMD, so each trade pays 0.0095 IMD per IMD more than ordered. Fix: set pool.fee to 3000 and drop the sentence in notes that claims 12500 is the policy fee.","severity":"medium","snippet":"    \"fee\": 12500,","title":"launch.json pool.fee is 12500, the order requires 3000"},{"citation":"resolved","description":"The order gives pool.initialPrice as \"125270724187523965593206900\" (paired-currency minor units per SHOOD minor unit, SHOOD as currency0, provenance only). That number is exactly floor(sqrt(2500e18 / 1e27) * 2^96) = floor(125270724187523965593206900.78), so it is the sqrt price the economics block derives to. The manifest instead carries 79228162514264337593543950336 = 2^96, the example manifest's value, which decodes to a price of exactly 1 IMD per SHOOD and an implied opening market cap of 1e27 wei = 1,000,000,000 IMD, 400,000x the economics.initialMarketCapWei of 2500000000000000000000 (2500 IMD). Because the field is provenance only and the deployer derives the real opening price from economics, no on-chain price is wrong, which is why this is low rather than medium. It is still a manifest that disagrees with the order on a field the order spells out, and whose number contradicts the economics beside it. The suite does not guard it: test/SHOODLaunch.t.sol test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0 (line 159-162) asserts the derived price against a hardcoded MANIFEST_SQRT_PRICE = 125_270_724_187_523_965_593_206_900 with the comment 'is what launch.json records', while launch.json records a different value; nothing reads the file.","line":16,"path":"launch.json","reproduction":"State: launch.json as committed. Input: read pool.initialPrice and economics.initialMarketCapWei. Actual: initialPrice 79228162514264337593543950336; (79228162514264337593543950336 / 2^96)^2 = 1, times totalSupply 1e27 gives an implied cap of 1e27 wei. Expected: 125270724187523965593206900, whose implied cap is (125270724187523965593206900 / 2^96)^2 * 1e27 = 2.4999999999999999999999999999e21 wei, i.e. the economics' 2500 IMD. Fix: set pool.initialPrice to \"125270724187523965593206900\".","severity":"low","snippet":"    \"initialPrice\": \"79228162514264337593543950336\"","title":"launch.json pool.initialPrice is 2^96 (price 1 IMD per SHOOD), not the order's value, and implies a 1e9 IMD cap against the 2500 IMD economics"}],"hash":"c1ff316d227685933fb45b913a3214a2334503bbf028fbcf93e6dacdfb9c3365","nodeId":"43990992-3162-4590-8fc8-3c36c7617d40","outcome":"completed","summary":"The review is complete. Both findings and the coverage record are in `.imd-findings.json`, which parses, and both snippets match the tree at the cited lines. No source or test file was changed; the scratch probe I used was deleted and the tree shows only the findings file.\n\n**Outcome:** the token contract holds on every item in the Math Precision, Boundary and Numerical Gap guides. The two defects are in the manifest, where numbers contradict the order and each other.\n\n**Findings**\n\n- **Medium, launch.json line 14.** `pool.fee` is 12500 where the order requires 3000. This is a live pool parameter, not provenance. The repository's own launch tests and invariant fixture model a 0.30% pool, and the stub's fee assertion only holds at 3000, so the suite and the manifest disagree. Either admission refuses the manifest or traders pay 4.17 times the ordered fee.\n- **Low, launch.json line 16.** `pool.initialPrice` is 2^96, the example manifest's value, which decodes to 1 IMD per SHOOD and an implied cap of 1,000,000,000 IMD against the economics' 2500 IMD. The order's value, 125270724187523965593206900, is exactly the floor of the price derived from the economics block. The field is provenance only, so no on-chain price is wrong, but the test that claims to check \"what launch.json records\" compares against a hardcoded constant and never reads the file.\n\n**What holds in my area**\n\n- No division, no scaling, no casts and no external calls exist in the token. The only arithmetic is two unchecked subtractions, each preceded by the guard that makes it safe, and one unchecked addition bounded by the constant 1e27 total supply.\n- I traced the seams by hand and with a throwaway probe: self-transfer of the full balance, transferFrom with spender, from and to all identical, the zero sender with zero value, and allowance at max and max minus one. All behave as intended.\n- Build, formatter and all 90 existing tests pass on the committed tree.\n\n**Coverage:** all three verifier entry points are marked `holds`, plus six invariant and manifest rows, two of which point at the findings. Nothing in the assigned area was left unreached.","treeHash":null,"usage":{"cachedInputTokens":884574,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":14908,"runtime":"claude","turns":20,"wallClockMs":220328}},{"artifacts":[],"attempt":1,"bundleHash":"cefd9ba1b5ef4ad84d74d8556a225528e07116fb45b4744a36433a2cdf74c1db","device":"0476c44a80aa9574","findings":[],"hash":"c7935afb5a35dcb0c3b33dfec7da1abe317779be7423c274c692b90b6d4d7ee4","nodeId":"a63d2ec7-34a2-4d6a-842d-8678a8323197","outcome":"completed","summary":"Done. `forge build` and `forge test` pass with 90 tests across 6 suites, all under `test/`, nothing else touched, no dependencies installed, no findings to report.\n\n**What I added**, building on the existing smoke suite rather than rewriting it:\n\n- `test/SHOODToken.fuzz.t.sol`: 34 property and edge tests. Transfers of any amount by any caller move exactly the amount (no fee, tax or wallet limit), the whole supply moves in one transfer, every shortfall reverts with the token's own error, allowance arithmetic at zero, exact, max-minus-one and unlimited, the approval race, the zero address on every path, no owner or admin getter, no privileged selector moves or freezes a holder, a fuzzed selector sweep that nothing mints, no fallback, receive or ETH path, and a DELEGATECALL/CALLCODE/SELFDESTRUCT scan of the creation code as well as the runtime.\n- `test/SHOODLaunch.t.sol`: the launch flow offline, run twice so SHOOD lands as currency0 and as currency1. The factory probe deploys through CREATE2, so the constructor's msg.sender is the factory and the whole 1e27 lands there. The swarm's 10% reaches the distributor whole and is claimable to the last wei, 90% seeds the pool at the derived opening price, the remainder path moves exactly what is left, and a trader buys and sells through the PoolManager with the 0.30% fee checked against an independent formula. Failure paths: a seed beyond the factory's balance unwinds inside the unlock, a one-wei-short settlement unwinds the whole swap, a router without allowance cannot sell, a sell beyond the holder's balance reverts with the token's error, and a claimant cannot drain IMD the pool does not hold.\n- `test/SHOODToken.invariant.t.sol` and `test/SHOODLaunch.invariant.t.sol`: handler-driven invariants with inline run counts. The token's balances always sum to the supply and match a ghost ledger of received minus sent, allowances match a ghost mirror, the supply never changes, and after launch the PoolManager's holdings always equal its pool accounting with no open delta between calls.\n- `test/mocks/`: an IMD stand-in and a v4-style PoolManager stand-in, both etched at the real Robinhood Chain addresses, plus factory, trader and router probes. The stand-in reproduces unlock/callback, sync/settle credit-what-arrived, take, the LP fee in pips, and single-sided seeding against a virtual reserve at the opening price. The real v4-core cannot be vendored because `remappings.txt` is protected.\n\n**Sharpness check.** A scratch mutant of the token with a 1% transfer tax failed 14 of 18 launch tests in each currency ordering, all on the manager's short-settlement guard.\n\n**No defects found.** One observation only, documented by a test rather than reported: `transferFrom` emits an `Approval` event when it decrements an allowance, which OpenZeppelin v5 no longer does. It is harmless and ERC-20 permits it.\n\n**Still owed**, as the verifier has no network: a fork run of the seed and both swap directions against the live PoolManager and IMD on Robinhood Chain, which the protected harness covers with real v4-core at admission.","treeHash":"ec67181ad30e21384a51d65b0a08b0f87e03e186","usage":{"cachedInputTokens":1211088,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":56714,"runtime":"claude","turns":30,"wallClockMs":717154}},{"artifacts":[],"attempt":1,"bundleHash":"00480dcdc4f9d40d1df1bad9d0936811923c5e9af3ad8cd9d335ad2fa4f70b70","device":"232b62e021f6f394","findings":[],"hash":"cc6ab7aef6d3c32737cf5c13f20dbaf26691a48ccb9fa94c9df9f4debbfa7f5a","nodeId":"69c8eb31-37c4-4163-9dce-de2ac22d5fb5","outcome":"completed","summary":"Both findings reproduced and are fixed. Only launch.json changed, and the responses file is in place.\n\n**What I found**\n\n- **Fee finding reproduced.** The manifest carried fee 12500, while the order's mandatory pool block fixes 3000. The protected harness builds its PoolKey from the manifest fee, so this is the real fee tier, not provenance. The project's own launch tests model 3000.\n- **Price finding reproduced.** The manifest carried 2^96, which implies a 1e9 IMD opening cap. Recomputing the sqrtPriceX96 from the economics block gives exactly the order's 125270724187523965593206900.\n- The 12500 and 2^96 values had been copied from the background reference's example manifest in the last round. The task rules say the order wins where the reference disagrees.\n\n**What I changed in launch.json**\n\n- pool.fee is now 3000.\n- pool.initialPrice is now \"125270724187523965593206900\".\n- The notes sentence claiming 12500 was the policy fee is gone. The notes now state the order's pool block and keep the provenance caveat that the deployer derives the opening price from economics.\n\n**Checks**\n\n- Manifest validated locally: exact top-level keys, token block, verbatim economics, notes under 4000 characters.\n- `forge build` succeeded and `forge test` passed all 90 tests.\n- `.imd-responses.json` answers both finding ids with verdict fixed and the reproduction steps.\n\nOne thing to flag: the task text itself also contains a sentence saying admission refuses any fee other than 12500. That sentence comes from the reference's \"This launch\" template and contradicts the order's mandatory block. I followed the order and the reviewer. If admission does enforce 12500, this is the point to revisit.","treeHash":"0868ac29b088d6051226570a7eb243608f272957","usage":{"cachedInputTokens":317588,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":6000,"runtime":"claude","turns":8,"wallClockMs":106110}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8db4eebdd7bd2744","findings":[{"citation":"resolved","description":"The assignment's mandatory build requirements state the manifest's pool block verbatim: pairedCurrency 0x5f7b...7127, fee 3000, tickSpacing 60, initialPrice \"125270724187523965593206900\". The committed launch.json writes fee 12500 and justifies it in notes as \"the launch policy's 1.25% fee\". The project's own launch suite contradicts the manifest: test/SHOODLaunch.t.sol line 21 sets POOL_FEE = 3_000, test/SHOODLaunch.invariant.t.sol line 147 builds the PoolKey with fee 3_000, and every fee assertion (test_buyThenSellThroughTheManagerWithFee) is derived for 0.30%. Nothing a worker runs validates launch.json, and the pool fee is a PoolKey field the factory copies from the manifest, so this is the value the launch would open with. Economic impact if deployed as written: every swap on the SHOOD/IMD pool pays 1.25% instead of 0.30%, 4.17x the ordered fee; a buy-then-sell round trip loses about 2.48% to fees instead of about 0.60%. On the first 1 IMD buy the trader receives roughly 0.95% fewer SHOOD than at 0.30% (net input 0.98750 IMD vs 0.99700 IMD). If admission instead compares the pool block against the order, the whole launch is refused rather than opened at the wrong fee. Either outcome contradicts the brief. Note for the judge: the reference material's example manifest uses fee 12500 and says its pool block is 'this launch's own', which conflicts with the mandatory requirements; the task rules state that the requirements win where they disagree with the reference, and the project's tests also follow the requirements. Fix: set pool.fee to 3000 and drop the sentence in notes that asserts 12500 is the policy fee.","line":14,"path":"launch.json","reproduction":"State: launch.json as committed (pool.fee = 12500). Input: compare against the order's pool block (fee 3000) or against test/SHOODLaunch.t.sol POOL_FEE = 3_000. Expected: the manifest's pool.fee equals 3000 and a 1 IMD exact-input buy is charged a 0.003 IMD fee (net 0.997 IMD priced into the pool). Actual: pool.fee is 12500; a 1 IMD exact-input buy would be charged 0.0125 IMD (net 0.9875 IMD), and a round trip retains about 2.48% in the pool instead of about 0.60%. Offline check that reproduces the discrepancy without network: `python3 -I -c \"import json;m=json.load(open('launch.json'));assert m['pool']['fee']==3000,m['pool']['fee']\"` fails with AssertionError: 12500.","severity":"medium","snippet":"    \"fee\": 12500,","title":"launch.json pool.fee is 12500, not the 3000 the order mandates: the pool would open at 1.25% instead of 0.30%"},{"citation":"resolved","description":"The order fixes pool.initialPrice at \"125270724187523965593206900\", which is exactly sqrt(2500e18 / 1e27) * 2^96, the sqrtPriceX96 of the 2500 IMD opening market cap with SHOOD as currency0 (verified: Decimal computation returns 125270724187523965593206900 to the digit). The committed value 79228162514264337593543950336 is exactly 2^96, a price of 1.0 IMD per SHOOD, which implies a 1,000,000,000 IMD market cap, 400,000 times the economics.initialMarketCapWei of 2500 IMD recorded three lines below in the same file. The manifest is therefore internally inconsistent as well as inconsistent with the order. The notes even quote the correct figure as 'the brief quoted 125270724187523965593206900' while the field itself carries the wrong one. The field is provenance only and the deployer derives the real opening price from economics, so no funds are mispriced if the deployer behaves as described; the defect is that the manifest misrecords the launch and the project's test test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0 (test/SHOODLaunch.t.sol line 160) claims to check 'what launch.json records' but hardcodes the brief's figure instead of reading the file, so the suite cannot catch this drift. Fix: set pool.initialPrice to \"125270724187523965593206900\".","line":16,"path":"launch.json","reproduction":"State: launch.json as committed. Input: derive sqrtPriceX96 from the manifest's own economics with SHOOD as currency0: sqrt(initialMarketCapWei / totalSupply) * 2^96 = sqrt(2500e18 / 1e27) * 2^96. Expected: 125270724187523965593206900, equal to the order and to MANIFEST_SQRT_PRICE in test/SHOODLaunch.t.sol line 25. Actual: the file holds 79228162514264337593543950336 = 2^96, whose implied price (value / 2^96)^2 = 1 IMD per SHOOD and implied cap 1e9 IMD. Offline check: `python3 -I -c \"import json;m=json.load(open('launch.json'));assert m['pool']['initialPrice']=='125270724187523965593206900',m['pool']['initialPrice']\"` fails with AssertionError: 79228162514264337593543950336.","severity":"low","snippet":"    \"initialPrice\": \"79228162514264337593543950336\"","title":"launch.json pool.initialPrice is 2^96 (price 1 IMD per SHOOD, a 1,000,000,000 IMD cap) instead of the order's 125270724187523965593206900 (2500 IMD cap)"}],"hash":"f5e96dac80537d198b604f02a32f44932af98232274c10e96160e709fe865137","nodeId":"495bbadd-900b-4235-85fe-d2c2b7609c1d","outcome":"completed","summary":"The review is complete. No tracked files were changed, and the findings file is in place with the coverage record.\n\n**Outcome.** The token contract is sound in my area. The two defects are in the launch manifest, which deviates from the order's mandatory pool block.\n\n**Findings written to .imd-findings.json**\n\n- **Medium, launch.json line 14.** The pool fee is 12500 where the order mandates 3000. The project's own launch tests use 3000 and derive every fee assertion from 0.30%. If deployed as written, every swap pays 1.25%, and a buy-then-sell round trip loses about 2.48% to fees instead of about 0.60%. If admission compares the pool block to the order instead, the launch is refused. I noted for the judge that the reference's example manifest carries 12500, but the task rules say the mandatory requirements win where they disagree.\n- **Low, launch.json line 16.** The initial price is 2^96, which implies 1 IMD per SHOOD and a 1,000,000,000 IMD cap, while the order and the economics block three lines below say 2500 IMD. The order's figure is exactly the derived sqrtPriceX96, verified to the digit. The field is provenance only, so no funds are mispriced, but the manifest is internally inconsistent and the test that claims to check it hardcodes the right number instead of reading the file.\n\n**Coverage.** All three entry points hold under the Economic Security, Invariant and Flow Gap checks:\n\n- The supply conservation invariant holds because no mint or burn path exists, and the unchecked arithmetic is safe since balances sum to 1e27.\n- Every launch flow moves exactly what it says, so PoolManager balance-delta settlement, distributor claims and the remainder transfer all close whole, in both currency orderings.\n- Edge cases I executed in a scratch test, then removed: zero remainder sent to the dead address, transferFrom with sender equal to receiver, transferFrom of one's own funds without allowance, and repeated whole-supply moves.\n\nThe rest of the manifest matches the order: exact key set, token block, economics copied verbatim, lowercase addresses, and notes under the length limit. The existing suite of 90 tests passes. Nothing in my area was left unreached.","treeHash":null,"usage":{"cachedInputTokens":929974,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":14230,"runtime":"claude","turns":20,"wallClockMs":218119}},{"artifacts":[],"attempt":1,"bundleHash":"4b4e7a80ab9fd9442df47c707838b3658d8ed0e1a6e643bfafa9c3f082ac35a5","device":"03845cacb54c3a73","findings":[],"hash":"fe412b12ea7db198bbdb41fd68fc10558d0f65f32cbebd0e76057868efb3a905","nodeId":"cb3e6d1d-7367-422f-ae48-53dbbb864330","outcome":"completed","summary":"Done. The Swarm Hood token project is built, tested, and committed at the repository root.\n\n**What was delivered**\n\n- `src/SHOODToken.sol`: a self-contained ERC-20 named Swarm Hood, symbol SHOOD, 18 decimals. The no-argument constructor mints the full 1e27 minor units once to the deployer. There is no owner, no mint path, no burn, no fee, tax, pause or blacklist, and no proxy. A test scans the runtime for DELEGATECALL, CALLCODE and SELFDESTRUCT and finds none.\n- `foundry.toml` pins solc 0.8.26, evm_version cancun, optimizer on, and bytecode_hash none. ffi is off and there are no filesystem permissions.\n- `launch.json` carries exactly the six top-level keys from the brief, with the pool block (IMD pair, fee 3000, tick spacing 60, the given initialPrice), the economics block verbatim, and an empty contracts array.\n- `test/SHOODToken.t.sol` holds 18 smoke tests: deployment and metadata, supply minted to the deployer, exact-amount transfers, zero and self transfers, allowance and transferFrom including the unlimited-allowance case, reverts on insufficient balance, missing allowance and zero addresses, the deployer having no pull power, admin and mint selectors not existing, and the opcode scan. No fuzz or invariant tests, as instructed.\n- `README.md` documents the parameters, the factory's distribution flow, assumptions, and that nothing needs configuring after launch.\n- `lib/forge-std` is vendored as ordinary files with its git metadata removed, so the offline verifier can resolve the only import.\n\n**Checks**\n\n```\nforge build        Compiler run successful (solc 0.8.26)\nforge test         18 passed, 0 failed, 0 skipped\nforge fmt --check  clean\n```\n\n**Against the protected floor test**: the token takes no constructor arguments, so it deploys unchanged via the factory's CREATE2. Every transfer moves exactly what was asked for every caller, so the swarm share, pool seed, and trader swaps arrive whole without exemptions. None of the probed admin selectors exist, so supply cannot grow and no holder can be moved or frozen.\n\n**One deliberate choice to flag**: the reference text says not to write launch.json and names a 12500 fee, but the task's own build requirements explicitly ask for the exact launch.json with fee 3000 and the given initialPrice. The task rules win over the reference, so I wrote it as the task specified.\n\n**Still owed by others**: the full fuzz and invariant suite from the follow-on agent, and explorer verification of the deployed bytecode by the network deployer.","treeHash":"d8d0e25b6e9585269716bfe73a2b69f0e3520f77","usage":{"cachedInputTokens":315334,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":12303,"runtime":"claude","turns":16,"wallClockMs":176805}}],"verification":[{"checks":[{"durationMs":2798,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.69s\nCompiler run successful!\n","passed":true},{"durationMs":4866,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/SHOODToken.t.sol:SHOODTokenTest\n[PASS] test_approveRevertsForZeroSpender() (gas: 32864)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64649)\n[PASS] test_constructorEmitsMintTransfer() (gas: 7963)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 25675)\n[PASS] test_deployerCannotPullWithoutAllowance() (gas: 94964)\n[PASS] test_metadata() (gas: 23688)\n[PASS] test_noMintOrAdminSelectorExists() (gas: 209340)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 558382)\n[PASS] test_transferFromInfiniteAllowanceIsNotDecremented() (gas: 177613)\n[PASS] test_transferFromRevertsBeyondBalanceEvenWithAllowance() (gas: 147706)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 93004)\n[PASS] test_transferFromSpendsAllowance() (gas: 198799)\n[PASS] test_transferFullBalanceLeavesZero() (gas: 71944)\n[PASS] test_transferMovesExactAmount() (gas: 84667)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92369)\n[PASS] test_transferRevertsToZeroAddress() (gas: 32937)\n[PASS] test_transferToSelfKeepsBalance() (gas: 94962)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44265)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 44.55ms (5.58ms CPU time)\n\nRan 18 tests for test/SHOODLaunch.t.sol:SHOODLaunchTokenAsCurrency1Test\n[PASS] testFuzz_anyBuyArrivesWholeAndBooksBalance(uint96) (runs: 256, μ: 1351414, ~: 1351253)\n[PASS] testFuzz_roundTripReturnsEveryTokenAndNeverMoreIMDThanPaid(uint96,uint8) (runs: 256, μ: 1711059, ~: 1715545)\n[PASS] test_buyThenSellThroughTheManagerWithFee() (gas: 1624579)\n[PASS] test_distributorCannotOverclaim() (gas: 357211)\n[PASS] test_distributorClaimsArriveWholeDownToTheLastWei() (gas: 451288)\n[PASS] test_exactOutputBuyDeliversExactlyWhatWasAsked() (gas: 1318055)\n[PASS] test_factoryDeploymentMintsWholeSupplyToFactory() (gas: 35827)\n[PASS] test_launchFlowsArriveWholeAndLeaveNothingBehind() (gas: 437381)\n[PASS] test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0() (gas: 14316)\n[PASS] test_manyTradersConserveSupply() (gas: 5893029)\n[PASS] test_remainderGoesToRemainderToWhenPoolShareIsSmaller() (gas: 396952)\n[PASS] test_routerPullsWithAllowanceAndSettlesWhole() (gas: 1644837)\n[PASS] test_routerWithoutAllowanceCannotSell() (gas: 1546371)\n[PASS] test_seedBeyondFactoryBalanceRevertsInsideTheUnlock() (gas: 353446)\n[PASS] test_sellCannotDrainMoreIMDThanThePoolHolds() (gas: 1167015)\n[PASS] test_sellingMoreThanHeldRevertsWithTheTokensError() (gas: 1485874)\n[PASS] test_shortSettlementUnwindsTheWholeSwap() (gas: 1630094)\n[PASS] test_swapBeforeTheSeedReverts() (gas: 875228)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 44.51ms (80.14ms CPU time)\n\nRan 34 tests for test/SHOODToken.fuzz.t.sol:SHOODTokenFuzzTest\n[PASS] testFuzz_approveOverwritesRatherThanAccumulates(uint256,uint256) (runs: 256, μ: 107352, ~: 107341)\n[PASS] testFuzz_nobodyCanMintFromAnySelector(bytes4,address) (runs: 256, μ: 52007, ~: 52090)\n[PASS] testFuzz_supplyNeverChangesWhateverIsTransferred(address,uint256) (runs: 256, μ: 82491, ~: 82731)\n[PASS] testFuzz_transferAboveBalanceRevertsForAnyShortfall(uint256,uint256) (runs: 256, μ: 107236, ~: 107855)\n[PASS] testFuzz_transferFromAboveAllowanceReverts(uint256,uint256) (runs: 256, μ: 153170, ~: 153441)\n[PASS] testFuzz_transferFromSpendsExactlyTheAmount(uint256,uint256,uint256) (runs: 256, μ: 197282, ~: 200624)\n[PASS] testFuzz_transferMovesExactlyTheAmountForAnyCaller(address,address,uint256,uint256) (runs: 256, μ: 137489, ~: 139350)\n[PASS] testFuzz_transferToSelfIsANoOp(uint256,uint256) (runs: 256, μ: 95857, ~: 96071)\n[PASS] test_allowanceIsDirectional() (gas: 74432)\n[PASS] test_approvalRaceIsOverwriteNotSum() (gas: 286055)\n[PASS] test_approveNeedsNoBalance() (gas: 72309)\n[PASS] test_approveSelfIsAllowedAndSpendable() (gas: 181896)\n[PASS] test_approveZeroRevokesAndEmits() (gas: 90160)\n[PASS] test_creationCodeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 575694)\n[PASS] test_eachDeploymentMintsItsOwnSupplyToItsOwnDeployer() (gas: 35839)\n[PASS] test_noFallbackAndNoReceive() (gas: 81986)\n[PASS] test_noOwnerOrAdminGetters() (gas: 143895)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 458358)\n[PASS] test_runtimeFitsEIP170() (gas: 4970)\n[PASS] test_sameTransferTwiceIsChargedTwice() (gas: 178965)\n[PASS] test_supplyIsExactlyTheManifestFigure() (gas: 16546)\n[PASS] test_transferFromAllowanceExactlyEqualToAmountSucceedsAndEmptiesIt() (gas: 205857)\n[PASS] test_transferFromDecrementEmitsApproval() (gas: 178775)\n[PASS] test_transferFromMaxMinusOneIsNotUnlimited() (gas: 173041)\n[PASS] test_transferFromTheZeroAddressRevertsEvenForZero() (gas: 63467)\n[PASS] test_transferFromToAThirdPartyWorks() (gas: 178202)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 94914)\n[PASS] test_transferFromZeroAmountWithoutAllowanceSucceeds() (gas: 49394)\n[PASS] test_transferMaxUint256Reverts() (gas: 38163)\n[PASS] test_transferOfOneWeiMoreThanSupplyRevertsEvenForTheDeployer() (gas: 38062)\n[PASS] test_transferToContractWithoutReceiverHookSucceeds() (gas: 64874)\n[PASS] test_transferToSelfAboveBalanceStillReverts() (gas: 90372)\n[PASS] test_wholeSupplyMovesInOneTransfer() (gas: 131514)\n[PASS] test_zeroTransferToZeroAddressStillReverts() (gas: 32969)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 46.26ms (162.09ms CPU time)\n\nRan 18 tests for test/SHOODLaunch.t.sol:SHOODLaunchTokenAsCurrency0Test\n[PASS] testFuzz_anyBuyArrivesWholeAndBooksBalance(uint96) (runs: 256, μ: 1351326, ~: 1351164)\n[PASS] testFuzz_roundTripReturnsEveryTokenAndNeverMoreIMDThanPaid(uint96,uint8) (runs: 256, μ: 1710948, ~: 1715444)\n[PASS] test_buyThenSellThroughTheManagerWithFee() (gas: 1624436)\n[PASS] test_distributorCannotOverclaim() (gas: 357153)\n[PASS] test_distributorClaimsArriveWholeDownToTheLastWei() (gas: 451230)\n[PASS] test_exactOutputBuyDeliversExactlyWhatWasAsked() (gas: 1317954)\n[PASS] test_factoryDeploymentMintsWholeSupplyToFactory() (gas: 35827)\n[PASS] test_launchFlowsArriveWholeAndLeaveNothingBehind() (gas: 437290)\n[PASS] test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0() (gas: 14316)\n[PASS] test_manyTradersConserveSupply() (gas: 5892684)\n[PASS] test_remainderGoesToRemainderToWhenPoolShareIsSmaller() (gas: 396897)\n[PASS] test_routerPullsWithAllowanceAndSettlesWhole() (gas: 1644748)\n[PASS] test_routerWithoutAllowanceCannotSell() (gas: 1528119)\n[PASS] test_seedBeyondFactoryBalanceRevertsInsideTheUnlock() (gas: 353315)\n[PASS] test_sellCannotDrainMoreIMDThanThePoolHolds() (gas: 1166960)\n[PASS] test_sellingMoreThanHeldRevertsWithTheTokensError() (gas: 1467737)\n[PASS] test_shortSettlementUnwindsTheWholeSwap() (gas: 1630006)\n[PASS] test_swapBeforeTheSeedReverts() (gas: 875191)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 46.45ms (92.22ms CPU time)\n\nRan 1 test for test/SHOODLaunch.invariant.t.sol:SHOODLaunchInvariantTest\n[PASS]\nSHOODLaunchInvariantTest invariants:\n[PASS] invariant_factoryAndRemainderStayEmpty\n[PASS] invariant_managerHoldsExactlyWhatItsBooksSay\n[PASS] invariant_noOpenDeltaBetweenCalls\n[PASS] invariant_supplyConservedAcrossEveryHolder\n SHOODLaunchInvariantTest invariants (runs: 64, calls: 3072, reverts: 0)\n\n╭--------------------+------------------------+-------+---------+----------╮\n| Contract           | Selector               | Calls | Reverts | Discards |\n+==========================================================================+\n| SHOODLaunchHandler | buy                    | 772   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | claim                  | 778   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | sell                   | 768   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | transferBetweenHolders | 754   | 0       | 0        |\n╰--------------------+------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 513.05ms (510.68ms CPU time)\n\nRan 1 test for test/SHOODToken.invariant.t.sol:SHOODTokenInvariantTest\n[PASS]\nSHOODTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchGhost\n[PASS] invariant_balanceEqualsReceivedMinusSent\n[PASS] invariant_balancesSumToSupply\n[PASS] invariant_totalSupplyIsFixed\n[PASS] invariant_zeroAddressHoldsNothing\n SHOODTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------------+---------------------+-------+---------+----------╮\n| Contract          | Selector            | Calls | Reverts | Discards |\n+======================================================================+\n| SHOODTokenHandler | approve             | 1374  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transfer            | 1440  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferFrom        | 1346  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferFromTooMuch | 1350  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferToZero      | 1337  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferTooMuch     | 1345  | 0       | 0        |\n╰-------------------+---------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.77s (4.77s CPU time)\n\nRan 6 test suites in 4.77s (5.47s CPU time): 90 tests passed, 0 failed, 0 skipped (90 total tests)\n","passed":true},{"durationMs":48,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SHOODToken.approve(address,uint256)\",\"SHOODToken.transfer(address,uint256)\",\"SHOODToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":64,\"foundry.toml\":19,\"launch.json\":24,\"remappings.txt\":1,\"src/SHOODToken.sol\":110,\"test/SHOODLaunch.invariant.t.sol\":185,\"test/SHOODLaunch.t.sol\":452,\"test/SHOODToken.fuzz.t.sol\":430,\"test/SHOODToken.invariant.t.sol\":201,\"test/SHOODToken.t.sol\":208,\"test/mocks/LaunchProbes.sol\":164,\"test/mocks/PairToken.sol\":53,\"test/mocks/PoolManagerStub.sol\":237},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"7d0ef3b47e00c6242aedd51fc64e4a82ff2e70679b810522ee5b6810b5738880","verifiedTreeHash":"05a1b88c485c2d206b5e591d24b7091ab8cbf6c4","verifierVersion":"0.1.0+5d71dfd4"},{"checks":[{"durationMs":2728,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.62s\nCompiler run successful!\n","passed":true},{"durationMs":5025,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/SHOODToken.t.sol:SHOODTokenTest\n[PASS] test_approveRevertsForZeroSpender() (gas: 32864)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64649)\n[PASS] test_constructorEmitsMintTransfer() (gas: 7963)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 25675)\n[PASS] test_deployerCannotPullWithoutAllowance() (gas: 94964)\n[PASS] test_metadata() (gas: 23688)\n[PASS] test_noMintOrAdminSelectorExists() (gas: 209340)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 558382)\n[PASS] test_transferFromInfiniteAllowanceIsNotDecremented() (gas: 177613)\n[PASS] test_transferFromRevertsBeyondBalanceEvenWithAllowance() (gas: 147706)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 93004)\n[PASS] test_transferFromSpendsAllowance() (gas: 198799)\n[PASS] test_transferFullBalanceLeavesZero() (gas: 71944)\n[PASS] test_transferMovesExactAmount() (gas: 84667)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92369)\n[PASS] test_transferRevertsToZeroAddress() (gas: 32937)\n[PASS] test_transferToSelfKeepsBalance() (gas: 94962)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44265)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 23.38ms (3.87ms CPU time)\n\nRan 18 tests for test/SHOODLaunch.t.sol:SHOODLaunchTokenAsCurrency0Test\n[PASS] testFuzz_anyBuyArrivesWholeAndBooksBalance(uint96) (runs: 256, μ: 1351286, ~: 1351152)\n[PASS] testFuzz_roundTripReturnsEveryTokenAndNeverMoreIMDThanPaid(uint96,uint8) (runs: 256, μ: 1709821, ~: 1715444)\n[PASS] test_buyThenSellThroughTheManagerWithFee() (gas: 1624436)\n[PASS] test_distributorCannotOverclaim() (gas: 357153)\n[PASS] test_distributorClaimsArriveWholeDownToTheLastWei() (gas: 451230)\n[PASS] test_exactOutputBuyDeliversExactlyWhatWasAsked() (gas: 1317954)\n[PASS] test_factoryDeploymentMintsWholeSupplyToFactory() (gas: 35827)\n[PASS] test_launchFlowsArriveWholeAndLeaveNothingBehind() (gas: 437290)\n[PASS] test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0() (gas: 14316)\n[PASS] test_manyTradersConserveSupply() (gas: 5892684)\n[PASS] test_remainderGoesToRemainderToWhenPoolShareIsSmaller() (gas: 396897)\n[PASS] test_routerPullsWithAllowanceAndSettlesWhole() (gas: 1644748)\n[PASS] test_routerWithoutAllowanceCannotSell() (gas: 1528119)\n[PASS] test_seedBeyondFactoryBalanceRevertsInsideTheUnlock() (gas: 353315)\n[PASS] test_sellCannotDrainMoreIMDThanThePoolHolds() (gas: 1166960)\n[PASS] test_sellingMoreThanHeldRevertsWithTheTokensError() (gas: 1467737)\n[PASS] test_shortSettlementUnwindsTheWholeSwap() (gas: 1630006)\n[PASS] test_swapBeforeTheSeedReverts() (gas: 875191)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 40.29ms (81.08ms CPU time)\n\nRan 18 tests for test/SHOODLaunch.t.sol:SHOODLaunchTokenAsCurrency1Test\n[PASS] testFuzz_anyBuyArrivesWholeAndBooksBalance(uint96) (runs: 256, μ: 1351381, ~: 1351253)\n[PASS] testFuzz_roundTripReturnsEveryTokenAndNeverMoreIMDThanPaid(uint96,uint8) (runs: 256, μ: 1709664, ~: 1715545)\n[PASS] test_buyThenSellThroughTheManagerWithFee() (gas: 1624579)\n[PASS] test_distributorCannotOverclaim() (gas: 357211)\n[PASS] test_distributorClaimsArriveWholeDownToTheLastWei() (gas: 451288)\n[PASS] test_exactOutputBuyDeliversExactlyWhatWasAsked() (gas: 1318055)\n[PASS] test_factoryDeploymentMintsWholeSupplyToFactory() (gas: 35827)\n[PASS] test_launchFlowsArriveWholeAndLeaveNothingBehind() (gas: 437381)\n[PASS] test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0() (gas: 14316)\n[PASS] test_manyTradersConserveSupply() (gas: 5893029)\n[PASS] test_remainderGoesToRemainderToWhenPoolShareIsSmaller() (gas: 396952)\n[PASS] test_routerPullsWithAllowanceAndSettlesWhole() (gas: 1644837)\n[PASS] test_routerWithoutAllowanceCannotSell() (gas: 1546371)\n[PASS] test_seedBeyondFactoryBalanceRevertsInsideTheUnlock() (gas: 353446)\n[PASS] test_sellCannotDrainMoreIMDThanThePoolHolds() (gas: 1167015)\n[PASS] test_sellingMoreThanHeldRevertsWithTheTokensError() (gas: 1485874)\n[PASS] test_shortSettlementUnwindsTheWholeSwap() (gas: 1630094)\n[PASS] test_swapBeforeTheSeedReverts() (gas: 875228)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 45.61ms (82.93ms CPU time)\n\nRan 34 tests for test/SHOODToken.fuzz.t.sol:SHOODTokenFuzzTest\n[PASS] testFuzz_approveOverwritesRatherThanAccumulates(uint256,uint256) (runs: 256, μ: 107170, ~: 107407)\n[PASS] testFuzz_nobodyCanMintFromAnySelector(bytes4,address) (runs: 256, μ: 52016, ~: 52090)\n[PASS] testFuzz_supplyNeverChangesWhateverIsTransferred(address,uint256) (runs: 256, μ: 82244, ~: 82731)\n[PASS] testFuzz_transferAboveBalanceRevertsForAnyShortfall(uint256,uint256) (runs: 256, μ: 106653, ~: 107831)\n[PASS] testFuzz_transferFromAboveAllowanceReverts(uint256,uint256) (runs: 256, μ: 152699, ~: 153465)\n[PASS] testFuzz_transferFromSpendsExactlyTheAmount(uint256,uint256,uint256) (runs: 256, μ: 198802, ~: 200654)\n[PASS] testFuzz_transferMovesExactlyTheAmountForAnyCaller(address,address,uint256,uint256) (runs: 256, μ: 137493, ~: 139357)\n[PASS] testFuzz_transferToSelfIsANoOp(uint256,uint256) (runs: 256, μ: 95228, ~: 96119)\n[PASS] test_allowanceIsDirectional() (gas: 74432)\n[PASS] test_approvalRaceIsOverwriteNotSum() (gas: 286055)\n[PASS] test_approveNeedsNoBalance() (gas: 72309)\n[PASS] test_approveSelfIsAllowedAndSpendable() (gas: 181896)\n[PASS] test_approveZeroRevokesAndEmits() (gas: 90160)\n[PASS] test_creationCodeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 575694)\n[PASS] test_eachDeploymentMintsItsOwnSupplyToItsOwnDeployer() (gas: 35839)\n[PASS] test_noFallbackAndNoReceive() (gas: 81986)\n[PASS] test_noOwnerOrAdminGetters() (gas: 143895)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 458358)\n[PASS] test_runtimeFitsEIP170() (gas: 4970)\n[PASS] test_sameTransferTwiceIsChargedTwice() (gas: 178965)\n[PASS] test_supplyIsExactlyTheManifestFigure() (gas: 16546)\n[PASS] test_transferFromAllowanceExactlyEqualToAmountSucceedsAndEmptiesIt() (gas: 205857)\n[PASS] test_transferFromDecrementEmitsApproval() (gas: 178775)\n[PASS] test_transferFromMaxMinusOneIsNotUnlimited() (gas: 173041)\n[PASS] test_transferFromTheZeroAddressRevertsEvenForZero() (gas: 63467)\n[PASS] test_transferFromToAThirdPartyWorks() (gas: 178202)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 94914)\n[PASS] test_transferFromZeroAmountWithoutAllowanceSucceeds() (gas: 49394)\n[PASS] test_transferMaxUint256Reverts() (gas: 38163)\n[PASS] test_transferOfOneWeiMoreThanSupplyRevertsEvenForTheDeployer() (gas: 38062)\n[PASS] test_transferToContractWithoutReceiverHookSucceeds() (gas: 64874)\n[PASS] test_transferToSelfAboveBalanceStillReverts() (gas: 90372)\n[PASS] test_wholeSupplyMovesInOneTransfer() (gas: 131514)\n[PASS] test_zeroTransferToZeroAddressStillReverts() (gas: 32969)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 45.73ms (232.05ms CPU time)\n\nRan 1 test for test/SHOODLaunch.invariant.t.sol:SHOODLaunchInvariantTest\n[PASS]\nSHOODLaunchInvariantTest invariants:\n[PASS] invariant_factoryAndRemainderStayEmpty\n[PASS] invariant_managerHoldsExactlyWhatItsBooksSay\n[PASS] invariant_noOpenDeltaBetweenCalls\n[PASS] invariant_supplyConservedAcrossEveryHolder\n SHOODLaunchInvariantTest invariants (runs: 64, calls: 3072, reverts: 0)\n\n╭--------------------+------------------------+-------+---------+----------╮\n| Contract           | Selector               | Calls | Reverts | Discards |\n+==========================================================================+\n| SHOODLaunchHandler | buy                    | 705   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | claim                  | 799   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | sell                   | 790   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | transferBetweenHolders | 778   | 0       | 0        |\n╰--------------------+------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 474.99ms (472.66ms CPU time)\n\nRan 1 test for test/SHOODToken.invariant.t.sol:SHOODTokenInvariantTest\n[PASS]\nSHOODTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchGhost\n[PASS] invariant_balanceEqualsReceivedMinusSent\n[PASS] invariant_balancesSumToSupply\n[PASS] invariant_totalSupplyIsFixed\n[PASS] invariant_zeroAddressHoldsNothing\n SHOODTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------------+---------------------+-------+---------+----------╮\n| Contract          | Selector            | Calls | Reverts | Discards |\n+======================================================================+\n| SHOODTokenHandler | approve             | 1363  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transfer            | 1389  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferFrom        | 1421  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferFromTooMuch | 1349  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferToZero      | 1372  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferTooMuch     | 1298  | 0       | 0        |\n╰-------------------+---------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.94s (4.94s CPU time)\n\nRan 6 test suites in 4.95s (5.57s CPU time): 90 tests passed, 0 failed, 0 skipped (90 total tests)\n","passed":true},{"durationMs":46,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SHOODToken.approve(address,uint256)\",\"SHOODToken.transfer(address,uint256)\",\"SHOODToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":64,\"foundry.toml\":19,\"launch.json\":24,\"remappings.txt\":1,\"src/SHOODToken.sol\":110,\"test/SHOODLaunch.invariant.t.sol\":185,\"test/SHOODLaunch.t.sol\":452,\"test/SHOODToken.fuzz.t.sol\":430,\"test/SHOODToken.invariant.t.sol\":201,\"test/SHOODToken.t.sol\":208,\"test/mocks/LaunchProbes.sol\":164,\"test/mocks/PairToken.sol\":53,\"test/mocks/PoolManagerStub.sol\":237},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c7935afb5a35dcb0c3b33dfec7da1abe317779be7423c274c692b90b6d4d7ee4","verifiedTreeHash":"ec67181ad30e21384a51d65b0a08b0f87e03e186","verifierVersion":"0.1.0+5d71dfd4"},{"checks":[{"durationMs":2855,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.73s\nCompiler run successful!\n","passed":true},{"durationMs":4648,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/SHOODToken.t.sol:SHOODTokenTest\n[PASS] test_approveRevertsForZeroSpender() (gas: 32864)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64649)\n[PASS] test_constructorEmitsMintTransfer() (gas: 7963)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 25675)\n[PASS] test_deployerCannotPullWithoutAllowance() (gas: 94964)\n[PASS] test_metadata() (gas: 23688)\n[PASS] test_noMintOrAdminSelectorExists() (gas: 209340)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 558382)\n[PASS] test_transferFromInfiniteAllowanceIsNotDecremented() (gas: 177613)\n[PASS] test_transferFromRevertsBeyondBalanceEvenWithAllowance() (gas: 147706)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 93004)\n[PASS] test_transferFromSpendsAllowance() (gas: 198799)\n[PASS] test_transferFullBalanceLeavesZero() (gas: 71944)\n[PASS] test_transferMovesExactAmount() (gas: 84667)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92369)\n[PASS] test_transferRevertsToZeroAddress() (gas: 32937)\n[PASS] test_transferToSelfKeepsBalance() (gas: 94962)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44265)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 16.63ms (2.81ms CPU time)\n\nRan 34 tests for test/SHOODToken.fuzz.t.sol:SHOODTokenFuzzTest\n[PASS] testFuzz_approveOverwritesRatherThanAccumulates(uint256,uint256) (runs: 256, μ: 107380, ~: 107431)\n[PASS] testFuzz_nobodyCanMintFromAnySelector(bytes4,address) (runs: 256, μ: 52003, ~: 52090)\n[PASS] testFuzz_supplyNeverChangesWhateverIsTransferred(address,uint256) (runs: 256, μ: 82377, ~: 82743)\n[PASS] testFuzz_transferAboveBalanceRevertsForAnyShortfall(uint256,uint256) (runs: 256, μ: 107429, ~: 107883)\n[PASS] testFuzz_transferFromAboveAllowanceReverts(uint256,uint256) (runs: 256, μ: 153352, ~: 153491)\n[PASS] testFuzz_transferFromSpendsExactlyTheAmount(uint256,uint256,uint256) (runs: 256, μ: 196731, ~: 200595)\n[PASS] testFuzz_transferMovesExactlyTheAmountForAnyCaller(address,address,uint256,uint256) (runs: 256, μ: 137933, ~: 139392)\n[PASS] testFuzz_transferToSelfIsANoOp(uint256,uint256) (runs: 256, μ: 95845, ~: 96143)\n[PASS] test_allowanceIsDirectional() (gas: 74432)\n[PASS] test_approvalRaceIsOverwriteNotSum() (gas: 286055)\n[PASS] test_approveNeedsNoBalance() (gas: 72309)\n[PASS] test_approveSelfIsAllowedAndSpendable() (gas: 181896)\n[PASS] test_approveZeroRevokesAndEmits() (gas: 90160)\n[PASS] test_creationCodeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 575694)\n[PASS] test_eachDeploymentMintsItsOwnSupplyToItsOwnDeployer() (gas: 35839)\n[PASS] test_noFallbackAndNoReceive() (gas: 81986)\n[PASS] test_noOwnerOrAdminGetters() (gas: 143895)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 458358)\n[PASS] test_runtimeFitsEIP170() (gas: 4970)\n[PASS] test_sameTransferTwiceIsChargedTwice() (gas: 178965)\n[PASS] test_supplyIsExactlyTheManifestFigure() (gas: 16546)\n[PASS] test_transferFromAllowanceExactlyEqualToAmountSucceedsAndEmptiesIt() (gas: 205857)\n[PASS] test_transferFromDecrementEmitsApproval() (gas: 178775)\n[PASS] test_transferFromMaxMinusOneIsNotUnlimited() (gas: 173041)\n[PASS] test_transferFromTheZeroAddressRevertsEvenForZero() (gas: 63467)\n[PASS] test_transferFromToAThirdPartyWorks() (gas: 178202)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 94914)\n[PASS] test_transferFromZeroAmountWithoutAllowanceSucceeds() (gas: 49394)\n[PASS] test_transferMaxUint256Reverts() (gas: 38163)\n[PASS] test_transferOfOneWeiMoreThanSupplyRevertsEvenForTheDeployer() (gas: 38062)\n[PASS] test_transferToContractWithoutReceiverHookSucceeds() (gas: 64874)\n[PASS] test_transferToSelfAboveBalanceStillReverts() (gas: 90372)\n[PASS] test_wholeSupplyMovesInOneTransfer() (gas: 131514)\n[PASS] test_zeroTransferToZeroAddressStillReverts() (gas: 32969)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 45.65ms (178.52ms CPU time)\n\nRan 18 tests for test/SHOODLaunch.t.sol:SHOODLaunchTokenAsCurrency0Test\n[PASS] testFuzz_anyBuyArrivesWholeAndBooksBalance(uint96) (runs: 256, μ: 1351296, ~: 1351152)\n[PASS] testFuzz_roundTripReturnsEveryTokenAndNeverMoreIMDThanPaid(uint96,uint8) (runs: 256, μ: 1709715, ~: 1715444)\n[PASS] test_buyThenSellThroughTheManagerWithFee() (gas: 1624436)\n[PASS] test_distributorCannotOverclaim() (gas: 357153)\n[PASS] test_distributorClaimsArriveWholeDownToTheLastWei() (gas: 451230)\n[PASS] test_exactOutputBuyDeliversExactlyWhatWasAsked() (gas: 1317954)\n[PASS] test_factoryDeploymentMintsWholeSupplyToFactory() (gas: 35827)\n[PASS] test_launchFlowsArriveWholeAndLeaveNothingBehind() (gas: 437290)\n[PASS] test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0() (gas: 14316)\n[PASS] test_manyTradersConserveSupply() (gas: 5892684)\n[PASS] test_remainderGoesToRemainderToWhenPoolShareIsSmaller() (gas: 396897)\n[PASS] test_routerPullsWithAllowanceAndSettlesWhole() (gas: 1644748)\n[PASS] test_routerWithoutAllowanceCannotSell() (gas: 1528119)\n[PASS] test_seedBeyondFactoryBalanceRevertsInsideTheUnlock() (gas: 353315)\n[PASS] test_sellCannotDrainMoreIMDThanThePoolHolds() (gas: 1166960)\n[PASS] test_sellingMoreThanHeldRevertsWithTheTokensError() (gas: 1467737)\n[PASS] test_shortSettlementUnwindsTheWholeSwap() (gas: 1630006)\n[PASS] test_swapBeforeTheSeedReverts() (gas: 875191)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 47.14ms (83.27ms CPU time)\n\nRan 18 tests for test/SHOODLaunch.t.sol:SHOODLaunchTokenAsCurrency1Test\n[PASS] testFuzz_anyBuyArrivesWholeAndBooksBalance(uint96) (runs: 256, μ: 1351400, ~: 1351253)\n[PASS] testFuzz_roundTripReturnsEveryTokenAndNeverMoreIMDThanPaid(uint96,uint8) (runs: 256, μ: 1709808, ~: 1715545)\n[PASS] test_buyThenSellThroughTheManagerWithFee() (gas: 1624579)\n[PASS] test_distributorCannotOverclaim() (gas: 357211)\n[PASS] test_distributorClaimsArriveWholeDownToTheLastWei() (gas: 451288)\n[PASS] test_exactOutputBuyDeliversExactlyWhatWasAsked() (gas: 1318055)\n[PASS] test_factoryDeploymentMintsWholeSupplyToFactory() (gas: 35827)\n[PASS] test_launchFlowsArriveWholeAndLeaveNothingBehind() (gas: 437381)\n[PASS] test_manifestPriceMatchesEconomicsWhenTokenIsCurrency0() (gas: 14316)\n[PASS] test_manyTradersConserveSupply() (gas: 5893029)\n[PASS] test_remainderGoesToRemainderToWhenPoolShareIsSmaller() (gas: 396952)\n[PASS] test_routerPullsWithAllowanceAndSettlesWhole() (gas: 1644837)\n[PASS] test_routerWithoutAllowanceCannotSell() (gas: 1546371)\n[PASS] test_seedBeyondFactoryBalanceRevertsInsideTheUnlock() (gas: 353446)\n[PASS] test_sellCannotDrainMoreIMDThanThePoolHolds() (gas: 1167015)\n[PASS] test_sellingMoreThanHeldRevertsWithTheTokensError() (gas: 1485874)\n[PASS] test_shortSettlementUnwindsTheWholeSwap() (gas: 1630094)\n[PASS] test_swapBeforeTheSeedReverts() (gas: 875228)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 47.14ms (89.38ms CPU time)\n\nRan 1 test for test/SHOODLaunch.invariant.t.sol:SHOODLaunchInvariantTest\n[PASS]\nSHOODLaunchInvariantTest invariants:\n[PASS] invariant_factoryAndRemainderStayEmpty\n[PASS] invariant_managerHoldsExactlyWhatItsBooksSay\n[PASS] invariant_noOpenDeltaBetweenCalls\n[PASS] invariant_supplyConservedAcrossEveryHolder\n SHOODLaunchInvariantTest invariants (runs: 64, calls: 3072, reverts: 0)\n\n╭--------------------+------------------------+-------+---------+----------╮\n| Contract           | Selector               | Calls | Reverts | Discards |\n+==========================================================================+\n| SHOODLaunchHandler | buy                    | 796   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | claim                  | 774   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | sell                   | 750   | 0       | 0        |\n|--------------------+------------------------+-------+---------+----------|\n| SHOODLaunchHandler | transferBetweenHolders | 752   | 0       | 0        |\n╰--------------------+------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 506.75ms (503.65ms CPU time)\n\nRan 1 test for test/SHOODToken.invariant.t.sol:SHOODTokenInvariantTest\n[PASS]\nSHOODTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchGhost\n[PASS] invariant_balanceEqualsReceivedMinusSent\n[PASS] invariant_balancesSumToSupply\n[PASS] invariant_totalSupplyIsFixed\n[PASS] invariant_zeroAddressHoldsNothing\n SHOODTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------------+---------------------+-------+---------+----------╮\n| Contract          | Selector            | Calls | Reverts | Discards |\n+======================================================================+\n| SHOODTokenHandler | approve             | 1370  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transfer            | 1417  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferFrom        | 1324  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferFromTooMuch | 1325  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferToZero      | 1448  | 0       | 0        |\n|-------------------+---------------------+-------+---------+----------|\n| SHOODTokenHandler | transferTooMuch     | 1308  | 0       | 0        |\n╰-------------------+---------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.57s (4.56s CPU time)\n\nRan 6 test suites in 4.57s (5.23s CPU time): 90 tests passed, 0 failed, 0 skipped (90 total tests)\n","passed":true},{"durationMs":46,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SHOODToken.approve(address,uint256)\",\"SHOODToken.transfer(address,uint256)\",\"SHOODToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":64,\"foundry.toml\":19,\"launch.json\":24,\"remappings.txt\":1,\"src/SHOODToken.sol\":110,\"test/SHOODLaunch.invariant.t.sol\":185,\"test/SHOODLaunch.t.sol\":452,\"test/SHOODToken.fuzz.t.sol\":430,\"test/SHOODToken.invariant.t.sol\":201,\"test/SHOODToken.t.sol\":208,\"test/mocks/LaunchProbes.sol\":164,\"test/mocks/PairToken.sol\":53,\"test/mocks/PoolManagerStub.sol\":237},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"cc6ab7aef6d3c32737cf5c13f20dbaf26691a48ccb9fa94c9df9f4debbfa7f5a","verifiedTreeHash":"0868ac29b088d6051226570a7eb243608f272957","verifierVersion":"0.1.0+5d71dfd4"},{"checks":[{"durationMs":715,"exitCode":0,"name":"build","output":"Compiling 21 files with Solc 0.8.26\nSolc 0.8.26 finished in 616.87ms\nCompiler run successful!\n","passed":true},{"durationMs":77,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/SHOODToken.t.sol:SHOODTokenTest\n[PASS] test_approveRevertsForZeroSpender() (gas: 32864)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64649)\n[PASS] test_constructorEmitsMintTransfer() (gas: 7963)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 25675)\n[PASS] test_deployerCannotPullWithoutAllowance() (gas: 94964)\n[PASS] test_metadata() (gas: 23688)\n[PASS] test_noMintOrAdminSelectorExists() (gas: 209340)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 558382)\n[PASS] test_transferFromInfiniteAllowanceIsNotDecremented() (gas: 177613)\n[PASS] test_transferFromRevertsBeyondBalanceEvenWithAllowance() (gas: 147706)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 93004)\n[PASS] test_transferFromSpendsAllowance() (gas: 198799)\n[PASS] test_transferFullBalanceLeavesZero() (gas: 71944)\n[PASS] test_transferMovesExactAmount() (gas: 84667)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92369)\n[PASS] test_transferRevertsToZeroAddress() (gas: 32937)\n[PASS] test_transferToSelfKeepsBalance() (gas: 94962)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44265)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 1.78ms (3.84ms CPU time)\n\nRan 1 test suite in 2.61ms (1.78ms CPU time): 18 tests passed, 0 failed, 0 skipped (18 total tests)\n","passed":true},{"durationMs":32,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SHOODToken.approve(address,uint256)\",\"SHOODToken.transfer(address,uint256)\",\"SHOODToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":64,\"foundry.toml\":19,\"launch.json\":24,\"remappings.txt\":1,\"src/SHOODToken.sol\":110,\"test/SHOODToken.t.sol\":208},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":315,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":214,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SHOODToken.sol:23: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"fe412b12ea7db198bbdb41fd68fc10558d0f65f32cbebd0e76057868efb3a905","verifiedTreeHash":"d8d0e25b6e9585269716bfe73a2b69f0e3520f77","verifierVersion":"0.1.0+5d71dfd4"}]}