{"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":"1d8ba181-fdc0-4f4b-83ab-bd5bc40f5515","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"a5d60de64cd6033193f977b4716693274658b754e7b83e8573f43d1b2ed6b081","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":"bafc17876ea5e1ce5ee5e6b218bb376870ae43277c06850a278b97bea1b9485c","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":"90732ec3f287d10370b817835945ece82aeeb31fd0e848a4da745df9aa767739","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"4f40d5e2428626da2890da33795d5784ae2bca63c53e97884c35ca5f9b27847e","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":"18471ea40b67951aa1a6afd816b48ced63625afe63e7a5d32bbd62f1c0977fc2","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":"22f2d841c642514731b5e42ebb3e4d80a738882ada6865bc819038008d235bed","dependsOn":[],"execution":{"mustProduce":["src/LaunchToken.sol"],"network":false,"profile":"foundry","requires":[],"skillHash":"b6503de65ad02f845827887c23da4c3b56ccc5df7a459db263bae6e549d92f7f","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"b6503de65ad02f845827887c23da4c3b56ccc5df7a459db263bae6e549d92f7f","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"831af932d2b59e7380bdbfb57320f07ec48bc4cd0ad64622d0a1b6898434f087","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"4bfc3c08c5903e1c67a2deaf9716529ee6676149eba89549a87c6915ac6e7615","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":"Token name: EmberEVO. Token symbol: EMBEO.\n\nLaunch a NEW token through the official standard evm_project route on Ethereum mainnet, explicitly chainId 1 and pairWith eth (native ETH, zero-address currency). Token-only launch: application contracts=[]; the official factory supplies its normal pool, Merkle distributor and initialization guard. Do not build extra application contracts or switch to custom_token, univ4_hook, evm_contracts or a website workflow. An initialization guard supplied by the protocol is not a requested custom swap hook.\n\nUse the standard LaunchToken: 1,000,000,000 tokens, 18 decimals, minted once in the constructor, plain ERC-20 transfers. No later mint, owner privileges, upgrades, pause, blacklist, transfer tax, rebase, staking, required burn or AI financial authority. Do not add token extensions. If any requirement is incompatible with this standard route, return the blocker instead of silently changing the token or route.\n\nAllocation: poolBps=8600 (86% of total supply), Swarm=1000 bps (10%), remainder=400 bps (4%). The intended issuing AND paying wallet is 0x1C651928150DADDDA9C2C040a9D4901d862f8eC4. economics.remainderTo is that same address. Use lowercase address encoding in structured API fields: 0x1c651928150daddda9c2c040a9d4901d862f8ec4. For evm_project, economics contains only poolBps and remainderTo; do not add initialMarketCapWei from custom_token. Owner controls supported project roles, not the payment-wallet identity or automatic ownership of protocol LP assets. No forced issuer vesting or reinvestment rule. The Swarm's 10% follows the official distributor: 2% among accepted launch-work wallets and 8% per eligible connected seat at admission.\n\nUse the current pinned standard ETH opening-cap policy, expected to show 10 ETH, and state the actual terms at Check/quote. This cap is an opening valuation, not a required 10 ETH owner deposit or proof of 10 ETH reserves. The factory seeds the pool single-sided with the launch token. Expected actual pool trading fee: 1.25%, comprising 1% for the paying wallet and 0.25% for IMD. It is separate from plain token transfers. Follow the official manifest admission format; its fee=3000 is not evidence that the actual pool charges 0.3%. Read the factory's effective LaunchFees setting, report the actual deployed poolKey and fee, and never describe the pool as 0.3% based on the manifest alone. Explain fee claiming/distribution and actual LP custody and powers.\n\nIMPORTANT TEST TOKEN NOTICE: The earlier EmberEvo (EMVO), contract 0x7A427b94547232356cF212Fd1C668e8EB4069a46, is a historical test issuance for project testing, not the formal EmberEVO (EMBEO) token. DO NOT BUY this test EMVO; it does not qualify for formal EMBEO membership. Publish this notice prominently in delivered README and token documentation, beside the actual new EMBEO address when deployed. Call it the historical test issuance, not deprecated, invalidated or disabled. It was deployed on Ethereum MAINNET, not a testnet. Its old contract and pool still exist; this notice cannot technically stop trading. Do not rename, modify, move, burn or withdraw old token/pool/distributor balances. Old Swarm claim rights remain separate and are not cancelled. No automatic exchange, migration or compensation promise.\n\nLOGO AND PUBLIC INFORMATION: Use the owner's exact minimalist orange flame, without redrawing or recoloring. Public 64x64 transparent PNG: https://imdember.com/assets/emvo-64.771f691c33.png . SHA256: 771f691c330cf00a0a9038b0aac718fd519000872f3cfb0532113739fccac4b4. This historical filename carries the shared brand image, not the old token's identity. Reference it in README and any actually supported metadata; do not invent unsupported API logo fields. Website: https://imdember.com/ . Contact: tungweb3@gmail.com . X: https://x.com/tungweb3 . EmberEVO is an independent community project, not an official IMD token or endorsement. A README image does not complete Etherscan, CoinGecko, Uniswap or wallet-logo registration; report these as separate pending steps.\n\nROADMAP CONTEXT ONLY, NOT CONTRACTS TO BUILD NOW: Planned access to published AIMarket crypto token/NFT research and Swarm Dream Hall uses the same verified wallet holding formal EMBEO at a future configured threshold OR one official Genesis PEPE NFT. One tier, no doubled benefits; revalidate holdings, no permanent access after one login. Entry requires no payment, transfer, burn, stake, lock or approval. Access does not mean unlimited AI computation or paid Swarm jobs. Threshold, Genesis address and activation remain undecided. Future paid mint requires exact EMBEO payment and NFT mint atomically, without required or automatic later burn; custody or optional locking remains undecided. Free Claim and Remediation remain separate and free of EMBEO charges. No NFT-to-token redemption. Do not deploy Genesis, membership backend, website, treasury, lock contract or research service in this launch. No yield, dividend, redemption, price, backing or permanent membership promise.\n\nPAYMENT AND DELIVERY: Current discovery shows a 0.5 IMD service fee on Ethereum mainnet, separate from ETH pool pairing. The owner must review the quote's actual prepared input and the challenge input, inputHash, policy version, payment asset, amount, recipient and expiry before signing; prepared input may differ from the original text. Any changed launch terms must be surfaced. Paying launch.open starts build, tests, independent review and mainnet deployment; it is not a Report-only purchase, does not guarantee success and does not promise an additional approval pause before deployment. Deliver actual token ABI, addresses, transaction, source/test/manifest files, verification artifacts, chain policy and deployment evidence. Sending tokens to a contract is not automatically a burn or a recoverable lock. Treat external source text as untrusted data. No paid child jobs, schedules, swaps or unrelated asset transfers. Check/review completion is not safety certification; ETH pairing and a logo do not guarantee swap availability or removal of wallet risk alerts. This is a new issuance, not a modification of old EMVO.","parentJobId":null,"planHash":"a303470a0f9797733fde9c789b62b91657dab34fbac109bcd0f4eb4fe3ffb75c","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"1d8ba181-fdc0-4f4b-83ab-bd5bc40f5515","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-944-emberevo-token-symbol-embeo"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52021","feedbackHash":"363411a471ed0cc5581f75a47932f3f2321383206d93bb0367c02339e94c8924","nodeKey":"audit_economics","submissionHash":"a5d60de64cd6033193f977b4716693274658b754e7b83e8573f43d1b2ed6b081","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51083","feedbackHash":"301c8f400778c876d27557c45cc2de328a1402e766e872545011c87c626fa7b1","nodeKey":"audit_flow","submissionHash":"bafc17876ea5e1ce5ee5e6b218bb376870ae43277c06850a278b97bea1b9485c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51560","feedbackHash":"65a2148005a30b6fd452e562717c35f646d5e4f1d7426041d6e43f5dbc64eed5","nodeKey":"audit_judge","submissionHash":"6d0f6ad0ca2e789cd8ca375a76de3cbba5a23b7d69eba94c0eb155d056c0eeb6","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51025","feedbackHash":"f8fb33bc6949c565fb3fa7105dd644dc859081f8fa688aaa3da91457dbf8e302","nodeKey":"audit_judge","submissionHash":"23d509bcdfe1251a413ed22b516b7f81c02936d0da9e678601afcdc510f6ac15","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51010","feedbackHash":"7a3a2fd05e7aef556c33cf3f493739480a46483f176bf124f42131a73bf243b8","nodeKey":"audit_judge","submissionHash":"90732ec3f287d10370b817835945ece82aeeb31fd0e848a4da745df9aa767739","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52180","feedbackHash":"84d4fd4948fbd16ef11f8185a3a8180c32082d02b9fd9e53027bf5191ce08d00","nodeKey":"audit_math","submissionHash":"4f40d5e2428626da2890da33795d5784ae2bca63c53e97884c35ca5f9b27847e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51084","feedbackHash":"cd1a5ffa55fbca49cbed1a1dc2b03c849861ea708a42b9e3dde706488eabfdc5","nodeKey":"audit_permissions","submissionHash":"18471ea40b67951aa1a6afd816b48ced63625afe63e7a5d32bbd62f1c0977fc2","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51547","feedbackHash":"fac52b3d816f0ef899a61fbd7475f8bb117bfc510baf35e8a9a81054745d5ad1","nodeKey":"build_contract_project","submissionHash":"c6f2f4bdfc829c1072e5319bd8d51f8016ed8390219a11e15f993d9257e01199","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51242","feedbackHash":"2636acd36e475a36c5cf4859726da5eb38755cd2a59522ab327945abd7075012","nodeKey":"build_contract_project","submissionHash":"22f2d841c642514731b5e42ebb3e4d80a738882ada6865bc819038008d235bed","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51299","feedbackHash":"022d64dc0fb2391df4d83e12fac2e4be91584401b4fcb7acc554526c387d7a0b","nodeKey":"build_contract_project","submissionHash":"048b5c2d22752729081e9d9aecafdcf3d13d460fd9eb9c1050b8018459faf82d","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51475","feedbackHash":"d72adc228b6832158213bbf4f13c70837385014631facd3f05f64c59beddf352","nodeKey":"manifest","submissionHash":"12c581d08ee2baebf7f3c1139bda1edaf8a128bff7d47495558f2bcd6e0884d1","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50963","feedbackHash":"196a41ba8abf09febc02be913326dff0357d8b1570e44e1b6d88b21806a46071","nodeKey":"manifest","submissionHash":"2b0d141c98c88a730167057944d916f2f96446ee783b3e6027edd900a1d18e1b","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51408","feedbackHash":"c9b9518d36451f514af87b0b1d47edec9e4649b8b14cc60fdf68be62320dcacd","nodeKey":"manifest","submissionHash":"831af932d2b59e7380bdbfb57320f07ec48bc4cd0ad64622d0a1b6898434f087","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51265","feedbackHash":"dcb8c707f7f6fbb797cd6fb5b17c2b436ea37b6b5fdf0b0ab13ec7a2c044b1e2","nodeKey":"write_foundry_tests","submissionHash":"c05663de0527051b8e74fdf432885d07f81cdcfab78f45f316c6af0799b255ae","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51230","feedbackHash":"1b04e42d721621f5706fee88da376a874c93c0396a6e53073dcc7ae86d3850b0","nodeKey":"write_foundry_tests","submissionHash":"4bfc3c08c5903e1c67a2deaf9716529ee6676149eba89549a87c6915ac6e7615","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51088","feedbackHash":"69125b3fe879bc0e6085d994b02170417bba303e933477eef31d3d4164ff7808","nodeKey":"write_foundry_tests","submissionHash":"cf33da869fdc018f500f3f7389b8b385df9a662bb13afc3941adb8b755ff74d9","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"0f7a7a655144148586b75b07b07d8517b1b000679263c9d937d8f94adde614b0","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"b4b4465ce7a2c6b2b2ee7d6442c16528fa515d04900be3ec1b1a61e3195d34ff","device":"f42f27bce9bb7fc5","findings":[],"hash":"048b5c2d22752729081e9d9aecafdcf3d13d460fd9eb9c1050b8018459faf82d","nodeId":"29455f6e-97e1-4211-b376-9618e51aeb47","outcome":"completed","summary":"Restored missing artifacts and validation captures, corrected dependency provenance, and removed unsupported evidence claims.\n\nThe invariant advisory was not reproducible: this tree runs 128 × 64 as documented. All three findings are answered in `.imd-responses.json`.\n\n`forge build`, `forge test`, `forge fmt --check`, and artifact checks pass. Token code is unchanged; deployment remains pending.","treeHash":"0aa56ed15d7c2a184fdb7ae13b02b655091557b6","usage":{"cachedInputTokens":1100416,"inputTokens":93747,"model":"gpt-6-astra","outputTokens":12784,"runtime":"codex","turns":5,"wallClockMs":292441}},{"artifacts":[],"attempt":1,"bundleHash":"567bd5d58f32cec820d5748eb1d6c90f09f041959e2c35ff8bccc4fa5e1d404c","device":"4d218e2d11a36af4","findings":[],"hash":"12c581d08ee2baebf7f3c1139bda1edaf8a128bff7d47495558f2bcd6e0884d1","nodeId":"0eeee9d3-68af-4bc1-81cc-fb23e0a8594a","outcome":"completed","summary":"Updated only [launch.json](/home/ubuntu/.identitymd/work/1d8ba181-fdc0-4f4b-83ab-bd5bc40f5515/0eeee9d3-68af-4bc1-81cc-fb23e0a8594a/launch.json) for token-only EmberEVO (EMBEO), with native ETH pairing and clarified launch terms.\n\nSchema/refinement checks and offline `forge build` passed. `forge test`: **29 passed**, including pinned checks; none failed or skipped.\n\nActual deployment addresses, poolKey and LP custody evidence remain pending.","treeHash":"f2183d0d20bf128b2bf462ca6f1201af2e50b397","usage":{"cachedInputTokens":327552,"inputTokens":35346,"model":"gpt-6-astra","outputTokens":5233,"runtime":"codex","turns":3,"wallClockMs":145821}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7c0191a32541eb74","findings":[{"citation":"resolved","description":"Trust-gap finding (documentation vs deliverable). The task requires delivering the actual token ABI, verification artifacts and deployment evidence. The delivered documentation states these exist: README.md:49 links artifacts/LaunchToken.abi.json, artifacts/build.json and artifacts/deployment-status.json; docs/LAUNCH.md:9 marks 'Source, tests, ABI, creation/runtime bytecode, compiler input' as 'Delivered'; docs/LAUNCH.md:19 describes artifacts/deployment-status.json; docs/LAUNCH.md:68 says the mainnet factory reads at block 26,142,850 'are saved in artifacts/discovery/factory-reads.json'; docs/LAUNCH.md:88 tells the deployer to check on-chain runtime against artifacts/LaunchToken.runtime.hex and verify source with artifacts/solc-input.json; docs/REVIEW.md:22 says captured validation output is in artifacts/validation/. No artifacts/ directory is tracked (git ls-files shows none; .gitignore does not ignore it), so every one of those links is dead and the 'preserved' Check response, policy snapshot and factory-read evidence the fee/custody statements rest on are not in the repository. README.md:40 lists `python3 scripts/export_artifacts.py --check` as a build/check step, and it exits 1 on this tree. Independently, read-only RPC calls I made confirm the factory values the README states (fees() = 0x12c9e1007262afac205567457f5826a9416a3863, poolFee() = 12500, feeRecipient() = 0x3f252e859a277a86a3967c11d4e054b2f07a1f22, poolHook() = 0x784ff9a3ac5d88a30bfff6f7f2a270161fbe6000 at block 26142933), so the claims are correct but unevidenced in the deliverable. Fix: either commit the exported artifacts/ tree (run `forge build && python3 scripts/export_artifacts.py`, add the discovery and validation captures the docs describe, and a deployment-status.json with nulls) or remove/reword every reference so the documentation only claims what is delivered.","line":49,"path":"README.md","reproduction":"State: fresh clone of this commit (2ee2670). Input: `ls artifacts` -> 'No such file or directory'; `git ls-files artifacts` -> empty. Then run the documented check from README.md:40: `forge build && python3 scripts/export_artifacts.py --check`. Expected (per README/REVIEW.md): 'Checked 6 reproducible artifacts; no RPC or transactions.' with exit 0. Actual: 'Artifact differs: artifacts/LaunchToken.abi.json; rebuild and export again' with exit 1. Also `grep -n 'artifacts/' README.md docs/*.md` lists six references to files that do not exist in the tree.","severity":"low","snippet":"- [Compiled ABI](artifacts/LaunchToken.abi.json), [reproducibility record](artifacts/build.json), [deployment status](artifacts/deployment-status.json)","title":"README, LAUNCH.md and REVIEW.md cite delivered verification artifacts and saved evidence that are not in the tree; the documented check command fails"},{"citation":"resolved","description":"Provenance accuracy. The OpenZeppelin v5.0.2 files (ERC20.sol, IERC20.sol, IERC20Metadata.sol, Context.sol, draft-IERC6093.sol) are byte-identical to upstream, and both archive SHA-256 values printed in DEPENDENCIES.md match the upstream tarballs (verified). However lib/forge-std/src/console.sol, StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol differ from the v1.9.7 tag: long signatures were re-wrapped to the project's 120-column fmt setting. Stripping all whitespace, each file hashes identically to upstream, so the change is formatting only and does not alter test semantics. The statement 'not modified' is nonetheless false for a reviewer who diffs against upstream, and the launch rules require vendored dependencies to be verifiable as ordinary files. Fix: restore the exact upstream bytes for those seven files (or exclude lib/ from forge fmt), or amend DEPENDENCIES.md to say forge-std was reformatted with no semantic change.","line":10,"path":"DEPENDENCIES.md","reproduction":"Input: download https://github.com/foundry-rs/forge-std/archive/refs/tags/v1.9.7.tar.gz (SHA-256 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94, matching DEPENDENCIES.md), extract, then `diff -r forge-std-1.9.7/src lib/forge-std/src`. Expected per DEPENDENCIES.md:10: no output. Actual: diffs in 7 files (e.g. Vm.sol lines 827-830 upstream `function getDeployment(string calldata contractName, uint64 chainId)\\n external\\n view\\n returns (address deployedAddress);` collapsed to one line). `tr -d ' \\n\\t\\r' < file | sha256sum` is equal for every pair, confirming whitespace-only changes.","severity":"info","snippet":"Sources were fetched from the upstream tagged codeload archives, selected as regular files, and not modified. Archive SHA-256 values:","title":"DEPENDENCIES.md states vendored sources are 'not modified', but seven forge-std files were reformatted (whitespace-only) relative to upstream v1.9.7"},{"citation":"resolved","description":"Test-precision note for the asymmetry pass (transfer vs transferFrom). Every other revert in this suite pins the exact custom error; this one accepts any revert, so a regression that reverted for an unrelated reason (or a library change that made the path revert later/earlier) would still pass. The comment also misstates where the rejection happens: in OpenZeppelin 5.0.2, transferFrom(address(0), ALICE, 0) calls _spendAllowance(address(0), msg.sender, 0); the allowance check `currentAllowance < value` is 0 < 0 and does not fire, so _approve(address(0), spender, 0, false) runs and reverts with ERC20InvalidApprover(address(0)) before _transfer's ERC20InvalidSender check is ever reached. Fix: replace the bare expectRevert with `vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InvalidApprover.selector, address(0)));` and correct the comment.","line":176,"path":"test/LaunchToken.t.sol","reproduction":"State: fresh LaunchToken deployed by the test contract. Call: `vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InvalidSender.selector, address(0))); token.transferFrom(address(0), ALICE, 0);` (the error the comment implies). Expected if the comment were accurate: test passes. Actual (run in test/scratch): FAIL 'Error != expected error: ERC20InvalidApprover(0x0000...0000) != ERC20InvalidSender(0x0000...0000)'. The delivered line 177 passes only because it accepts any revert data.","severity":"info","snippet":"        // Zero-value transferFrom still rejects a zero source (while spending its zero allowance).\n        vm.expectRevert();\n        token.transferFrom(address(0), ALICE, 0);","title":"Zero-source transferFrom edge is asserted with a bare expectRevert, and the comment names the wrong check; actual revert is ERC20InvalidApprover from _spendAllowance"}],"hash":"18471ea40b67951aa1a6afd816b48ced63625afe63e7a5d32bbd62f1c0977fc2","nodeId":"3bfd7a13-0c75-4d1b-8196-0aed09f86c31","outcome":"completed","summary":"Review complete. The findings file is written at `.imd-findings.json`, snippets verified against the tree, scratch tests removed, and no tracked file was changed.\n\n**Outcome: the token code is clean in my area. The defects are in the deliverable's documentation and evidence, not in Solidity.**\n\nWhat I checked, against the Access Control, Trust Gap and Asymmetry guides plus the Trail of Bits entry-point inventory:\n\n- **Access control.** The token is an unmodified OpenZeppelin 5.0.2 ERC20 with a no-argument constructor that mints the full supply once to the deployer. No roles, initializer, owner, receive or fallback exist. All three listed entry points hold. Twenty admin and extension selector probes from the deployer, issuer and a stranger all revert.\n- **Trust gap.** The vendored OpenZeppelin files are byte-identical to upstream v5.0.2, and the logo hash matches the brief. I independently confirmed the README's mainnet claims by read-only RPC: the factory's fee contract reports a 12500 pool fee (1.25%), and the fee recipient, hook and service-fee figures match. The manifest validates against the schema and correctly pairs with native ETH, unlike the referenced old EMVO manifest, which paired with IMD.\n- **Asymmetry.** The transfer and transferFrom paths share one internal routine. The only asymmetry is standard: allowance spend emits no Approval event, which TOKEN.md already discloses.\n\nFindings reported, most severe first:\n\n1. **Low.** README, LAUNCH.md and REVIEW.md point to an `artifacts/` directory holding the ABI, build record, deployment status, saved factory reads and validation output. That directory is not in the tree. The documented check command exits 1. The fee and custody statements are correct but their cited evidence is undelivered.\n2. **Info.** DEPENDENCIES.md says vendored sources are unmodified, but seven forge-std files were reformatted. I confirmed the changes are whitespace-only.\n3. **Info.** One test uses a bare `expectRevert` for a zero-source `transferFrom`, and its comment names the wrong check. The real revert is `ERC20InvalidApprover`, which I confirmed with a scratch test.\n\nNo critical or high findings, so no proof tests were attached. Coverage rows answer all three entry points plus five invariants. Static analysis leads (the large-numeric-literal note) were checked and are not defects.","treeHash":null,"usage":{"cachedInputTokens":897854,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":20571,"runtime":"claude","turns":36,"wallClockMs":641685}},{"artifacts":[],"attempt":1,"bundleHash":"3fe1072239aec8df428630527b211331a17a23158e3c895fd155877174560905","device":"3f02755d8661ddf1","findings":[],"hash":"22f2d841c642514731b5e42ebb3e4d80a738882ada6865bc819038008d235bed","nodeId":"29455f6e-97e1-4211-b376-9618e51aeb47","outcome":"completed","summary":"Fixed artifact delivery: added six compiler exports, deployment status and validation records, and corrected Git exclusions hiding them. Removed unsupported discovery-evidence claims.\n\nThe invariant finding was not reproducible: this checkout runs 128×64 with three handlers. Both dispositions are recorded in [.imd-responses.json](/home/identitymd3/.identitymd/work/1d8ba181-fdc0-4f4b-83ab-bd5bc40f5515/29455f6e-97e1-4211-b376-9618e51aeb47/.imd-responses.json).\n\nPassed `forge build`, `forge test` (20 tests), `forge fmt --check`, artifact checks and a clean offline rebuild.\n\nToken code remains unchanged. Mainnet deployment and external evidence remain pending.","treeHash":"4006e111559c0e788235deedb046174e39907be7","usage":{"cachedInputTokens":1231488,"inputTokens":94714,"model":"gpt-6-astra","outputTokens":15219,"runtime":"codex","turns":6,"wallClockMs":380396}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b273d407784470b4","findings":[{"citation":"resolved","description":"Merged from audit_math, audit_permissions, audit_economics and audit_flow (same root cause). The brief requires delivery of the actual token ABI, verification artifacts, chain policy and deployment evidence. The deliverable's own documentation asserts they are present: README.md:49 links artifacts/LaunchToken.abi.json, artifacts/build.json and artifacts/deployment-status.json; README.md:40 lists `python3 scripts/export_artifacts.py --check` as a build/check step; docs/LAUNCH.md:9 marks 'Source, tests, ABI, creation/runtime bytecode, compiler input' as 'Delivered'; docs/LAUNCH.md:11-12 say the Check response and policy snapshot are 'preserved'; docs/LAUNCH.md:19 describes artifacts/deployment-status.json; docs/LAUNCH.md:68 says the block-26,142,850 factory reads (fees(), poolFee()=12500, feeRecipient(), treasury(), poolHook(), deployer()) 'are saved in artifacts/discovery/factory-reads.json'; docs/LAUNCH.md:88 tells the deployer to compare on-chain runtime with artifacts/LaunchToken.runtime.hex and to verify source with artifacts/solc-input.json; docs/REVIEW.md:22 says captured validation output is in artifacts/validation/. None of these paths exist: `git ls-files artifacts` is empty across all five commits, and .gitignore (cache/, out/, broadcast/, test/scratch/, __pycache__/) does not exclude artifacts/, so the directory was never committed rather than deliberately generated-only. The consequence is a broken deliverable guarantee: the documented reproduction sequence fails on its last step, every artifact link is dead, and the 1.25% fee, 10 ETH cap, 'no blockers' Check and factory/LP-custody statements that the fee and custody discussion rests on carry no inspectable evidence in the repository. The token source, tests and manifest are unaffected (forge build, 36 tests and forge fmt --check all pass), the compiled ABI is exactly {name,symbol,decimals,totalSupply,balanceOf,allowance,approve,transfer,transferFrom} with a nonpayable no-argument constructor, and the export script's assertions pass when run without --check, so the fix is mechanical. Fix: run `forge build && python3 scripts/export_artifacts.py` and commit the generated artifacts/ files plus the artifacts/deployment-status.json (null values), artifacts/discovery/factory-reads.json and artifacts/validation/ captures the docs describe; or, if artifacts cannot be committed, remove the links, drop the --check step from README.md:40, and change the 'Delivered'/'preserved' rows in docs/LAUNCH.md:9-12 to state that the evidence is not included.","line":49,"path":"README.md","reproduction":"State: fresh checkout of HEAD 7bf7816 (same for 2ee2670). Commands: `forge build` succeeds (Solc 0.8.26, 28 files); `forge test` passes 36/36; `forge fmt --check` exits 0; then the README.md:40 step `python3 scripts/export_artifacts.py --check`. Expected per README.md:34-41 and docs/REVIEW.md:22: prints 'Checked 6 reproducible artifacts; no RPC or transactions.' and exits 0. Actual: prints 'Artifact differs: artifacts/LaunchToken.abi.json; rebuild and export again' and exits 1 (scripts/export_artifacts.py:100 finds `path.exists()` false). `ls artifacts` -> 'No such file or directory'; `git ls-files artifacts | wc -l` -> 0; `git log --all --oneline -- artifacts` -> empty. `grep -n 'artifacts/' README.md docs/*.md` lists README.md:49, docs/LAUNCH.md:19, :68, :88 and docs/REVIEW.md:22, each naming a path that resolves to nothing.","severity":"medium","snippet":"- [Compiled ABI](artifacts/LaunchToken.abi.json), [reproducibility record](artifacts/build.json), [deployment status](artifacts/deployment-status.json)","title":"Delivered documentation links verification artifacts and saved evidence that are not in the tree; the README's own check command exits 1"},{"citation":"resolved","description":"Merged from audit_permissions, audit_economics and audit_flow (same root cause). Both archive hashes on DEPENDENCIES.md:13-14 are correct (re-downloaded tarballs hash to 18c7b7e9...925a and 45157353...ee94), and all five vendored OpenZeppelin v5.0.2 files are byte-identical to upstream, so the on-chain dependency closure is clean. However lib/forge-std/src/StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol are not byte-identical to the forge-std-1.9.7 archive: multi-line function signatures were re-wrapped onto one line to the 120-column [fmt] setting in foundry.toml. Stripping all whitespace, every pair hashes identically, so semantics, assertions and cheatcode signatures are unchanged and test results are trustworthy. The defect is the provenance statement: a verifier following DEPENDENCIES.md and diffing the vendored tree against the listed archive gets seven mismatches the document says cannot exist, in a package whose stated purpose is offline reproducibility. forge-std is test-only; no deployed bytecode is affected. Fix: restore the seven files byte-for-byte from the archive (and exclude lib/ from forge fmt), or amend DEPENDENCIES.md to state that forge-std was reformatted with forge fmt, listing the affected files and that only whitespace differs.","line":10,"path":"DEPENDENCIES.md","reproduction":"Input: `curl -sL -o fs.tar.gz https://codeload.github.com/foundry-rs/forge-std/tar.gz/refs/tags/v1.9.7 && sha256sum fs.tar.gz` -> 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94 (matches DEPENDENCIES.md:14). `tar xzf fs.tar.gz; for f in $(cd lib/forge-std && find src -type f | sort); do cmp -s lib/forge-std/$f forge-std-1.9.7/$f || echo DIFF $f; done`. Expected per DEPENDENCIES.md:10: no output. Actual: DIFF src/StdAssertions.sol, DIFF src/StdJson.sol, DIFF src/StdToml.sol, DIFF src/Vm.sol, DIFF src/console.sol, DIFF src/interfaces/IERC7540.sol, DIFF src/interfaces/IMulticall3.sol (the other 23 files match). Example: upstream Vm.sol:827-830 `function getDeployment(string calldata contractName, uint64 chainId)\\n external\\n view\\n returns (address deployedAddress);` is one line in the vendored copy. `tr -d ' \\t\\r\\n' < lib/forge-std/src/Vm.sol | sha256sum` equals the same over the upstream file (fe772424ec5d5c1b... both sides), and likewise for the other six, confirming whitespace-only. The same procedure on openzeppelin-contracts v5.0.2 (sha256 18c7b7e949b9a82dcd8cd394426c9c2636dfc263aa2317d4749dbfa0c7b3925a) shows all five vendored OZ files identical.","severity":"low","snippet":"Sources were fetched from the upstream tagged codeload archives, selected as regular files, and not modified. Archive SHA-256 values:","title":"DEPENDENCIES.md states vendored sources were 'not modified', but seven forge-std files differ from the pinned v1.9.7 archive (whitespace-only re-wrapping)"},{"citation":"resolved","description":"From audit_permissions; reproduced. Every other revert in the suite pins the exact custom error, but this case accepts any revert data, so a regression that reverted for an unrelated reason would still pass. The comment also misstates the path: in OpenZeppelin 5.0.2, transferFrom(address(0), ALICE, 0) first calls _spendAllowance(address(0), msg.sender, 0); the `currentAllowance < value` check is 0 < 0 and does not fire, so _approve(address(0), spender, 0, false) runs and reverts with ERC20InvalidApprover(address(0)) before _transfer's ERC20InvalidSender check is reached. The zero source is still rejected, so the token behaves correctly; only the test's precision and comment are wrong. Fix: `vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InvalidApprover.selector, address(0)));` and reword the comment to say the rejection comes from the allowance update.","line":176,"path":"test/LaunchToken.t.sol","reproduction":"State: fresh LaunchToken deployed by the test contract. Test A (what the comment implies): `vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InvalidSender.selector, address(0))); token.transferFrom(address(0), address(0xA11CE), 0);`. Test B: same with ERC20InvalidApprover. Run under test/scratch with forge test. Expected if the comment were accurate: A passes. Actual: A fails with 'Error != expected error: ERC20InvalidApprover(0x0000000000000000000000000000000000000000) != ERC20InvalidSender(0x0000000000000000000000000000000000000000)'; B passes. The delivered line 177 passes only because a bare expectRevert accepts any revert.","severity":"info","snippet":"        // Zero-value transferFrom still rejects a zero source (while spending its zero allowance).\n        vm.expectRevert();\n        token.transferFrom(address(0), ALICE, 0);","title":"Zero-source transferFrom edge is asserted with a bare expectRevert and its comment names the wrong rejection; the actual error is ERC20InvalidApprover from _spendAllowance"},{"citation":"resolved","description":"Own finding (not reported by the specialists). docs/REVIEW.md:18 was written before commit c937679 extended test/LaunchToken.invariant.t.sol with inline forge-config lines 135-137 (`default.invariant.runs = 256`, `default.invariant.depth = 128`), which override the foundry.toml [profile.default.invariant] values of 128/64. test/README.md:31 correctly states 256 sequences of depth 128, so the two delivered descriptions of the same suite disagree. Harmless to the token; it is a stale statement in the local review record. Fix: update docs/REVIEW.md:18 to 256 runs of depth 128 (and mention the nine handler actions added by the extension).","line":18,"path":"docs/REVIEW.md","reproduction":"Input: `forge test --match-path test/LaunchToken.invariant.t.sol`. Expected per docs/REVIEW.md:18: the summary line reports runs: 128 and calls: 8192 (128*64). Actual: 'LaunchTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)', i.e. 256 runs of depth 128, as set by test/LaunchToken.invariant.t.sol:135-136 and as described in test/README.md:31.","severity":"info","snippet":"with 128 runs of depth 64 and fail-on-revert enabled.","title":"docs/REVIEW.md describes the invariant campaign as 128 runs of depth 64, but the delivered file is configured and runs at 256 runs of depth 128"}],"hash":"23d509bcdfe1251a413ed22b516b7f81c02936d0da9e678601afcdc510f6ac15","nodeId":"89f7137b-33fd-44af-9e55-b8e41598e617","outcome":"completed","summary":"The review is complete. The findings file is written at `.imd-findings.json`, the scratch directory is removed, and the working tree contains no other new files.\n\n**Outcome.** The token itself is clean. Every defect that survived is in documentation or test precision, not in deployable code. All three entry points hold.\n\n**What I reproduced from the specialists, merged to two findings:**\n\n- **Medium, README.md line 49.** Four specialists reported the same root cause, so it is one finding. The README, LAUNCH.md and REVIEW.md link seven artifact paths and mark the ABI, bytecode, Check response and factory-read evidence as delivered or preserved. No artifacts directory exists in any commit, and nothing ignores it. The README's own check command exits 1 on a fresh checkout. The fee, opening-cap and custody statements therefore carry no inspectable evidence in the repository.\n- **Low, DEPENDENCIES.md line 10.** Three specialists reported this. The file says vendored sources were not modified. I re-downloaded both upstream archives, which hash exactly as the document states. All five OpenZeppelin files are byte-identical. Seven forge-std files differ by line wrapping only, and hash identically once whitespace is stripped. Semantics are unchanged, but the provenance statement is false.\n\n**Kept as info:**\n\n- **test/LaunchToken.t.sol line 176.** The zero-source transferFrom case uses a bare expectRevert and its comment names the wrong check. I ran both variants. The actual error is ERC20InvalidApprover from the allowance update, not ERC20InvalidSender.\n- **docs/REVIEW.md line 18 (my own finding).** The review doc says the invariant campaign runs 128 sequences of depth 64. The delivered file's inline config and the actual run use 256 of depth 128, as test/README.md correctly states.\n\n**What I verified myself beyond the specialists.** The build compiles, all 36 delivered tests pass, and the formatter check passes. The two protected floor tests pass when fed the compiled creation code and the policy supply, including a CREATE2 deployment from the discovered factory address. The compiled ABI is exactly the nine ERC-20 functions with a no-argument nonpayable constructor, and the runtime has no delegatecall, callcode or selfdestruct. The manifest is schema-valid, with notes under the 4000-character ceiling. The docs carry the required test-token notice without the forbidden wording, never describe the pool as 0.3%, and the logo bytes hash to the expected value.\n\n**Next step for the author.** Run the export script without the check flag and commit the resulting artifacts along with the discovery and validation captures the docs describe, or reword the docs to claim only what is delivered. The DEPENDENCIES.md fix is either restoring the seven forge-std files byte-for-byte or stating that they were reformatted.","treeHash":null,"usage":{"cachedInputTokens":1588632,"inputTokens":514,"model":"claude-fable-5-1","outputTokens":17585,"runtime":"claude","turns":29,"wallClockMs":259841}},{"artifacts":[],"attempt":1,"bundleHash":"e8cac0ecb70d73c2c914bbe8981ef9331113e929ebf69f0d3c58855deef54f4d","device":"bfffb5246a55ee5d","findings":[],"hash":"2b0d141c98c88a730167057944d916f2f96446ee783b3e6027edd900a1d18e1b","nodeId":"0eeee9d3-68af-4bc1-81cc-fb23e0a8594a","outcome":"completed","summary":"Updated only [launch.json](/home/startover/.identitymd/work/1d8ba181-fdc0-4f4b-83ab-bd5bc40f5515/0eeee9d3-68af-4bc1-81cc-fb23e0a8594a/launch.json) to require Check/quote confirmation of the 86% pool allocation and disclosure of incompatible terms.\n\nValidation passed: supplied schema and admission refinements, `forge build`, and all 29 tests—including both pinned suites—with no failures or skips. No deployment performed.","treeHash":"f4c7536048dc91fde9c577c4fccfed768922eba8","usage":{"cachedInputTokens":233088,"inputTokens":44557,"model":"gpt-6-astra","outputTokens":3772,"runtime":"codex","turns":3,"wallClockMs":104637}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0b183f15e03d94cc","findings":[],"hash":"475640bc606354fee2ebd86621f28071425c219989707b6e2046a6e1bcede980","nodeId":"89f7137b-33fd-44af-9e55-b8e41598e617","outcome":"failed","summary":"{\"type\":\"error\",\"status\":400,\"error\":{\"type\":\"invalid_request_error\",\"message\":\"The 'gpt-6-astra' model is not supported when using Codex with a ChatGPT account.\"}}","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":8362}},{"artifacts":[],"attempt":1,"bundleHash":"f3412fba7235dd921d98212678d33c80008d20aead0551984f6bb389b128181d","device":"c9668a6c89d33b13","findings":[],"hash":"4bfc3c08c5903e1c67a2deaf9716529ee6676149eba89549a87c6915ac6e7615","nodeId":"ca5bd66e-f5ab-476c-a905-ac643ce503cf","outcome":"completed","summary":"Preserved the accepted Solidity tests and recorded validation in `test/README.md`.\n\n- `forge build`: passed.\n- `forge test`: 36 passed, zero failures or skips.\n- Both invariants passed across 32,768 randomized handler calls.\n\nNo contract defect reproduced. Mainnet deployment and protocol integration remain unverified. Only `test/README.md` changed.","treeHash":"31642183bc0f3daa4f4bc618e0d1c9ce34cdea22","usage":{"cachedInputTokens":682368,"inputTokens":96620,"model":"gpt-6-astra","outputTokens":3910,"runtime":"codex","turns":5,"wallClockMs":137656}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c722c2e9ac9aa084","findings":[{"citation":"resolved","description":"README.md:40 documents `python3 scripts/export_artifacts.py --check` as a build/verification step, README.md:49 links to artifacts/LaunchToken.abi.json, artifacts/build.json and artifacts/deployment-status.json, docs/REVIEW.md:22 says captured validation output is in artifacts/validation/, docs/LAUNCH.md:68 says the factory fee reads (block 26,142,850, poolFee()=12500, fees()/feeRecipient()/treasury() addresses) are saved in artifacts/discovery/factory-reads.json, and the handoff table at docs/LAUNCH.md:9-12 marks ABI/bytecode/compiler input as 'Delivered' and the Check response and policy snapshot as 'preserved'. The git tree (single commit 2ee2670, 51 files) contains no artifacts/ directory at all, and .gitignore does not exclude it, so it was never committed rather than intentionally generated-only. Consequences: (1) the documented verification command exits 1 immediately; (2) every README/doc link to the ABI, reproducibility record, deployment status, validation output and discovery evidence is dead; (3) the brief's required deliverables 'actual token ABI ... verification artifacts, chain policy and deployment evidence' and the LAUNCH.md claims about the 1.25% fee read, the 10 ETH cap and the 'no blockers' Check are unverifiable from the repository. A reader relying on the handoff table has no artifact behind any of these statements. This is outside the assigned math area but is a concrete defect in the deliverable as shipped. Fix: run `forge build && python3 scripts/export_artifacts.py` and commit the generated artifacts/ files plus the referenced deployment-status.json, validation/ and discovery/factory-reads.json, or remove the links and downgrade the handoff table rows from 'Delivered'/'preserved' to 'not included'.","line":40,"path":"README.md","reproduction":"State: fresh checkout of commit 2ee2670. Run `forge build` (succeeds), then the README-documented `python3 scripts/export_artifacts.py --check`. Expected (per README.md:40 and docs/REVIEW.md:22): prints 'Checked 6 reproducible artifacts'. Actual: exits 1 with 'Artifact differs: artifacts/LaunchToken.abi.json; rebuild and export again' because scripts/export_artifacts.py:100 finds `path.exists()` false. `ls artifacts` -> 'No such file or directory'; `git log --all -- artifacts` -> empty. Opening README.md:49 links or docs/LAUNCH.md:68 `artifacts/discovery/factory-reads.json` yields no file.","severity":"medium","snippet":"python3 scripts/export_artifacts.py --check","title":"Delivered verification evidence (artifacts/) is absent from the tree; documented check command fails and docs assert it was delivered"}],"hash":"4f40d5e2428626da2890da33795d5784ae2bca63c53e97884c35ca5f9b27847e","nodeId":"2293981f-801c-4a37-9193-6d1aa6c1c45d","outcome":"completed","summary":"Review complete. The findings file is written and validated, and the scratch directory has been removed.\n\n**Result: no math defects in the token. One deliverable defect outside the math area.**\n\nThe audited code is a 13-line `LaunchToken` that wraps unmodified OpenZeppelin 5.0.2 ERC20 and mints 10^27 units once in the constructor. Across the Math Precision, Boundary and Numerical Gap guides, every failure mode either does not apply or holds:\n\n- **Math Precision.** The only arithmetic is the constructor constant and the OZ balance/allowance updates. There are no divisions, casts, scale conversions or fixed-point systems. The unchecked subtractions are each preceded by the matching `<` check, and the unchecked additions are bounded by a total supply of 10^27. The aderyn \"large numeric literal\" lead is stylistic only.\n- **Boundary.** The token makes no external calls and has no payable, receive or fallback functions and no bytes decoding. The only sentinel branches are the zero-address checks, and both sides revert as intended.\n- **Numerical Gap.** With no rounding anywhere, the invariant that balances sum to total supply holds exactly. I ran a scratch Foundry test over the seams the delivered suite does not hit directly, such as self-transferFrom with a finite allowance, allowance of max minus one, and a zero-value spend on a zero allowance. All passed, as did the delivered 20 tests and the 128-run invariant suite.\n\n**The one finding (medium):** the `artifacts/` directory that README, docs/REVIEW.md and docs/LAUNCH.md present as delivered evidence does not exist in the tree and was never committed. The README-documented command `python3 scripts/export_artifacts.py --check` exits 1, the ABI and reproducibility links are dead, and the claimed saved factory fee read, policy snapshot and \"no blockers\" Check response have no artifact behind them. The fix is to run the export script and commit its output plus the referenced discovery and status files, or to correct the docs.\n\nCoverage rows cover all three ABI entry points as `holds`, plus five invariant and boundary rows and one `finding` row for the missing artifacts. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":674163,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":12849,"runtime":"claude","turns":27,"wallClockMs":215139}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"282a1c2062280fd9","findings":[{"citation":"resolved","description":"The proposed fix for prior finding 81e3eb21e736726f690d63f18ddf6a88a345e441c6853096ae7d1df152787e35 is not present in the reviewed HEAD 1d6cfb8. The revised prose correctly withdraws the unavailable earlier Check and historical liquidity-receipt claims, but there is still no artifacts/ directory or tracked artifact file. README.md:49 still links the compiled ABI, build record and deployment status; README.md:28 and docs/LAUNCH.md:12-13,44,46,66 claim fresh policy, capabilities and factory-read captures are saved; docs/LAUNCH.md:9 still marks ABI/bytecode/compiler input as delivered, and docs/REVIEW.md:22 still claims saved validation output. Thus the promised new block-26143028 evidence is also absent and the documented build/check sequence fails. This is the same delivery defect reported by all four specialists, merged once; no defect in token transfer logic is alleged. Deliver the six exporter outputs plus the status/discovery/validation files actually claimed, or remove the absent-file links, the delivered/saved assertions and the check command until those files are included. Do not fabricate quote or deployment evidence.","line":49,"path":"README.md","reproduction":"At HEAD 1d6cfb8, git ls-files artifacts returns no paths and Path('artifacts').exists() is false. Copied all tracked files byte-for-byte into an isolated temporary directory to avoid modifying the reviewed tree. There, forge build --offline succeeds with Solc 0.8.26 (28 files), then the README.md:40 command python3 scripts/export_artifacts.py --check exits 1 with 'Artifact differs: artifacts/LaunchToken.abi.json; rebuild and export again'. Expected per the delivered-artifacts claims: exit 0 and 'Checked 6 reproducible artifacts; no RPC or transactions.' The exporter reaches its exists()/byte-comparison at scripts/export_artifacts.py:100 and fails because the first artifact is absent. artifacts/build.json, artifacts/deployment-status.json, artifacts/discovery/chain-policy.json, artifacts/discovery/factory-reads.json and artifacts/validation/ are also absent.","severity":"medium","snippet":"- [Compiled ABI](artifacts/LaunchToken.abi.json), [reproducibility record](artifacts/build.json), [deployment status](artifacts/deployment-status.json)","title":"Previously missing verification artifacts are still absent; the documented artifact check still fails"},{"citation":"resolved","description":"Prior finding 5612aece42e705f266582d7579cc887fa19d05eae8279954b88973598ec8cd09 remains reproducible in HEAD 1d6cfb8. The author's not-reproducible response describes a different tree: this tree does contain test/README.md, nine handler actions, and inline default.invariant.runs=256 and default.invariant.depth=128 at test/LaunchToken.invariant.t.sol:135-136. These override foundry.toml's 128/64 defaults. docs/REVIEW.md:18 still says 128 runs of depth 64, while test/README.md:31 correctly states 256 sequences of depth 128. This only makes the delivered review record inaccurate; it does not weaken the actual tests or demonstrate a token defect. Update that paragraph to the actual 256/128 campaign and nine handlers.","line":18,"path":"docs/REVIEW.md","reproduction":"Ran the author's exact reproduction command, forge test --match-path test/LaunchToken.invariant.t.sol, on a byte-identical temporary copy of HEAD 1d6cfb8. Both invariants and the deterministic handler sequence pass; the output is 'LaunchTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)' and lists all nine handlers. Expected from docs/REVIEW.md:18 and the author's rebuttal: runs: 128 and calls: 8192 (128*64). Actual: runs: 256 and calls: 32768 (256*128). The independent full forge test --offline run reports the same campaign and 36 passing tests. test/LaunchToken.invariant.t.sol:135-137 contains the inline overrides, and test/README.md:31 documents 256/128. No configuration was changed for either run.","severity":"info","snippet":"`test/LaunchToken.invariant.t.sol` maintains an independent model over four actors with random transfers, approvals and transferFrom calls, including self transfers. It checks total-supply/balance conservation and all sixteen allowances after sequences, with 128 runs of depth 64 and fail-on-revert enabled. These test fixture contracts live only in test/ and are not application contracts or in the manifest.","title":"Review document still understates the invariant campaign in the current combined tree"}],"hash":"6d0f6ad0ca2e789cd8ca375a76de3cbba5a23b7d69eba94c0eb155d056c0eeb6","nodeId":"89f7137b-33fd-44af-9e55-b8e41598e617","outcome":"completed","summary":"Wrote [.imd-findings.json](/home/seat/.identitymd/work/1d8ba181-fdc0-4f4b-83ab-bd5bc40f5515/89f7137b-33fd-44af-9e55-b8e41598e617/.imd-findings.json).\n\n- **Medium remains:** artifacts are absent; the documented artifact check fails.\n- **Info remains:** invariant documentation says 128×64; execution confirms 256×128.\n- **Fixed:** dependency provenance and zero-source revert assertion.\n\nAll 36 tests and formatting checks pass. All three entry points are covered and hold. No existing files changed.","treeHash":null,"usage":{"cachedInputTokens":941440,"inputTokens":113693,"model":"gpt-6-astra","outputTokens":5997,"runtime":"codex","turns":4,"wallClockMs":186277}},{"artifacts":[],"attempt":1,"bundleHash":"ec731d61f97d30abe876803ef47064032bc7a3ad5cbe306e2831472f367ad735","device":"d0a17ab6722865f6","findings":[],"hash":"831af932d2b59e7380bdbfb57320f07ec48bc4cd0ad64622d0a1b6898434f087","nodeId":"0eeee9d3-68af-4bc1-81cc-fb23e0a8594a","outcome":"completed","summary":"Updated only `launch.json`, clarifying that the service fee is assignment-reported and supporting discovery/quote evidence remains unavailable. Existing launch parameters are unchanged.\n\nValidation passed: manifest schema/refinements, source/ABI consistency, `forge build`, and all 20 tests.\n\nActual mainnet deployment, poolKey and effective fee remain pending.","treeHash":"0adf0f8dd8586c03f072d4e7fea6939d3919234d","usage":{"cachedInputTokens":194944,"inputTokens":44500,"model":"gpt-6-astra","outputTokens":2881,"runtime":"codex","turns":3,"wallClockMs":93604}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e7f8c6542ba6fced","findings":[{"citation":"resolved","description":"The missing-file portion of prior finding e6b6d5e71467250a53f6433df8166098b7463df34326211f04e34c25ff23d504 is fixed: all six exporter outputs, deployment status and validation logs are tracked, and unsupported discovery claims were withdrawn. However, the delivered build record binds a different launch.json, so the README verification command still fails on HEAD 283a037aa4b583f07c62252c5636b459644d3356. The recorded manifest SHA-256 is 36f5d19092c5c128da739b70f28aff937168d9e60776dc70b2855733f661b20e; the delivered manifest hashes to 6ee6d55b872aaa198a1d294a1ba299b9456304d330652720fb890059b6dbe44f. This is a stale reproducibility record, not a token/bytecode defect; severity is reduced accordingly. Regenerate the build record after the final manifest is applied and capture successful validation against that final tree. All specialist missing-artifact reports are merged into this residual delivery issue.","line":25,"path":"artifacts/build.json","reproduction":"Copied all tracked files byte-for-byte into an isolated directory, excluding removable .imd inputs, without changing the reviewed tree. Ran forge build --offline: Solc 0.8.26 compiled 28 files successfully. Ran python3 scripts/export_artifacts.py --check: expected exit 0 and Checked 6 reproducible artifacts; no RPC or transactions.; actual exit 1 with Artifact differs: artifacts/build.json; rebuild and export again. Independently compared every configurationSha256 entry to hashlib.sha256(Path(name).read_bytes()).hexdigest(): only launch.json differs. In the isolated copy only, running python3 scripts/export_artifacts.py changes only artifacts/build.json, and only configurationSha256[launch.json]; the subsequent --check exits 0. The other five exporter outputs already match.","severity":"low","snippet":"    \"launch.json\": \"36f5d19092c5c128da739b70f28aff937168d9e60776dc70b2855733f661b20e\",","title":"Artifact delivery is present, but the build record still fails verification against the final manifest"},{"citation":"resolved","description":"Prior advisory 8cf22ec7a8abc95f80cd205b16d3a81fac81403364351951354ef542f7e0065a remains reproducible in the final combined tree. The author rebutted it using a checkout with three handlers and 128/64 settings; this HEAD contains test/README.md, nine targeted handlers, a deterministic handler-sequence test and inline 256/128 overrides at test/LaunchToken.invariant.t.sol:135-137. The saved reproduction describes the earlier source and does not substantiate the unchanged paragraph for this tree. Update the review paragraph to the delivered nine-handler, 256-runs/depth-128 campaign and distinguish the older validation captures from validation of the final combined tree. This only understates actual test coverage; no token defect is alleged.","line":18,"path":"docs/REVIEW.md","reproduction":"Ran the author's exact command, forge test --match-path test/LaunchToken.invariant.t.sol, on a byte-identical isolated copy of HEAD 283a037aa4b583f07c62252c5636b459644d3356 with no configuration changes. Expected from docs/REVIEW.md:18 and the rebuttal: 128 runs, depth 64, 8192 calls and three handlers. Actual successful output: LaunchTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0), all nine handlers listed, both invariants passed and test_handlerSequenceExercisesFiniteInfiniteAndRevokedAllowances passed. The inline settings override foundry.toml defaults; test/README.md:31 correctly documents the current campaign.","severity":"info","snippet":"`test/LaunchToken.invariant.t.sol` maintains an independent model over four actors with random transfers, approvals and transferFrom calls, including self transfers. It checks total-supply/balance conservation and all sixteen allowances after sequences, with 128 runs of depth 64 and fail-on-revert enabled. These test fixture contracts live only in test/ and are not application contracts or in the manifest.","title":"Review documentation still describes the older three-handler invariant campaign"}],"hash":"90732ec3f287d10370b817835945ece82aeeb31fd0e848a4da745df9aa767739","nodeId":"89f7137b-33fd-44af-9e55-b8e41598e617","outcome":"completed","summary":"Saved [.imd-findings.json](/home/imd2/.identitymd/work/1d8ba181-fdc0-4f4b-83ab-bd5bc40f5515/89f7137b-33fd-44af-9e55-b8e41598e617/.imd-findings.json).\n\n- **Low:** Artifacts are delivered, but a stale manifest hash still fails verification.\n- **Info:** Review documentation understates the actual invariant campaign.\n\nAll 36 tests and formatting checks passed. All three token entry points hold. No tracked files changed.","treeHash":null,"usage":{"cachedInputTokens":833920,"inputTokens":106756,"model":"gpt-6-astra","outputTokens":5864,"runtime":"codex","turns":4,"wallClockMs":178896}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"229c8cb0d9067fbe","findings":[{"citation":"resolved","description":"The brief requires delivering the actual token ABI, verification artifacts, chain policy evidence and the factory/LaunchFees reads that justify the economics (1.25% fee, 10 ETH cap, policy 18, fee recipient, LP sender). README.md:49, docs/LAUNCH.md:19/68/88 and docs/REVIEW.md:22 link seven artifact paths (artifacts/LaunchToken.abi.json, artifacts/LaunchToken.runtime.hex, artifacts/solc-input.json, artifacts/build.json, artifacts/deployment-status.json, artifacts/discovery/factory-reads.json, artifacts/validation/) and docs/LAUNCH.md:9-13 marks ABI/bytecode/compiler input as 'Delivered', the Check response as 'preserved' and the policy snapshot as 'preserved'. None of these files exist: `git ls-files` lists no artifacts/ entry and .gitignore does not exclude it. The economics narrative therefore rests on saved on-chain reads that the reader cannot inspect, and README.md:40 instructs running `python3 scripts/export_artifacts.py --check`, which cannot pass on this tree. (I independently re-verified the chain claims: at mainnet block 26142939 factory 0xff03410d…7120 returns fees()=0x12c9e1…3863, poolFee()=12500, feeRecipient()=0x3f252e…1f22, treasury()=owner()=0x047f60…54b7; the historical EMVO launch tx 0x64bcb165…0661 initialised the pool with static fee 12500 and the factory as ModifyLiquidity sender — so the docs are accurate, but the delivery does not carry its evidence.) Fix: commit the exported artifacts (run `forge build && python3 scripts/export_artifacts.py` and add artifacts/ plus the discovery/validation captures), or remove the links and the 'Delivered/preserved' status rows and drop the --check step from README if artifacts cannot be committed.","line":49,"path":"README.md","reproduction":"State: fresh checkout of commit 2ee2670. Input: `forge build && python3 scripts/export_artifacts.py --check` (the exact command README.md:40 lists). Expected: 'Checked 6 reproducible artifacts; no RPC or transactions.' and exit 0. Actual: 'Artifact differs: artifacts/LaunchToken.abi.json; rebuild and export again' and exit 1. Also: `ls artifacts` -> 'No such file or directory'; `for p in artifacts/LaunchToken.abi.json artifacts/LaunchToken.runtime.hex artifacts/solc-input.json artifacts/build.json artifacts/deployment-status.json artifacts/discovery/factory-reads.json artifacts/validation; do test -e $p || echo MISSING $p; done` prints all seven as MISSING; `git ls-files artifacts | wc -l` -> 0.","severity":"medium","snippet":"- [Compiled ABI](artifacts/LaunchToken.abi.json), [reproducibility record](artifacts/build.json), [deployment status](artifacts/deployment-status.json)","title":"Delivered ABI, build record, policy/factory discovery evidence and validation logs are referenced but absent from the tree; README's own check command fails"},{"citation":"resolved","description":"All five vendored OpenZeppelin files are byte-identical to upstream v5.0.2 (sha256 compared), but lib/forge-std/src/StdAssertions.sol, Vm.sol, StdJson.sol, StdToml.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol do not match upstream v1.9.7 (nor any tag v1.9.4–v1.17.0/master). The differences are exclusively function-signature line wrapping (a formatter pass): after stripping all whitespace every file hashes identically to upstream, so assertions and cheatcodes behave as upstream and the test results are trustworthy. The defect is only the provenance statement: a verifier comparing the tree to the listed archive hashes will find a mismatch that the document says cannot exist. Fix: either re-vendor the exact upstream bytes or state that forge-std was reformatted with `forge fmt` and that only whitespace differs.","line":10,"path":"DEPENDENCIES.md","reproduction":"Input: `curl -sSL https://raw.githubusercontent.com/foundry-rs/forge-std/v1.9.7/src/StdAssertions.sol | sha256sum` -> d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780; `sha256sum lib/forge-std/src/StdAssertions.sol` -> 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384. Expected per DEPENDENCIES.md:10 ('not modified'): identical hashes. Actual: different. Confirming whitespace-only: `tr -d ' \\t\\r\\n' < <(curl -sSL …/v1.9.7/src/StdAssertions.sol) | sha256sum` equals `tr -d ' \\t\\r\\n' < lib/forge-std/src/StdAssertions.sol | sha256sum`; the same holds for Vm.sol, StdJson.sol, StdToml.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol, while the other 23 forge-std files match byte-for-byte.","severity":"info","snippet":"Sources were fetched from the upstream tagged codeload archives, selected as regular files, and not modified. Archive SHA-256 values:","title":"DEPENDENCIES.md provenance claim 'not modified' is false for seven vendored forge-std files (whitespace-only reformatting; semantics unchanged)"}],"hash":"a5d60de64cd6033193f977b4716693274658b754e7b83e8573f43d1b2ed6b081","nodeId":"0ae17a82-68e0-4066-9b82-02c051944ef1","outcome":"completed","summary":"The findings file is on disk (9.4 KB) and is excluded by the harness's `.git/info/exclude`, which is why `git status` is silent; nothing else in the tree changed and I created no `test/scratch/` files. The review is complete.\n\n## Summary\n\n**Scope covered (Economic Security, Invariant, Flow Gap):** the three ABI entry points, the supply/allowance invariants, the factory allocation math, the manifest/request against the brief's schema, and — because the token itself is a 13-line OZ specialization — the economics claims in the docs, which I checked against the live chain and the public API rather than taking them on trust.\n\n**What holds**\n- `src/LaunchToken.sol` is an unmodified OZ 5.0.2 ERC-20 (all five vendored files byte-identical to upstream): no mint/burn path after the constructor, no callbacks, no fee, 9-function ABI, no forbidden opcodes. 20/20 tests pass including the stateful invariant model; the 86/10/4 split is exact in 10^27 units.\n- `launch.json` validates against the schema in the brief (notes 2,177/4,000 chars); `request.json` carries only `poolBps`/`remainderTo`, lowercase owner, chainId 1, ETH pairing.\n- Every on-chain/API claim in the docs checked out: factory `fees()` → LaunchFees with `poolFee()=12500`, recipients/owner as documented; policy 18 cap 10 ETH; `launch.open` = 0.5 IMD. Decoding the historical EMVO launch receipt confirmed static fee 12500 in the poolKey, the guard-only hook, the factory as LP sender, and that the cap is a valuation over total supply (2,500 IMD / 1e9 exactly). `claimFees(uint64)` simulated from a stranger succeeds and credits `owed(account,currency)` — the docs' \"anyone can claim, nobody gains entitlement\" description is accurate.\n\n**Findings (2)**\n1. **Medium** — `README.md:49` and `docs/LAUNCH.md`/`docs/REVIEW.md` link seven `artifacts/` files (ABI, build record, solc input, deployment status, factory-read discovery, validation logs) and mark them \"Delivered/preserved\", but none exist in the tree; the README's own `python3 scripts/export_artifacts.py --check` exits 1. The economics evidence the brief requires is asserted, not delivered.\n2. **Info** — `DEPENDENCIES.md:10` says forge-std was \"not modified\", but seven files differ from v1.9.7 by whitespace only (confirmed by whitespace-stripped hash equality — test semantics are unaffected).\n\nNeither is critical/high, so no proof tests were warranted. One lead I could not close: the factory's LP withdrawal/admin powers are unprovable from bytecode (source is unverified on Sourcify/Blockscout/Etherscan); the docs already flag this as the open custody blocker rather than claiming custody, so I did not report it.","treeHash":null,"usage":{"cachedInputTokens":1814923,"inputTokens":456,"model":"claude-fable-5-1","outputTokens":65795,"runtime":"claude","turns":59,"wallClockMs":887166}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dc7103e773ea194a","findings":[{"citation":"resolved","description":"First-principles check of the deliverable's own claims against the tree. README.md:9 states the deliverable contains 'verification inputs', README.md:49 links artifacts/LaunchToken.abi.json, artifacts/build.json and artifacts/deployment-status.json, docs/LAUNCH.md:19 describes artifacts/deployment-status.json, docs/LAUNCH.md:68 says the mainnet block, code hashes and factory/fee calls 'are saved in artifacts/discovery/factory-reads.json', docs/LAUNCH.md:88 tells the deployer to check runtime against artifacts/LaunchToken.runtime.hex and publish verification using artifacts/solc-input.json, and docs/REVIEW.md:22 says 'Validation commands and captured output are in artifacts/validation/'. No artifacts/ directory exists in the committed tree (git ls-files lists none; .gitignore does not exclude it). The README's own reproduction sequence (forge build; forge test; forge fmt --check; python3 scripts/export_artifacts.py --check) therefore fails on its last step with a SystemExit. The task brief requires delivery of the 'actual token ABI ... verification artifacts'; the ABI is only recoverable by rebuilding, and the discovery evidence the custody/fee discussion rests on is cited but absent. I independently re-read the cited chain state over public RPC (block 26142850 hash 0x60285c1d...8def4, factory 0xff03...7120 fees()=0x12c9...3863, poolFee()=12500, feeRecipient()=0x3f25...1f22, treasury()=owner()=0x047f...54b7, poolManager()=0x0000...8a90, poolHook()=0x784f...6000, deployer()=0xcecc...a551) and every value in docs/LAUNCH.md matches, so the prose is accurate; what is missing is the evidence file the prose points at. Fix: either commit the artifacts the export script produces (run scripts/export_artifacts.py without --check, plus the discovery/validation/deployment-status files the docs describe) or change README/docs to say the artifacts are generated locally and remove the claims that they are saved in the tree. The token source is unaffected.","line":49,"path":"README.md","reproduction":"State: fresh checkout of commit 2ee2670. Input: `forge build && python3 -I scripts/export_artifacts.py --check`. Expected (per README.md:36-41): prints 'Checked 6 reproducible artifacts; no RPC or transactions.' and exits 0. Actual: raises `SystemExit: Artifact differs: artifacts/LaunchToken.abi.json; rebuild and export again` (exit 1). `ls artifacts` -> 'No such file or directory'. `git ls-files artifacts` -> empty. Every link in README.md:49 and the paths at docs/LAUNCH.md:19, :68, :88 and docs/REVIEW.md:22 resolve to nothing.","severity":"medium","snippet":"- [Compiled ABI](artifacts/LaunchToken.abi.json), [reproducibility record](artifacts/build.json), [deployment status](artifacts/deployment-status.json)","title":"Delivered docs link verification artifacts (ABI, build record, deployment status, discovery reads, validation logs) that are not in the tree; the documented check command fails"},{"citation":"resolved","description":"Periphery provenance check. The archive hashes on DEPENDENCIES.md:13-14 are correct (both tarballs re-downloaded and matched), and all six OpenZeppelin v5.0.2 files are byte-identical to upstream, so the on-chain dependency is clean. But seven forge-std files under lib/forge-std/src/ (StdAssertions.sol, Vm.sol, console.sol, StdJson.sol, StdToml.sol, interfaces/IMulticall3.sol, interfaces/IERC7540.sol) are not byte-identical to the forge-std-1.9.7 archive: function signatures were re-wrapped to the 120-column style in foundry.toml's [fmt] section. Stripping all whitespace makes every file identical, so the change is formatting only and the tests compile and behave the same. The defect is that a verifier following DEPENDENCIES.md and comparing vendored files to the archive gets seven mismatches that the document says cannot exist, which undermines the provenance statement for a package whose whole point is offline reproducibility. forge-std is test-only; no deployed bytecode is affected. Fix: restore the seven files from the archive byte-for-byte, or amend DEPENDENCIES.md to state that forge-std sources were reformatted with forge fmt and list the affected files.","line":10,"path":"DEPENDENCIES.md","reproduction":"Input: `curl -sL -o fs.tar.gz https://codeload.github.com/foundry-rs/forge-std/tar.gz/refs/tags/v1.9.7 && sha256sum fs.tar.gz` -> 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94 (matches DEPENDENCIES.md:14). Then `tar xzf fs.tar.gz; for f in $(cd lib/forge-std && find src -type f); do cmp -s lib/forge-std/$f forge-std-1.9.7/$f || echo DIFF $f; done`. Expected (per DEPENDENCIES.md:10): no output. Actual: DIFF src/StdAssertions.sol, DIFF src/interfaces/IMulticall3.sol, DIFF src/interfaces/IERC7540.sol, DIFF src/console.sol, DIFF src/Vm.sol, DIFF src/StdToml.sol, DIFF src/StdJson.sol. Example: upstream Vm.sol:827-830 splits `function getDeployment(string calldata contractName, uint64 chainId) external view returns (address deployedAddress);` over four lines; the vendored copy has it on one line. `tr -d ' \\t\\n\\r'` on each pair yields identical sha256, confirming whitespace-only.","severity":"low","snippet":"Sources were fetched from the upstream tagged codeload archives, selected as regular files, and not modified. Archive SHA-256 values:","title":"DEPENDENCIES.md states vendored forge-std files are 'not modified', but seven files differ from the pinned v1.9.7 archive (whitespace-only reformatting)"}],"hash":"bafc17876ea5e1ce5ee5e6b218bb376870ae43277c06850a278b97bea1b9485c","nodeId":"b1c7699d-0cd0-4f92-9a81-2191d4f9b40b","outcome":"completed","summary":"The review is complete. The findings file is valid, both snippet anchors match the tree, and no repository files were changed.\n\n**Outcome.** The token code is clean. All three ABI entry points hold, and the two findings are gaps in the delivered documentation and provenance, not defects in the contract.\n\n**What I checked in the assigned area**\n\n- **Execution trace.** `approve`, `transfer` and `transferFrom` resolve to the vendored OpenZeppelin 5.0.2 ERC20 with no overrides. Zero-address checks, balance and allowance checks, unchecked arithmetic bounds, atomic rollback and the infinite-allowance path all behave as the standard specifies. The constructor mints exactly 10^27 units once to the caller.\n- **Periphery.** The six OpenZeppelin files are byte-identical to the upstream v5.0.2 archive. Runtime has no delegatecall, callcode or selfdestruct, no receive or fallback, and the ABI exposes only the nine standard functions.\n- **First principles.** I re-read every mainnet claim in the launch document over a public RPC. The block hash, factory address, fee contract, 1.25% pool fee, fee recipient, treasury, pool manager, hook, deployer, and the old EmberEvo test token all match the prose. The manifest validates against the schema, with notes well under the 4000-character cap. The request file carries the required route, chain, pairing, owner and economics.\n- **Tests.** 20 tests pass, including fuzz and stateful invariants. Formatting check passes.\n\n**Findings written to `.imd-findings.json`**\n\n1. **Medium.** README and docs link verification artifacts under `artifacts/` that are not in the tree: ABI, build record, deployment status, the factory discovery reads, and validation logs. The README's own documented check command fails on the last step. The mainnet facts the docs cite are accurate, but the evidence file they point at does not exist.\n2. **Low.** The dependency document says forge-std was vendored unmodified, but seven files are reformatted relative to the pinned v1.9.7 archive. The changes are whitespace only and test-only, so no deployed code is affected, but byte comparison against the archive contradicts the provenance statement.\n\n**Coverage.** Eleven rows: the three entry points plus the constructor mint, vendored ERC20 integrity, runtime opcode and ABI surface, manifest schema, request economics, mainnet discovery claims, forge-std provenance, and test-suite edges. Nothing was left unreached.\n\n**Not in scope and not asserted.** Actual pool initialization, LP custody powers, distributor proofs and the LaunchFees claim flow still depend on the protocol's deployment handoff, as the delivered docs already state.","treeHash":null,"usage":{"cachedInputTokens":754550,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":18807,"runtime":"claude","turns":29,"wallClockMs":282935}},{"artifacts":[],"attempt":1,"bundleHash":"39be5f707933d56ef39b63e08ae81b6bc84d675f162d049d2c388a3015de0022","device":"2eac007f7332b54c","findings":[],"hash":"c05663de0527051b8e74fdf432885d07f81cdcfab78f45f316c6af0799b255ae","nodeId":"ca5bd66e-f5ab-476c-a905-ac643ce503cf","outcome":"completed","summary":"Added adversarial tests and expanded stateful invariants within `test/`.\n\n- `forge build` and `forge test` pass: **36 tests, zero failures or skips**.\n- Invariants exercised **32,768 randomized calls**.\n- No reproducible token defect found.\n\nCoverage and live-protocol verification limits are documented in [test/README.md](/root/.identitymd/work/1d8ba181-fdc0-4f4b-83ab-bd5bc40f5515/ca5bd66e-f5ab-476c-a905-ac643ce503cf/test/README.md).","treeHash":"be4278fc8fd9c20fdc38dba44b259d21b8f7d36a","usage":{"cachedInputTokens":1184768,"inputTokens":89303,"model":"gpt-6-astra","outputTokens":12744,"runtime":"codex","turns":5,"wallClockMs":398408}},{"artifacts":[],"attempt":1,"bundleHash":"e9c4509862c6812567dc0528433d636b4412a5129d04339969272f01d8166ab3","device":"20831523ffc32a82","findings":[],"hash":"c6f2f4bdfc829c1072e5319bd8d51f8016ed8390219a11e15f993d9257e01199","nodeId":"29455f6e-97e1-4211-b376-9618e51aeb47","outcome":"completed","summary":"Implemented the standard EMBEO token, empty application manifest, tests, ABI, exact logo, and documentation with the prominent historical EMVO warning.\n\n`forge build`, all 20 tests, empty-environment tests, and `forge fmt --check` pass.\n\n**Not deployed:** owner quote/signing, complete LP custody verification, and official deployment evidence remain pending.\n\nSee [README](README.md) and [launch handoff](docs/LAUNCH.md).","treeHash":"dd866296f02814ac1732737c3c2739751330269c","usage":{"cachedInputTokens":3393408,"inputTokens":145259,"model":"gpt-6-astra","outputTokens":34043,"runtime":"codex","turns":7,"wallClockMs":1748576}},{"artifacts":[],"attempt":1,"bundleHash":"836e9ac0221a850c17c34088413cd00246296d8198aa1a3df94ae73bc7a24cfd","device":"f801e761d7a1ec94","findings":[],"hash":"cf33da869fdc018f500f3f7389b8b385df9a662bb13afc3941adb8b755ff74d9","nodeId":"ca5bd66e-f5ab-476c-a905-ac643ce503cf","outcome":"completed","summary":"Reproduced and fixed the advisory: the test now expects exact `ERC20InvalidApprover(address(0))` revert data, with the comment corrected.\n\nRecorded the response in `.imd-responses.json`.\n\nValidation passed: `forge build` and `forge test` — 36 tests passed, including the invariant campaign.","treeHash":"bc46a62adcc2c2b02a7e9b639d1e20e8505b70a5","usage":{"cachedInputTokens":543104,"inputTokens":80269,"model":"gpt-6-astra","outputTokens":3432,"runtime":"codex","turns":3,"wallClockMs":120290}}],"verification":[{"checks":[{"durationMs":1109,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.01s\nCompiler run successful!\n","passed":true},{"durationMs":2764,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119892, ~: 119997)\nLogs:\n  Bound result 564422575008497700016395610\n  Bound result 505142077278493225066000567572873337728443608809409947777564882147763\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 138279, ~: 138693)\nLogs:\n  Bound result 999999999999999999999999999\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 179795, ~: 181972)\nLogs:\n  Bound result 564422575008497700016395610\n  Bound result 296659806221266403378907335\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106413)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 14.58ms (47.24ms CPU time)\n\nRan 1 test for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenActions | approve      | 2716  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transfer     | 2791  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transferFrom | 2685  | 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 2514000706\n  Bound result 0\n  Bound result 992\n  Bound result 0\n  Bound result 1\n  Bound result 336\n  Bound result 0\n  Bound result 673\n  Bound result 2\n  Bound result 18\n  Bound result 0\n  Bound result 2\n  Bound result 11\n  Bound result 11\n  Bound result 40000000000000000000\n  Bound result 3\n  Bound result 0\n  Bound result 340\n  Bound result 659918\n  Bound result 0\n  Bound result 0\n  Bound result 54\n  Bound result 5656\n  Bound result 2499855862\n  Bound result 1\n  Bound result 0\n  Bound result 1224\n  Bound result 10\n  Bound result 2\n  Bound result 103\n  Bound result 255\n  Bound result 720\n  Bound result 400\n  Bound result 8776974958530545779\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.68s (2.68s CPU time)\n\nRan 2 test suites in 2.68s (2.69s CPU time): 20 tests passed, 0 failed, 0 skipped (20 total tests)\n","passed":true},{"durationMs":38,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":29,\"README.md\":54,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":88,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.invariant.t.sol\":92,\"test/LaunchToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"048b5c2d22752729081e9d9aecafdcf3d13d460fd9eb9c1050b8018459faf82d","verifiedTreeHash":"0aa56ed15d7c2a184fdb7ae13b02b655091557b6","verifierVersion":"0.1.0+a2d9a899"},{"checks":[{"durationMs":951,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 865.23ms\nCompiler run successful!\n","passed":true},{"durationMs":2390,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119788, ~: 120093)\nLogs:\n  Bound result 10\n  Bound result 7965840060297647960332274640196212405792331140\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 138149, ~: 138693)\nLogs:\n  Bound result 14\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 180077, ~: 181972)\nLogs:\n  Bound result 484040557159371624293\n  Bound result 286406808520494857242\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106413)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 13.24ms (43.56ms CPU time)\n\nRan 1 test for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenActions | approve      | 2747  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transfer     | 2795  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transferFrom | 2650  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 51\n  Bound result 212\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 16\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 19\n  Bound result 0\n  Bound result 15\n  Bound result 0\n  Bound result 2320\n  Bound result 27\n  Bound result 0\n  Bound result 3227\n  Bound result 27\n  Bound result 0\n  Bound result 570\n  Bound result 1151\n  Bound result 4380\n  Bound result 522\n  Bound result 0\n  Bound result 773435945\n  Bound result 63\n  Bound result 672\n  Bound result 4824\n  Bound result 4056\n  Bound result 494\n  Bound result 3\n  Bound result 173\n  Bound result 611771489\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.32s (2.32s CPU time)\n\nRan 2 test suites in 2.33s (2.34s CPU time): 20 tests passed, 0 failed, 0 skipped (20 total tests)\n","passed":true},{"durationMs":27,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":19,\"README.md\":54,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":90,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.invariant.t.sol\":92,\"test/LaunchToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"12c581d08ee2baebf7f3c1139bda1edaf8a128bff7d47495558f2bcd6e0884d1","verifiedTreeHash":"f2183d0d20bf128b2bf462ca6f1201af2e50b397","verifierVersion":"0.1.0+a2d9a899"},{"checks":[{"durationMs":1210,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.10s\nCompiler run successful!\n","passed":true},{"durationMs":2617,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119970, ~: 120093)\nLogs:\n  Bound result 336471468\n  Bound result 659918\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 138389, ~: 138717)\nLogs:\n  Bound result 496779546317434161564641459\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 180215, ~: 181984)\nLogs:\n  Bound result 336471468\n  Bound result 659918\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106413)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 16.82ms (52.45ms CPU time)\n\nRan 1 test for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenActions | approve      | 2719  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transfer     | 2711  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transferFrom | 2762  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 32780477336469949\n  Bound result 574\n  Bound result 0\n  Bound result 100\n  Bound result 2\n  Bound result 254\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 52\n  Bound result 0\n  Bound result 6052\n  Bound result 1000000000\n  Bound result 0\n  Bound result 251\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 98\n  Bound result 0\n  Bound result 198\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 3960\n  Bound result 8\n  Bound result 4099\n  Bound result 0\n  Bound result 7518\n  Bound result 4884\n  Bound result 0\n  Bound result 2804\n  Bound result 4\n  Bound result 16\n  Bound result 11\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 705\n  Bound result 96\n  Bound result 1\n  Bound result 2685\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.54s (2.53s CPU time)\n\nRan 2 test suites in 2.54s (2.55s CPU time): 20 tests passed, 0 failed, 0 skipped (20 total tests)\n","passed":true},{"durationMs":37,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":10,\"DEPENDENCIES.md\":29,\"README.md\":54,\"artifacts/LaunchToken.abi.json\":315,\"artifacts/LaunchToken.creation.hex\":1,\"artifacts/LaunchToken.metadata.json\":431,\"artifacts/LaunchToken.runtime.hex\":1,\"artifacts/build.json\":37,\"artifacts/deployment-status.json\":90,\"artifacts/solc-input.json\":49,\"artifacts/validation/README.md\":9,\"artifacts/validation/checks.json\":49,\"artifacts/validation/clean-delivery.json\":52,\"artifacts/validation/clean-export-artifacts-check.log\":1,\"artifacts/validation/clean-offline-build.log\":3,\"artifacts/validation/delivery-checks.log\":15,\"artifacts/validation/export-artifacts-check.log\":1,\"artifacts/validation/forge-build.log\":1,\"artifacts/validation/forge-fmt-check.log\":0,\"artifacts/validation/forge-test.log\":44,\"artifacts/validation/invariant-finding-reproduction.log\":22,\"artifacts/validation/missing-artifacts-before-fix.log\":1,\"artifacts/validation/reproduction.json\":36,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":73,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.invariant.t.sol\":92,\"test/LaunchToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"22f2d841c642514731b5e42ebb3e4d80a738882ada6865bc819038008d235bed","verifiedTreeHash":"4006e111559c0e788235deedb046174e39907be7","verifierVersion":"0.1.0+a2d9a899"},{"checks":[{"durationMs":920,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 834.79ms\nCompiler run successful!\n","passed":true},{"durationMs":2352,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119778, ~: 120027)\nLogs:\n  Bound result 2\n  Bound result 15\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 137787, ~: 138693)\nLogs:\n  Bound result 912427094626453502914575506\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 179924, ~: 181972)\nLogs:\n  Bound result 20193790807255\n  Bound result 2\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106413)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 12.66ms (42.72ms CPU time)\n\nRan 1 test for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenActions | approve      | 2798  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transfer     | 2717  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transferFrom | 2677  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000\n  Bound result 5589\n  Bound result 2356\n  Bound result 370\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1595\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2964\n  Bound result 2912\n  Bound result 0\n  Bound result 0\n  Bound result 3150\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1164\n  Bound result 0\n  Bound result 0\n  Bound result 401\n  Bound result 16\n  Bound result 10\n  Bound result 0\n  Bound result 18\n  Bound result 701\n  Bound result 0\n  Bound result 1005\n  Bound result 21\n  Bound result 2\n  Bound result 175\n  Bound result 0\n  Bound result 6\n  Bound result 5940\n  Bound result 0\n  Bound result 2395\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 202\n  Bound result 10\n  Bound result 23\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.29s (2.29s CPU time)\n\nRan 2 test suites in 2.29s (2.30s CPU time): 20 tests passed, 0 failed, 0 skipped (20 total tests)\n","passed":true},{"durationMs":30,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":29,\"README.md\":54,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":88,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.invariant.t.sol\":92,\"test/LaunchToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2b0d141c98c88a730167057944d916f2f96446ee783b3e6027edd900a1d18e1b","verifiedTreeHash":"f4c7536048dc91fde9c577c4fccfed768922eba8","verifierVersion":"0.1.0+a2d9a899"},{"checks":[{"durationMs":1160,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.07s\nCompiler run successful!\n","passed":true},{"durationMs":8198,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119933, ~: 120107)\nLogs:\n  Bound result 71\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639864\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 138441, ~: 138693)\nLogs:\n  Bound result 12000000000000000000\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 180502, ~: 181996)\nLogs:\n  Bound result 4932\n  Bound result 2566\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106750)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 50.89ms (153.17ms CPU time)\n\nRan 15 tests for test/LaunchToken.adversarial.t.sol:LaunchTokenAdversarialTest\n[PASS] testFuzz_overAllowanceFailsDespiteSufficientBalance(uint256,uint256) (runs: 1000, μ: 184055, ~: 185103)\nLogs:\n  Bound result 208958577550889844236367653\n  Bound result 208958577550889844236367652\n\n[PASS] testFuzz_overBalanceRollsBackFiniteAllowance(uint256,uint256,uint256) (runs: 1000, μ: 199402, ~: 199835)\nLogs:\n  Bound result 30\n  Bound result 256\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n\n[PASS] testFuzz_roundTripThroughIndependentSpendersIsLossless(uint256) (runs: 1000, μ: 331383, ~: 330984)\nLogs:\n  Bound result 661\n\n[PASS] testFuzz_spentAllowanceCannotBeReplayedAfterTokensReturn(uint256) (runs: 1000, μ: 208275, ~: 207865)\nLogs:\n  Bound result 1139\n\n[PASS] test_approvalBelongsToCallerNotTransactionOrigin() (gas: 129814)\n[PASS] test_delegatedSelfTransferConsumesFiniteAllowanceAndCannotReplay() (gas: 152427)\n[PASS] test_failedZeroRecipientSpendLeavesAllowanceUsable() (gas: 203583)\n[PASS] test_maximumFiniteAllowanceDecrementsAndUnlimitedCanBeRevoked() (gas: 327422)\n[PASS] test_maximumTransferCannotWrapBalancesEvenWithUnlimitedApproval() (gas: 149365)\n[PASS] test_selfTransfersCannotBypassBalanceChecks() (gas: 142139)\n[PASS] test_transactionOriginCannotAuthorizeAnotherSpender() (gas: 119711)\n[PASS] test_valueAttachedToValidERC20CallsIsRejectedAtomically() (gas: 302220)\n[PASS] test_zeroOneAndFullSupplyRoundTripsPreserveUnrelatedApproval() (gas: 625255)\n[PASS] test_zeroSpenderCannotBeApprovedEvenForZeroValue() (gas: 48080)\n[PASS] test_zeroTransferFromWithoutApprovalEmitsTransfer() (gas: 80190)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 51.00ms (197.43ms CPU time)\n\nRan 2 tests for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------+-------------------------+-------+---------+----------╮\n| Contract     | Selector                | Calls | Reverts | Discards |\n+=====================================================================+\n| TokenActions | approve                 | 3512  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | approveBoundary         | 3598  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | fullBalanceRoundTrip    | 3710  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | revokeAndAttemptSpend   | 3601  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transfer                | 3617  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFrom            | 3668  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFromOverBalance | 3783  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFromToZero      | 3517  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferOverBalance     | 3762  | 0       | 0        |\n╰--------------+-------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 100\n  Bound result 0\n  Bound result 60000114832862529055996055120207780853450577259095197276798698\n  Bound result 0\n  Bound result 0\n  Bound result 9\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039497584007913129639935\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129640447\n  Bound result 400\n  Bound result 0\n  Bound result 7\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000000000000000000004\n  Bound result 463\n  Bound result 16\n  Bound result 12\n  Bound result 0\n  Bound result 6029\n  Bound result 0\n  Bound result 0\n  Bound result 157198260\n  Bound result 100000000000000000000000000\n  Bound result 558\n  Bound result 0\n  Bound result 8615572719914619606198275083528179584014663592599481224680632821498448\n  Bound result 0\n  Bound result 0\n  Bound result 7715\n  Bound result 136565094620891653437163661007\n  Bound result 9770\n  Bound result 0\n  Bound result 13928221595638843195054955163588544934567717075821675486856890667\n  Bound result 100\n  Bound result 6414\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129646125\n  Bound result 507\n  Bound result 1\n  Bound result 100\n  Bound result 18\n  Bound result 13\n  Bound result 10085\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129654364\n  Bound result 1289\n  Bound result 10931\n  Bound result 115792089237316195423570985008687907853269984665639564039517584007913129644475\n  Bound result 5398\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129644487\n  Bound result 7\n  Bound result 19\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129644717\n  Bound result 0\n  Bound result 1549\n\n[PASS] test_handlerSequenceExercisesFiniteInfiniteAndRevokedAllowances() (gas: 2392141)\nLogs:\n  Bound result 100\n  Bound result 30\n  Bound result 71\n  Bound result 10\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 8.13s (8.13s CPU time)\n\nRan 3 test suites in 8.14s (8.24s CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":30,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":10,\"DEPENDENCIES.md\":29,\"README.md\":54,\"artifacts/LaunchToken.abi.json\":315,\"artifacts/LaunchToken.creation.hex\":1,\"artifacts/LaunchToken.metadata.json\":431,\"artifacts/LaunchToken.runtime.hex\":1,\"artifacts/build.json\":37,\"artifacts/deployment-status.json\":90,\"artifacts/solc-input.json\":49,\"artifacts/validation/README.md\":9,\"artifacts/validation/checks.json\":49,\"artifacts/validation/clean-delivery.json\":52,\"artifacts/validation/clean-export-artifacts-check.log\":1,\"artifacts/validation/clean-offline-build.log\":3,\"artifacts/validation/delivery-checks.log\":15,\"artifacts/validation/export-artifacts-check.log\":1,\"artifacts/validation/forge-build.log\":1,\"artifacts/validation/forge-fmt-check.log\":0,\"artifacts/validation/forge-test.log\":44,\"artifacts/validation/invariant-finding-reproduction.log\":22,\"artifacts/validation/missing-artifacts-before-fix.log\":1,\"artifacts/validation/reproduction.json\":36,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":73,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.adversarial.t.sol\":267,\"test/LaunchToken.invariant.t.sol\":217,\"test/LaunchToken.t.sol\":294,\"test/README.md\":48},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"4bfc3c08c5903e1c67a2deaf9716529ee6676149eba89549a87c6915ac6e7615","verifiedTreeHash":"31642183bc0f3daa4f4bc618e0d1c9ce34cdea22","verifierVersion":"0.1.0+e892633c"},{"checks":[{"durationMs":921,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 837.95ms\nCompiler run successful!\n","passed":true},{"durationMs":2389,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119618, ~: 120021)\nLogs:\n  Bound result 14395346246\n  Bound result 4697978635010125438234234386554167674238422680804065053174864470147220\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 137894, ~: 138693)\nLogs:\n  Bound result 125901638676927904841308\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 179498, ~: 181972)\nLogs:\n  Bound result 283444315120037147873678724\n  Bound result 131842668585023021757154094\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106413)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 12.68ms (41.36ms CPU time)\n\nRan 1 test for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenActions | approve      | 2807  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transfer     | 2666  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transferFrom | 2719  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1391\n  Bound result 0\n  Bound result 0\n  Bound result 141398136597717008454049130\n  Bound result 0\n  Bound result 1916\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2327\n  Bound result 4097\n  Bound result 947132576713608\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 508\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 1\n  Bound result 3650\n  Bound result 0\n  Bound result 6059\n  Bound result 0\n  Bound result 10\n  Bound result 501720225285832\n  Bound result 4\n  Bound result 0\n  Bound result 858601863402282991545952185\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 95971088738908517270392\n  Bound result 3714247998\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4039\n  Bound result 7\n  Bound result 156\n  Bound result 155\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.33s (2.33s CPU time)\n\nRan 2 test suites in 2.33s (2.34s CPU time): 20 tests passed, 0 failed, 0 skipped (20 total tests)\n","passed":true},{"durationMs":30,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":10,\"DEPENDENCIES.md\":29,\"README.md\":54,\"artifacts/LaunchToken.abi.json\":315,\"artifacts/LaunchToken.creation.hex\":1,\"artifacts/LaunchToken.metadata.json\":431,\"artifacts/LaunchToken.runtime.hex\":1,\"artifacts/build.json\":37,\"artifacts/deployment-status.json\":90,\"artifacts/solc-input.json\":49,\"artifacts/validation/README.md\":9,\"artifacts/validation/checks.json\":49,\"artifacts/validation/clean-delivery.json\":52,\"artifacts/validation/clean-export-artifacts-check.log\":1,\"artifacts/validation/clean-offline-build.log\":3,\"artifacts/validation/delivery-checks.log\":15,\"artifacts/validation/export-artifacts-check.log\":1,\"artifacts/validation/forge-build.log\":1,\"artifacts/validation/forge-fmt-check.log\":0,\"artifacts/validation/forge-test.log\":44,\"artifacts/validation/invariant-finding-reproduction.log\":22,\"artifacts/validation/missing-artifacts-before-fix.log\":1,\"artifacts/validation/reproduction.json\":36,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":73,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.invariant.t.sol\":92,\"test/LaunchToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"831af932d2b59e7380bdbfb57320f07ec48bc4cd0ad64622d0a1b6898434f087","verifiedTreeHash":"0adf0f8dd8586c03f072d4e7fea6939d3919234d","verifierVersion":"0.1.0+e892633c"},{"checks":[{"durationMs":1189,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.10s\nCompiler run successful!\n","passed":true},{"durationMs":8178,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119851, ~: 120003)\nLogs:\n  Bound result 397478908973692677012885162\n  Bound result 115792089237316195423570985008687907853269984665640166560548610315236116754770\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 138726, ~: 138693)\nLogs:\n  Bound result 19344\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 180032, ~: 181972)\nLogs:\n  Bound result 17\n  Bound result 3\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106413)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 51.53ms (126.56ms CPU time)\n\nRan 15 tests for test/LaunchToken.adversarial.t.sol:LaunchTokenAdversarialTest\n[PASS] testFuzz_overAllowanceFailsDespiteSufficientBalance(uint256,uint256) (runs: 1000, μ: 183731, ~: 185059)\nLogs:\n  Bound result 11\n  Bound result 8\n\n[PASS] testFuzz_overBalanceRollsBackFiniteAllowance(uint256,uint256,uint256) (runs: 1000, μ: 199619, ~: 199802)\nLogs:\n  Bound result 60815749091865900020985\n  Bound result 115792089237316195423570985008687907853269984665640563978641870894495851186096\n  Bound result 115792089237316195423570985008687907853269984665640564037014423412383812896335\n\n[PASS] testFuzz_roundTripThroughIndependentSpendersIsLossless(uint256) (runs: 1000, μ: 331465, ~: 330984)\nLogs:\n  Bound result 12000000000000000000\n\n[PASS] testFuzz_spentAllowanceCannotBeReplayedAfterTokensReturn(uint256) (runs: 1000, μ: 208367, ~: 207905)\nLogs:\n  Bound result 348580879071719301970072695\n\n[PASS] test_approvalBelongsToCallerNotTransactionOrigin() (gas: 129814)\n[PASS] test_delegatedSelfTransferConsumesFiniteAllowanceAndCannotReplay() (gas: 152427)\n[PASS] test_failedZeroRecipientSpendLeavesAllowanceUsable() (gas: 203583)\n[PASS] test_maximumFiniteAllowanceDecrementsAndUnlimitedCanBeRevoked() (gas: 327422)\n[PASS] test_maximumTransferCannotWrapBalancesEvenWithUnlimitedApproval() (gas: 149365)\n[PASS] test_selfTransfersCannotBypassBalanceChecks() (gas: 142139)\n[PASS] test_transactionOriginCannotAuthorizeAnotherSpender() (gas: 119711)\n[PASS] test_valueAttachedToValidERC20CallsIsRejectedAtomically() (gas: 302220)\n[PASS] test_zeroOneAndFullSupplyRoundTripsPreserveUnrelatedApproval() (gas: 625255)\n[PASS] test_zeroSpenderCannotBeApprovedEvenForZeroValue() (gas: 48080)\n[PASS] test_zeroTransferFromWithoutApprovalEmitsTransfer() (gas: 80190)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 51.60ms (202.21ms CPU time)\n\nRan 2 tests for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------+-------------------------+-------+---------+----------╮\n| Contract     | Selector                | Calls | Reverts | Discards |\n+=====================================================================+\n| TokenActions | approve                 | 3641  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | approveBoundary         | 3561  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | fullBalanceRoundTrip    | 3525  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | revokeAndAttemptSpend   | 3654  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transfer                | 3736  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFrom            | 3785  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFromOverBalance | 3551  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFromToZero      | 3726  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferOverBalance     | 3589  | 0       | 0        |\n╰--------------+-------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 8\n  Bound result 826074470\n  Bound result 0\n  Bound result 8139\n  Bound result 511065491835243346802241399\n  Bound result 1719639407\n  Bound result 0\n  Bound result 9857\n  Bound result 0\n  Bound result 999999999999999999173925531\n  Bound result 0\n  Bound result 24576\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913955714805\n  Bound result 2686473914663908717985422649040286455218613\n  Bound result 0\n  Bound result 60\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 28830780649953415783847693932196760930424\n  Bound result 826074468\n  Bound result 5140188991855308653467622172\n  Bound result 0\n  Bound result 1000\n  Bound result 9075\n  Bound result 3810\n  Bound result 0\n  Bound result 6337\n  Bound result 0\n  Bound result 19\n  Bound result 0\n  Bound result 0\n  Bound result 8924\n  Bound result 5000000000000000000\n  Bound result 4617\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913955707923\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913955710580\n  Bound result 0\n  Bound result 7277149997999382220607476065538854051024319\n  Bound result 79\n  Bound result 24\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913955711047\n  Bound result 0\n  Bound result 162\n  Bound result 70\n  Bound result 45145194130867598759981903856085427292693499385814655\n  Bound result 1000000000\n  Bound result 880601527143529206540539710618\n  Bound result 1000000000000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639052\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129638964\n  Bound result 544\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913955712309\n  Bound result 492883265984996245743171855265287427110631951\n  Bound result 14\n  Bound result 8907\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129638968\n  Bound result 5049\n  Bound result 512\n  Bound result 986\n  Bound result 32097\n  Bound result 622239144421565222072268392\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007912303582415\n  Bound result 0\n  Bound result 2827\n  Bound result 95\n  Bound result 512\n  Bound result 64\n  Bound result 750\n  Bound result 0\n\n[PASS] test_handlerSequenceExercisesFiniteInfiniteAndRevokedAllowances() (gas: 2392141)\nLogs:\n  Bound result 100\n  Bound result 30\n  Bound result 71\n  Bound result 10\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 8.11s (8.11s CPU time)\n\nRan 3 test suites in 8.11s (8.22s CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":36,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":19,\"README.md\":54,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":90,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.adversarial.t.sol\":267,\"test/LaunchToken.invariant.t.sol\":217,\"test/LaunchToken.t.sol\":294,\"test/README.md\":46},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c05663de0527051b8e74fdf432885d07f81cdcfab78f45f316c6af0799b255ae","verifiedTreeHash":"be4278fc8fd9c20fdc38dba44b259d21b8f7d36a","verifierVersion":"0.1.0+a2d9a899"},{"checks":[{"durationMs":916,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 831.24ms\nCompiler run successful!\n","passed":true},{"durationMs":2402,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119940, ~: 120129)\nLogs:\n  Bound result 641080762268914783201030199\n  Bound result 1621415619480090765608543\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 138286, ~: 138705)\nLogs:\n  Bound result 880850448704026706748644356\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 180366, ~: 181974)\nLogs:\n  Bound result 641080762268914783201030199\n  Bound result 1621415619480090765608543\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106413)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 16.76ms (46.68ms CPU time)\n\nRan 1 test for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenActions | approve      | 2742  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transfer     | 2813  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenActions | transferFrom | 2637  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 145\n  Bound result 17\n  Bound result 0\n  Bound result 140188991855308653467622892\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5\n  Bound result 0\n  Bound result 10000\n  Bound result 0\n  Bound result 0\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 10000\n  Bound result 447\n  Bound result 4703\n  Bound result 2949433663976752344\n  Bound result 0\n  Bound result 100000000000000000000\n  Bound result 50566336023252364\n  Bound result 31013470097379305276812807\n  Bound result 8600\n  Bound result 6\n  Bound result 1\n  Bound result 48524722290803971531300069\n  Bound result 4935\n  Bound result 140188991855308653467623036\n  Bound result 5384\n  Bound result 87\n  Bound result 0\n  Bound result 0\n  Bound result 4605\n  Bound result 15\n  Bound result 8\n  Bound result 0\n  Bound result 6430\n  Bound result 12359849242091524324973654\n  Bound result 88\n  Bound result 0\n  Bound result 9\n  Bound result 1304\n  Bound result 4099\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.34s (2.34s CPU time)\n\nRan 2 test suites in 2.34s (2.35s CPU time): 20 tests passed, 0 failed, 0 skipped (20 total tests)\n","passed":true},{"durationMs":26,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":19,\"README.md\":54,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":90,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.invariant.t.sol\":92,\"test/LaunchToken.t.sol\":294},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":383,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":210,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/LaunchToken.sol:11: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c6f2f4bdfc829c1072e5319bd8d51f8016ed8390219a11e15f993d9257e01199","verifiedTreeHash":"dd866296f02814ac1732737c3c2739751330269c","verifierVersion":"0.1.0+a2d9a899"},{"checks":[{"durationMs":1203,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.12s\nCompiler run successful!\n","passed":true},{"durationMs":8490,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_overspendingRevertsWithoutStateChange(uint256,uint256) (runs: 512, μ: 119990, ~: 120057)\nLogs:\n  Bound result 7\n  Bound result 160\n\n[PASS] testFuzz_transferFromExactAllowance(uint256) (runs: 512, μ: 138108, ~: 138693)\nLogs:\n  Bound result 26\n\n[PASS] testFuzz_transfersConserveSupply(uint256,uint256) (runs: 512, μ: 180835, ~: 181972)\nLogs:\n  Bound result 9706\n  Bound result 7623\n\n[PASS] test_approveReplaceRevokeAndSpend() (gas: 236274)\n[PASS] test_constructorEmitsOneMint() (gas: 9127)\n[PASS] test_contractRecipientsReceiveWithoutCallbacksOrSupplyReduction() (gas: 238186)\n[PASS] test_create2ConstructorMintsToFactoryAndPlainTransfersSupportAllocation() (gas: 395695)\n[PASS] test_infiniteAllowanceRetainsStandardERC20Semantics() (gas: 126622)\n[PASS] test_insufficientBalanceRevertsAtomically() (gas: 50599)\n[PASS] test_metadataAndEntireSupplyBelongToConstructorCaller() (gas: 84336)\n[PASS] test_noPrivilegedOrExtensionSelectorsForDeployerIssuerOrStranger() (gas: 1490203)\n[PASS] test_rejectsETHAndUnknownCalls() (gas: 58861)\n[PASS] test_runtimeBoundedAndNoEscapeOpcodes() (gas: 780614)\n[PASS] test_transferEmitsExactAmountWithoutTax() (gas: 99296)\n[PASS] test_transferFromFailureRollsBackAllowance() (gas: 192192)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_unapprovedSpenderCannotTransfer() (gas: 51083)\n[PASS] test_zeroAddressApprovalsAndTransferSourceRevert() (gas: 106750)\n[PASS] test_zeroAndSelfTransfers() (gas: 131978)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 49.77ms (114.82ms CPU time)\n\nRan 15 tests for test/LaunchToken.adversarial.t.sol:LaunchTokenAdversarialTest\n[PASS] testFuzz_overAllowanceFailsDespiteSufficientBalance(uint256,uint256) (runs: 1000, μ: 183895, ~: 185059)\nLogs:\n  Bound result 24623\n  Bound result 0\n\n[PASS] testFuzz_overBalanceRollsBackFiniteAllowance(uint256,uint256,uint256) (runs: 1000, μ: 199544, ~: 199998)\nLogs:\n  Bound result 925895834523692435257531923\n  Bound result 115792089237316195423570985008687907853269984665639638143623060315479056034334\n  Bound result 115792089237316195423570985008687907853269984665639858327848141460696707882673\n\n[PASS] testFuzz_roundTripThroughIndependentSpendersIsLossless(uint256) (runs: 1000, μ: 331406, ~: 331041)\nLogs:\n  Bound result 620\n\n[PASS] testFuzz_spentAllowanceCannotBeReplayedAfterTokensReturn(uint256) (runs: 1000, μ: 208300, ~: 207913)\nLogs:\n  Bound result 929843198314560287111058215\n\n[PASS] test_approvalBelongsToCallerNotTransactionOrigin() (gas: 129814)\n[PASS] test_delegatedSelfTransferConsumesFiniteAllowanceAndCannotReplay() (gas: 152427)\n[PASS] test_failedZeroRecipientSpendLeavesAllowanceUsable() (gas: 203583)\n[PASS] test_maximumFiniteAllowanceDecrementsAndUnlimitedCanBeRevoked() (gas: 327422)\n[PASS] test_maximumTransferCannotWrapBalancesEvenWithUnlimitedApproval() (gas: 149365)\n[PASS] test_selfTransfersCannotBypassBalanceChecks() (gas: 142139)\n[PASS] test_transactionOriginCannotAuthorizeAnotherSpender() (gas: 119711)\n[PASS] test_valueAttachedToValidERC20CallsIsRejectedAtomically() (gas: 302220)\n[PASS] test_zeroOneAndFullSupplyRoundTripsPreserveUnrelatedApproval() (gas: 625255)\n[PASS] test_zeroSpenderCannotBeApprovedEvenForZeroValue() (gas: 48080)\n[PASS] test_zeroTransferFromWithoutApprovalEmitsTransfer() (gas: 80190)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 49.84ms (194.75ms CPU time)\n\nRan 2 tests for test/LaunchToken.invariant.t.sol:LaunchTokenInvariantTest\n[PASS]\nLaunchTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchExplicitAuthorizations\n[PASS] invariant_fixedSupplyAndExactBalances\n LaunchTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------+-------------------------+-------+---------+----------╮\n| Contract     | Selector                | Calls | Reverts | Discards |\n+=====================================================================+\n| TokenActions | approve                 | 3539  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | approveBoundary         | 3576  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | fullBalanceRoundTrip    | 3772  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | revokeAndAttemptSpend   | 3678  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transfer                | 3650  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFrom            | 3598  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFromOverBalance | 3628  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferFromToZero      | 3629  | 0       | 0        |\n|--------------+-------------------------+-------+---------+----------|\n| TokenActions | transferOverBalance     | 3698  | 0       | 0        |\n╰--------------+-------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129640005\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913893239986\n  Bound result 0\n  Bound result 512\n  Bound result 31\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007914129639935\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129640035\n  Bound result 0\n  Bound result 29782744981039686812225978103357044\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129641790\n  Bound result 533\n  Bound result 115792089237316195423570985008687907853269984665639564039462584007913129639935\n  Bound result 3686\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007915417044445\n  Bound result 6134\n  Bound result 0\n  Bound result 55497617369527513280575900\n  Bound result 115792089237316195423570985008687907853269984665640508541841621150149164114884\n  Bound result 115792089237316195423570985008687907853269984665639619537074953535426410225672\n  Bound result 216055728963415961156080468699711915\n  Bound result 1236\n  Bound result 123000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640508541840214480399849062899\n  Bound result 115792089237316195423570985008687907853269984665639619537074953535426410640509\n  Bound result 115792089237316195423570985008687907853269984665640508541840214480399849062807\n  Bound result 6575\n  Bound result 115792089237316195423570985008687907853269984665640508541840214480399849063043\n  Bound result 304161716208888508058482788432584688\n  Bound result 0\n  Bound result 0\n  Bound result 216221050533055336105857746423442652\n  Bound result 312\n  Bound result 3632\n  Bound result 0\n  Bound result 12\n  Bound result 6047\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640508541840214480399849057073\n  Bound result 0\n  Bound result 7277\n  Bound result 115792089237316195423570985008687907853269984665639619537074953535426410225669\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129630678\n  Bound result 28\n  Bound result 0\n  Bound result 3\n  Bound result 16148873349780150554\n  Bound result 0\n  Bound result 100000000000000000000000000\n  Bound result 5667\n  Bound result 7000000000000000000\n  Bound result 17\n  Bound result 0\n  Bound result 7696\n  Bound result 115792089237316195423570985008687907853269984665640508541847214480399849064017\n  Bound result 7950\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129640005\n  Bound result 181\n  Bound result 0\n  Bound result 87\n  Bound result 2088\n  Bound result 321\n  Bound result 659918\n  Bound result 0\n  Bound result 1000\n  Bound result 0\n\n[PASS] test_handlerSequenceExercisesFiniteInfiniteAndRevokedAllowances() (gas: 2392141)\nLogs:\n  Bound result 100\n  Bound result 30\n  Bound result 71\n  Bound result 10\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 8.42s (8.42s CPU time)\n\nRan 3 test suites in 8.43s (8.52s CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":32,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":29,\"README.md\":54,\"assets/emvo-64.771f691c33.png\":8,\"docs/LAUNCH.md\":88,\"docs/REVIEW.md\":24,\"docs/TOKEN.md\":37,\"foundry.toml\":23,\"launch.json\":17,\"launch/request.json\":19,\"remappings.txt\":2,\"scripts/export_artifacts.py\":109,\"src/LaunchToken.sol\":13,\"test/LaunchToken.adversarial.t.sol\":267,\"test/LaunchToken.invariant.t.sol\":217,\"test/LaunchToken.t.sol\":294,\"test/README.md\":46},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"cf33da869fdc018f500f3f7389b8b385df9a662bb13afc3941adb8b755ff74d9","verifiedTreeHash":"bc46a62adcc2c2b02a7e9b639d1e20e8505b70a5","verifierVersion":"0.1.0+a2d9a899"}]}