{"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":"421a6312-86d7-4433-9436-6c8fecc28997","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"8c90a9f6fdb2cf2627fdbbfd90fc9a752374b4962672be36690b05bf82eb490e","dependsOn":["build_contract_project"],"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":"aea056ad097bd736274cc43c541004c526377ab7c316a285c83a35fa794fe1e6","dependsOn":["build_contract_project"],"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":"91804f2009cdd6199d71b4328148d7c26f6b74ae5ded2569dc943feb610c3f7d","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":"9d2469ec0b9e7291472dac16204d4f606dbc623547ec2a482875eebb6de836c1","dependsOn":["build_contract_project"],"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":"3f5ca5c241686d84a70408687ce51118adca66050c8fe6386ca8284b6baad6aa","dependsOn":["build_contract_project"],"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":"61561878d20d2c4e709dcc6ba232110c83baa7f15dee54460b479b671d08db43","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b6503de65ad02f845827887c23da4c3b56ccc5df7a459db263bae6e549d92f7f","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"b6503de65ad02f845827887c23da4c3b56ccc5df7a459db263bae6e549d92f7f","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"932f81c5e34516d8f477dc72220804d4ca1a0a99805b7ddcf9d6052946468b88","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"ed6ff2f22c02ce0075ad5312af56556e80c62da4d46961ed3a67b7b2ffe78ff7","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":"A custom token: Swarm Made (MADE).\nToken name: Swarm Made\nToken symbol: MADE\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nWhat it does: A plain community token. No fees, no minting after launch, no owner powers, no transfer rules.\nPool: 88%   Starting market cap: 2500 IMD   Rest of supply to: 0x1846927b920FA2D41766ED4F88F1d10e640F1590","parentJobId":null,"planHash":"477f43301eca2b53b5c0542dbc2a10314f1b2fdfd60eb4ed65f0c76ee2035daf","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"421a6312-86d7-4433-9436-6c8fecc28997","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-741-swarm-made"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51071","feedbackHash":"9a0d781ddb4dab9f483f192eee28793b109ce7bfb3384af795fc0c76de15f100","nodeKey":"audit_economics","submissionHash":"8c90a9f6fdb2cf2627fdbbfd90fc9a752374b4962672be36690b05bf82eb490e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51145","feedbackHash":"05b48a759284c330bcf836d52318397541e58aee21931decdddad67d8bda7436","nodeKey":"audit_flow","submissionHash":"aea056ad097bd736274cc43c541004c526377ab7c316a285c83a35fa794fe1e6","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51474","feedbackHash":"7310464992578022e78af16c9d81d9e54bf6cfd5f0f88ae58c63cdc08231a46d","nodeKey":"audit_judge","submissionHash":"91804f2009cdd6199d71b4328148d7c26f6b74ae5ded2569dc943feb610c3f7d","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51511","feedbackHash":"5c55dd8ba54da71a28c4321de020f979e228af00c00aa079af1fd879b3681301","nodeKey":"audit_math","submissionHash":"9d2469ec0b9e7291472dac16204d4f606dbc623547ec2a482875eebb6de836c1","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51509","feedbackHash":"2d198537df5a8470660bded0bc1eab47b767368ebbf58059be57e689fe80aa83","nodeKey":"audit_permissions","submissionHash":"3f5ca5c241686d84a70408687ce51118adca66050c8fe6386ca8284b6baad6aa","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51040","feedbackHash":"99dcf9712ef6127544606ff70280193f029dbadc245e71212eb092347a998cc7","nodeKey":"build_contract_project","submissionHash":"61561878d20d2c4e709dcc6ba232110c83baa7f15dee54460b479b671d08db43","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51084","feedbackHash":"ad9190bd3d010e72f4834e85cbd929fe755a454481c0cbb48aebf46fd6d01933","nodeKey":"manifest","submissionHash":"932f81c5e34516d8f477dc72220804d4ca1a0a99805b7ddcf9d6052946468b88","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52179","feedbackHash":"5709eea281fc8c7b7a8062a0edfc81bd8f5611402204422475d9c6ceec59f221","nodeKey":"write_foundry_tests","submissionHash":"ed6ff2f22c02ce0075ad5312af56556e80c62da4d46961ed3a67b7b2ffe78ff7","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"b0529181d1c1a2cc7fecbcb198f7ca191030ac54ba2a81376b09e8f477a185b8","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"74a99f640688d37b","findings":[],"hash":"3f5ca5c241686d84a70408687ce51118adca66050c8fe6386ca8284b6baad6aa","nodeId":"9a11ab9f-097c-4b82-ae67-29276cd4220c","outcome":"completed","summary":"The review is complete. No defects were substantiated in the assigned area, and the findings file records a clean result with full coverage.\n\n**What I reviewed.** The token at `src/SwarmMade.sol` is OpenZeppelin v5.1.0 ERC20 with a no-argument constructor that mints the fixed supply to the caller. I checked it against the Senior Auditor's Mindset and the Access Control, Trust Gap and Asymmetry guides, read the protected floor test, and compared the vendored dependencies to upstream.\n\n**Results.**\n- **Access control:** the permission map is empty. There is no owner, role, modifier, initializer, proxy, fallback or receive. The compiled ABI exposes twelve methods, nine of them views. A fuzz over arbitrary callers, including the factory and the deployer, showed none can move a holder's balance without that holder's allowance.\n- **Trust gap:** the token has no privileged actor and no economic formula, so no seam exists. The only trust assumption is the externally supplied remainder address and the IMD 18-decimal cap, both copied verbatim from the job. I recorded them as a trust assumption row, not a finding.\n- **Asymmetry:** transfer and transferFrom were run side by side on identical inputs and move identical amounts. The only difference is the allowance spend. Both treat the factory, distributor and PoolManager like any other address, so the launch flows arrive whole.\n- **Dependency integrity:** the five vendored OpenZeppelin files are byte-identical by SHA-256 to upstream commit 69c8def5, and the forge-std Test file matches tag v1.9.7. No git submodules are present.\n- **Static analysis lead:** the aderyn large-numeric-literal note on line 27 is a style remark. The literal evaluates to exactly 1e27 and the tests assert it.\n\n**Verification.** The project's 36 tests pass, formatting is clean, and my four scratch probe tests passed before I removed them. The working tree is unchanged apart from `.imd-findings.json`, which holds zero findings and seven coverage rows: one `holds` for each of the three listed entry points plus four invariant and trust-assumption rows.\n\n**Open items outside this task.** The live pool seed and swap against a real Uniswap v4 PoolManager run in the floor harness, not here. The manifest step still needs to lowercase the remainder address to satisfy the schema pattern.","treeHash":null,"usage":{"cachedInputTokens":513712,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":10645,"runtime":"claude","turns":26,"wallClockMs":171366}},{"artifacts":[],"attempt":1,"bundleHash":"17dbbff1d93181924792d53233bc006c4fd5db12600ba27323631a882af1666d","device":"df74f6c887684f20","findings":[],"hash":"61561878d20d2c4e709dcc6ba232110c83baa7f15dee54460b479b671d08db43","nodeId":"f68ed087-3ab9-4627-bc23-091b47a7be0a","outcome":"completed","summary":"The Swarm Made (MADE) token project is complete, verified, and committed on `main`.\n\n**What was delivered**\n\n- `src/SwarmMade.sol` is OpenZeppelin v5 `ERC20` with a constructor that mints the full one billion tokens, at 18 decimals, to the deployer. It has no owner, minter, fee, pause, blocklist, fallback, or upgrade path. The constructor takes no arguments, so the manifest's constructor args are empty and no launch addresses need exempting.\n- `script/DeploySwarmMade.s.sol` holds the launch parameters as constants and exposes a deploy function that tests call directly. No environment reads, no key handling.\n- Two test files with 36 tests cover metadata, supply, transfer and allowance success and failure paths, three fuzz tests, rejection of 24 privileged selectors from three callers, an opcode scan for DELEGATECALL, CALLCODE and SELFDESTRUCT, CREATE2 deployment from a factory stand-in, and the exact 10% / 88% / 2% launch flows plus a whole claim.\n- `README.md` and `docs/DEPLOYMENT.md` record the manifest fields, the supply split, the price derivation, the assumptions, and who owns each operational step.\n- `foundry.toml` pins solc 0.8.26 with `bytecode_hash = \"none\"` and CBOR metadata off, and disables ffi and filesystem access. forge-std v1.9.7 and the five OpenZeppelin v5.1.0 files the token needs are vendored as plain files, with no submodules.\n\n**Verification results**\n\n| Check | Result |\n|-------|--------|\n| `forge build --offline` | clean |\n| `forge test --offline` | 36 passed, 0 failed |\n| `forge fmt --check` | clean |\n\n**Open items for the next steps**\n\n- The manifest step needs the IMD token address from network.json for `pool.pairedCurrency`. The opening cap value assumes IMD has 18 decimals. Both are called out in the deployment doc.\n- The remainder address was copied verbatim from the job and should be confirmed with the requester before admission.\n- The protected floor's live pool seed and swap against a real v4 PoolManager could not be run here, since that harness and v4-core are outside this repository. Every other floor check has an equivalent local test. Slither and Mythril did not run and are listed for the independent reviewer.","treeHash":"28cd958952ae970c169ccdec1b53f00947599e5d","usage":{"cachedInputTokens":584185,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":21603,"runtime":"claude","turns":21,"wallClockMs":281217}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"39da99ded7f125c8","findings":[],"hash":"8c90a9f6fdb2cf2627fdbbfd90fc9a752374b4962672be36690b05bf82eb490e","nodeId":"fc1f0a5a-f5cb-4f2a-bb6d-f874b84fc4ef","outcome":"completed","summary":"The review is complete. The findings file is written and valid, and the working tree holds no tracked changes.\n\n## Result\n\n**No defects found** in the Economic Security, Invariant and Flow Gap areas. The findings file at `.imd-findings.json` holds an empty findings list and eight coverage rows: the three state-changing entry points plus five invariants and economic checks, all marked `holds`.\n\n## What I checked\n\n- **Token source.** `src/SwarmMade.sol` is 30 lines: unmodified OpenZeppelin v5.1.0 `ERC20` plus a constructor that mints 1e27 to the deployer. The five vendored OpenZeppelin files diff byte-identical to upstream commit 69c8def5, vendored as plain files with no submodule.\n- **Entry-point surface.** The compiled ABI exposes only `approve`, `transfer` and `transferFrom` as state-changing. There is no receive, fallback, immutable or link reference. Each writer was traced through `_update` and `_spendAllowance`: zero-address and insufficient-balance paths revert, amounts move exactly, supply is never touched.\n- **Conservation invariant.** A stateful fuzz under `test/scratch/` with eight actors randomly transferring, approving and spending allowances kept the sum of balances and `totalSupply` at exactly 1e27 across all runs. A second fuzz confirmed no selector outside the three writers changes any balance or the supply.\n- **Launch flows.** The 10% swarm, 88% pool and 2% remainder split was replayed with the token: every hop arrives whole, the remainder is exactly 200 basis points with no rounding dust, and the factory is empty afterwards with nothing left to move. Script constants for pool share, opening cap and remainder address match the job verbatim.\n- **Pool economics.** A 2500 IMD cap over 1e27 supply gives a price of 2.5e-6 IMD per MADE. For both currency orderings the derived sqrtPriceX96 sits inside Uniswap v4's bounds, the tick is far inside the limits, and the single-sided liquidity for 880M tokens fits uint128 and the per-tick cap.\n- **Static-analysis leads.** Slither reported nothing. Aderyn's large-numeric-literal note on line 27 is the supply constant 1e27, confirmed correct by the project tests and my replay.\n\n## Observations, not defects\n\n- **IMD decimals assumption.** The opening cap of 2500e18 minor units assumes the chain's IMD token has 18 decimals. The docs state this openly and no `network.json` was supplied to confirm it. This belongs to the manifest step, which must check the pair token's decimals before writing `initialMarketCapWei`.\n- **Standard ERC-20 approve race.** Allowance changes can be front-run, as in every plain ERC-20. The design explicitly requests unmodified OpenZeppelin behaviour, so this is a known property, not a finding.\n- **Trust at deployment.** The constructor trusts whoever calls it. In production that is the factory through CREATE2, which the protected floor test enforces.\n\n## Not reached\n\nThe protected floor's live Uniswap v4 seed and swap could not be run locally because v4-core is not in this repository. The token has no transfer logic that could distinguish the PoolManager from any other caller, so the exact-amount guarantee the flow test checks holds by construction.","treeHash":null,"usage":{"cachedInputTokens":584335,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":15192,"runtime":"claude","turns":24,"wallClockMs":261214}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0e3b71e2ffcd200b","findings":[],"hash":"91804f2009cdd6199d71b4328148d7c26f6b74ae5ded2569dc943feb610c3f7d","nodeId":"51d9505d-0a30-4573-a6e4-e3161aa208eb","outcome":"completed","summary":"The review is complete. No defects were found, and the findings file holds an empty list with a full coverage record.\n\n**What I checked**\n\n- The token in `src/SwarmMade.sol` is OpenZeppelin v5.1 ERC20 with nothing added. The constructor takes no arguments and mints the whole supply once to the caller.\n- The compiled ABI exposes only the standard ERC20 functions plus three public constants. There is no mint, owner, pause, blocklist, burn, receive or fallback.\n- A PUSH-aware scan of the runtime bytecode found no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- The vendored OpenZeppelin and forge-std files are committed as ordinary files. There is no submodule.\n- The manifest matches the code and the job: empty constructor arguments, the exact minted supply, 18 decimals, and economics copied verbatim with lowercase addresses. The sqrtPriceX96 value is within one unit of the rounded derivation and is provenance only.\n- The project's own suite builds and passes, 88 tests with 0 failures.\n\n**Specialists and tools**\n\nAll four specialists and the test writer reported no findings, so there was nothing to reproduce or merge. Slither reported nothing. Aderyn's only line was a low-impact large-numeric-literal note on the supply constant, which is a style remark and not a defect.\n\n**One limitation**\n\nThe protected floor test imports Uniswap v4-core, which this tree does not vendor, so it could not be executed here. I traced each of its assertions against the stock ERC20 by hand and every one holds. That is recorded in the coverage row rather than claimed as a run.\n\n**Coverage**\n\nAll three entry points hold: approve, transfer and transferFrom. Five additional rows record the supply invariant, the absence of a privileged surface, the opcode and library checks, the manifest consistency, and the test results.","treeHash":null,"usage":{"cachedInputTokens":441506,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":5706,"runtime":"claude","turns":11,"wallClockMs":98448}},{"artifacts":[],"attempt":2,"bundleHash":"8da523747a507d7d898f368c5899f021f8cacee3fa3dc7b498930f0e317f73c4","device":"7c0191a32541eb74","findings":[],"hash":"932f81c5e34516d8f477dc72220804d4ca1a0a99805b7ddcf9d6052946468b88","nodeId":"a860c13d-ab6c-4c47-a35d-6222ee6649aa","outcome":"completed","summary":"Done. The manifest is written and verified against the accepted token.\n\n**What I wrote:** `launch.json` at the repository root, a custom_token manifest for Swarm Made (MADE).\n\n- **Token:** contract SwarmMade, name Swarm Made, symbol MADE, 18 decimals, empty constructorArgs, totalSupply 1000000000000000000000000000. The compiled ABI confirms the constructor takes no inputs, and the source mints exactly that amount to msg.sender once.\n- **Contracts:** empty. The accepted tree has only the token, so no application contracts are named.\n- **Pool:** pairedCurrency is the IMD pair token address from the job, fee 3000 with tickSpacing 60, and initialPrice is the sqrtPriceX96 of 2,500 IMD divided by the supply assuming MADE sorts as currency0. The notes give the inverse-ordering value and state that the deployer derives the real price from economics.\n- **Economics:** copied verbatim from the job, including the lowercase remainderTo.\n- **Notes:** 2600 characters describing only what is in the tree.\n\n**Checks run:**\n\n- A Python pass over every schema constraint (field sets, patterns, ranges, fee tier, economics equality, notes length) passed.\n- A scratch Foundry test deploying the token from a pranked factory address confirmed supply, balance, decimals, name and symbol match the manifest.\n- `forge build` and `forge test` pass with 37 tests, 0 failures, and `forge fmt --check` is clean.\n- `git status` shows launch.json as the only change. test/scratch is gitignored and is deleted before submission.\n\n**Assumption worth noting:** the IMD pair token is taken to have 18 decimals, which is what the job's initialMarketCapWei of 2500000000000000000000 implies. The prior rejection was a runtime model-reporting error, not a content fault, so nothing in this manifest works around it.","treeHash":"a02c251860ffd6d3e4b3494519daf9b007ca173e","usage":{"cachedInputTokens":294298,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":5685,"runtime":"claude","turns":13,"wallClockMs":80369}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fbcdfc017217af1f","findings":[],"hash":"9d2469ec0b9e7291472dac16204d4f606dbc623547ec2a482875eebb6de836c1","nodeId":"2578463b-d68e-48f8-935a-51b8f01369cd","outcome":"completed","summary":"The review is complete and found no defects in the assigned area. The findings file at `.imd-findings.json` holds an empty findings list and nine coverage rows, and the working tree is otherwise clean.\n\n**What I checked, against the Math Precision, Boundary and Numerical Gap guides**\n\n- **Math precision.** The only arithmetic the token owns is the supply constant, which folds to exactly 1e27 and matches the brief and manifest value. Every other operation is OpenZeppelin v5.1.0 code, where the unchecked subtract and add in the balance update sit behind a checked balance guard and are bounded by the total supply. The aderyn large-literal lead resolved to that constant and is not a defect.\n- **Boundary.** The token has no external calls, no payable, receive or fallback, and no bytes decoding. The only sentinel branches are the zero-address reverts inherited from OpenZeppelin. I drove max-uint, balance-plus-one, exact-balance, zero-value, self-transfer, max-minus-one allowance and zero-allowance zero-value cases through the three entry points. All behaved as the standard specifies.\n- **Numerical gap.** A fuzzed sequence of random transfers kept the sum of balances equal to the supply. The launch split is exact with no dust because 1e27 divides evenly by ten thousand. The opening price for either currency ordering gives a sqrtPriceX96 well inside Uniswap v4 bounds, assuming the IMD pair token has 18 decimals as the deployment doc states.\n- **Vendored dependency.** All five OpenZeppelin files hash identically to upstream commit 69c8def5, so the ERC20 math is unmodified.\n\n**Coverage.** All three entry points are marked holds, plus rows for the supply invariant, balance-sum invariant, split arithmetic, price derivation, vendored library integrity and the boundary enumeration. Nothing was left unreached.\n\n**Open item outside the code.** The price math depends on the chain's IMD token having 18 decimals. That could not be verified here because no network.json was supplied, and the deployment doc already flags it as an assumption to confirm before admission.","treeHash":null,"usage":{"cachedInputTokens":701233,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":12439,"runtime":"claude","turns":22,"wallClockMs":177597}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3b9f88f55251764d","findings":[],"hash":"aea056ad097bd736274cc43c541004c526377ab7c316a285c83a35fa794fe1e6","nodeId":"8ef2703a-8f9b-4bb8-a4c1-6e94af85e135","outcome":"completed","summary":"The review is complete. The tree is clean apart from the required output and build artifacts that the repository's exclude rules already ignore.\n\n**Outcome: no defects found.** `.imd-findings.json` holds an empty findings list and seven coverage rows, all `holds`.\n\n**What I checked, against the Execution Trace, Periphery and First Principles guides**\n\n- **Token source.** `src/SwarmMade.sol` is OpenZeppelin v5 ERC20 plus a constructor that mints the fixed supply to the caller. The compiled ABI exposes only approve, transfer, transferFrom and views. There is no receive, fallback, owner, mint, burn, pause or hook, so unknown selectors and ETH revert.\n- **Execution flow.** I traced each entry point through the inherited transfer and allowance paths: zero-address sentinels revert, insufficient balance and allowance revert with ERC-6093 errors, infinite allowance never decrements and is still bounded by the sender's balance, and self-transfers through both paths conserve value. A scratch Foundry suite confirmed each of these concretely, then was deleted.\n- **Periphery.** All five vendored OpenZeppelin files hash identically to upstream tag v5.1.0, and sampled forge-std files match the claimed commit. Both are ordinary files, not submodules.\n- **First principles and launch floor.** Under CREATE2 from the factory the factory holds the whole supply. Transfers by the factory, distributor and PoolManager take the same untaxed path, so the swarm share, pool seed and remainder arrive whole. Supply can neither grow nor shrink after construction. The runtime contains no DELEGATECALL, CALLCODE or SELFDESTRUCT. Decimals are 18 and the supply constant is 1e27, matching the brief and the script constants.\n- **Static analysis leads.** Slither reported nothing. Aderyn's large-numeric-literal note is style only and does not affect behaviour.\n\n**One documented assumption, not a defect.** The opening cap of 2500 IMD is encoded as 2500e18, which assumes IMD has 18 decimals. The deployment doc already flags this. The manifest step should confirm it against network.json.","treeHash":null,"usage":{"cachedInputTokens":637960,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":11136,"runtime":"claude","turns":26,"wallClockMs":170018}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3987a51ff810f3b9","findings":[],"hash":"cf16ef06baf6a937f5aea92db51a423def00661165f9a713bf3aff4b27ab20b4","nodeId":"a860c13d-ab6c-4c47-a35d-6222ee6649aa","outcome":"failed","summary":"runtime reported <synthetic>, not the required premium model claude-fable-5-1","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":"<synthetic>","outputTokens":0,"runtime":"claude","turns":1,"wallClockMs":176436}},{"artifacts":[],"attempt":1,"bundleHash":"1181b996620aa4aaf4e36382ba49e997e2f059d76c05a02d8f556c1d650f4aec","device":"02f22d6f13810ca8","findings":[],"hash":"ed6ff2f22c02ce0075ad5312af56556e80c62da4d46961ed3a67b7b2ffe78ff7","nodeId":"253fb052-70c8-4199-a1b7-6ee81581dd7b","outcome":"completed","summary":"Done. `forge build` is clean and `forge test` passes: **88 tests, 0 failures, ~11s** (36 pre-existing + 52 new). Only `test/` was touched.\n\n## What I added\n\n**`test/SwarmMadeInvariant.t.sol`** — invariant tests over random call sequences\n- `SwarmMadeHandler`: 14 bounded actions across 7 launch accounts (factory, distributor, pool manager, `remainderTo`, three users) plus arbitrary new addresses the fuzzer invents. Keeps an independent ERC‑20 reference model of every balance and allowance. Every action is total (no `vm.assume`); every must-fail action uses `vm.expectRevert`, and the campaign runs with `fail-on-revert = true` so a wrongly succeeding call or a handler assertion fails the run instead of being discarded.\n- Six invariants checked after every call: fixed supply; tracked balances sum to the supply; every balance matches the model; every allowance matches the model (plus an `afterInvariant` sweep that no ungranted allowance exists); tokens sent to the token contract never leave; no ether / no code change / constant metadata.\n- Two deterministic tests prove the harness is not vacuous: the launch starting state is right, and every handler path (success and each rejection branch) is reachable with its counters.\n- Verified by mutation testing in scratch: nine deliberately broken tokens (fee-on-transfer, hidden `mint`, `seize`, allowance not decremented, infinite allowance decremented, `transfer` returning false, blocklist, `receive()`, dust rounding) were each caught, with the correct assertion message. Also confirmed this forge version honours the inline `fail-on-revert` key.\n\n**`test/SwarmMadeAdversarial.t.sol`** — 42 edge-case and property tests the existing suite didn't reach: `transferFrom` with the zero address as owner, self-pull without self-approval, zero-value pull needing no allowance, allowance rollback when the balance check fails, error precedence (allowance → receiver → balance), max−1 allowance, allowances not following tokens, dirty/short/extra calldata, exact 32-byte `true` return, staticcall behaviour, `vm.record` proving a transfer writes exactly two slots (no hidden bookkeeping), no receiver hooks (reverting recipient never called), a bytecode scan proving no CALL/CREATE/ORIGIN/TIMESTAMP/etc. (no transfer rules possible), a dispatcher scan proving the external surface is exactly ERC‑20 + the three constants, CREATE2 same-salt replay fails, constructor refuses ether. Nine fuzz properties at 1000 runs incl. a full `transferFrom` outcome oracle.\n\n**`test/DeploySwarmMadeAdversarial.t.sol`** — launch parameters vs. the pool: opening price is representable as a v4 `sqrtPriceX96` in either currency order and doesn't truncate to zero; `remainderTo` is usable; `deploy()` twice yields independent tokens; `run()` mints to the broadcaster, not the script.\n\n## Findings\n\nNone to report, so no `.imd-findings.json` was written. I diffed the vendored OpenZeppelin files against upstream v5.1.0 (byte-identical), and nothing in the token, script, or constants deviates from the brief. The one behaviour worth noting (not a defect, inherent to plain ERC‑20 and consistent with \"no owner powers\") is that tokens sent to the token's own address are unrecoverable; the invariant suite pins that nobody, including the deployer, can move them.","treeHash":"ef2ea800a145b15412df78971b90503522efe056","usage":{"cachedInputTokens":3338211,"inputTokens":61,"model":"claude-fable-5-1","outputTokens":68035,"runtime":"claude","turns":37,"wallClockMs":2623118}}],"verification":[{"checks":[{"durationMs":1068,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 956.58ms\nCompiler run successful!\n","passed":true},{"durationMs":113,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/DeploySwarmMade.t.sol:DeploySwarmMadeTest\n[PASS] test_constructorTakesNoArguments() (gas: 5041)\n[PASS] test_deployMintsWholeSupplyToTheCaller() (gas: 573514)\n[PASS] test_launchConfigAgreesWithTheDeployedToken() (gas: 542464)\n[PASS] test_launchConfigMatchesTheBrief() (gas: 11685)\n[PASS] test_launchSharesSumToTheSupply() (gas: 11777)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 746.96µs (1.14ms CPU time)\n\nRan 31 tests for test/SwarmMade.t.sol:SwarmMadeTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 97566, ~: 97909)\nLogs:\n  Bound result 816104404697089497731\n  Bound result 857776698238617517839322454\n\n[PASS] testFuzz_transferConservesBalances(address,uint256) (runs: 256, μ: 97171, ~: 97411)\nLogs:\n  Bound result 533298857252514935576755110\n\n[PASS] testFuzz_transferFromNeverExceedsAllowance(uint256,uint256) (runs: 256, μ: 125846, ~: 102514)\nLogs:\n  Bound result 816104404697089497731\n  Bound result 476359226994955541329154546\n\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 92315)\n[PASS] test_approveRevertsForZeroSpender() (gas: 30387)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 67658)\n[PASS] test_constructorEmitsSingleMintTransfer() (gas: 5530)\n[PASS] test_create2AddressIsDeterministic() (gas: 248903)\n[PASS] test_create2DeploymentMintsToTheFactoryNotTheOrigin() (gas: 273807)\n[PASS] test_deployerHasNoSpecialPowerOverHolders() (gas: 97207)\n[PASS] test_launchFlowsMoveExactAmounts() (gas: 629141)\n[PASS] test_metadata() (gas: 50495)\n[PASS] test_noPrivilegedFunctionsExist() (gas: 2720785)\n[PASS] test_rejectsEther() (gas: 71425)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2344835)\n[PASS] test_supplyIsOneBillionWithEighteenDecimals() (gas: 34759)\n[PASS] test_transferChainPreservesSupply() (gas: 225409)\n[PASS] test_transferFromRevertsAboveAllowance() (gas: 87602)\n[PASS] test_transferFromRevertsToZeroAddress() (gas: 88239)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 146060)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 40401)\n[PASS] test_transferFromSpendsAllowanceExactly() (gas: 153454)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrement() (gas: 122925)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 95552)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37782)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 90293)\n[PASS] test_transferRevertsToZeroAddress() (gas: 30463)\n[PASS] test_transferToSelfIsNoOp() (gas: 43399)\n[PASS] test_transferWholeBalance() (gas: 75914)\n[PASS] test_transferZeroAmountSucceeds() (gas: 84233)\n[PASS] test_wholeSupplyMintedToDeployer() (gas: 12866)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 13.13ms (36.93ms CPU time)\n\nRan 2 test suites in 13.78ms (13.88ms CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":44,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmMade.approve(address,uint256)\",\"SwarmMade.transfer(address,uint256)\",\"SwarmMade.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":6,\"README.md\":92,\"docs/DEPLOYMENT.md\":116,\"foundry.toml\":24,\"remappings.txt\":2,\"script/DeploySwarmMade.s.sol\":56,\"src/SwarmMade.sol\":33,\"test/DeploySwarmMade.t.sol\":64,\"test/SwarmMade.t.sol\":384},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":474,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":255,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SwarmMade.sol:27: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"61561878d20d2c4e709dcc6ba232110c83baa7f15dee54460b479b671d08db43","verifiedTreeHash":"28cd958952ae970c169ccdec1b53f00947599e5d","verifierVersion":"0.1.0+f8d984f2"},{"checks":[{"durationMs":1174,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.05s\nCompiler run successful!\n","passed":true},{"durationMs":107,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/DeploySwarmMade.t.sol:DeploySwarmMadeTest\n[PASS] test_constructorTakesNoArguments() (gas: 5041)\n[PASS] test_deployMintsWholeSupplyToTheCaller() (gas: 573514)\n[PASS] test_launchConfigAgreesWithTheDeployedToken() (gas: 542464)\n[PASS] test_launchConfigMatchesTheBrief() (gas: 11685)\n[PASS] test_launchSharesSumToTheSupply() (gas: 11777)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 542.12µs (618.13µs CPU time)\n\nRan 31 tests for test/SwarmMade.t.sol:SwarmMadeTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 97627, ~: 97940)\nLogs:\n  Bound result 880009313744887727740685040\n  Bound result 904346038916196851098724832\n\n[PASS] testFuzz_transferConservesBalances(address,uint256) (runs: 256, μ: 97257, ~: 97423)\nLogs:\n  Bound result 255\n\n[PASS] testFuzz_transferFromNeverExceedsAllowance(uint256,uint256) (runs: 256, μ: 127737, ~: 102526)\nLogs:\n  Bound result 173061535819449403811317495\n  Bound result 149563715693398172\n\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 92315)\n[PASS] test_approveRevertsForZeroSpender() (gas: 30387)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 67658)\n[PASS] test_constructorEmitsSingleMintTransfer() (gas: 5530)\n[PASS] test_create2AddressIsDeterministic() (gas: 248903)\n[PASS] test_create2DeploymentMintsToTheFactoryNotTheOrigin() (gas: 273807)\n[PASS] test_deployerHasNoSpecialPowerOverHolders() (gas: 97207)\n[PASS] test_launchFlowsMoveExactAmounts() (gas: 629141)\n[PASS] test_metadata() (gas: 50495)\n[PASS] test_noPrivilegedFunctionsExist() (gas: 2720785)\n[PASS] test_rejectsEther() (gas: 71425)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2344835)\n[PASS] test_supplyIsOneBillionWithEighteenDecimals() (gas: 34759)\n[PASS] test_transferChainPreservesSupply() (gas: 225409)\n[PASS] test_transferFromRevertsAboveAllowance() (gas: 87602)\n[PASS] test_transferFromRevertsToZeroAddress() (gas: 88239)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 146060)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 40401)\n[PASS] test_transferFromSpendsAllowanceExactly() (gas: 153454)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrement() (gas: 122925)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 95552)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37782)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 90293)\n[PASS] test_transferRevertsToZeroAddress() (gas: 30463)\n[PASS] test_transferToSelfIsNoOp() (gas: 43399)\n[PASS] test_transferWholeBalance() (gas: 75914)\n[PASS] test_transferZeroAmountSucceeds() (gas: 84233)\n[PASS] test_wholeSupplyMintedToDeployer() (gas: 12866)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 12.41ms (35.65ms CPU time)\n\nRan 2 test suites in 13.33ms (12.95ms CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":44,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmMade.approve(address,uint256)\",\"SwarmMade.transfer(address,uint256)\",\"SwarmMade.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":6,\"README.md\":92,\"docs/DEPLOYMENT.md\":116,\"foundry.toml\":24,\"launch.json\":24,\"remappings.txt\":2,\"script/DeploySwarmMade.s.sol\":56,\"src/SwarmMade.sol\":33,\"test/DeploySwarmMade.t.sol\":64,\"test/SwarmMade.t.sol\":384},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"932f81c5e34516d8f477dc72220804d4ca1a0a99805b7ddcf9d6052946468b88","verifiedTreeHash":"a02c251860ffd6d3e4b3494519daf9b007ca173e","verifierVersion":"0.1.0+f8d984f2"},{"checks":[{"durationMs":3281,"exitCode":0,"name":"build","output":"Compiling 32 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.07s\nCompiler run successful!\n","passed":true},{"durationMs":4694,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 7 tests for test/DeploySwarmMadeAdversarial.t.sol:DeploySwarmMadeAdversarialTest\n[PASS] test_deployTwiceGivesTwoIndependentTokens() (gas: 1146471)\n[PASS] test_launchConfigAgreesWithThePublicConstants() (gas: 32015)\n[PASS] test_openingPriceIsRepresentableInEitherCurrencyOrder() (gas: 61241)\n[PASS] test_remainderAddressIsUsable() (gas: 588250)\n[PASS] test_runMintsToTheBroadcasterNotTheScript() (gas: 555432)\n[PASS] test_scriptHoldsNoStateAndNoConfiguration() (gas: 874540)\n[PASS] test_splitLeavesTheRemainderTheBriefDescribes() (gas: 11619)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 66.13ms (6.37ms CPU time)\n\nRan 5 tests for test/DeploySwarmMade.t.sol:DeploySwarmMadeTest\n[PASS] test_constructorTakesNoArguments() (gas: 5041)\n[PASS] test_deployMintsWholeSupplyToTheCaller() (gas: 573514)\n[PASS] test_launchConfigAgreesWithTheDeployedToken() (gas: 542464)\n[PASS] test_launchConfigMatchesTheBrief() (gas: 11685)\n[PASS] test_launchSharesSumToTheSupply() (gas: 11777)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 99.15ms (878.51µs CPU time)\n\nRan 31 tests for test/SwarmMade.t.sol:SwarmMadeTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 97829, ~: 97921)\nLogs:\n  Bound result 763150020587770851954219385\n  Bound result 947475453119767308238171436\n\n[PASS] testFuzz_transferConservesBalances(address,uint256) (runs: 256, μ: 97220, ~: 97411)\nLogs:\n  Bound result 45645663444518236813\n\n[PASS] testFuzz_transferFromNeverExceedsAllowance(uint256,uint256) (runs: 256, μ: 128708, ~: 102526)\nLogs:\n  Bound result 763150020587770851948479442\n  Bound result 75535470850716055048976\n\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 92315)\n[PASS] test_approveRevertsForZeroSpender() (gas: 30387)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 67658)\n[PASS] test_constructorEmitsSingleMintTransfer() (gas: 5530)\n[PASS] test_create2AddressIsDeterministic() (gas: 248903)\n[PASS] test_create2DeploymentMintsToTheFactoryNotTheOrigin() (gas: 273807)\n[PASS] test_deployerHasNoSpecialPowerOverHolders() (gas: 97207)\n[PASS] test_launchFlowsMoveExactAmounts() (gas: 629141)\n[PASS] test_metadata() (gas: 50495)\n[PASS] test_noPrivilegedFunctionsExist() (gas: 2720785)\n[PASS] test_rejectsEther() (gas: 71425)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2344835)\n[PASS] test_supplyIsOneBillionWithEighteenDecimals() (gas: 34759)\n[PASS] test_transferChainPreservesSupply() (gas: 225409)\n[PASS] test_transferFromRevertsAboveAllowance() (gas: 87602)\n[PASS] test_transferFromRevertsToZeroAddress() (gas: 88239)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 146060)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 40401)\n[PASS] test_transferFromSpendsAllowanceExactly() (gas: 153454)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrement() (gas: 122925)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 95552)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37782)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 90293)\n[PASS] test_transferRevertsToZeroAddress() (gas: 30463)\n[PASS] test_transferToSelfIsNoOp() (gas: 43399)\n[PASS] test_transferWholeBalance() (gas: 75914)\n[PASS] test_transferZeroAmountSucceeds() (gas: 84233)\n[PASS] test_wholeSupplyMintedToDeployer() (gas: 12866)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 105.30ms (231.51ms CPU time)\n\nRan 42 tests for test/SwarmMadeAdversarial.t.sol:SwarmMadeAdversarialTest\n[PASS] testFuzz_approveNeverMovesTokens(address,address,uint256) (runs: 1000, μ: 92880, ~: 99197)\n[PASS] testFuzz_roundTripRestoresBothBalances(uint256) (runs: 1000, μ: 116684, ~: 116656)\nLogs:\n  Bound result 465722747803482405865638939\n\n[PASS] testFuzz_selfTransferChangesNothingOrReverts(uint256,uint256) (runs: 1000, μ: 109315, ~: 109504)\nLogs:\n  Bound result 1000\n\n[PASS] testFuzz_splitTransferEqualsSingleTransfer(uint256,uint256) (runs: 1000, μ: 119916, ~: 120531)\nLogs:\n  Bound result 155637859883146409809569572\n  Bound result 128332499741055906572252902\n\n[PASS] testFuzz_strangerCannotPull(address,uint256) (runs: 1000, μ: 46685, ~: 46686)\nLogs:\n  Bound result 10769981201222956209302435452509347619680745730350748919730890289944511172\n\n[PASS] testFuzz_transferFromOutcomeMatchesTheSpec(uint256,uint256,uint256,bool) (runs: 1000, μ: 193262, ~: 189767)\nLogs:\n  Bound result 36\n\n[PASS] testFuzz_transferToAnyAddressIsExact(address,uint256) (runs: 1000, μ: 89016, ~: 94705)\nLogs:\n  Bound result 735\n\n[PASS] testFuzz_unknownCalldataChangesNothing(address,bytes) (runs: 1000, μ: 128846, ~: 128662)\n[PASS] testFuzz_valueIsAlwaysRejected(bytes,uint96) (runs: 1000, μ: 44575, ~: 44359)\nLogs:\n  Bound result 127\n\n[PASS] test_allowanceDoesNotFollowTheTokens() (gas: 245346)\n[PASS] test_allowanceOfMaxMinusOneIsNotInfinite() (gas: 126367)\n[PASS] test_approveNeedsNoBalanceAndMayExceedSupply() (gas: 107410)\n[PASS] test_approveSelfAndTokenAsSpender() (gas: 110466)\n[PASS] test_approveWritesOnlyTheAllowance() (gas: 63929)\n[PASS] test_constructorEmitsExactlyOneEvent() (gas: 9533)\n[PASS] test_constructorRefusesEther() (gas: 780425)\n[PASS] test_deploymentsAreIndependent() (gas: 120567)\n[PASS] test_dirtyAddressBitsAreRejected() (gas: 39013)\n[PASS] test_emptyCalldataIsRejected() (gas: 51138)\n[PASS] test_errorPrecedence() (gas: 176626)\n[PASS] test_externalSurfaceIsExactlyErc20PlusThreeConstants() (gas: 32033783)\n[PASS] test_extraCalldataIsIgnored() (gas: 68462)\n[PASS] test_failedSpendLeavesTheAllowanceWhole() (gas: 178932)\n[PASS] test_infiniteAllowanceSpendWritesNoAllowance() (gas: 119244)\n[PASS] test_mutatorsReturnExactlyOneTrueWord() (gas: 171394)\n[PASS] test_ownerCannotPullFromItselfWithoutSelfApproval() (gas: 159076)\n[PASS] test_runtimeHasNoCallsAndReadsNoEnvironment() (gas: 21523114)\n[PASS] test_sameSaltCannotDeployTwice() (gas: 1040488559)\n[PASS] test_selfTransferAboveBalanceReverts() (gas: 42724)\n[PASS] test_selfTransferEmits() (gas: 39427)\n[PASS] test_shortCalldataIsRejected() (gas: 67982)\n[PASS] test_tokensSentToTheTokenContractCannotBeMovedByAnyone() (gas: 162456)\n[PASS] test_transferFromEmitsOnlyTransfer() (gas: 125341)\n[PASS] test_transferFromTheZeroAddressReverts() (gas: 63723)\n[PASS] test_transferFromWritesTheAllowanceAndTheTwoBalances() (gas: 125547)\n[PASS] test_transferOfMaxUintReverts() (gas: 37841)\n[PASS] test_transferToARevertingContractSucceedsWithoutCallingIt() (gas: 128174)\n[PASS] test_transferWritesOnlyTheTwoBalances() (gas: 69722)\n[PASS] test_viewsAnswerUnderStaticcallAndMutatorsDoNot() (gas: 1073474635)\n[PASS] test_viewsWriteNothing() (gas: 61807)\n[PASS] test_zeroValueTransferEmits() (gas: 43525)\n[PASS] test_zeroValueTransferFromNeedsNoAllowance() (gas: 66235)\nSuite result: ok. 42 passed; 0 failed; 0 skipped; finished in 121.57ms (1.13s CPU time)\n\nRan 3 tests for test/SwarmMadeInvariant.t.sol:SwarmMadeInvariantTest\n[PASS]\nSwarmMadeInvariantTest invariants:\n[PASS] invariant_balancesSumToTheSupply\n[PASS] invariant_everyAllowanceMatchesTheModel\n[PASS] invariant_everyBalanceMatchesTheModel\n[PASS] invariant_noEtherNoCodeChangeNoMetadataChange\n[PASS] invariant_tokenContractBalanceOnlyGrowsByWhatWasSentToIt\n[PASS] invariant_totalSupplyNeverChanges\n SwarmMadeInvariantTest invariants (runs: 192, calls: 12288, reverts: 0)\n\n╭------------------+-------------------------------+-------+---------+----------╮\n| Contract         | Selector                      | Calls | Reverts | Discards |\n+===============================================================================+\n| SwarmMadeHandler | approve                       | 876   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | approveMax                    | 906   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | approveZeroSpender            | 851   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | callArbitrary                 | 919   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | callPrivileged                | 933   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | sendEther                     | 849   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | transfer                      | 918   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | transferFrom                  | 801   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | transferFromMoreThanAllowance | 876   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | transferFromMoreThanBalance   | 899   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | transferFromToZeroAddress     | 860   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | transferMoreThanBalance       | 908   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | transferToAnyAddress          | 860   | 0       | 0        |\n|------------------+-------------------------------+-------+---------+----------|\n| SwarmMadeHandler | transferWholeBalance          | 832   | 0       | 0        |\n╰------------------+-------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 15239\n  Bound result 11\n  Bound result 798233188975\n  Bound result 1\n  Bound result 2243872947813660318649410\n  Bound result 245\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 4652818768592874898597006411749676572189132520592832643\n  Bound result 5000000000000000000\n  Bound result 91855308653467622173\n  Bound result 6857\n  Bound result 599290590\n  Bound result 7395\n  Bound result 5\n  Bound result 13475\n  Bound result 2\n  Bound result 14978\n  Bound result 1\n  Bound result 3425943945023358514251279\n  Bound result 115792089237316195423570985008687907853269984665639686283334531821573448302822\n  Bound result 1000\n  Bound result 109\n  Bound result 9326\n  Bound result 13120662685\n  Bound result 3792478065\n  Bound result 115792089237316195423570985008687907853269984665639686283330531821573448317369\n  Bound result 15000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665639686283330531821573448319551\n  Bound result 34013040630712127723505485275920939594639555974405152\n  Bound result 14\n  Bound result 13466\n  Bound result 6\n  Bound result 203\n  Bound result 115792089237316195423570985008687907853269984665639686283335531821573448302931\n  Bound result 4252602123\n  Bound result 3347\n  Bound result 6656\n  Bound result 64\n\n[PASS] test_campaignStartsFromTheLaunchState() (gas: 2468481)\n[PASS] test_everyHandlerPathIsReachable() (gas: 5158796)\nLogs:\n  Bound result 40000000000000000000\n  Bound result 1000000000000000000\n  Bound result 0\n  Bound result 9000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 15000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 4000000000000000001\n  Bound result 879999999000000000000000001\n  Bound result 1\n  Bound result 15000000000000000001\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.54s (4.54s CPU time)\n\nRan 5 test suites in 4.55s (4.93s CPU time): 88 tests passed, 0 failed, 0 skipped (88 total tests)\n","passed":true},{"durationMs":75,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmMade.approve(address,uint256)\",\"SwarmMade.transfer(address,uint256)\",\"SwarmMade.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":6,\"README.md\":92,\"docs/DEPLOYMENT.md\":116,\"foundry.toml\":24,\"remappings.txt\":2,\"script/DeploySwarmMade.s.sol\":56,\"src/SwarmMade.sol\":33,\"test/DeploySwarmMade.t.sol\":64,\"test/DeploySwarmMadeAdversarial.t.sol\":119,\"test/SwarmMade.t.sol\":384,\"test/SwarmMadeAdversarial.t.sol\":657,\"test/SwarmMadeInvariant.t.sol\":654},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"ed6ff2f22c02ce0075ad5312af56556e80c62da4d46961ed3a67b7b2ffe78ff7","verifiedTreeHash":"ef2ea800a145b15412df78971b90503522efe056","verifierVersion":"0.1.0+f8d984f2"}]}