{"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":"4a0c7ead-15f4-4354-aa88-3e6420cfee69","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"25d6eba97a8186cef3ee8bf6d009a4d53b2840d1ada169f05e31269a55f50d7e","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":"788ff8b66837ac921a1ce6142e6bd8e2462f83eff1cda7ea92465d4ddcc929a7","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":"2441f99ca6b1a9644791aaee77e0463ea6a604a96be8756793777b1441c570f5","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"d35d4547843df6a0a85dcc4217ef1fb8a0ccb9d578f207c2767a12d89aa78c96","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":"5435ca9648deeffc9b297f83bf2aee0b655bff5125ef1d921b3fdaf10495bec1","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":"6ec0d5bb3b8c76a4ab2401cf71193752621e0e5d9686ed610738ff51a232cfdd","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"5a789e545a85e9f7342380b9b6061ae4618d377dc929f210e7c30717d77af5e9","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"41bc39f7cc209763d1303e47798b3a6ccfe8f47802bf8468c614a50ffc09a8e0","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: ChadGotchi (CHAD).\nToken name: ChadGotchi\nToken symbol: CHAD\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"95baeb43c9f0e9442a45b662897e98cdacd41162aceefafaae2b111781fe261e","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"4a0c7ead-15f4-4354-aa88-3e6420cfee69","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1979-chadgotchi"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51333","feedbackHash":"739d41aed6de83ed0b6d71730f608879270a26237a6c4ea558fe21dcbb9eb1b3","nodeKey":"audit_economics","submissionHash":"25d6eba97a8186cef3ee8bf6d009a4d53b2840d1ada169f05e31269a55f50d7e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51146","feedbackHash":"97fe7a50ad39cf90a471703aa456cb06f4ed7496966554deccc2603c353456e8","nodeKey":"audit_flow","submissionHash":"788ff8b66837ac921a1ce6142e6bd8e2462f83eff1cda7ea92465d4ddcc929a7","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52200","feedbackHash":"0109466193da0f35194cd8d9724af16bb95235125aa2a5c0965729b61b8f5f51","nodeKey":"audit_judge","submissionHash":"2441f99ca6b1a9644791aaee77e0463ea6a604a96be8756793777b1441c570f5","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51338","feedbackHash":"9ca9264448eb0a7f48973868f71fdddcc864d35c0bdadc61de7e024afb138748","nodeKey":"audit_math","submissionHash":"d35d4547843df6a0a85dcc4217ef1fb8a0ccb9d578f207c2767a12d89aa78c96","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52179","feedbackHash":"a841d64a03d6395d4ba188bda9b97bdab845b40201bb0470498cb5b3cd741e11","nodeKey":"audit_permissions","submissionHash":"5435ca9648deeffc9b297f83bf2aee0b655bff5125ef1d921b3fdaf10495bec1","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52188","feedbackHash":"354d1c3998815b0fe2433788231ee5368729de9cfeb16205feb4dcbb3c68bdb6","nodeKey":"build_contract_project","submissionHash":"6ec0d5bb3b8c76a4ab2401cf71193752621e0e5d9686ed610738ff51a232cfdd","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52601","feedbackHash":"afc07146289ef3ddc0a0803b74a51019cc263669380afbf573020af83e3abe62","nodeKey":"manifest","submissionHash":"5a789e545a85e9f7342380b9b6061ae4618d377dc929f210e7c30717d77af5e9","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51374","feedbackHash":"f47dc8fddeec60cc4ea8e9ff927c9d1dcd96bfd2b02696abad90c3afad80b171","nodeKey":"write_foundry_tests","submissionHash":"41bc39f7cc209763d1303e47798b3a6ccfe8f47802bf8468c614a50ffc09a8e0","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"c19adbc697253f7ebdfb090e4a77c68d4bc65a46ce343ec7bbce3a41f3605de6","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fdbedee33322a6ef","findings":[],"hash":"2441f99ca6b1a9644791aaee77e0463ea6a604a96be8756793777b1441c570f5","nodeId":"e42b3d24-02a5-4288-aeba-f11ab7353306","outcome":"completed","summary":"I found no defects in ChadGotchi (CHAD), so `.imd-findings.json` holds an empty findings list plus coverage for all three entry points (each `holds`) and two invariants I checked. None of the five specialists reported a finding, so there was nothing to reproduce or merge.\n\n**What I checked:**\n- **Contract:** `src/ChadGotchi.sol` is OpenZeppelin v5's standard ERC20. The only change is `decimals()`, which returns 18.\n- **Supply:** the constructor mints 1,000,000,000 × 10¹⁸ to `msg.sender` (the factory) once. Nothing can mint, burn or seize afterwards, and there is no owner or other privileged role. That figure matches `totalSupply` in `launch.json`.\n- **Transfers:** `transfer`, `transferFrom` and `approve` are the unchanged OpenZeppelin versions. Every transfer moves exactly the amount asked, with no fee or hook, so the distributor transfer, the pool seed and swaps arrive whole.\n- **Manifest:** `constructorArgs: []` matches the constructor, which takes no arguments. Decimals, name, symbol and supply agree with the code. The contract name is 10 characters.\n- **Deployability:** deployed code is 2,209 bytes and creation code is 3,457 bytes, both well under the 24,576 and 49,152-byte limits. The token doesn't need particular address bits.\n- **Tests:** all 46 of the project's tests pass with `forge test`.\n- **Static analysis:** aderyn's one lead, a \"large numeric literal\" at line 25, is just the `1_000_000_000` supply constant. It's a style note, not a defect.\n\n**What I couldn't run:** the two protected test files depend on harness contracts that aren't in this tree (`src/LaunchLiquidity.sol`, `src/PoolInitializationGuard.sol`, `src/HookFlags.sol`, `floor/OwnerChecks.sol`) and on v4-core imports that don't resolve here. I copied them into `test/scratch/` to try, they failed to compile, and I deleted the copies. The working tree is clean apart from `.imd-findings.json`.","treeHash":null,"usage":{"cachedInputTokens":170535,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2441,"runtime":"claude","turns":5,"wallClockMs":77564}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"41f7c1458e1278ad","findings":[],"hash":"25d6eba97a8186cef3ee8bf6d009a4d53b2840d1ada169f05e31269a55f50d7e","nodeId":"ca62bb87-3515-43dd-888d-0fbd04fd866a","outcome":"completed","summary":"Review complete. The economics audit of ChadGotchi found no defects, and the findings file holds an empty list with a nine-row coverage record.\n\n**What I checked**\n\n- The token is OpenZeppelin v5.4.0 ERC20 plus a no-argument constructor that mints the fixed supply to the deployer and a `decimals()` override returning 18. All five vendored library files are sha256-identical to upstream v5.4.0, so no tampered transfer or allowance logic is hiding in `lib/`.\n- The compiled ABI exposes only approve, transfer, transferFrom, the view functions and five constant getters. There is no mint, burn, burnFrom, fallback, receive, owner or setter, so the supply cannot grow or shrink and no privileged hand can move or freeze a holder.\n- Economic Security guide: no external dependency, oracle or callback. The token is not fee-on-transfer, rebasing, pausable, blocklisting or upgradeable. Transfers to the zero address and approvals of the zero spender revert. The only ERC-20 wrinkle is the standard approve front-running race, which is defined by the standard and recorded in coverage rather than as a defect.\n- Invariant guide: a scratch fuzz test ran 256 random twelve-step transfer and transferFrom sequences and sum of balances always equalled totalSupply. The supply constant equals the README's manifest string, and the 10/80/10 launch split of 1e27 divides with no dust.\n- Flow Gap guide: factory to distributor to claimant, factory to PoolManager seed, and trader buy and sell are all plain exact transfers, so Uniswap v4 settle deltas match and no exemption list is needed.\n\n**Coverage**\n\nAll three listed entry points are marked `holds`. The launch.json row is `unreached` because no manifest exists in the tree yet. When it is written it must carry empty constructorArgs, 18 decimals and the supply string above.\n\nThe existing 33 tests pass under the verifier's fuzz seed. The scratch test directory was removed and no project file was changed.","treeHash":null,"usage":{"cachedInputTokens":721803,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":13208,"runtime":"claude","turns":26,"wallClockMs":219621}},{"artifacts":[],"attempt":1,"bundleHash":"d76259ba14cebc02eb0310d423b729f817e95e0ff20a844c305c0d1c9a7d5043","device":"13603a08ada71730","findings":[],"hash":"41bc39f7cc209763d1303e47798b3a6ccfe8f47802bf8468c614a50ffc09a8e0","nodeId":"fe1b218a-33f7-4bbb-9f53-23eae961361a","outcome":"completed","summary":"I added `test/ChadGotchi.invariant.t.sol` and all 46 tests pass under `forge build` / `forge test` with the verifier's fuzz seed. I found no defects in the token, so I didn't write `.imd-findings.json`.\n\nThe commit failed because git on this machine has no author name or email set. I didn't change the git config to get around it, so the file is in the working tree but not committed. If the submission step doesn't commit it for you, setting a git identity and committing is all that's left.\n\n**The token:** `src/ChadGotchi.sol` is the standard OpenZeppelin v5 ERC20 with nothing added. It mints 1,000,000,000 × 10¹⁸ to the deployer once, in the constructor, and has no owner, mint, burn, pause or tax. The earlier tests (`ChadGotchi.t.sol`, `ChadGotchiLaunchFloor.t.sol`) already covered the unit-level transfer, approval and revert cases and the launch-floor checks. The missing piece was invariant tests over random call sequences, which is what this file adds.\n\n- **Invariant tests (256 runs × 64 calls each).** A helper contract makes random calls between the deployer and four other accounts: `transfer`, `approve` (including the maximum allowance), `transferFrom`, transfers to the zero address, and attempts at mint, burn, `burnFrom`, ownership and pause calls. Amounts are picked to hit the edges: 0, the whole balance, one more than the balance, and random values. After every sequence these must hold:\n  - the total supply is still exactly 1e27;\n  - the accounts' balances add up to the total supply;\n  - every balance and allowance matches a separate record the helper keeps itself;\n  - every call that should fail failed with the exact expected error, and every call that should succeed returned true;\n  - the name, symbol and decimals never change.\n- **Edge-case tests:**\n  - a 1-wei transfer, and a transfer of the maximum possible amount reverting;\n  - a `transferFrom` to the zero address reverts and leaves the allowance unspent;\n  - a new approval replaces the old one rather than adding to it, and approving 0 revokes it;\n  - a holder can't `transferFrom` their own tokens without an allowance;\n  - an allowance spent exactly reaches zero, and a maximum allowance survives a pull of the whole supply.\n- **Fuzz tests (1000 runs):** sending an amount and back restores both balances, two transfers add up exactly, and a failed transfer changes nothing.\n\nOn the first run, the minting/admin part of the helper reverted 30 times. The cause was an overflow in my own test code, not the token; I fixed it, and that function now runs with 0 reverts.","treeHash":"d02c638e25a8ce2c4cfa97bb9897cc4ad40e9b5b","usage":{"cachedInputTokens":312233,"inputTokens":14,"model":"claude-opus-5-5","outputTokens":8205,"runtime":"claude","turns":8,"wallClockMs":124014}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"02f22d6f13810ca8","findings":[],"hash":"5435ca9648deeffc9b297f83bf2aee0b655bff5125ef1d921b3fdaf10495bec1","nodeId":"8b2285a3-948d-4b43-9b43-fa9f499bac0c","outcome":"completed","summary":"Review complete. The findings file is written and the tree is otherwise untouched.\n\n**Outcome: no defects found in the assigned area.** `.imd-findings.json` holds an empty findings list and twelve coverage rows, one for each of the three listed entry points plus the constructor and eight invariants I checked.\n\nWhat I verified:\n\n- **Permission model.** The compiled ABI exposes exactly three state-changing functions, all unrestricted and all inherited from OpenZeppelin ERC20. There is no owner, minter, pauser, blocklist, receive or fallback, and `_mint` and `_burn` are unreachable after construction.\n- **Library integrity.** All five vendored OpenZeppelin files and the LICENSE are byte-identical to upstream v5.4.0. A tampered `Context._msgSender()` or `_update` would have been the only plausible backdoor, and there is none.\n- **Entry points.** `approve` keys allowance by caller only, `transferFrom` reverts without allowance (so the factory cannot pull from a holder), and `transfer` moves the exact amount with no exempt branch. Launch flows arrive whole.\n- **Asymmetry and trust gap.** The only paired surface is approve and transferFrom. Their behaviour is standard OpenZeppelin v5, including the inherent ERC-20 allowance race, which the README declares intentional. No actor class is treated differently, so no trust-gap seam exists.\n- **Static-analysis lead.** The large numeric literal at `src/ChadGotchi.sol:25` is a compile-time constant and the tests assert the product equals 1e27. Style only.\n\nTools run: forge build, the project suite with 33 tests passing, a five-test scratch access probe that passed and was removed, and the upstream diff. `launch.json` is not yet present since the manifest step has not run, which is expected at this stage. A clean review is not proof of absence.","treeHash":null,"usage":{"cachedInputTokens":707630,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":12241,"runtime":"claude","turns":28,"wallClockMs":191622}},{"artifacts":[],"attempt":1,"bundleHash":"3ec5cdd27c3b923a074d8f103b32fa7119b7d72927f87cee34916d0daf20d59b","device":"cc86b49d3c401897","findings":[],"hash":"5a789e545a85e9f7342380b9b6061ae4618d377dc929f210e7c30717d77af5e9","nodeId":"c4c968b6-1d20-4f2b-84d6-9c260099d46a","outcome":"completed","summary":"Done. The manifest is written and is the only change in the tree.\n\n**What launch.json records**\n\n- Kind \"custom_token\", token contract `ChadGotchi`, name ChadGotchi, symbol CHAD, 18 decimals.\n- Empty constructorArgs, matching the accepted constructor, which takes nothing and mints once to msg.sender.\n- totalSupply \"1000000000000000000000000000\", the constant the contract mints.\n- No application contracts, since the accepted tree holds only the token.\n- Pool and economics copied exactly as the launch gives them: IMD pair address, fee 12500, tick spacing 60, the one-to-one provenance price, poolBps 8000, the 3,500 IMD opening cap and the requester's remainder address.\n- Notes describing the token's behaviour, under the 4,000 character limit.\n\n**Checks**\n\n- A JSON check confirmed the manifest has only schema keys, the correct supply string and the verbatim economics object.\n- `forge build` compiled cleanly.\n- `forge test` with the verifier's fuzz seed passed all 33 tests.\n- `git status` shows launch.json as the only new or changed file.","treeHash":"63a51f9e14889a2d842bdd948d3551e053e522ec","usage":{"cachedInputTokens":168793,"inputTokens":130,"model":"claude-fable-5-1","outputTokens":2773,"runtime":"claude","turns":9,"wallClockMs":60481}},{"artifacts":[],"attempt":1,"bundleHash":"269b5d06a7296e7d2330788e2880640c6e4a2a754ae71f1424b04010656fbb99","device":"d4b53d656a3fbe07","findings":[],"hash":"6ec0d5bb3b8c76a4ab2401cf71193752621e0e5d9686ed610738ff51a232cfdd","nodeId":"03c68e72-c228-4323-8074-964dfc55ced1","outcome":"completed","summary":"Done. The ChadGotchi (CHAD) token is implemented, tested, documented and committed on `main` as commit `06434d5`.\n\n**What was built**\n\n- `src/ChadGotchi.sol` is a plain OpenZeppelin v5.4.0 ERC-20 with no constructor arguments. The constructor mints the whole supply of one billion tokens at 18 decimals to `msg.sender` once and emits a `SupplyMinted` event. There is no owner, mint path, pause, blocklist, tax, fallback or receive function.\n- `foundry.toml` pins solc 0.8.26 with `bytecode_hash = \"none\"` and `cbor_metadata = false`. I confirmed the runtime bytecode ends in a JUMP opcode with no metadata tail.\n- forge-std v1.11.0 and the five OpenZeppelin ERC-20 source files are vendored as ordinary files under `lib/`. No `.git` directories or submodules remain.\n- `script/DeployChadGotchi.s.sol` offers a reviewable deploy helper for non-IdentityMD deployments. Its `deploy()` function is tested directly and reads no environment variables.\n- `README.md` documents assumptions, deployment parameters, the launch flow split, trust assumptions, operational responsibilities and the eth-security checklist. It states there is nothing to configure after launch.\n\n**Tests**\n\n| Suite | Tests | Result |\n|---|---|---|\n| `test/ChadGotchi.t.sol` | 24 (incl. 3 fuzz) | pass |\n| `test/ChadGotchiLaunchFloor.t.sol` | 9 | pass |\n\nThe first suite covers metadata, the one-time mint, transfer and allowance success paths, and the standard failure paths with OpenZeppelin's custom errors. The second mirrors the pinned protected floor locally: CREATE2 deployment from a factory probe, exact 10/80/10 launch flows, every listed mint and freeze selector rejected from both an attacker and the factory, no DELEGATECALL, CALLCODE or SELFDESTRUCT in the runtime, and no metadata hash.\n\nAll runs used the verifier's fuzz seed and an empty environment. `forge build`, `forge test` and `forge fmt --check` all pass.\n\n**Not done**\n\nSlither and Mythril were not available on this machine, so static analysis beyond the compiler and tests did not run. Explorer source verification belongs to the launch deployer after deployment.","treeHash":"056a8a0a5be032f5ab53fbb1c7c77e08d4480936","usage":{"cachedInputTokens":806873,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":20494,"runtime":"claude","turns":22,"wallClockMs":287721}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"824e6de6196c686f","findings":[],"hash":"788ff8b66837ac921a1ce6142e6bd8e2462f83eff1cda7ea92465d4ddcc929a7","nodeId":"ced8dbe9-0ec5-4fd0-adb1-4658bdef0d37","outcome":"completed","summary":"The review is complete. The findings file is written and valid, the scratch directory and build artifacts are removed, and the working tree holds no stray files (the findings file is excluded by the repository's own git exclude, as intended).\n\n**Outcome: no defects found in the assigned area.** The findings list is empty and the coverage record answers all three entry points plus seven invariant rows.\n\n**What I checked, per the Execution Trace, Periphery and First Principles guides:**\n- **approve**: traced to the OpenZeppelin internal approve. Zero owner or spender reverts, the allowance is overwritten rather than accumulated, and nothing else is touched.\n- **transfer**: traced through the balance check and the unchecked arithmetic. The subtract cannot wrap because the value is bounded by the sender's balance. Self-transfer re-reads storage so the balance is unchanged. No hook, tax or external call exists, so every launch flow moves exactly the stated amount. A fuzz probe confirmed the sum of balances stays equal to the supply after chained transfers.\n- **transferFrom**: allowance is spent before the move, the maximum allowance is sticky, a zero sender reverts so no mint path exists, and a zero receiver reverts so no spender can burn.\n- **Constructor and supply**: mints exactly one billion tokens with 18 decimals once to the caller, takes no arguments, reads no chain state, and is deterministic under CREATE2. The compiled selector list contains only the three state-changing functions plus views and constants, so nothing can mint, burn, pause, freeze or upgrade after deployment.\n- **Periphery**: the five vendored OpenZeppelin files are byte-identical to upstream v5.4.0. The deploy script is outside the launch path and handles no keys.\n- **Runtime**: no DELEGATECALL, CALLCODE, SELFDESTRUCT or metadata hash. The source contains no non-ASCII characters and compiles without warnings.\n\n**Leads dismissed:** the aderyn large-numeric-literal line is a style note on the intended one-billion constant. The ERC-20 approve race is inherent to the standard and recorded as a trust note, not a finding.\n\n**Not reached:** the authoritative protected test that seeds and swaps through a real Uniswap v4 PoolManager, because v4-core is not vendored in this tree. The project's own launch-floor mirror passes, and the token has no mechanism that could make a seed or swap revert or arrive short.","treeHash":null,"usage":{"cachedInputTokens":834283,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":15603,"runtime":"claude","turns":32,"wallClockMs":240962}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"789312fc56d3f446","findings":[],"hash":"d35d4547843df6a0a85dcc4217ef1fb8a0ccb9d578f207c2767a12d89aa78c96","nodeId":"8790d25a-4aec-4624-90b5-eed5705c5b6f","outcome":"completed","summary":"The review is complete and the findings file is written. Nothing else is pending.\n\n**Result: no defects found in the Math Precision, Boundary or Numerical Gap area.** The findings file at `.imd-findings.json` holds an empty findings list and seven coverage rows, all `holds`. The working tree is otherwise unchanged. The scratch test directory was removed since no finding needed a proof.\n\n**What the token is.** ChadGotchi is OpenZeppelin v5.4.0 ERC20 with no overrides besides a hardcoded decimals. Its only own arithmetic is the compile-time supply constant. I diffed the five vendored OpenZeppelin files against the upstream v5.4.0 release and they are byte-identical.\n\n**What I checked and why each holds.**\n- **Supply constant.** The literal-base exponentiation is evaluated in uint256, so the uint8 decimals cannot truncate it. The constant equals exactly 10^27 and divides cleanly by 10^18.\n- **transfer.** Exact balance passes, balance plus one and max uint revert with the precise error, zero amount succeeds, and a self-transfer of the whole balance leaves it unchanged. The unchecked add is bounded by the fixed supply.\n- **transferFrom and approve.** Allowance equal to the amount leaves zero, max minus one decrements, max is treated as infinite, and the balance check still binds when allowance exceeds balance. Approve overwrites rather than accumulates.\n- **Invariant.** A 2000-run fuzz over transfer and transferFrom kept the sum of balances equal to total supply, and total supply never moved. No mint or burn path exists after the constructor.\n- **Boundary enumeration.** There are no external calls, payable functions, receive, fallback or bytes decoding. The only sentinel branches are the OpenZeppelin zero-address reverts, each exercised.\n- **Static-analysis lead.** The aderyn large-numeric-literal note at line 25 is style only. The derived constant is verified correct.\n\nThe existing 33-test suite also passes. Out of my area but noted for the judge: the contract has no owner, pause, blocklist or tax, so the privileged-call floor checks are trivially met.","treeHash":null,"usage":{"cachedInputTokens":676369,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":10524,"runtime":"claude","turns":18,"wallClockMs":192686}}],"verification":[{"checks":[{"durationMs":1546,"exitCode":0,"name":"build","output":"Compiling 30 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.47s\nCompiler run successful!\n","passed":true},{"durationMs":6253,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 9 tests for test/ChadGotchiLaunchFloor.t.sol:ChadGotchiLaunchFloorTest\n[PASS] test_constructorTakesNoArgumentsAndCallsNoContract() (gas: 12396)\n[PASS] test_launchSplitMovesExactly() (gas: 318430)\n[PASS] test_mintsTheManifestSupplyToTheFactory() (gas: 22658)\n[PASS] test_noCommonAdminCallIncreasesSupply() (gas: 760267)\n[PASS] test_noPrivilegedHandMovesOrFreezesAHolder() (gas: 470569)\n[PASS] test_runtimeCarriesNoMetadataHash() (gas: 6051)\n[PASS] test_runtimeCodeHasNoDelegatecallOrSelfdestruct() (gas: 1001362)\n[PASS] test_theSwarmShareArrivesWholeAndIsClaimableWhole() (gas: 138740)\n[PASS] test_unknownSelectorsRevertAndPlainEtherIsRefused() (gas: 57955)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 18.23ms (5.37ms CPU time)\n\nRan 24 tests for test/ChadGotchi.t.sol:ChadGotchiTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 100132, ~: 100523)\nLogs:\n  Bound result 934907458079338389376746798\n  Bound result 32982176472423209877568065\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 88754, ~: 88963)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 127824, ~: 107937)\nLogs:\n  Bound result 938321180824495745380808259\n  Bound result 842210465701094198714859910\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32882)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92793)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37759)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88105)\n[PASS] test_RevertWhen_transferFromExceedsBalanceDespiteAllowance() (gas: 146538)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 40295)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 32937)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64920)\n[PASS] test_constructorEmitsTransferFromZeroAndSupplyMinted() (gas: 9248)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 25121)\n[PASS] test_deployHelperMintsToItsCaller() (gas: 1554699)\n[PASS] test_metadata() (gas: 52937)\n[PASS] test_supplyConstantsAgree() (gas: 17026)\n[PASS] test_supplyGoesToWhoeverDeploysIt() (gas: 25524)\n[PASS] test_transferEmitsTransfer() (gas: 66553)\n[PASS] test_transferFromSpendsAllowance() (gas: 144974)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrease() (gas: 120424)\n[PASS] test_transferMovesExactAmount() (gas: 84602)\n[PASS] test_transferToSelfKeepsBalance() (gas: 40585)\n[PASS] test_transferWholeBalanceLeavesZero() (gas: 72298)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44575)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 24.76ms (57.89ms CPU time)\n\nRan 12 tests for test/ChadGotchi.invariant.t.sol:ChadGotchiEdgeTest\n[PASS] testFuzz_failedTransferChangesNothing(uint256) (runs: 1000, μ: 54298, ~: 54626)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039467584007913129639935\n\n[PASS] testFuzz_roundTripRestoresBalances(uint256) (runs: 1000, μ: 111353, ~: 111380)\nLogs:\n  Bound result 10000000000000000001\n\n[PASS] testFuzz_splitTransfersSumExactly(uint256,uint256) (runs: 1000, μ: 157464, ~: 158296)\nLogs:\n  Bound result 608155603679023016606150607\n  Bound result 207643730550428925248475866\n\n[PASS] test_RevertWhen_transferFromToZeroAddress() (gas: 93302)\n[PASS] test_RevertWhen_transferFromZeroAddressOwner() (gas: 37916)\n[PASS] test_RevertWhen_transferMaxUint() (gas: 38125)\n[PASS] test_allowanceExactlySpentToZero() (gas: 118578)\n[PASS] test_approveOverwritesNotAdds() (gas: 92770)\n[PASS] test_approveZeroRevokes() (gas: 113478)\n[PASS] test_maxAllowanceSurvivesFullSupplyPull() (gas: 127453)\n[PASS] test_oneWeiTransfer() (gas: 77020)\n[PASS] test_selfTransferFromSpendsAllowance() (gas: 38389)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 24.83ms (68.67ms CPU time)\n\nRan 1 test for test/ChadGotchi.invariant.t.sol:ChadGotchiInvariantTest\n[PASS]\nChadGotchiInvariantTest invariants:\n[PASS] invariant_balancesSumToSupply\n[PASS] invariant_ledgerMatchesGhost\n[PASS] invariant_metadataNeverChanges\n[PASS] invariant_noUnexpectedOutcome\n[PASS] invariant_totalSupplyIsFixed\n ChadGotchiInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------------+----------------+-------+---------+----------╮\n| Contract          | Selector       | Calls | Reverts | Discards |\n+=================================================================+\n| ChadGotchiHandler | approve        | 3241  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| ChadGotchiHandler | transfer       | 3323  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| ChadGotchiHandler | transferFrom   | 3317  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| ChadGotchiHandler | transferToZero | 3146  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| ChadGotchiHandler | tryPrivileged  | 3357  | 0       | 0        |\n╰-------------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1\n  Bound result 1\n  Bound result 32\n  Bound result 8179\n  Bound result 13397\n  Bound result 439\n  Bound result 1\n  Bound result 1\n  Bound result 1852052863704704990247574285\n  Bound result 1\n  Bound result 190900012\n  Bound result 799409260462944011094710976\n  Bound result 0\n  Bound result 12219\n  Bound result 23653522134340461349\n  Bound result 1129\n  Bound result 1111881532625473408378909184\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.17s (6.17s CPU time)\n\nRan 4 test suites in 6.17s (6.24s CPU time): 46 tests passed, 0 failed, 0 skipped (46 total tests)\n","passed":true},{"durationMs":39,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ChadGotchi.approve(address,uint256)\",\"ChadGotchi.transfer(address,uint256)\",\"ChadGotchi.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":130,\"foundry.toml\":24,\"remappings.txt\":2,\"script/DeployChadGotchi.s.sol\":27,\"src/ChadGotchi.sol\":45,\"test/ChadGotchi.invariant.t.sol\":325,\"test/ChadGotchi.t.sol\":247,\"test/ChadGotchiLaunchFloor.t.sol\":200},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"41bc39f7cc209763d1303e47798b3a6ccfe8f47802bf8468c614a50ffc09a8e0","verifiedTreeHash":"d02c638e25a8ce2c4cfa97bb9897cc4ad40e9b5b","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":962,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 892.01ms\nCompiler run successful!\n","passed":true},{"durationMs":92,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 9 tests for test/ChadGotchiLaunchFloor.t.sol:ChadGotchiLaunchFloorTest\n[PASS] test_constructorTakesNoArgumentsAndCallsNoContract() (gas: 12396)\n[PASS] test_launchSplitMovesExactly() (gas: 318430)\n[PASS] test_mintsTheManifestSupplyToTheFactory() (gas: 22658)\n[PASS] test_noCommonAdminCallIncreasesSupply() (gas: 760267)\n[PASS] test_noPrivilegedHandMovesOrFreezesAHolder() (gas: 470569)\n[PASS] test_runtimeCarriesNoMetadataHash() (gas: 6051)\n[PASS] test_runtimeCodeHasNoDelegatecallOrSelfdestruct() (gas: 1001362)\n[PASS] test_theSwarmShareArrivesWholeAndIsClaimableWhole() (gas: 138740)\n[PASS] test_unknownSelectorsRevertAndPlainEtherIsRefused() (gas: 57955)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 6.37ms (4.01ms CPU time)\n\nRan 24 tests for test/ChadGotchi.t.sol:ChadGotchiTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 100333, ~: 100535)\nLogs:\n  Bound result 1000\n  Bound result 16080\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 88566, ~: 88969)\nLogs:\n  Bound result 16288\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 129299, ~: 149399)\nLogs:\n  Bound result 1000\n  Bound result 16080\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32882)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92793)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37759)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88105)\n[PASS] test_RevertWhen_transferFromExceedsBalanceDespiteAllowance() (gas: 146538)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 40295)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 32937)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64920)\n[PASS] test_constructorEmitsTransferFromZeroAndSupplyMinted() (gas: 9248)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 25121)\n[PASS] test_deployHelperMintsToItsCaller() (gas: 1554699)\n[PASS] test_metadata() (gas: 52937)\n[PASS] test_supplyConstantsAgree() (gas: 17026)\n[PASS] test_supplyGoesToWhoeverDeploysIt() (gas: 25524)\n[PASS] test_transferEmitsTransfer() (gas: 66553)\n[PASS] test_transferFromSpendsAllowance() (gas: 144974)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrease() (gas: 120424)\n[PASS] test_transferMovesExactAmount() (gas: 84602)\n[PASS] test_transferToSelfKeepsBalance() (gas: 40585)\n[PASS] test_transferWholeBalanceLeavesZero() (gas: 72298)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44575)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 6.97ms (20.33ms CPU time)\n\nRan 2 test suites in 7.36ms (13.35ms CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":32,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ChadGotchi.approve(address,uint256)\",\"ChadGotchi.transfer(address,uint256)\",\"ChadGotchi.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":130,\"foundry.toml\":24,\"launch.json\":24,\"remappings.txt\":2,\"script/DeployChadGotchi.s.sol\":27,\"src/ChadGotchi.sol\":45,\"test/ChadGotchi.t.sol\":247,\"test/ChadGotchiLaunchFloor.t.sol\":200},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"5a789e545a85e9f7342380b9b6061ae4618d377dc929f210e7c30717d77af5e9","verifiedTreeHash":"63a51f9e14889a2d842bdd948d3551e053e522ec","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":1000,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 921.51ms\nCompiler run successful!\n","passed":true},{"durationMs":98,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 9 tests for test/ChadGotchiLaunchFloor.t.sol:ChadGotchiLaunchFloorTest\n[PASS] test_constructorTakesNoArgumentsAndCallsNoContract() (gas: 12396)\n[PASS] test_launchSplitMovesExactly() (gas: 318430)\n[PASS] test_mintsTheManifestSupplyToTheFactory() (gas: 22658)\n[PASS] test_noCommonAdminCallIncreasesSupply() (gas: 760267)\n[PASS] test_noPrivilegedHandMovesOrFreezesAHolder() (gas: 470569)\n[PASS] test_runtimeCarriesNoMetadataHash() (gas: 6051)\n[PASS] test_runtimeCodeHasNoDelegatecallOrSelfdestruct() (gas: 1001362)\n[PASS] test_theSwarmShareArrivesWholeAndIsClaimableWhole() (gas: 138740)\n[PASS] test_unknownSelectorsRevertAndPlainEtherIsRefused() (gas: 57955)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 8.76ms (4.02ms CPU time)\n\nRan 24 tests for test/ChadGotchi.t.sol:ChadGotchiTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 100333, ~: 100535)\nLogs:\n  Bound result 535814977985233634727401909\n  Bound result 116064016797529464692724191\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 88566, ~: 88969)\nLogs:\n  Bound result 5000000000000000000\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 129299, ~: 149399)\nLogs:\n  Bound result 634647905901540166391597731\n  Bound result 1\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32882)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92793)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37759)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88105)\n[PASS] test_RevertWhen_transferFromExceedsBalanceDespiteAllowance() (gas: 146538)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 40295)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 32937)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64920)\n[PASS] test_constructorEmitsTransferFromZeroAndSupplyMinted() (gas: 9248)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 25121)\n[PASS] test_deployHelperMintsToItsCaller() (gas: 1554699)\n[PASS] test_metadata() (gas: 52937)\n[PASS] test_supplyConstantsAgree() (gas: 17026)\n[PASS] test_supplyGoesToWhoeverDeploysIt() (gas: 25524)\n[PASS] test_transferEmitsTransfer() (gas: 66553)\n[PASS] test_transferFromSpendsAllowance() (gas: 144974)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrease() (gas: 120424)\n[PASS] test_transferMovesExactAmount() (gas: 84602)\n[PASS] test_transferToSelfKeepsBalance() (gas: 40585)\n[PASS] test_transferWholeBalanceLeavesZero() (gas: 72298)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44575)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 8.84ms (24.50ms CPU time)\n\nRan 2 test suites in 9.33ms (17.59ms CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":36,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ChadGotchi.approve(address,uint256)\",\"ChadGotchi.transfer(address,uint256)\",\"ChadGotchi.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":130,\"foundry.toml\":24,\"remappings.txt\":2,\"script/DeployChadGotchi.s.sol\":27,\"src/ChadGotchi.sol\":45,\"test/ChadGotchi.t.sol\":247,\"test/ChadGotchiLaunchFloor.t.sol\":200},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":395,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":251,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/ChadGotchi.sol:25: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"6ec0d5bb3b8c76a4ab2401cf71193752621e0e5d9686ed610738ff51a232cfdd","verifiedTreeHash":"056a8a0a5be032f5ab53fbb1c7c77e08d4480936","verifierVersion":"0.1.0+d952fceb"}]}