{"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":"1a7aec66-751d-458e-830c-1cab5483ffaa","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"0611f126109e8f9314140aec8cef6924a7f36fb2e888401be2b5b82959ba3689","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":"76a084ae1b08a5fd91fbf585849b1be0e39820f35da468a67d67b42f0b76c71a","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":"3b49ea8e7a8f799d9346bb2194282a10356fde57c5cce01601a273e49aca1439","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":"e2308f4054cff4619cb672ba454ccfe40efbe6470ef150cc45cd7e4eecf35209","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":"78fdcc8007e668fe2c21f6947188b0a32f2edf0a332f3156aaad6afb99e42aa6","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":"915fb08eb13bbe8531b21e9264889d0bc19ba3dcc8cbb99c693fb0d27a0d1c59","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":"2a051232d05a78b619120ac9eb140ef07a86626702cdbdd6cbdcebd4409d989e","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"07dc6c821f26bb0e759d13f1a47065b4a1bbbd59b4aee1dbb20871aba09007f8","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: Squeek (SQK).\nToken name: Squeek\nToken symbol: SQK\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"de0d10c79efa14d5afeef90bfbbe1f821f142d822393c2ccd91428e63a929b72","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"1a7aec66-751d-458e-830c-1cab5483ffaa","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2134-squeek"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52159","feedbackHash":"f7bcb673bd0cdb6b783ebf30f6227bfdc3b167f7a49fbf0382832652c35cef02","nodeKey":"audit_economics","submissionHash":"0611f126109e8f9314140aec8cef6924a7f36fb2e888401be2b5b82959ba3689","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51540","feedbackHash":"a61e0b7517ad6ce7fa1dafc134e5895e520bda4742231697e19f545c5d249a6c","nodeKey":"audit_flow","submissionHash":"76a084ae1b08a5fd91fbf585849b1be0e39820f35da468a67d67b42f0b76c71a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51214","feedbackHash":"5aec658f220de5aa80ae435b14c3fcabd9f56adf97461c0b6d305d60d1648962","nodeKey":"audit_judge","submissionHash":"3b49ea8e7a8f799d9346bb2194282a10356fde57c5cce01601a273e49aca1439","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52601","feedbackHash":"dcbc66d92d689cd1bb8cef61919c6a31eb638c604a04f88b5c3e6fac5e3e1d24","nodeKey":"audit_math","submissionHash":"e2308f4054cff4619cb672ba454ccfe40efbe6470ef150cc45cd7e4eecf35209","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52200","feedbackHash":"854cc4314a1a81d5b02185aa2ed9d4cc5bd9b9b5ff209937baaf5ec6b718a93e","nodeKey":"audit_permissions","submissionHash":"78fdcc8007e668fe2c21f6947188b0a32f2edf0a332f3156aaad6afb99e42aa6","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51322","feedbackHash":"6a3648c59f8d293daa0dfeb2891e95bd7315e27825bb715a33f5e8a66140253a","nodeKey":"build_contract_project","submissionHash":"915fb08eb13bbe8531b21e9264889d0bc19ba3dcc8cbb99c693fb0d27a0d1c59","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51547","feedbackHash":"9f62f6de0bf668854ceb0226f2bfa79b635850c77a30f11d58c5aebf433efdab","nodeKey":"manifest","submissionHash":"2a051232d05a78b619120ac9eb140ef07a86626702cdbdd6cbdcebd4409d989e","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51067","feedbackHash":"53dcf1769c7c1db2e9fd4d42d5573d0b44b9d2f68b41bacbf3d2b069ec40ae9e","nodeKey":"write_foundry_tests","submissionHash":"07dc6c821f26bb0e759d13f1a47065b4a1bbbd59b4aee1dbb20871aba09007f8","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"ffefc666ca7edad2c22365c413cfa256eb6b5f4b7128b4e6e6b702a13de2bd91","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6b37e4ab65246705","findings":[{"citation":"resolved","description":"Outside the economics area; reported because it is a concrete, reproducible discrepancy in a provenance statement the verifier may rely on. The lockfile hashes are correct for every OpenZeppelin v5.0.2 file (all five are byte-identical to upstream commit dbb6104c), so the token's runtime dependency is exactly what is claimed and nothing in this finding affects deployed code. But six forge-std v1.9.6 files on disk (src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IMulticall3.sol) differ from both the lockfile hash and upstream commit 3b20d60d. Diffing against upstream shows only whitespace/line-wrapping changes consistent with `forge fmt` at line_length 120 (e.g. multi-line function headers collapsed onto one line); no semantic change. So the README's 'Dependencies are unmodified' and the lockfile's hash for those files are both wrong for the tree as shipped. Fix: either restore the six upstream files byte-for-byte (so the lockfile and README are true), or re-hash them in dependencies.lock.json and amend the README sentence to say forge-std was reformatted. Not an economic or safety defect.","line":65,"path":"README.md","reproduction":"From the repository root run `sha256sum lib/forge-std/src/StdAssertions.sol`. Expected (per dependencies.lock.json line 26): d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780. Actual: 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384. The same mismatch occurs for src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol and src/interfaces/IMulticall3.sol; all 26 other vendored files (including every OpenZeppelin file) match. `diff` against https://raw.githubusercontent.com/foundry-rs/forge-std/3b20d60d14b343ee4f908cb8079495c07f5e8981/src/StdAssertions.sol shows 36 changed lines that are all line-wrapping of function signatures.","severity":"info","snippet":"`dependencies.lock.json` records the upstream commits and SHA-256 hashes of every vendored file. Dependencies are unmodified. ERC-20 behavior follows [EIP-20](https://eips.ethereum.org/EIPS/eip-20) and the pinned implementation; no dependency fetch runs during verification.","title":"README provenance claim is inaccurate: six vendored forge-std files do not match the lockfile hashes (formatter reflow only, test tooling, no runtime effect)"}],"hash":"0611f126109e8f9314140aec8cef6924a7f36fb2e888401be2b5b82959ba3689","nodeId":"a76b631d-63ec-4fb2-b12a-c79ee821dba7","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written. No tracked file was changed. The scratch test lives under `test/scratch/`, which is gitignored.\n\n**Outcome: no economic, invariant, or flow-gap defect in the Squeek token.** The contract is a plain OpenZeppelin v5.0.2 ERC-20 whose constructor mints the full supply once to the creating account. I report one informational provenance discrepancy, outside my area.\n\n**What I verified**\n\n- **Dependency integrity.** All five vendored OpenZeppelin files are byte-identical to upstream commit dbb6104c, so the transfer, approval and allowance logic is exactly the audited library code.\n- **Supply invariant.** The compiled ABI exposes only the constructor, three nonpayable functions and seven views. There is no receive, fallback, mint, burn, pause, blacklist or owner path, so total supply is fixed at 1e27 and the sum of balances always equals it. The project's 128x64 invariant runs and my own 1024-run fuzz hold this.\n- **Launch flows.** I wrote a scratch test modelling Uniswap v4 balance-delta accounting. The 10% distributor share arrives whole and 37 unequal claims sum to it exactly. The 80% seed settles exactly, a trader's take and sell-back leave the pool whole, and the remainder reaches the requester exactly. An allowance-based pull also moves the exact amount.\n- **Economic Security failure modes.** No fee-on-transfer, rebasing, blacklist, pause, void-return, callback, oracle or external call exists. Zero-address receiver and spender revert. Full-balance and max-allowance operations behave per the standard. Decimals match the brief.\n- **Existing suite.** All 35 project tests pass with the README's fuzz seed. The aderyn large-literal lead is a compile-time constant asserted equal to 1e27 by the suite, so it is not a defect.\n\n**The one finding (info).** The README states dependencies are unmodified and the lockfile hashes every vendored file, but six forge-std files differ from both the lockfile and upstream v1.9.6. The diff is formatter line-wrapping only, in test tooling, with no runtime effect. The reproduction is a single sha256sum against lockfile line 26. The fix is either to restore the upstream bytes or to re-hash and amend the README sentence.\n\n**Coverage.** All three listed entry points are marked holds, with five additional invariant and guide rows. The protected floor tests are marked unreached because they import v4-core and the network's floor harness, which are not in this tree. I traced each of their checks by reading and all hold on this code.","treeHash":null,"usage":{"cachedInputTokens":1400822,"inputTokens":642,"model":"claude-fable-5-1","outputTokens":16103,"runtime":"claude","turns":21,"wallClockMs":254685}},{"artifacts":[],"attempt":1,"bundleHash":"1cc4c42547f46bbdedbc78a589e0f1c74e0d60a2424bbaadf4b0f1860ecb076b","device":"b0ab61c6f4146d8d","findings":[],"hash":"07dc6c821f26bb0e759d13f1a47065b4a1bbbd59b4aee1dbb20871aba09007f8","nodeId":"c6f1a356-b5bd-4e0c-9e6a-65cbc3059a97","outcome":"completed","summary":"Added 13 edge-case and fuzz tests, and strengthened stateful invariants across five actors.\n\nVerified offline with the supplied seed:\n\n- `forge build` passed.\n- `forge test` passed: 48 tests and 32,768 invariant calls.\n- Only `test/` changed.\n\nNo confirmed defects found.","treeHash":"f30f09672f762e852fb8b3ab31936690704162d1","usage":{"cachedInputTokens":550912,"inputTokens":56967,"model":"gpt-6-astra","outputTokens":11257,"runtime":"codex","turns":4,"wallClockMs":303864}},{"artifacts":[],"attempt":1,"bundleHash":"8a29357b5f1af6859cf620eedb4cdb4e63390b1b9567c31f1c56b59ca4b7273b","device":"20831523ffc32a82","findings":[],"hash":"2a051232d05a78b619120ac9eb140ef07a86626702cdbdd6cbdcebd4409d989e","nodeId":"10ac57c1-c12d-4e29-85a9-a488bc3a3270","outcome":"completed","summary":"Created [launch.json](/home/imd-worker/.identitymd/work/1a7aec66-751d-458e-830c-1cab5483ffaa/10ac57c1-c12d-4e29-85a9-a488bc3a3270/launch.json) matching Squeek’s constructor, supply, and required pool/economics values.\n\nValidation passed: manifest checks, `forge build`, and all 35 tests with the supplied fuzz seed. Only `launch.json` is changed for submission.","treeHash":"489d9ecb71709b320e42528a4af8531ea5b83a74","usage":{"cachedInputTokens":219520,"inputTokens":40902,"model":"gpt-6-astra","outputTokens":2384,"runtime":"codex","turns":3,"wallClockMs":70917}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dd2ee4882a1be950","findings":[{"citation":"resolved","description":"README.md:65 states that dependencies.lock.json records the SHA-256 of every vendored file and that dependencies are unmodified. Recomputing SHA-256 over the committed tree: all 6 OpenZeppelin v5.0.2 entries match, and I fetched each of those files from upstream commit dbb6104ce834628e473d2173bbc9d47f81a9eec3 and found them byte-identical to the tree, so the ERC-20 base Squeek inherits is pristine. 20 of 26 forge-std v1.9.6 entries match, but six do not: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol and src/interfaces/IMulticall3.sol. Fetching those six from upstream commit 3b20d60d14b343ee4f908cb8079495c07f5e8981 shows the lockfile holds the correct upstream hashes and the tree copies differ only by whitespace and line wrapping (forge fmt with the project line_length of 120 re-wrapped multi-line signatures); the token streams are identical ignoring whitespace. No Solidity semantics changed, src/Squeek.sol does not import forge-std, and nothing in the deployed bytecode, launch flow or protected checks depends on this. It is a documentation and provenance inconsistency only: a reader who verifies lib/ against the lock, as the README invites, gets six mismatches. Both audit_economics and audit_flow reported this same root cause; it is merged here at the severity they gave it. Fix: either restore the six upstream files byte-for-byte (for example by excluding lib/ from forge fmt), or regenerate those six hashes and amend README.md:65 to say forge-std was reformatted.","line":65,"path":"README.md","reproduction":"State: the committed tree at HEAD (dffd925). Input: for every entry in dependencies.lock.json compute sha256 of lib/<directory>/<file> and compare with the recorded hash. Expected per README.md:65: all 32 match. Actual: 26 match and 6 forge-std files mismatch, e.g. dependencies.lock.json:26 records src/StdAssertions.sol = d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780 while sha256sum lib/forge-std/src/StdAssertions.sol = 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384; dependencies.lock.json:38 records src/Vm.sol = 37cdc22402df6c21... while the tree file hashes to 9ef7ee8c9a0a4fb1.... Cross-check: sha256 of each file fetched from raw.githubusercontent.com/foundry-rs/forge-std/3b20d60d14b343ee4f908cb8079495c07f5e8981/<file> equals the lockfile value, and diff -w between the upstream file and the tree file is empty for all six.","severity":"info","snippet":"`dependencies.lock.json` records the upstream commits and SHA-256 hashes of every vendored file. Dependencies are unmodified. ERC-20 behavior follows [EIP-20](https://eips.ethereum.org/EIPS/eip-20) and the pinned implementation; no dependency fetch runs during verification.","title":"README provenance claim and dependencies.lock.json hashes do not match six vendored forge-std files (whitespace-only reformatting of test tooling; merged from audit_economics and audit_flow)"},{"citation":"resolved","description":"README.md:50 says the launch service supplies the manifest in a separate step and that this repository contains no launch.json. That was true when the README was written (commit d8650ee), but the accepted manifest step (commit 7e9dd5a) added launch.json at the repository root, and it is present at HEAD. The manifest itself is consistent with the token: kind custom_token, contract Squeek, name Squeek, symbol SQK, decimals 18, constructorArgs [] matching the zero-parameter constructor, totalSupply 1000000000000000000000000000 equal to INITIAL_SUPPLY, lowercase addresses, only schema keys, notes 474 characters. The defect is the stale README sentence, not the manifest. Fix: amend README.md:50 to say the manifest is launch.json at the repository root (written by the manifest step) and that no broadcast script exists.","line":50,"path":"README.md","reproduction":"State: the committed tree at HEAD (dffd925). Input: read README.md:50 and list the repository root. Expected per README.md:50: no launch.json in the repository. Actual: launch.json exists at the root (git log --name-status shows it added in commit 7e9dd5a, after README.md was added in d8650ee) with kind custom_token and token.contract Squeek.","severity":"info","snippet":"For the specified IMD launch, the factory handles the 10% swarm allocation, 80% pool allocation, and 10% remainder outside the token constructor. This project does not allocate balances ahead of those factory transfers. The launch service supplies the manifest, deployment transaction, external pool configuration, and recipient details in its separate launch step; this repository contains no `launch.json` or broadcast script.","title":"README states the repository contains no launch.json, but launch.json is committed at the repository root"}],"hash":"3b49ea8e7a8f799d9346bb2194282a10356fde57c5cce01601a273e49aca1439","nodeId":"38569bde-3164-46f4-8072-09c0cce7f3aa","outcome":"completed","summary":"Review complete. `.imd-findings.json` is written with two info findings and a full coverage record.\n\n**Outcome:** no code defect in the Squeek token. All three entry points hold, and the build, the 48-test suite, and `forge fmt --check` pass.\n\n**Specialist findings:**\n- The two provenance reports from audit_economics and audit_flow share one root cause and are merged into one info finding. I reproduced it: six forge-std files hash differently from the lockfile, the lockfile values equal the pinned upstream files, and the tree copies differ only in whitespace. All OpenZeppelin files are byte-identical to upstream.\n- audit_math, audit_permissions and the test writer reported nothing, which matches my own pass.\n\n**Added by my own pass:** one info finding. README line 50 says the repository holds no launch.json, but the manifest step committed one at the root. The manifest itself validates against the schema rules and matches the constructor and supply.\n\n**Coverage:** approve, transfer and transferFrom are traced through the vendored OpenZeppelin v5.0.2 implementation and marked holds, plus three invariant rows covering fixed supply, exact launch flows, and factory deployability (no constructor arguments, bytecode well under both limits, no forbidden opcodes). No critical or high findings, so no proof tests were needed and nothing was written under test/scratch.","treeHash":null,"usage":{"cachedInputTokens":876675,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":12351,"runtime":"claude","turns":33,"wallClockMs":198224}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"589ef002581a5371","findings":[{"citation":"resolved","description":"The README states that dependencies.lock.json records the SHA-256 of every vendored file and that dependencies are unmodified. Recomputing SHA-256 over the committed tree shows that all 6 OpenZeppelin v5.0.2 files match their lock entries (so the ERC-20 base the token inherits is pristine), but 6 of the 26 forge-std v1.9.6 files do not: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol and src/interfaces/IMulticall3.sol. Fetching those files at the pinned upstream commit 3b20d60d14b343ee4f908cb8079495c07f5e8981 confirms the lock entries are the upstream hashes; the tree copies differ only by line-wrapping (the project's forge fmt with line_length = 120 re-wrapped multi-line signatures onto one line), so `forge fmt --check` passes while the hash check fails. No Solidity semantics changed and src/Squeek.sol is unaffected. This is a documentation/provenance inconsistency: anyone verifying the vendored tree against the lock file, as the README invites, gets six mismatches and cannot tell from the lock alone that the change is cosmetic. No token behaviour, launch flow or protected check depends on it.","line":65,"path":"README.md","reproduction":"State: the committed tree at HEAD (d8650ee). Input: for every entry in dependencies.lock.json, compute sha256 of lib/<directory>/<file> and compare with the recorded value. Expected (per README.md:65): all 32 entries match. Actual: 26 match (all 6 OpenZeppelin files and 20 forge-std files) and 6 forge-std files mismatch, e.g. dependencies.lock.json:38 records src/Vm.sol = 37cdc22402df6c21... while sha256(lib/forge-std/src/Vm.sol) = 9ef7ee8c9a0a4fb1...; dependencies.lock.json:26 records src/StdAssertions.sol = d4c89eec70d267de... while the tree file hashes to 3fbf4a025b4fc94e.... `diff` of each tree file against the upstream file at the pinned commit shows only line-wrapping differences (for example Vm.sol line 770: the four-line `getDeployment(...)` signature is joined onto one line). Fix: either regenerate the six hashes from the tree, or restore the upstream formatting of lib/forge-std (exclude lib from the fmt configuration) so the lock holds.","severity":"info","snippet":"`dependencies.lock.json` records the upstream commits and SHA-256 hashes of every vendored file. Dependencies are unmodified. ERC-20 behavior follows [EIP-20](https://eips.ethereum.org/EIPS/eip-20) and the pinned implementation; no dependency fetch runs during verification.","title":"README provenance claim and dependencies.lock.json hashes do not match six vendored forge-std files (whitespace-only reformatting, test library only)"}],"hash":"76a084ae1b08a5fd91fbf585849b1be0e39820f35da468a67d67b42f0b76c71a","nodeId":"ebc31147-3ce9-4bc7-a58f-48f94fc1d59e","outcome":"completed","summary":"Review complete. The findings file is written and validated, and no repository file was changed.\n\n**Outcome:** the Squeek token holds on every trace in my area. The one substantiated item is informational and lives in the test library's provenance, not in the token.\n\n**What I checked, against the Execution Trace, Periphery and First Principles guides:**\n- **Execution trace of all three entry points.** Each path through OpenZeppelin v5.0.2 was followed into `_update`, `_approve` and `_spendAllowance`. Sentinel inputs revert, self-transfers preserve balance, an allowance spend rolls back when the later balance check reverts, and max allowance is never decremented. There is no external call anywhere, so no stale read or reentrancy is possible.\n- **Periphery.** All six vendored OpenZeppelin files hash-match the v5.0.2 lock entries, so the inherited base is pristine. An opcode scan of the compiled runtime found no CALL, STATICCALL, DELEGATECALL, CALLCODE, CREATE, SELFDESTRUCT or transient-storage instructions.\n- **First principles.** The supply constant equals 10^27 (the aderyn large-literal lead is correct arithmetic), the constructor takes no arguments and mints to `msg.sender`, which is the factory under CREATE2, and decimals, name and symbol match the brief. No mint, burn or administrative function exists in the ABI.\n- **Launch floor.** Plain ERC-20 accounting moves exact amounts on the distributor, claim, seed and swap flows the protected test exercises. The existing 35-test suite, including fuzz and invariant runs, passes under the pinned seed.\n\n**Finding reported (info):** the README at line 65 says the lock file hashes every vendored file and dependencies are unmodified, but six forge-std files in the tree differ from their lock hashes. I fetched the pinned upstream files and confirmed the difference is line-wrapping only, caused by the project's formatter settings. The token is unaffected.\n\n**Coverage record:** nine rows, three for the listed entry points plus constructor, supply invariant, base library, bytecode, launch flows and dependency provenance. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":713944,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":15806,"runtime":"claude","turns":28,"wallClockMs":249555}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fdbedee33322a6ef","findings":[],"hash":"78fdcc8007e668fe2c21f6947188b0a32f2edf0a332f3156aaad6afb99e42aa6","nodeId":"2b513bd7-1ed0-4e95-b210-aa60f14ce823","outcome":"completed","summary":"I found no permission defects in Squeek, so `.imd-findings.json` has an empty findings list. It does have a coverage row for each of the three entry points, all marked `holds`. No other files were changed, and the existing test suite passes (35 tests).\n\n**What I checked:**\n- **The contract:** `src/Squeek.sol` is a plain OpenZeppelin v5 ERC20 that changes nothing in the library code. Its constructor mints 1,000,000,000 × 10^18 to the deployer once.\n- **Access control:** there is no owner or role system, and no mint, burn, pause, blacklist or seize function. The constructor hands out no roles, so the factory or deployer holds no special power once deployment ends. After deployment there is no way to mint more.\n- **Trust gap:** a call can only move or freeze a balance through the holder's own `transfer`, or through `transferFrom` within an allowance the holder granted. No privileged spender can bypass that.\n- **Asymmetry:** there are no fees, burns or exemptions on transfer. The factory → distributor → claimant flow, pool seeding and swaps through the pool manager all move exactly the amounts they state, as the protected floor test requires.\n- **Static analysis leads:** slither reported nothing. Aderyn's one note (a large numeric literal at `src/Squeek.sol:10`) is just the `1_000_000_000 * 10 ** 18` supply constant, so it isn't a defect.\n\nERC20's usual `approve` race, where a spender front-runs an allowance change, is standard behaviour and the brief asks nothing different, so I didn't report it. I wrote no Foundry proofs, since there were no critical or high findings.","treeHash":null,"usage":{"cachedInputTokens":184071,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2067,"runtime":"claude","turns":5,"wallClockMs":54000}},{"artifacts":[],"attempt":1,"bundleHash":"dfe1d1f190b5f949ac8fe827e1d5f039f1eb8fea25ed11e35cb990c1dbcb9f8e","device":"3ac34bfb544bbc10","findings":[],"hash":"915fb08eb13bbe8531b21e9264889d0bc19ba3dcc8cbb99c693fb0d27a0d1c59","nodeId":"20248f0f-07c3-40d7-be6b-aa2c30bc02f0","outcome":"completed","summary":"Implemented Squeek (SQK) with 18 decimals and exactly 1,000,000,000 tokens minted once to the deployer. Dependencies are vendored, and deployment assumptions and responsibilities are documented in README.md.\n\nVerified with Solidity 0.8.26:\n\n- `forge build` passed.\n- `forge test` passed: 35 local tests using the supplied fuzz seed.\n- `forge fmt --check` passed.","treeHash":"e5ca68acf5a7c25146592849000f562736299ea9","usage":{"cachedInputTokens":492928,"inputTokens":60895,"model":"gpt-6-astra","outputTokens":13849,"runtime":"codex","turns":5,"wallClockMs":325815}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"cc86b49d3c401897","findings":[],"hash":"e2308f4054cff4619cb672ba454ccfe40efbe6470ef150cc45cd7e4eecf35209","nodeId":"fa241d81-6883-47d2-8759-00b5d5fe75f6","outcome":"completed","summary":"The review is complete. No math precision, boundary, or numerical gap defect was found in the Squeek token, and the findings file records an empty list with full coverage.\n\n**What was reviewed**\n\n- `src/Squeek.sol` is a 16-line contract: it inherits OpenZeppelin ERC20 v5.0.2 and mints a constant supply to the deployer in the constructor. It adds no arithmetic, no overrides, and no external calls of its own.\n- The vendored ERC20 library is unmodified. Its SHA-256 matches the entry in dependencies.lock.json, so the OpenZeppelin arithmetic I traced is the code that ships.\n- I traced every value-moving path in the library against the Math Precision, Boundary and Numerical Gap checklists. Every subtraction is guarded by a strict balance or allowance check before its unchecked block, and the unchecked additions are bounded by a total supply of 1e27, which is below 2^90.\n\n**What I verified by test**\n\nI wrote eleven probes under test/scratch/ and ran them against the current code. All passed, and the project's own 35 tests pass with the pinned fuzz seed. The probes covered transfer of supply, supply plus one and max uint, allowance exactly equal to value, one wei short, max minus one versus max, self transferFrom with allowance, failed transferFrom leaving allowance untouched, and a fuzzed three-party conservation check over 1024 runs. The scratch directory has been removed.\n\n**Static analysis lead**\n\nAderyn flagged the supply constant as a large numeric literal. It is a compile-time constant that evaluates exactly to the manifest supply, confirmed by an assertion against the full literal. Not a defect.\n\n**Coverage record**\n\nAll three entry points in `.imd-findings.json` are marked `holds`, plus four invariant rows for exact supply, no scale or downcast, no boundary sites, and no invariant-skipping zero paths. Nothing in my area was left unreached. The working tree is clean apart from the gitignored findings file.","treeHash":null,"usage":{"cachedInputTokens":443950,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":7841,"runtime":"claude","turns":15,"wallClockMs":148617}}],"verification":[{"checks":[{"durationMs":1335,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.26s\nCompiler run successful!\n","passed":true},{"durationMs":13161,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/Squeek.allowances.t.sol:SqueekAllowanceTest\n[PASS] testFuzz_failedSpendCanBeRetriedAfterFunding(uint256,uint256,uint256) (runs: 1000, μ: 355827, ~: 355381)\nLogs:\n  Bound result 1000000000000000000000000000\n  Bound result 735183790705626863564780580\n  Bound result 735183790705626863564780582\n\n[PASS] testFuzz_replacingPartlySpentAllowanceDiscardsTheRemainder(uint256,uint256) (runs: 1000, μ: 341277, ~: 341550)\nLogs:\n  Bound result 418\n  Bound result 24576\n\n[PASS] testFuzz_roundTripRestoresBalancesButDoesNotRestoreSpentAllowance(uint256,uint256,bool) (runs: 1000, μ: 257958, ~: 260175)\nLogs:\n  Bound result 469029617601342117408619500\n\n[PASS] testFuzz_spendingOneApprovalDoesNotChangeAnotherOwnersOrSpendersApproval(uint256,uint256,uint256) (runs: 1000, μ: 314547, ~: 315271)\nLogs:\n  Bound result 20000000000000000000\n\n[PASS] test_allThreeTransferFromRolesCanBeTheSameAccount() (gas: 157351)\n[PASS] test_exhaustedAllowanceCannotBeReusedAfterBalanceRefill() (gas: 248750)\n[PASS] test_infiniteApprovalCanBeReplacedAndRevoked() (gas: 354213)\n[PASS] test_maximumDelegatedTransferRevertsWithoutConsumingInfiniteApproval() (gas: 134382)\n[PASS] test_maximumFiniteAllowanceDecrements() (gas: 243211)\n[PASS] test_zeroApprovalStillRejectsZeroSpender() (gas: 115729)\n[PASS] test_zeroDelegatedTransferStillRejectsZeroRecipient() (gas: 339896)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 72.50ms (288.06ms CPU time)\n\nRan 36 tests for test/Squeek.t.sol:SqueekTest\n[PASS] testFuzz_overspendingAllowanceIsAtomic(uint256,uint256) (runs: 1000, μ: 123577, ~: 123969)\nLogs:\n  Bound result 0\n  Bound result 127\n\n[PASS] testFuzz_selfTransferConservesBalance(uint256) (runs: 1000, μ: 55183, ~: 54917)\nLogs:\n  Bound result 3382\n\n[PASS] testFuzz_transferConservesSupply(uint256,address) (runs: 1000, μ: 93267, ~: 93556)\nLogs:\n  Bound result 1306176328702301642640936043459710073719191505693\n  Bound result 362659327428275616269214441\n\n[PASS] testFuzz_transferFromTracksBalanceAndAllowance(uint256,uint256) (runs: 1000, μ: 163073, ~: 165282)\nLogs:\n  Bound result 335434739345531116630055318\n  Bound result 298960958885997333353305941\n\n[PASS] testFuzz_transferOverSupplyReverts(uint256) (runs: 1000, μ: 58889, ~: 59222)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129642166\n\n[PASS] test_allowanceCannotBeUsedByAnotherSpender() (gas: 95185)\n[PASS] test_approveDoesNotRequireBalanceOrAffectOtherAllowances() (gas: 106230)\n[PASS] test_approveEmitsEventAndCanBeReplacedAndRevoked() (gas: 192406)\n[PASS] test_approveZeroSpenderReverts() (gas: 37618)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9607)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 95411)\n[PASS] test_directDeploymentMintsToCreatingAccount() (gas: 20131)\n[PASS] test_emptyAccountCannotTransferTokens() (gas: 37884)\n[PASS] test_factoryDeploymentAndExactDistribution() (gas: 663241)\n[PASS] test_maximumTransferAndOverdrawnSelfTransferRevert() (gas: 92672)\n[PASS] test_metadataAndEntireInitialSupply() (gas: 107627)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 1630634)\n[PASS] test_oneSmallestUnitCanMakeARoundTrip() (gas: 142956)\n[PASS] test_rejectsNativeCurrencyAndUnknownCalls() (gas: 64755)\n[PASS] test_runtimeFitsDeploymentLimitAndHasNoForbiddenOpcodes() (gas: 1038901)\n[PASS] test_selfTransferPreservesBalance() (gas: 53917)\n[PASS] test_transferEmitsEventAndDeliversExactAmount() (gas: 91574)\n[PASS] test_transferEntireBalance() (gas: 75831)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 242439)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 126584)\n[PASS] test_transferFromOverAllowanceRevertsWithoutChanges() (gas: 116116)\n[PASS] test_transferFromPreservesInfiniteAllowance() (gas: 139785)\n[PASS] test_transferFromSelfStillRequiresAllowance() (gas: 35792)\n[PASS] test_transferFromToOwnerConsumesAllowanceWithoutChangingBalance() (gas: 105676)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114476)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 57800)\n[PASS] test_transferFromZeroSenderReverts() (gas: 35407)\n[PASS] test_transferOverBalanceRevertsWithoutChanges() (gas: 65267)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 63092)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 68909)\nSuite result: ok. 36 passed; 0 failed; 0 skipped; finished in 72.54ms (354.72ms CPU time)\n\nRan 1 test for test/Squeek.invariant.t.sol:SqueekInvariantTest\n[PASS]\nSqueekInvariantTest invariants:\n[PASS] invariant_allowancesMatchModel\n[PASS] invariant_supplyAndBalancesMatchModel\n SqueekInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭---------------+-----------------------+-------+---------+----------╮\n| Contract      | Selector              | Calls | Reverts | Discards |\n+====================================================================+\n| SqueekHandler | approve               | 3357  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | approveInfinite       | 3303  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | approveZeroSpender    | 3273  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | overdraw              | 3196  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | revoke                | 3263  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | transfer              | 3266  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | transferFrom          | 3243  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | transferFromOverLimit | 3296  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | transferFromToZero    | 3274  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| SqueekHandler | transferToZero        | 3297  | 0       | 0        |\n╰---------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 7702\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 200000000000000000000000000\n  Bound result 10000000000000000000\n  Bound result 4348\n  Bound result 96\n  Bound result 10714\n  Bound result 80880339465347964416269745\n  Bound result 4\n  Bound result 162\n  Bound result 2778\n  Bound result 0\n  Bound result 1059\n  Bound result 2683\n  Bound result 2316899164\n  Bound result 127\n  Bound result 47665970601063665733732628\n  Bound result 0\n  Bound result 15\n  Bound result 8654\n  Bound result 1000000000000000000\n  Bound result 937819884272619922261082083\n  Bound result 0\n  Bound result 3379\n  Bound result 0\n  Bound result 244\n  Bound result 6453\n  Bound result 7331\n  Bound result 1499\n  Bound result 95\n  Bound result 47665970601063665733732628\n  Bound result 20000000000000000000\n  Bound result 133290435253756427189286286\n  Bound result 341\n  Bound result 9325\n  Bound result 192330784085247869751248877\n  Bound result 0\n  Bound result 100000000000000011610\n  Bound result 4033\n  Bound result 8832\n  Bound result 0\n  Bound result 17\n  Bound result 6\n  Bound result 2\n  Bound result 0\n  Bound result 7980573185868304\n  Bound result 4003\n  Bound result 0\n  Bound result 13\n  Bound result 0\n  Bound result 0\n  Bound result 6835\n  Bound result 56\n  Bound result 9031\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 3904\n  Bound result 765399068118786658354335\n  Bound result 99960097134070704350\n  Bound result 1\n  Bound result 208\n  Bound result 9226\n  Bound result 1652\n  Bound result 1682\n  Bound result 755\n  Bound result 9\n  Bound result 1725540769\n  Bound result 556\n  Bound result 525621219339004296940531367\n  Bound result 199999880047883439115155525\n  Bound result 200000099960097134070703292\n  Bound result 66709564738262999624852428\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 13.08s (13.08s CPU time)\n\nRan 3 test suites in 13.08s (13.23s CPU time): 48 tests passed, 0 failed, 0 skipped (48 total tests)\n","passed":true},{"durationMs":35,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Squeek.approve(address,uint256)\",\"Squeek.transfer(address,uint256)\",\"Squeek.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":65,\"dependencies.lock.json\":50,\"foundry.toml\":21,\"remappings.txt\":2,\"src/Squeek.sol\":16,\"test/Squeek.allowances.t.sol\":239,\"test/Squeek.invariant.t.sol\":208,\"test/Squeek.t.sol\":449,\"test/helpers/FactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"07dc6c821f26bb0e759d13f1a47065b4a1bbbd59b4aee1dbb20871aba09007f8","verifiedTreeHash":"f30f09672f762e852fb8b3ab31936690704162d1","verifierVersion":"0.1.0+745c1db4"},{"checks":[{"durationMs":1121,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.05s\nCompiler run successful!\n","passed":true},{"durationMs":3567,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/Squeek.t.sol:SqueekTest\n[PASS] testFuzz_overspendingAllowanceIsAtomic(uint256,uint256) (runs: 1024, μ: 123521, ~: 123865)\nLogs:\n  Bound result 1128\n  Bound result 18967\n\n[PASS] testFuzz_selfTransferConservesBalance(uint256) (runs: 1024, μ: 55179, ~: 54917)\nLogs:\n  Bound result 16956\n\n[PASS] testFuzz_transferConservesSupply(uint256,address) (runs: 1024, μ: 92896, ~: 93156)\nLogs:\n  Bound result 76075165625629501057058051\n\n[PASS] testFuzz_transferFromTracksBalanceAndAllowance(uint256,uint256) (runs: 1024, μ: 162686, ~: 165280)\nLogs:\n  Bound result 668908162922733765872688150\n  Bound result 47\n\n[PASS] testFuzz_transferOverSupplyReverts(uint256) (runs: 1024, μ: 58806, ~: 59139)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129642863\n\n[PASS] test_allowanceCannotBeUsedByAnotherSpender() (gas: 95185)\n[PASS] test_approveDoesNotRequireBalanceOrAffectOtherAllowances() (gas: 106230)\n[PASS] test_approveEmitsEventAndCanBeReplacedAndRevoked() (gas: 192406)\n[PASS] test_approveZeroSpenderReverts() (gas: 37618)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9607)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 95411)\n[PASS] test_directDeploymentMintsToCreatingAccount() (gas: 20131)\n[PASS] test_emptyAccountCannotTransferTokens() (gas: 37906)\n[PASS] test_factoryDeploymentAndExactDistribution() (gas: 663241)\n[PASS] test_metadataAndEntireInitialSupply() (gas: 107605)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 1630722)\n[PASS] test_rejectsNativeCurrencyAndUnknownCalls() (gas: 64755)\n[PASS] test_runtimeFitsDeploymentLimitAndHasNoForbiddenOpcodes() (gas: 1038901)\n[PASS] test_selfTransferPreservesBalance() (gas: 53917)\n[PASS] test_transferEmitsEventAndDeliversExactAmount() (gas: 91463)\n[PASS] test_transferEntireBalance() (gas: 75831)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 242461)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 126584)\n[PASS] test_transferFromOverAllowanceRevertsWithoutChanges() (gas: 116116)\n[PASS] test_transferFromPreservesInfiniteAllowance() (gas: 139785)\n[PASS] test_transferFromSelfStillRequiresAllowance() (gas: 35792)\n[PASS] test_transferFromToOwnerConsumesAllowanceWithoutChangingBalance() (gas: 105676)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114476)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 57755)\n[PASS] test_transferFromZeroSenderReverts() (gas: 35385)\n[PASS] test_transferOverBalanceRevertsWithoutChanges() (gas: 65225)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 63092)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 68909)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 31.92ms (166.40ms CPU time)\n\nRan 1 test for test/Squeek.invariant.t.sol:SqueekInvariantTest\n[PASS]\nSqueekInvariantTest invariants:\n[PASS] invariant_allowancesMatchModel\n[PASS] invariant_supplyAndBalancesMatchModel\n SqueekInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+--------------+-------+---------+----------╮\n| Contract      | Selector     | Calls | Reverts | Discards |\n+===========================================================+\n| SqueekHandler | approve      | 2068  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SqueekHandler | overdraw     | 2095  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SqueekHandler | transfer     | 1982  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SqueekHandler | transferFrom | 2047  | 0       | 0        |\n╰---------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3329\n  Bound result 0\n  Bound result 2229\n  Bound result 0\n  Bound result 0\n  Bound result 3067\n  Bound result 9\n  Bound result 2099\n  Bound result 69\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 5\n  Bound result 0\n  Bound result 972\n  Bound result 1\n  Bound result 6\n  Bound result 5419\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\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.49s (3.48s CPU time)\n\nRan 2 test suites in 3.49s (3.52s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":44,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Squeek.approve(address,uint256)\",\"Squeek.transfer(address,uint256)\",\"Squeek.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":65,\"dependencies.lock.json\":50,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"src/Squeek.sol\":16,\"test/Squeek.invariant.t.sol\":110,\"test/Squeek.t.sol\":420,\"test/helpers/FactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2a051232d05a78b619120ac9eb140ef07a86626702cdbdd6cbdcebd4409d989e","verifiedTreeHash":"489d9ecb71709b320e42528a4af8531ea5b83a74","verifierVersion":"0.1.0+745c1db4"},{"checks":[{"durationMs":2368,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.22s\nCompiler run successful!\n","passed":true},{"durationMs":6684,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/Squeek.t.sol:SqueekTest\n[PASS] testFuzz_overspendingAllowanceIsAtomic(uint256,uint256) (runs: 1024, μ: 123521, ~: 123865)\nLogs:\n  Bound result 668908162922733765872690601\n  Bound result 993275511231798702381928244\n\n[PASS] testFuzz_selfTransferConservesBalance(uint256) (runs: 1024, μ: 55179, ~: 54917)\nLogs:\n  Bound result 778557124458492266144784791\n\n[PASS] testFuzz_transferConservesSupply(uint256,address) (runs: 1024, μ: 92896, ~: 93156)\nLogs:\n  Bound result 775154117232245699975968667\n\n[PASS] testFuzz_transferFromTracksBalanceAndAllowance(uint256,uint256) (runs: 1024, μ: 162686, ~: 165280)\nLogs:\n  Bound result 22672\n  Bound result 1620\n\n[PASS] testFuzz_transferOverSupplyReverts(uint256) (runs: 1024, μ: 58806, ~: 59139)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129641490\n\n[PASS] test_allowanceCannotBeUsedByAnotherSpender() (gas: 95185)\n[PASS] test_approveDoesNotRequireBalanceOrAffectOtherAllowances() (gas: 106230)\n[PASS] test_approveEmitsEventAndCanBeReplacedAndRevoked() (gas: 192406)\n[PASS] test_approveZeroSpenderReverts() (gas: 37618)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9607)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 95411)\n[PASS] test_directDeploymentMintsToCreatingAccount() (gas: 20131)\n[PASS] test_emptyAccountCannotTransferTokens() (gas: 37906)\n[PASS] test_factoryDeploymentAndExactDistribution() (gas: 663241)\n[PASS] test_metadataAndEntireInitialSupply() (gas: 107605)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 1630722)\n[PASS] test_rejectsNativeCurrencyAndUnknownCalls() (gas: 64755)\n[PASS] test_runtimeFitsDeploymentLimitAndHasNoForbiddenOpcodes() (gas: 1038901)\n[PASS] test_selfTransferPreservesBalance() (gas: 53917)\n[PASS] test_transferEmitsEventAndDeliversExactAmount() (gas: 91463)\n[PASS] test_transferEntireBalance() (gas: 75831)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 242461)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 126584)\n[PASS] test_transferFromOverAllowanceRevertsWithoutChanges() (gas: 116116)\n[PASS] test_transferFromPreservesInfiniteAllowance() (gas: 139785)\n[PASS] test_transferFromSelfStillRequiresAllowance() (gas: 35792)\n[PASS] test_transferFromToOwnerConsumesAllowanceWithoutChangingBalance() (gas: 105676)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114476)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 57755)\n[PASS] test_transferFromZeroSenderReverts() (gas: 35385)\n[PASS] test_transferOverBalanceRevertsWithoutChanges() (gas: 65225)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 63092)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 68909)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 73.97ms (312.73ms CPU time)\n\nRan 1 test for test/Squeek.invariant.t.sol:SqueekInvariantTest\n[PASS]\nSqueekInvariantTest invariants:\n[PASS] invariant_allowancesMatchModel\n[PASS] invariant_supplyAndBalancesMatchModel\n SqueekInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+--------------+-------+---------+----------╮\n| Contract      | Selector     | Calls | Reverts | Discards |\n+===========================================================+\n| SqueekHandler | approve      | 2068  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SqueekHandler | overdraw     | 2095  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SqueekHandler | transfer     | 1982  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SqueekHandler | transferFrom | 2047  | 0       | 0        |\n╰---------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3329\n  Bound result 0\n  Bound result 2229\n  Bound result 0\n  Bound result 0\n  Bound result 3067\n  Bound result 9\n  Bound result 2099\n  Bound result 69\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 5\n  Bound result 0\n  Bound result 972\n  Bound result 1\n  Bound result 6\n  Bound result 5419\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\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.53s (6.52s CPU time)\n\nRan 2 test suites in 6.53s (6.60s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":97,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Squeek.approve(address,uint256)\",\"Squeek.transfer(address,uint256)\",\"Squeek.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":65,\"dependencies.lock.json\":50,\"foundry.toml\":21,\"remappings.txt\":2,\"src/Squeek.sol\":16,\"test/Squeek.invariant.t.sol\":110,\"test/Squeek.t.sol\":420,\"test/helpers/FactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":940,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":343,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/Squeek.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"915fb08eb13bbe8531b21e9264889d0bc19ba3dcc8cbb99c693fb0d27a0d1c59","verifiedTreeHash":"e5ca68acf5a7c25146592849000f562736299ea9","verifierVersion":"0.1.0+745c1db4"}]}