{"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":"096c1ae2-4d06-4cee-a55e-bfdb7442edfb","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"53e7970b3b1b82b5a7c8885cca28c03ba0171ad8ad46193ce57e0809fd9e04a0","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":"606b46ad64fc26c5306bfaac035d0ca2c9fda50e8dd5db4db384f38cb49e80a9","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":"e34ec004ada37d613edcd4db17056d4d1cd036b002323f767828e8427418723b","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":"e11c1011b7aa576dbbe5376f582db6092abb3af336ea33e37e2ac148d5eda9ca","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":"483f149448c2b170af6407a23713fdb4e1e4f15510a9d478396d58bc8577351b","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":"7774543df58e936a2794321405042267d26024aa339b6e2a4e0afc0a74b192a3","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"ad2232bbea9c6114959e4d31da2c61dd887126a2f164450bbbf3c0023c467e28","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"8bec99bfd255f3d68186caae4476a286b6c3044a97b03660d420f8dc0a20ea5a","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: Super Fren Pet (SFP).\nToken name: Super Fren Pet\nToken symbol: SFP\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"3ad66bd698505c50fad65f8ef2aaaaeeb680884616259d5d443360626732e77a","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"096c1ae2-4d06-4cee-a55e-bfdb7442edfb","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1298-super-fren-pet"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51234","feedbackHash":"7e8f219eef7f45c48335e880679bbeb82391b0778d49d768dd2d05d6fe553470","nodeKey":"audit_economics","submissionHash":"53e7970b3b1b82b5a7c8885cca28c03ba0171ad8ad46193ce57e0809fd9e04a0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51130","feedbackHash":"6cf7af6e963408bfe528e8633a3a2c8b5c8253f182d046136c60ebd8fd7d8863","nodeKey":"audit_flow","submissionHash":"606b46ad64fc26c5306bfaac035d0ca2c9fda50e8dd5db4db384f38cb49e80a9","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51512","feedbackHash":"acb83013f865c57cf2508548f20474f512669986b4dd7457faa589387ce2d0e2","nodeKey":"audit_judge","submissionHash":"e34ec004ada37d613edcd4db17056d4d1cd036b002323f767828e8427418723b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52178","feedbackHash":"20fc820532cfc60a27f1ab59cfda5d8446e442ab6ad847ada404a74f694ecd48","nodeKey":"audit_math","submissionHash":"e11c1011b7aa576dbbe5376f582db6092abb3af336ea33e37e2ac148d5eda9ca","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52021","feedbackHash":"f169724612e59fe04dad78e53fcc64cca831fa5b44b646b1cda3c5941f40d3bf","nodeKey":"audit_permissions","submissionHash":"483f149448c2b170af6407a23713fdb4e1e4f15510a9d478396d58bc8577351b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51050","feedbackHash":"020216ed2f50f5f6ed66ed5f2084d73e59c1201df021ee9d77a6f604ddb6fa94","nodeKey":"build_contract_project","submissionHash":"7774543df58e936a2794321405042267d26024aa339b6e2a4e0afc0a74b192a3","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51002","feedbackHash":"ba0ac324fa09077ba667d3a6d985239fc52478eefe8e8d95bce3c04585db0dbc","nodeKey":"manifest","submissionHash":"ad2232bbea9c6114959e4d31da2c61dd887126a2f164450bbbf3c0023c467e28","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51377","feedbackHash":"430d14f441e1f2688bd4c3c7090cc7def5c31c3b151940b15203955cb16d2b4b","nodeKey":"write_foundry_tests","submissionHash":"8bec99bfd255f3d68186caae4476a286b6c3044a97b03660d420f8dc0a20ea5a","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"9c8ce42c5e1a2a01ad5c8c277d52a994c1ef381c58025265a012b168cdd32e8f","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"229c8cb0d9067fbe","findings":[{"citation":"resolved","description":"DEPENDENCIES.json exists so a verifier can confirm every vendored file by SHA-256 (README.md:127-128), and README.md:133 states 'Vendored sources are unmodified.' Checking the 36 recorded hashes against the committed tree, 29 match and 7 do not, all under lib/forge-std/src: StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol, interfaces/IMulticall3.sol. Fetching those 7 files from forge-std at the recorded commit 77041d2ce690e692d6e03cc812b57d1ddaa4d505 and hashing them reproduces the recorded values exactly, so the record describes upstream while the committed copies were changed after vendoring. The diffs are whitespace-only line reflow (multi-line function headers joined to one line, console.sol assembly collapsed), consistent with `forge fmt` being run over lib/ with the project's `line_length = 120`; token streams with whitespace removed are identical, so there is no behavioral change and these files are test-only. The production dependency is unaffected: all 6 OpenZeppelin v5.1.0 files are byte-identical to upstream commit 69c8def5f222ff96f2b5beff05dfba996368aa79 and match their recorded hashes. Impact: any attestation or review step that validates the tree against DEPENDENCIES.json fails on 7 entries, and the README's provenance statement is inaccurate. Fix (either): restore the 7 files byte-for-byte from forge-std 77041d2 and keep lib/ out of `forge fmt` (e.g. `ignore = [\"lib/**\"]` under [fmt]); or re-record the 7 actual hashes and amend README.md:133 to say the forge-std copies were reformatted, whitespace-only. This is outside the assigned access-control area and carries no on-chain effect; reported because it is a reproducible defect in a shipped provenance file.","line":58,"path":"DEPENDENCIES.json","reproduction":"From the repository root run:\n\npython3 -I -c 'import json,hashlib\nfor dep in json.load(open(\"DEPENDENCIES.json\")):\n  for f in dep[\"files\"]:\n    h=hashlib.sha256(open(f[\"path\"],\"rb\").read()).hexdigest()\n    print(\"OK  \" if h==f[\"sha256\"] else \"BAD \", f[\"path\"], h)'\n\nExpected: 36 lines marked OK. Actual: 29 OK and 7 BAD, with these actual tree hashes against the recorded ones:\n- lib/forge-std/src/StdAssertions.sol: actual 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384, recorded d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780 (DEPENDENCIES.json:58)\n- lib/forge-std/src/StdJson.sol: actual 61bbf9b3219f3636d459e74799e642ee80a9e4d51ef66e793814a032ed97cb83, recorded 0211b47e93dbeb6a7de6112470a77137038ed73b79b015847f013e49fcd7511f (line 82)\n- lib/forge-std/src/StdToml.sol: actual 187d2f0cc66b5ebac7da23dd9d68980149a8331bb2f1060128ce2e5091d66518, recorded de3fb35af79a1fd2a2de9bc4ca7866e4102f9d3fbf11f66f3fe82696412d47e2 (line 98)\n- lib/forge-std/src/Vm.sol: actual a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15, recorded 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1 (line 110)\n- lib/forge-std/src/console.sol: actual a2e632dcbc787bb096e2c06bad26c6e5e09bafca18466b236b1f2687c2ad79e9, recorded 896c5a5a5c235cb11a39876d430e1fc2c621e7950c4637ca58251b84b053f178 (line 114)\n- lib/forge-std/src/interfaces/IERC7540.sol: actual 3ae3eec94e3e61300cc2c41cee8aadbd12cf0c040a411387a89e92796aee8bf8, recorded c6a7854c86bf3772a996fd70fc11b84930b03f136e98fce6e8cc36534af1d6c1 (line 146)\n- lib/forge-std/src/interfaces/IMulticall3.sol: actual 1b63ca78b27d9893596a9e3667b4dbc32506100cd99a96e8dfff0ac96068053b, recorded 6620d9c5ea2e2291440e1dcce5072f948b7ec4d65075876a0d0ac9267d3342e3 (line 154)\n\nCross-check of which side is wrong: `curl -sSL https://raw.githubusercontent.com/foundry-rs/forge-std/77041d2ce690e692d6e03cc812b57d1ddaa4d505/src/StdAssertions.sol | sha256sum` prints d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780 (the recorded value, 23360 bytes) while the tree copy is 23472 bytes; `diff -u` of the two shows only line-wrapping changes (for example the `assertApproxEqAbs(..., string memory err)` header joined onto one line), and `diff` after stripping all whitespace reports the files identical. The same holds for the other six files.","severity":"low","snippet":"        \"path\": \"lib/forge-std/src/StdAssertions.sol\",\n        \"sha256\": \"d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780\"","title":"DEPENDENCIES.json records upstream hashes for 7 forge-std files that were reformatted in the tree; README's 'Vendored sources are unmodified' claim is false for them"}],"hash":"483f149448c2b170af6407a23713fdb4e1e4f15510a9d478396d58bc8577351b","nodeId":"c5403c39-a9e3-41ac-9404-2be1a81c35d2","outcome":"completed","summary":"The review is complete and the findings file is validated against the tree. No tracked files were modified. The only writes are `.imd-findings.json` at the repository root and the scratch probe under `test/scratch/`.\n\n**Outcome.** The token itself has no defect in the assigned area. It is the unmodified OpenZeppelin v5.1.0 ERC-20 with a single constructor mint, so there is no role, owner, initializer, proxy, hook, fee or exemption list to get wrong. One low-severity provenance defect was found outside the area and is reported with a reproduction.\n\n**Finding 1, low.** `DEPENDENCIES.json` records SHA-256 hashes for 7 forge-std files that do not match the committed copies, and the README states the vendored sources are unmodified. Fetching the files from the recorded forge-std commit reproduces the recorded hashes exactly, so the committed copies were changed after vendoring. The changes are whitespace-only line reflow consistent with running `forge fmt` over `lib/`. They affect test code only. All six OpenZeppelin files are byte-identical to upstream v5.1.0. The suggested fix is either to restore the 7 files byte-for-byte or to re-record the hashes and correct the README sentence.\n\n**Coverage.** All three listed entry points are marked `holds`, each with the traced guard and failure paths:\n\n- `approve` writes only the caller's own allowance row and rejects zero addresses.\n- `transfer` moves the exact amount through the OZ `_update` path with no fee, hook or external call.\n- `transferFrom` requires a real allowance, decrements it exactly, and lets neither the deployer nor the factory pull a holder's balance.\n\nEleven additional rows record the invariants I checked: fixed supply after construction, no admin surface in the compiled ABI, no receive or fallback path, no DELEGATECALL, CALLCODE or SELFDESTRUCT in the runtime using the protected suite's exact opcode walk, the deployment trust assumption that the constructor's caller holds the whole supply, and the documented approve-race and missing Approval event on `transferFrom`. One row is `unreached`: the live Uniswap v4 seed and swap, because the v4 harness is not in this tree. I verified only the token-side semantics it depends on.\n\n**Verification run.** The project's 30 tests pass, `forge fmt --check` passes, and the 8 scratch probes pass. Static analysis leads were checked: the aderyn large-literal note is the intended 1e27 constant and is not a defect.","treeHash":null,"usage":{"cachedInputTokens":1455017,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":41303,"runtime":"claude","turns":41,"wallClockMs":583699}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d00f790fc692b1a4","findings":[],"hash":"53e7970b3b1b82b5a7c8885cca28c03ba0171ad8ad46193ce57e0809fd9e04a0","nodeId":"22dbafb8-5fd1-40da-bc25-140b897e27c2","outcome":"completed","summary":"The review is complete. The findings file is written and valid, the scratch test directory is removed, and the working tree has no stray files.\n\n**Result: no defects found.** `.imd-findings.json` holds an empty findings list and ten coverage rows, all `holds`, one for each of the three state-changing entry points plus the invariants and launch flows I checked.\n\n**What I checked, against the Economic Security, Invariant and Flow Gap guides:**\n\n- **Code surface.** `src/SuperFrenPet.sol` is 16 lines: it inherits OpenZeppelin v5.1.0 ERC20 and mints one billion tokens with 18 decimals to the constructor caller. The compiled ABI is exactly ERC-20 plus a constant getter. There is no owner, mint, burn, pause, blacklist, hook, callback, receive or fallback.\n- **Dependency integrity.** The vendored ERC20 and Context sources hash identically to the upstream pinned commit, so the inherited transfer, approval and supply logic is the audited library code, not a modified copy.\n- **Economic security.** No external dependencies or oracles exist to break. Transfers move the exact requested amount with no fee, exemption or address-dependent branch, so the swarm share, pool seed and trader swaps arrive whole. Zero-address sentinels revert as ERC-20 expects. ETH sent to the token reverts.\n- **Invariants.** Supply is fixed at exactly 10^27 because `_update` is not overridden, `_mint` runs only in the constructor and `_burn` is unreachable. Sum of balances equals total supply. Finite allowances decrement exactly and the max allowance is preserved. Reverting paths roll back allowance and balance together. The existing invariant suite confirms this over 8,192 randomized calls, and all 30 project tests pass.\n- **Flow gaps.** The token has no periphery interactions of its own, so none of the four seams the guide describes can arise inside it. A scratch bytecode scan found no CALL, DELEGATECALL, CALLCODE, CREATE or SELFDESTRUCT opcodes in the runtime.\n- **Static analysis leads.** Slither reported nothing. Aderyn's large-numeric-literal note is a style lead only; the literal evaluates at compile time to exactly the manifest supply.\n\n**Noted, not reported as a defect.** The standard ERC-20 approve race, where a spender can use an old allowance before a replacement lands, is inherent to the standard, present in every OpenZeppelin ERC-20 and already documented in the README.\n\n**Not reachable here.** The live Uniswap v4 seed and swap path could not be executed locally because the PoolManager is not vendored in this tree. The token's behaviour toward it is fully determined by plain transfers, and the network's protected suite covers the live pool.","treeHash":null,"usage":{"cachedInputTokens":705297,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":13709,"runtime":"claude","turns":27,"wallClockMs":195033}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"232b62e021f6f394","findings":[],"hash":"606b46ad64fc26c5306bfaac035d0ca2c9fda50e8dd5db4db384f38cb49e80a9","nodeId":"4d3885a8-d70d-4f2a-9b74-71022adcf4ef","outcome":"completed","summary":"The findings file is in place at the repository root and is excluded from git by the workspace's own exclude rule, which is how the harness expects it. No source or configuration files were changed.\n\n**Result: no defects found.** The token is the stock OpenZeppelin v5.1.0 ERC20 with a single constructor mint of one billion SFP at 18 decimals to msg.sender, and nothing else. I wrote `.imd-findings.json` with an empty findings list and eight coverage rows.\n\n**What I checked, by guide**\n\n- **Execution Trace.** Traced approve, transfer and transferFrom through the vendored `_approve`, `_spendAllowance`, `_transfer` and `_update`. There are no external calls, so no stale reads or reentry. Self-transfer nets to zero because the sender write lands before the receiver read. Zero-address sender, receiver and spender all revert. Infinite allowance is preserved and finite allowance is decremented, both as documented.\n- **Periphery.** Hashed every vendored OpenZeppelin file and compared each to the dependency record and to the upstream file at the pinned commit, fetched over the network. All five match, so the base contracts are unmodified. Context returns plain msg.sender, so there is no meta-transaction path.\n- **First Principles.** The ABI exposes only the ERC-20 views, the three state-changing entry points and the supply constant. There is no mint, burn, owner, pause, upgrade, initialize, receive or fallback. Supply cannot grow after construction. Under CREATE2 from a factory the whole supply lands in the factory, which the existing tests prove.\n\n**Launch floor.** I replicated the protected harness's runtime opcode scan as a scratch Foundry test and it passed. An earlier Python scan of mine flagged bytes, but that was an off-by-one in my PUSH skipping, confirmed by a cast disassembly showing no DELEGATECALL, CALLCODE or SELFDESTRUCT. Scratch files were removed afterwards.\n\n**Verification runs.** The build succeeds on Solidity 0.8.26 and all 30 existing tests pass, including the 1,024-run fuzz tests and the 128-run invariant suite.\n\n**Not reported on purpose.** The standard ERC-20 approve-ordering race and tokens sent to the token contract itself are inherent to the design and already documented in the README, so they are not defects for the author to fix. The README names Ethereum chain ID 1 as the intended chain, which the manifest step owns, so I did not treat it as a code finding.","treeHash":null,"usage":{"cachedInputTokens":780532,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":25494,"runtime":"claude","turns":32,"wallClockMs":301302}},{"artifacts":[],"attempt":1,"bundleHash":"b418f758e9df1fed60247641b6c0ed90cea549b80f895d419fed4a3bf4704678","device":"d7953fb8f7e2c68b","findings":[],"hash":"7774543df58e936a2794321405042267d26024aa339b6e2a4e0afc0a74b192a3","nodeId":"c4dd42ff-e979-4192-ae92-873ac3ecaf11","outcome":"completed","summary":"Implemented [SuperFrenPet.sol](/home/imd/.identitymd/work/096c1ae2-4d06-4cee-a55e-bfdb7442edfb/c4dd42ff-e979-4192-ae92-873ac3ecaf11/src/SuperFrenPet.sol): 1,000,000,000 SFP with 18 decimals, minted once to the deployer. Includes vendored dependencies and documented deployment responsibilities.\n\nVerified with Solidity 0.8.26:\n\n- `forge build` passed.\n- `forge test` passed: 30 tests, including fuzz and stateful invariant tests.\n- `forge fmt --check` passed.\n- Clean offline build and parallel tests passed with an empty environment.","treeHash":"803a5f7e3265dc66e8640342234d6bf29ba7d45a","usage":{"cachedInputTokens":355584,"inputTokens":62391,"model":"gpt-6-astra","outputTokens":13728,"runtime":"codex","turns":5,"wallClockMs":386725}},{"artifacts":[],"attempt":1,"bundleHash":"0919071b3f5c68cf8972ab61e9e911c8a3c8fb723d73b63f5ce2b1fbf52d1144","device":"d2ea4ab6ad35e6a1","findings":[],"hash":"8bec99bfd255f3d68186caae4476a286b6c3044a97b03660d420f8dc0a20ea5a","nodeId":"afa1a448-1429-48b0-9be1-b4e5aa322530","outcome":"completed","summary":"Added 16 adversarial tests covering failed transfers, allowance rollback, revocation, repeated spending, and integer boundaries. Expanded invariants to mix successful and rejected calls across four holders.\n\n`forge build` and `forge test` pass: **46 tests**, including **32,768 invariant calls**.\n\nOnly `test/` changed. No implementation defects found.","treeHash":"6a43f1794af778a809104c936b4e0510dccd3fd2","usage":{"cachedInputTokens":661504,"inputTokens":82872,"model":"gpt-6-astra","outputTokens":10652,"runtime":"codex","turns":5,"wallClockMs":304539}},{"artifacts":[],"attempt":1,"bundleHash":"f19bfae5400b9375390f8fe8ea970e12a314a8d1f6f1e97f00fe94f559c38d6d","device":"ea5566a759ea17b3","findings":[],"hash":"ad2232bbea9c6114959e4d31da2c61dd887126a2f164450bbbf3c0023c467e28","nodeId":"8cfb27af-172e-477e-9d84-8834743b5c15","outcome":"completed","summary":"Created [launch.json](/home/imd-worker/.identitymd/work/096c1ae2-4d06-4cee-a55e-bfdb7442edfb/8cfb27af-172e-477e-9d84-8834743b5c15/launch.json) matching `SuperFrenPet`, its exact supply, empty constructor arguments, and the required pool and economics.\n\nValidation passed: manifest checks, `forge build`, and all 30 tests. No other deliverable files changed.","treeHash":"c739b5cbcd8dbd77a2527b1d8914209a148b7a17","usage":{"cachedInputTokens":168960,"inputTokens":36108,"model":"gpt-6-astra","outputTokens":2167,"runtime":"codex","turns":3,"wallClockMs":62322}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f768e94767a9dde3","findings":[{"citation":"resolved","description":"Outside the assigned math area; reported because it is concrete and verifiable. README.md line 133 states 'Vendored sources are unmodified' and DEPENDENCIES.json records a SHA-256 per vendored file. The recorded hashes equal the upstream forge-std v1.9.7 files at commit 77041d2ce690e692d6e03cc812b57d1ddaa4d505 (verified by downloading that archive), but seven files in lib/forge-std/src/ do not hash to the recorded values: StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol, interfaces/IMulticall3.sol. Stripping all whitespace makes each pair byte-identical, so the vendored copies were reformatted (consistent with `forge fmt` being run over lib/) rather than semantically changed. All six OpenZeppelin files match their records. No production bytecode is affected: forge-std is test-only, and src/SuperFrenPet.sol imports only OpenZeppelin. The defect is that the repository's own integrity record is false for these files, so a verifier checking DEPENDENCIES.json against the tree will flag a mismatch. Fix: either restore the upstream bytes for those seven files or regenerate the seven hashes in DEPENDENCIES.json and soften the README claim to 'unmodified except for formatting'.","line":57,"path":"DEPENDENCIES.json","reproduction":"From the repository root run: python3 -I -c \"import json,hashlib;[print(f['path']) for d in json.load(open('DEPENDENCIES.json')) for f in d['files'] if hashlib.sha256(open(f['path'],'rb').read()).hexdigest()!=f['sha256']]\". Expected: no output (every recorded hash matches). Actual: seven lib/forge-std/src paths are printed. sha256sum lib/forge-std/src/StdAssertions.sol gives 3fbf4a025b4fc94e..., not the recorded d4c89eec70d267de...; the upstream file at the recorded commit hashes to d4c89eec70d267de... exactly.","severity":"info","snippet":"        \"path\": \"lib/forge-std/src/StdAssertions.sol\",\n        \"sha256\": \"d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780\"","title":"DEPENDENCIES.json SHA-256 records do not match seven vendored forge-std files (whitespace-only reformatting)"}],"hash":"e11c1011b7aa576dbbe5376f582db6092abb3af336ea33e37e2ac148d5eda9ca","nodeId":"d1158b1c-a678-4c56-a878-20b930600008","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result.\n\n**Outcome: no math, boundary or numerical-gap defects in the token.** The one entry in the file is an info-level integrity note outside my area.\n\n**What I checked, against the Math Precision, Boundary and Numerical Gap guides**\n\n- The supply constant is exactly 1e27, a compile-time checked expression that fits comfortably in uint256. The constructor mints it once under checked arithmetic, and `decimals()` returns 18.\n- All three entry points are unmodified OpenZeppelin v5.1.0 code, and the six vendored OpenZeppelin files hash-match their records. The unchecked blocks in `_update` and `_spendAllowance` are each preceded by the guard that makes them safe.\n- Boundary inputs traced and tested in a scratch suite: transfer of `type(uint256).max` and of supply plus one, 1 wei transfers, zero-value transfers, self-transfer and self-transferFrom, allowance at max (infinite) versus max minus one (finite, decrements), and transferFrom of max value under infinite allowance reverting on balance rather than allowance.\n- No public path reaches a mint or burn branch, so the sum of balances equals the total supply after any sequence. The repo's invariant run and my three-party fuzz both confirm it.\n- The launch splits of 10%, 80%, 10% and the swarm's 2% and 8% of 1e27 divide with no remainder, so no flow arrives short.\n- The token has no external calls, no payable or receive function, and no bytes decoding, so the Boundary guide's call-site and payable steps have nothing to exercise.\n\n**The one note recorded**\n\nSeven forge-std files under `lib/forge-std/src/` do not match the SHA-256 values in DEPENDENCIES.json. I downloaded the pinned upstream commit and confirmed the recorded hashes are the upstream ones. The vendored copies differ only in whitespace, consistent with a formatter being run over the library. This affects test helpers only, never production bytecode, but it makes the README's claim that vendored sources are unmodified false. The fix is to restore the upstream bytes or regenerate those seven hashes.\n\n**Coverage record:** all three listed entry points are marked `holds`, plus four invariant rows. The scratch test directory and the temporary download were removed. The working tree is otherwise unchanged.","treeHash":null,"usage":{"cachedInputTokens":684834,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":13215,"runtime":"claude","turns":26,"wallClockMs":197908}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8c9c4986ca881107","findings":[{"citation":"resolved","description":"Merged from the audit_math (info) and audit_permissions (low) reports; same root cause. DEPENDENCIES.json exists so a verifier can confirm each vendored file by SHA-256 (README.md lines 127-128), and README.md line 133 states 'Vendored sources are unmodified.' I re-hashed every recorded file in the tree and fetched every file from its recorded upstream commit (OpenZeppelin 69c8def5f222ff96f2b5beff05dfba996368aa79, forge-std 77041d2ce690e692d6e03cc812b57d1ddaa4d505). All 36 recorded hashes equal the upstream bytes, and 29 of the 36 tree files match. Seven tree files do not, all test-only under lib/forge-std/src: StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol, interfaces/IMulticall3.sol. The differences are whitespace-only reflow consistent with `forge fmt` run over lib/ at line_length 120; no production code is affected: src/SuperFrenPet.sol imports only OpenZeppelin, and all six OpenZeppelin v5.1.0 files are byte-identical to upstream and to their recorded hashes. Impact: the repository's own integrity record is false for seven entries, so any provenance or attestation step that validates the tree against DEPENDENCIES.json fails, and the README statement is inaccurate. No on-chain effect, no bytecode change. Fix (either): restore the seven files byte-for-byte from forge-std 77041d2 and exclude lib/ from formatting; or re-record the seven actual hashes and amend README.md line 133 to say the forge-std copies were reformatted (whitespace only).","line":57,"path":"DEPENDENCIES.json","reproduction":"From the repository root run:\n\npython3 -I -c \"import json,hashlib;[print(f['path']) for d in json.load(open('DEPENDENCIES.json')) for f in d['files'] if hashlib.sha256(open(f['path'],'rb').read()).hexdigest()!=f['sha256']]\"\n\nExpected: no output (every recorded hash matches the file in the tree). Actual: seven paths are printed: lib/forge-std/src/StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol, interfaces/IMulticall3.sol. Example: sha256sum lib/forge-std/src/StdAssertions.sol gives 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384 while DEPENDENCIES.json line 58 records d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780; `curl -sSL https://raw.githubusercontent.com/foundry-rs/forge-std/77041d2ce690e692d6e03cc812b57d1ddaa4d505/src/StdAssertions.sol | sha256sum` prints the recorded value, so the record describes upstream and the tree copy was changed. `diff <(tr -d ' \\t\\n' < tree) <(tr -d ' \\t\\n' < upstream)` is empty for each of the seven, confirming whitespace-only changes.","severity":"low","snippet":"        \"path\": \"lib/forge-std/src/StdAssertions.sol\",\n        \"sha256\": \"d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780\"","title":"DEPENDENCIES.json records upstream SHA-256 values for seven forge-std files whose vendored copies were reformatted, so the README claim 'Vendored sources are unmodified' is false for them"}],"hash":"e34ec004ada37d613edcd4db17056d4d1cd036b002323f767828e8427418723b","nodeId":"7b1fb523-e370-4efa-8299-8055c1149652","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written. Nothing else was changed in the tree.\n\n**Outcome.** The token is a stock OpenZeppelin v5.1.0 ERC-20 with a no-argument constructor that mints the full supply once to the deployer. No on-chain defect was found. One low finding is kept, merged from two specialists.\n\n**What I verified**\n- Build and all 46 existing tests pass under the pinned solc 0.8.26.\n- The six vendored OpenZeppelin files are byte-identical to upstream commit 69c8def and to their recorded hashes, so the production dependency is exactly what the record says.\n- The compiled runtime contains no DELEGATECALL, CALLCODE or SELFDESTRUCT. Creation and runtime sizes are far under the protocol limits.\n- The manifest matches the code: empty constructor arguments, supply of one billion with 18 decimals, matching name and symbol, contract name within 32 characters.\n- All three state-changing entry points (approve, transfer, transferFrom) are unmodified OpenZeppelin paths, traced and marked as holding.\n\n**Kept finding (low).** DEPENDENCIES.json records upstream hashes for seven forge-std files, but the vendored copies were reformatted, whitespace only, so the hashes do not match the tree and the README's \"Vendored sources are unmodified\" claim is false for them. I reproduced it by re-hashing every recorded file and fetching every file from its recorded upstream commit. The audit_math and audit_permissions reports described the same root cause and are merged into this one entry. It is test-only and has no bytecode effect. The fix is either to restore the seven files byte-for-byte or to re-record their hashes and amend the README wording.\n\n**Dropped.** Nothing else was reported by the specialists. The aderyn \"large numeric literal\" line is the supply constant written with underscores and is not a defect.","treeHash":null,"usage":{"cachedInputTokens":306995,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":6441,"runtime":"claude","turns":7,"wallClockMs":132882}}],"verification":[{"checks":[{"durationMs":1006,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 916.17ms\nCompiler run successful!\n","passed":true},{"durationMs":2033,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 29 tests for test/SuperFrenPet.t.sol:SuperFrenPetTest\n[PASS] testFuzz_OverdrawRevertsWithoutChangingSupply(uint256) (runs: 1024, μ: 69125, ~: 69447)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129651464\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92872, ~: 93206)\nLogs:\n  Bound result 968212038687989641275031261\n\n[PASS] testFuzz_TransferFromConservesSupplyAndAccountsForAllowance(uint256,uint256) (runs: 1024, μ: 164492, ~: 165266)\nLogs:\n  Bound result 999999999999999999999999997\n  Bound result 999999999999999999999999999\n\n[PASS] test_AccountDeploymentMintsToDeployer() (gas: 30228)\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 171733)\n[PASS] test_ApprovalIsScopedToOwnerAndSpender() (gas: 173807)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveFunds() (gas: 88852)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37628)\n[PASS] test_ConstructorEmitsMintTransfer() (gas: 5600)\n[PASS] test_Create2DeploymentMintsToFactory() (gas: 289535)\n[PASS] test_DeployerCannotSpendHolderFundsWithoutApproval() (gas: 158110)\n[PASS] test_EntireSupplyCanMoveAndMoveBack() (gas: 159495)\n[PASS] test_LaunchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 639468)\n[PASS] test_MetadataAndInitialSupply() (gas: 107671)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 710546)\n[PASS] test_SelfTransferCannotExceedBalance() (gas: 42831)\n[PASS] test_SelfTransferPreservesBalance() (gas: 53969)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 93494)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 136473)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 149741)\n[PASS] test_TransferFromRevertsForInsufficientAllowance() (gas: 115757)\n[PASS] test_TransferFromSpendsFiniteAllowance() (gas: 225055)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 103345)\n[PASS] test_TransferFromZeroRecipientRollsBackAllowance() (gas: 114209)\n[PASS] test_TransferFromZeroSenderReverts() (gas: 55140)\n[PASS] test_TransferRevertsForInsufficientBalance() (gas: 120015)\n[PASS] test_TransferToZeroRevertsEvenForZeroAmount() (gas: 71903)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73364)\n[PASS] test_ZeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 81502)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 18.34ms (56.75ms CPU time)\n\nRan 1 test for test/SuperFrenPet.invariant.t.sol:SuperFrenPetInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchModel() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2693  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2748  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2751  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 255\n  Bound result 0\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 53060877675985104124\n  Bound result 0\n  Bound result 11\n  Bound result 0\n  Bound result 0\n  Bound result 18\n  Bound result 123000000000000000000\n  Bound result 12\n  Bound result 0\n  Bound result 1312\n  Bound result 184670247463905451484505054\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 5207\n  Bound result 0\n  Bound result 1535\n  Bound result 0\n  Bound result 11000000000000000000\n  Bound result 711348555098326856406500094\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 18\n  Bound result 12\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3726\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1469\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.96s (1.96s CPU time)\n\nRan 2 test suites in 1.96s (1.98s CPU time): 30 tests passed, 0 failed, 0 skipped (30 total tests)\n","passed":true},{"durationMs":32,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SuperFrenPet.approve(address,uint256)\",\"SuperFrenPet.transfer(address,uint256)\",\"SuperFrenPet.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":162,\"LICENSE\":21,\"README.md\":134,\"foundry.toml\":23,\"remappings.txt\":2,\"src/SuperFrenPet.sol\":16,\"test/SuperFrenPet.invariant.t.sol\":95,\"test/SuperFrenPet.t.sol\":382},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":368,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":220,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SuperFrenPet.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"7774543df58e936a2794321405042267d26024aa339b6e2a4e0afc0a74b192a3","verifiedTreeHash":"803a5f7e3265dc66e8640342234d6bf29ba7d45a","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":1403,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.30s\nCompiler run successful!\n","passed":true},{"durationMs":8342,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 16 tests for test/SuperFrenPet.adversarial.t.sol:SuperFrenPetAdversarialTest\n[PASS] testFuzz_ApprovalReplacementIsExactAndIdempotent(uint256,uint256) (runs: 1024, μ: 245597, ~: 245728)\n[PASS] testFuzz_InsufficientAllowanceLeavesAllFundsAndApprovalIntact(uint256,uint256,uint256) (runs: 1024, μ: 229082, ~: 230909)\nLogs:\n  Bound result 844120378501864928088634360\n  Bound result 41635427577879274\n  Bound result 447227627301431834985370120\n\n[PASS] testFuzz_InsufficientBalanceDoesNotConsumeFiniteAllowance(uint256,uint256,uint256) (runs: 1024, μ: 236309, ~: 236750)\nLogs:\n  Bound result 9\n  Bound result 12226\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129627727\n\n[PASS] testFuzz_InvalidRecipientDoesNotConsumeAllowance(uint256,uint256,bool) (runs: 1024, μ: 168743, ~: 165927)\nLogs:\n  Bound result 53932382153506018946269706\n  Bound result 16075313625657387369269773907160067717740766930213959885001946810140\n\n[PASS] testFuzz_SelfTransferFromOnlyConsumesFiniteAllowance(uint256,uint256) (runs: 1024, μ: 175613, ~: 176001)\nLogs:\n  Bound result 6301321012860942451163041\n  Bound result 8871011325642902456245151920719619318841653738190030294748612527\n\n[PASS] testFuzz_SplitDelegatedTransfersEqualOneTransfer(uint256,uint256,uint256) (runs: 1024, μ: 406251, ~: 407500)\nLogs:\n  Bound result 11410\n  Bound result 8371\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129625992\n\n[PASS] test_FailedSelfTransferFromPreservesBalanceAndAllowance() (gas: 167666)\n[PASS] test_IndependentSpendersCannotSpendTheSameBalanceTwice() (gas: 521275)\n[PASS] test_MaxUintAllowanceCannotCreateTokensOrBypassBalanceCheck() (gas: 166727)\n[PASS] test_MaxUintMinusOneAllowanceIsFinite() (gas: 252209)\n[PASS] test_MaxUintTransferCannotOverflowBalances() (gas: 100700)\n[PASS] test_OneBaseUnitCanBeSpentOnlyOnce() (gas: 299498)\n[PASS] test_OwnerUsingTransferFromStillNeedsAllowance() (gas: 285579)\n[PASS] test_UnlimitedAllowanceCanBeReducedAndRevoked() (gas: 419407)\n[PASS] test_ZeroApprovalToZeroSpenderStillReverts() (gas: 108224)\n[PASS] test_ZeroDelegatedTransferToZeroStillReverts() (gas: 116349)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 81.55ms (474.75ms CPU time)\n\nRan 29 tests for test/SuperFrenPet.t.sol:SuperFrenPetTest\n[PASS] testFuzz_OverdrawRevertsWithoutChangingSupply(uint256) (runs: 1024, μ: 69121, ~: 69447)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039507584007913129639935\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 93132, ~: 93614)\nLogs:\n  Bound result 1060876501468253230629883758691108682708171547513\n  Bound result 6291485\n\n[PASS] testFuzz_TransferFromConservesSupplyAndAccountsForAllowance(uint256,uint256) (runs: 1024, μ: 164357, ~: 165254)\nLogs:\n  Bound result 2\n  Bound result 8370\n\n[PASS] test_AccountDeploymentMintsToDeployer() (gas: 30228)\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 171733)\n[PASS] test_ApprovalIsScopedToOwnerAndSpender() (gas: 173807)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveFunds() (gas: 88852)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37628)\n[PASS] test_ConstructorEmitsMintTransfer() (gas: 5600)\n[PASS] test_Create2DeploymentMintsToFactory() (gas: 289535)\n[PASS] test_DeployerCannotSpendHolderFundsWithoutApproval() (gas: 158110)\n[PASS] test_EntireSupplyCanMoveAndMoveBack() (gas: 159495)\n[PASS] test_LaunchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 639468)\n[PASS] test_MetadataAndInitialSupply() (gas: 107671)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 710546)\n[PASS] test_SelfTransferCannotExceedBalance() (gas: 42831)\n[PASS] test_SelfTransferPreservesBalance() (gas: 53969)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 93494)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 136473)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 149741)\n[PASS] test_TransferFromRevertsForInsufficientAllowance() (gas: 115757)\n[PASS] test_TransferFromSpendsFiniteAllowance() (gas: 225055)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 103345)\n[PASS] test_TransferFromZeroRecipientRollsBackAllowance() (gas: 114209)\n[PASS] test_TransferFromZeroSenderReverts() (gas: 55140)\n[PASS] test_TransferRevertsForInsufficientBalance() (gas: 120015)\n[PASS] test_TransferToZeroRevertsEvenForZeroAmount() (gas: 71903)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73364)\n[PASS] test_ZeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 81502)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 81.62ms (197.10ms CPU time)\n\nRan 1 test for test/SuperFrenPet.invariant.t.sol:SuperFrenPetInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchModel() (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------+-----------------------+-------+---------+----------╮\n| Contract     | Selector              | Calls | Reverts | Discards |\n+===================================================================+\n| TokenHandler | approve               | 3669  | 0       | 0        |\n|--------------+-----------------------+-------+---------+----------|\n| TokenHandler | approveZeroSpender    | 3655  | 0       | 0        |\n|--------------+-----------------------+-------+---------+----------|\n| TokenHandler | approvedOverdraw      | 3556  | 0       | 0        |\n|--------------+-----------------------+-------+---------+----------|\n| TokenHandler | overdraw              | 3677  | 0       | 0        |\n|--------------+-----------------------+-------+---------+----------|\n| TokenHandler | revokeAndAttemptSpend | 3662  | 0       | 0        |\n|--------------+-----------------------+-------+---------+----------|\n| TokenHandler | transfer              | 3671  | 0       | 0        |\n|--------------+-----------------------+-------+---------+----------|\n| TokenHandler | transferAllAndReturn  | 3605  | 0       | 0        |\n|--------------+-----------------------+-------+---------+----------|\n| TokenHandler | transferFrom          | 3566  | 0       | 0        |\n|--------------+-----------------------+-------+---------+----------|\n| TokenHandler | transferToZero        | 3707  | 0       | 0        |\n╰--------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129639941\n  Bound result 0\n  Bound result 193774963799174212369144707\n  Bound result 0\n  Bound result 15198586858477103247919393\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n  Bound result 0\n  Bound result 7000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640314039450584007913129639940\n  Bound result 115792089237316195423570985008687907853269984665640120264493784833700760495231\n  Bound result 115792089237316195423570985008687907853269984665640154771596539132314468190256\n  Bound result 115792089237316195423570985008687907853269984665640314039450584007913129640190\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039450584007913129639944\n  Bound result 1461501637330902918203684832716283019655932542975\n  Bound result 10\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 3\n  Bound result 11\n  Bound result 5827\n  Bound result 5578\n  Bound result 250000000000000000000005815\n  Bound result 7282203768387586852156864811238877608603946078\n  Bound result 0\n  Bound result 3270\n  Bound result 10000000000000000000\n  Bound result 7469\n  Bound result 619\n  Bound result 115792089237316195423570985008687907853269984665640314039487584007913129633501\n  Bound result 35654494024736\n  Bound result 147219510144671538429657699\n  Bound result 2131903644\n  Bound result 12\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 3253\n  Bound result 20000000000000000000\n  Bound result 2172793904290157442843980300235967670578577407\n  Bound result 4\n  Bound result 123000000000000000000\n  Bound result 37116933566831049959926471\n  Bound result 3\n  Bound result 7198\n  Bound result 12\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640120264493784833700760502735\n  Bound result 9000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640351156384283523282173126207\n  Bound result 10238\n  Bound result 1553\n  Bound result 115792089237316195423570985008687907853269984665640507814428383182125498792743\n  Bound result 115792089237316195423570985008687907853269984665640507817324220809391523200244\n  Bound result 115792089237316195423570985008687907853269984665640276922525017176863169702229\n  Bound result 115792089237316195423570985008687907853269984665640120264504784833700760495834\n  Bound result 7194\n  Bound result 204799451010687552805427050\n  Bound result 43286805563867705504692685\n  Bound result 115792089237316195423570985008687907853269984665640507814428383182125498792742\n  Bound result 16635057005154782053244310\n  Bound result 0\n  Bound result 1\n  Bound result 654267795724\n  Bound result 254\n  Bound result 115792089237316195423570985008687907853269984665639915465042774146802222864517\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640351156384150838963089571467\n  Bound result 365778425\n  Bound result 33155561336333325907128959\n  Bound result 35654494024736\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640464527622819314419994098646\n  Bound result 0\n  Bound result 70867639634640795239647088\n  Bound result 24233075193088852059657600\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 8.25s (8.25s CPU time)\n\nRan 3 test suites in 8.25s (8.42s CPU time): 46 tests passed, 0 failed, 0 skipped (46 total tests)\n","passed":true},{"durationMs":40,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SuperFrenPet.approve(address,uint256)\",\"SuperFrenPet.transfer(address,uint256)\",\"SuperFrenPet.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":162,\"LICENSE\":21,\"README.md\":134,\"foundry.toml\":23,\"remappings.txt\":2,\"src/SuperFrenPet.sol\":16,\"test/SuperFrenPet.adversarial.t.sol\":264,\"test/SuperFrenPet.invariant.t.sol\":204,\"test/SuperFrenPet.t.sol\":384},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"8bec99bfd255f3d68186caae4476a286b6c3044a97b03660d420f8dc0a20ea5a","verifiedTreeHash":"6a43f1794af778a809104c936b4e0510dccd3fd2","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":1115,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.02s\nCompiler run successful!\n","passed":true},{"durationMs":2216,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 29 tests for test/SuperFrenPet.t.sol:SuperFrenPetTest\n[PASS] testFuzz_OverdrawRevertsWithoutChangingSupply(uint256) (runs: 1024, μ: 69094, ~: 69447)\nLogs:\n  Bound result 1000000000000000000000000001\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 93017, ~: 93194)\nLogs:\n  Bound result 326247736229052189604712\n\n[PASS] testFuzz_TransferFromConservesSupplyAndAccountsForAllowance(uint256,uint256) (runs: 1024, μ: 164215, ~: 165242)\nLogs:\n  Bound result 403728478115732576038070102\n  Bound result 115792089237316195423570985008687907853269984665640161124153418617112567190161\n\n[PASS] test_AccountDeploymentMintsToDeployer() (gas: 30228)\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 171733)\n[PASS] test_ApprovalIsScopedToOwnerAndSpender() (gas: 173807)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveFunds() (gas: 88852)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37628)\n[PASS] test_ConstructorEmitsMintTransfer() (gas: 5600)\n[PASS] test_Create2DeploymentMintsToFactory() (gas: 289535)\n[PASS] test_DeployerCannotSpendHolderFundsWithoutApproval() (gas: 158110)\n[PASS] test_EntireSupplyCanMoveAndMoveBack() (gas: 159495)\n[PASS] test_LaunchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 639468)\n[PASS] test_MetadataAndInitialSupply() (gas: 107671)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 710546)\n[PASS] test_SelfTransferCannotExceedBalance() (gas: 42831)\n[PASS] test_SelfTransferPreservesBalance() (gas: 53969)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 93494)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 136473)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 149741)\n[PASS] test_TransferFromRevertsForInsufficientAllowance() (gas: 115757)\n[PASS] test_TransferFromSpendsFiniteAllowance() (gas: 225055)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 103345)\n[PASS] test_TransferFromZeroRecipientRollsBackAllowance() (gas: 114209)\n[PASS] test_TransferFromZeroSenderReverts() (gas: 55140)\n[PASS] test_TransferRevertsForInsufficientBalance() (gas: 120015)\n[PASS] test_TransferToZeroRevertsEvenForZeroAmount() (gas: 71903)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73364)\n[PASS] test_ZeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 81502)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 20.68ms (69.77ms CPU time)\n\nRan 1 test for test/SuperFrenPet.invariant.t.sol:SuperFrenPetInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchModel() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2795  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2728  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2669  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5362\n  Bound result 0\n  Bound result 255\n  Bound result 0\n  Bound result 1295\n  Bound result 7\n  Bound result 0\n  Bound result 5881\n  Bound result 0\n  Bound result 3\n  Bound result 890\n  Bound result 482934932231403038166456136\n  Bound result 2\n  Bound result 999999999999999999999998702\n  Bound result 1288\n  Bound result 0\n  Bound result 10\n  Bound result 18\n  Bound result 0\n  Bound result 1699\n  Bound result 2\n  Bound result 1\n  Bound result 3437\n  Bound result 0\n  Bound result 0\n  Bound result 420\n  Bound result 5792\n  Bound result 5733\n  Bound result 255\n  Bound result 444\n  Bound result 18\n  Bound result 185\n  Bound result 15\n  Bound result 80\n  Bound result 0\n  Bound result 378312961062237689453711593\n  Bound result 255\n  Bound result 952\n  Bound result 610\n  Bound result 155\n  Bound result 325\n  Bound result 4\n  Bound result 80\n  Bound result 542\n  Bound result 702\n  Bound result 208\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.14s (2.14s CPU time)\n\nRan 2 test suites in 2.14s (2.16s CPU time): 30 tests passed, 0 failed, 0 skipped (30 total tests)\n","passed":true},{"durationMs":31,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SuperFrenPet.approve(address,uint256)\",\"SuperFrenPet.transfer(address,uint256)\",\"SuperFrenPet.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":162,\"LICENSE\":21,\"README.md\":134,\"foundry.toml\":23,\"launch.json\":24,\"remappings.txt\":2,\"src/SuperFrenPet.sol\":16,\"test/SuperFrenPet.invariant.t.sol\":95,\"test/SuperFrenPet.t.sol\":382},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"ad2232bbea9c6114959e4d31da2c61dd887126a2f164450bbbf3c0023c467e28","verifiedTreeHash":"c739b5cbcd8dbd77a2527b1d8914209a148b7a17","verifierVersion":"0.1.0+0e08a464"}]}