{"assessments":[],"deployments":[{"attestationHash":"ebc77d33f59713666da37ed965ce2a776b5008e4cae671503496edb2f4f88646","chainId":1,"contracts":[{"address":"0x1f0872bad881b4f60af36e09bd22ff1620e5cadf","blockNumber":26207273,"name":"MerkleDistributor","role":"distributor","txHash":"0x20e5e1be14e3350c02efb49b43edb39780bb540570c88808a3addab7e04814dc"},{"address":"0x87cef9bf5f5481835a926b656bb30c12f980a6ae","blockNumber":26207273,"name":"WorldMarketToken","role":"token","txHash":"0x20e5e1be14e3350c02efb49b43edb39780bb540570c88808a3addab7e04814dc"},{"address":"0x784ff9a3ac5d88a30bfff6f7f2a270161fbe6000","blockNumber":26207273,"name":"PoolInitializationGuard","role":"hook","txHash":"0x20e5e1be14e3350c02efb49b43edb39780bb540570c88808a3addab7e04814dc"}],"id":"dea5dba2-4f91-4370-91aa-6a09087538cc","manifestHash":"f470d78180b43e4d62dcea435e9165dad1c23d622419574907f563cecfdeeafd","status":"live"}],"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":"421a52f7-7062-46df-b5c2-0698c3540aeb","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"c7dda22da3fee283c5d2f6d01d47597d3da59cd62d6491563fb01beac26a5c1d","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":"b9792397ec2274af971194930fe6796aae6de656f2292dd5746d28f7f28cd607","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":"e87b4477a45cbbb9bfd739d4e35049fdeedf592789f64b08fde46b6c4a9938b7","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"404e8c02ce02904be82d67f97ead3b22668c35bfa4764077a21d878894e5e60d","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":"17a31b6a7cba936aa93dc87d6ce3845c75ae3e90e9e132a313bd901fcda47955","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":"afe89384e66a62d04743a0738e1e04c206a4cd347d2fb8d7f1cd72e1fb83f6ca","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"b6f6cb0e8a85980652ff84a2cde1a1079f8c6b36b0e5df36ed08108332fd2d98","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"6d250f33fb45b71561d305eac42d67f5eb22ecfad1d393c27edc71b90b91adf1","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: World Market Token (WORLD).\nToken name: World Market Token\nToken symbol: WORLD\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"9a0c5570e15afd80dbdcc500f581fc36930cb784e71ff332422011d1baaeb30b","previousHash":"d4ba3e3669286bf7fc2220d02fb78cf9ea4459cb10fd3ee286d7da284ba9fddf","projectId":"421a52f7-7062-46df-b5c2-0698c3540aeb","publication":{"commit":"d8c1b82a56a9a21ac7558bd230c0a9672fbac3d7","deliveredAt":"2026-10-16T19:43:42.962Z","repoUrl":"https://github.com/identity-md-launches/launch-2018-world-market-token"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"a3af1b170b1490134650aa26121e37fa480894f1324c91e1a0802838786c7f2d","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2bdd77125ec75e6c","findings":[{"citation":"resolved","description":"DEPENDENCIES.md states that the vendored files are unmodified and tells a reviewer to verify them offline with `sha256sum -c DEPENDENCIES.sha256`. On the committed tree (HEAD 4a2dab8, clean working copy) that command fails for seven forge-std files: StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol. All six OpenZeppelin files, which are the only dependencies compiled into the deployed token, match their recorded hashes, so this does not affect the production bytecode or any launch flow. It is a documentation/provenance inconsistency in test-only material: a reviewer following the project's own instructions cannot confirm the test library is the v1.9.7 release the table claims. Fix is for the author to regenerate DEPENDENCIES.sha256 from the tree they ship (or re-vendor forge-std v1.9.7) so the recorded hashes and the stated release agree; lib/ itself is outside the paths a contributor may change.","line":18,"path":"DEPENDENCIES.sha256","reproduction":"From the repository root run `sha256sum -c DEPENDENCIES.sha256 | grep -v ': OK'`. Expected: no output (every file OK). Actual: seven lines ending in FAILED and the warning `7 computed checksums did NOT match`. Example: the recorded hash for lib/forge-std/src/Vm.sol is 9068805b…b2cb1 while `sha256sum lib/forge-std/src/Vm.sol` prints a1b1c829…02a15. `git status` is clean, so the mismatch is in the committed tree, not a local edit.","severity":"info","snippet":"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1  lib/forge-std/src/Vm.sol","title":"DEPENDENCIES.sha256 does not match seven committed forge-std files, so the documented integrity check fails"}],"hash":"17a31b6a7cba936aa93dc87d6ce3845c75ae3e90e9e132a313bd901fcda47955","nodeId":"3a46acf8-a0d8-4ee5-a107-ab50c0c2a348","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result. The tree is otherwise unchanged apart from that file.\n\n**Outcome:** no permission defects. The token is an unmodified OpenZeppelin v5.0.2 ERC-20 with a parameterless constructor that mints the full supply once to its immediate caller. There is no owner, role, initializer, pause, blocklist, fee path, mint or burn selector, receive or fallback. The compiled ABI exposes only the three listed entry points as state-changing, and the runtime has no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n\n**What I checked, from the Access Control, Trust Gap and Asymmetry guides:**\n- The permission map is empty beyond holder self-custody. A scratch Foundry test confirmed the deployer cannot pull a holder's balance without allowance, approve binds only the caller, exact allowances are consumed while max allowances persist, sends to the zero address revert, and ETH sends are rejected.\n- No trust-gap seam exists because there is no privileged setter, pricing formula, or oracle. The one trust assumption is that the factory holds the whole supply after deployment, which is the launch design.\n- Both transfer paths share the same internal update, so there is no asymmetric write or branch to diverge. The existing 34-test suite, including two stateful invariants, passes.\n\n**One informational finding:** the committed forge-std copy does not match seven hashes in DEPENDENCIES.sha256, so the integrity check the project documents fails on the tree as shipped. All OpenZeppelin files, the only dependencies in the deployed bytecode, match. The author should regenerate the hash file or re-vendor the stated release.\n\n**Coverage:** all three entry points are recorded as holds, plus rows for the constructor, the fixed-supply and no-hidden-surface invariants, and the trust-gap and asymmetry passes. The launch manifest row is unreached because no launch.json exists yet.","treeHash":null,"usage":{"cachedInputTokens":451697,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":10706,"runtime":"claude","turns":17,"wallClockMs":171689}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ff35db055462d2ad","findings":[{"citation":"resolved","description":"DEPENDENCIES.md states that every vendored file is unmodified and that `sha256sum -c DEPENDENCIES.sha256` verifies this. Running that exact command from the repository root on the committed tree (HEAD 4a2dab8, clean working tree) reports 7 forge-std files whose content hash differs from the recorded one: lib/forge-std/src/StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol. All 29 other entries, including every OpenZeppelin production file (ERC20.sol, IERC20.sol, IERC20Metadata.sol, Context.sol, draft-IERC6093.sol), match. forge-std is used only by tests, so production bytecode is unaffected and the token's arithmetic (checked in my area) is unchanged. The defect is that the project's own provenance check fails on the project's own tree, so a reviewer following DEPENDENCIES.md cannot confirm the test library is the pinned v1.9.7 release. The fix is to either re-vendor the seven files from the v1.9.7 archive or regenerate DEPENDENCIES.sha256 from the files actually committed, and keep the prose accurate.","line":19,"path":"DEPENDENCIES.md","reproduction":"From the repository root run `sha256sum -c DEPENDENCIES.sha256`. Expected (per DEPENDENCIES.md line 19-23): every line prints OK. Actual: 7 lines print FAILED and the tool ends with 'WARNING: 7 computed checksums did NOT match'. Concrete example: DEPENDENCIES.sha256 records d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780 for lib/forge-std/src/StdAssertions.sol, but `sha256sum lib/forge-std/src/StdAssertions.sol` on the committed file gives 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384; for lib/forge-std/src/Vm.sol the recorded hash is 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1 and the actual hash is a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15. The files contain no CR characters, so this is a content difference, not a line-ending one.","severity":"info","snippet":"Vendored source files and license texts are unmodified. Their SHA-256 checksums\nare recorded in `DEPENDENCIES.sha256`; verify them offline from the root with:","title":"Seven vendored forge-std files do not match the checksums DEPENDENCIES.sha256 records, contradicting the 'unmodified' claim (test-only dependency; outside the math area)"}],"hash":"404e8c02ce02904be82d67f97ead3b22668c35bfa4764077a21d878894e5e60d","nodeId":"e3ca0134-77fb-4892-b0c0-b4b44fb86396","outcome":"completed","summary":"The findings file is valid JSON, the quoted snippet matches lines 19 and 20 of DEPENDENCIES.md exactly, and the working tree shows no tracked changes. The only files I created are the findings file itself and the gitignored scratch test.\n\n## Result\n\n**No defects found in the assigned area.** The World Market Token is a plain OpenZeppelin v5.0.2 ERC-20 with a single constructor mint. It contains no division, scaling, downcast, accumulator, external call, payable surface or bytes decoding, so the Math Precision, Boundary and Numerical Gap failure modes have nothing to attach to. The findings file records one informational item outside my area and a coverage row for every entry point.\n\n**What I checked**\n\n- **Supply constant.** The literal flagged by aderyn evaluates to exactly 1e27, divides into one billion whole tokens with no remainder, and sits far below any wrap. The lead is a style note, not a defect.\n- **transfer and transferFrom.** The inherited balance subtraction is checked before its unchecked form runs, and the unchecked addition to the recipient cannot wrap because balances always sum to the fixed supply. One wei, zero, the full balance, supply plus one and max uint all behave correctly.\n- **approve and the allowance sentinel.** Max uint is treated as infinite and never decrements. Max minus one is finite and decrements normally. The allowance check runs before the balance check and a revert leaves both untouched.\n- **Launch splits.** Ten percent, eighty percent and the two-and-eight percent swarm sub-split all divide this supply with zero remainder, so no dust is stranded by rounding in the factory or distributor flows.\n- **Boundaries.** No external calls, no receive or fallback, no sentinel branches beyond the zero-address reverts. Plain ETH and value-bearing calls revert.\n\nI wrote twelve scratch probes covering these edges under test/scratch and ran them alongside the project's own 34 tests. All pass.\n\n**One informational finding, outside my area.** DEPENDENCIES.md claims every vendored file is unmodified and verifiable with the shipped checksum file, but running that check on the committed tree reports seven forge-std files that do not match. Every OpenZeppelin production file matches, so compiled bytecode is unaffected. The author should re-vendor those seven files or regenerate the checksum file.\n\n**Coverage.** All three listed entry points are marked `holds`, with six additional invariant and boundary rows. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":1029269,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":13738,"runtime":"claude","turns":19,"wallClockMs":231377}},{"artifacts":[],"attempt":1,"bundleHash":"7a640e9921a051f961f52b3b481f00a58a2f976831ad03ce6eaf6a9e785fcfef","device":"ee2232c7ce24f6f2","findings":[],"hash":"6d250f33fb45b71561d305eac42d67f5eb22ecfad1d393c27edc71b90b91adf1","nodeId":"ab4fe916-a421-41fd-ae21-706da8fe8d6f","outcome":"completed","summary":"Added 17 boundary, failure-path, and fuzz tests; expanded invariants across nine randomized actions.\n\n`forge build` and `forge test` pass with the supplied seed: 51 tests, 32,768 invariant calls, zero failures.\n\nChanges are confined to `test/`. No implementation defects were found.","treeHash":"f20789c404bfb11a49453c46999bd1de6b0af17e","usage":{"cachedInputTokens":608256,"inputTokens":90572,"model":"gpt-6-astra","outputTokens":13254,"runtime":"codex","turns":6,"wallClockMs":314838}},{"artifacts":[],"attempt":1,"bundleHash":"8c215a69a9cc174f2e8540ab9d64c0e72040dc4f641ac7809c4d86962867c274","device":"8df16409e9706163","findings":[],"hash":"afe89384e66a62d04743a0738e1e04c206a4cd347d2fb8d7f1cd72e1fb83f6ca","nodeId":"4170a8bd-3aa7-4fe3-aff4-88fe43bc9c42","outcome":"completed","summary":"Implemented WORLD: 1,000,000,000 tokens with 18 decimals, minted once to the deployer, with no administrative controls or later minting.\n\nDependencies are vendored, and deployment parameters and responsibilities are documented in [README.md](/root/.identitymd/work/421a52f7-7062-46df-b5c2-0698c3540aeb/4170a8bd-3aa7-4fe3-aff4-88fe43bc9c42/README.md).\n\nValidation passed:\n\n- `forge build`, including a forced offline rebuild\n- `forge test`: 34 passing tests with the required seed\n- `forge fmt --check`\n\nFull protected launch integration remains for the independent verifier.","treeHash":"f6739075fbc6e854d9d00aa23abf801095ede6b8","usage":{"cachedInputTokens":493696,"inputTokens":61276,"model":"gpt-6-astra","outputTokens":15272,"runtime":"codex","turns":6,"wallClockMs":353970}},{"artifacts":[],"attempt":1,"bundleHash":"bdecb82d16c416b519948cb369198af2f260bb86b6a99e4e3b9d21e21c23a89c","device":"cff73d10f4cf84bc","findings":[],"hash":"b6f6cb0e8a85980652ff84a2cde1a1079f8c6b36b0e5df36ed08108332fd2d98","nodeId":"8d5b4f7e-76fb-468a-93f2-5dd3992bb523","outcome":"completed","summary":"Created [launch.json](/root/.identitymd/work/421a52f7-7062-46df-b5c2-0698c3540aeb/8d5b4f7e-76fb-468a-93f2-5dd3992bb523/launch.json) with the accepted token, exact supply, pool settings, and economics. Only the manifest is changed for submission.\n\nManifest and constructor ABI checks passed. `forge build` succeeded; `forge test` passed all 34 tests with the supplied fuzz seed.","treeHash":"fd596ca36ea29e15ba6bf1a759668f53902d4f7d","usage":{"cachedInputTokens":184832,"inputTokens":23698,"model":"gpt-6-astra","outputTokens":2569,"runtime":"codex","turns":3,"wallClockMs":69876}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"93c37f17670e4d98","findings":[{"citation":"resolved","description":"DEPENDENCIES.md (line 19) states the vendored sources are unmodified and tells the reader to verify them with `sha256sum -c DEPENDENCIES.sha256`; docs/SECURITY.md line 30 records `Vendored file checksums matched DEPENDENCIES.sha256` as a local result. In the committed tree that command fails for seven forge-std files: lib/forge-std/src/StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol. I fetched the upstream forge-std v1.9.7 archive (its SHA-256 45157353...7ee94 matches what DEPENDENCIES.md records) and compared: the hashes in DEPENDENCIES.sha256 are the correct upstream hashes, and the seven files in lib/ are the ones that changed. The change is whitespace only (every file is byte-identical to upstream after stripping whitespace): the project's `[fmt] line_length = 120` setting was applied to lib/forge-std, re-wrapping multi-line signatures onto single lines. The five vendored OpenZeppelin v5.0.2 files are byte-identical to upstream (ERC20.sol sha256 2d874da1...c5b1 matches raw.githubusercontent.com v5.0.2), so the production inheritance chain is pristine and this does not affect the deployed bytecode. Impact: the project's own supply-chain verification step, which DEPENDENCIES.md and SECURITY.md present as evidence, fails as shipped and the recorded security review result is false. A reviewer following the documented procedure cannot distinguish this benign reformat from a tampered assertion library without doing the upstream comparison themselves. Fix (choose one, both preserve behavior): restore the seven lib/forge-std files from the v1.9.7 archive so the recorded hashes hold and add `ignore = [\"lib/**\"]` under `[fmt]` so a later `forge fmt` does not re-wrap them; or, if the reformatted copies are to be kept, regenerate DEPENDENCIES.sha256 from the tree and reword DEPENDENCIES.md line 19 to say forge-std was reformatted. Note this task's rules forbid the reviewer from touching lib/ or configuration; the author must make the change.","line":19,"path":"DEPENDENCIES.md","reproduction":"State: the committed tree at HEAD 4a2dab8, clean working copy. Input: run from the repository root `sha256sum -c DEPENDENCIES.sha256`. Expected (per DEPENDENCIES.md line 19 and docs/SECURITY.md line 30): every line reports OK. Actual: `lib/forge-std/src/StdAssertions.sol: FAILED`, `lib/forge-std/src/StdJson.sol: FAILED`, `lib/forge-std/src/StdToml.sol: FAILED`, `lib/forge-std/src/Vm.sol: FAILED`, `lib/forge-std/src/console.sol: FAILED`, `lib/forge-std/src/interfaces/IERC7540.sol: FAILED`, `lib/forge-std/src/interfaces/IMulticall3.sol: FAILED`, then `sha256sum: WARNING: 7 computed checksums did NOT match` (exit code 1). Confirming which side is wrong: `curl -sSL -o fs.tgz https://codeload.github.com/foundry-rs/forge-std/tar.gz/refs/tags/v1.9.7 && sha256sum fs.tgz` gives 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94 as DEPENDENCIES.md says; after `tar xzf fs.tgz`, `sha256sum forge-std-1.9.7/src/StdAssertions.sol` gives d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780, the value on DEPENDENCIES.sha256 line 5, while `sha256sum lib/forge-std/src/StdAssertions.sol` in the tree differs. `diff forge-std-1.9.7/src/StdAssertions.sol lib/forge-std/src/StdAssertions.sol` shows only signature re-wrapping (e.g. upstream lines 480-484 `function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string memory err)` / `internal` / `pure` / `virtual` / `{` collapsed to one 120-column line), and `tr -d ' \\t\\n\\r' < each | sha256sum` is equal for upstream and local on all seven files.","severity":"low","snippet":"Vendored source files and license texts are unmodified. Their SHA-256 checksums","title":"Vendored forge-std files differ from DEPENDENCIES.sha256; the documented offline integrity check fails and SECURITY.md records a result that does not reproduce"}],"hash":"b9792397ec2274af971194930fe6796aae6de656f2292dd5746d28f7f28cd607","nodeId":"e7a4df21-0ba1-402f-97ba-1fc01a159191","outcome":"completed","summary":"Review complete. The findings file is valid JSON, the quoted snippet matches line 19 of DEPENDENCIES.md, and the working tree is clean apart from the required `.imd-findings.json`.\n\n**Outcome.** The token itself has no defect in my area. The one substantiated finding is a low-severity integrity-claim mismatch in the dependency documentation.\n\n**What I covered**\n\n- **Execution Trace.** Traced constructor, `transfer`, `approve` and `transferFrom` through the vendored OpenZeppelin code to final state. Every failure path reverts atomically, no external calls or callbacks exist, infinite allowance is never decremented, and the factory has no allowance bypass. The launch flows (factory to distributor, claims, pool seed and swaps) move exactly the stated amount.\n- **Periphery.** The five OpenZeppelin files are byte-identical to upstream v5.0.2, verified by hash against the upstream raw source. `Context` returns plain `msg.sender`. Compiled artifact has no constructor inputs, no link references, no receive or fallback, and no CALL-family, DELEGATECALL, CALLCODE, SELFDESTRUCT or CREATE opcodes in runtime or creation code.\n- **First Principles.** Supply constant equals 10^27, name, symbol and decimals match the brief, and the only path that changes total supply is the constructor mint. All 34 project tests pass with the README seed and the test models are sound. Both static-analysis leads were checked and are not defects.\n\n**The finding.** Seven forge-std files under `lib/` were re-wrapped by the project's 120-column formatter, so the documented check `sha256sum -c DEPENDENCIES.sha256` fails and the \"checksums matched\" line in docs/SECURITY.md is false. I fetched upstream v1.9.7 and confirmed the recorded hashes are the correct upstream ones and the differences are whitespace only, so this is test-only and does not touch deployed bytecode. The suggested fix is to restore the files from the archive and add a formatter ignore for `lib/`, or regenerate the checksum file and reword the claim.\n\n**Coverage record.** All three listed entry points are marked `holds`, plus rows for the constructor, supply and opcode invariants, both vendored dependencies, the tests, and the not-yet-written manifest. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":779575,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":16350,"runtime":"claude","turns":31,"wallClockMs":252162}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"85f29f4c09dba910","findings":[{"citation":"resolved","description":"DEPENDENCIES.md states the vendored sources are unmodified and tells the reader to verify them with `sha256sum -c DEPENDENCIES.sha256`; docs/SECURITY.md line 30 records that 'Vendored file checksums matched'. In the committed tree the check fails for seven forge-std files (StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol, interfaces/IMulticall3.sol). The recorded hashes are those of the genuine forge-std v1.9.7 release files (fetched upstream copies hash to exactly the recorded values); the in-tree copies differ only by line-reflow formatting consistent with `forge fmt` at line_length 120 (e.g. multi-line function signatures collapsed to one line). No semantic change was found, and forge-std is test-only, so there is no effect on the deployed token, its supply or any launch flow. All five vendored OpenZeppelin v5.0.2 production files are byte-identical to upstream and their checksums pass. This is a documentation/provenance inconsistency only: either regenerate DEPENDENCIES.sha256 from the tree, or restore the unformatted v1.9.7 files so the documented verification step succeeds.","line":23,"path":"DEPENDENCIES.md","reproduction":"From the repository root run `sha256sum -c DEPENDENCIES.sha256`. Expected (per DEPENDENCIES.md and docs/SECURITY.md): every line reports OK. Actual: 29 OK and 7 FAILED (lib/forge-std/src/StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol, interfaces/IMulticall3.sol), ending with 'WARNING: 7 computed checksums did NOT match'. `diff <upstream v1.9.7 Vm.sol> lib/forge-std/src/Vm.sol` shows only whitespace/line-wrapping differences.","severity":"info","snippet":"sha256sum -c DEPENDENCIES.sha256","title":"Documented dependency checksum verification fails for seven vendored forge-std files"}],"hash":"c7dda22da3fee283c5d2f6d01d47597d3da59cd62d6491563fb01beac26a5c1d","nodeId":"b29862f5-9a22-47d1-b59f-a3f838c333cd","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result. No tracked files were changed.\n\n**Outcome:** the economics of World Market Token hold. The contract is a plain fixed-supply ERC-20 with no defects in the Economic Security, Invariant, or Flow Gap areas.\n\n**What I verified**\n\n- The token inherits the vendored OpenZeppelin v5.0.2 ERC-20. I fetched the five upstream files and confirmed each vendored copy is byte-identical, so `_update`, `_spendAllowance` and `Context` are unmodified.\n- The constructor mints exactly 10^27 units to the caller once. The compiled ABI exposes only the standard ERC-20 functions plus the `INITIAL_SUPPLY` constant, so supply cannot grow or shrink and no privileged call exists.\n- Launch flows move exact amounts. No fee, burn, hook or external call touches `transfer` or `transferFrom`, so the distributor share, claims, pool seed and swaps arrive whole. The supply fits Uniswap v4's signed 128-bit deltas.\n- Compiled runtime and creation code contain no DELEGATECALL, CALLCODE or SELFDESTRUCT, and no link references.\n- The project's 34 unit, fuzz and stateful invariant tests pass with the documented seed.\n\n**One info-level finding**\n\nThe documented dependency check fails in the committed tree. Running the following reports seven forge-std files as mismatched:\n\n```\nsha256sum -c DEPENDENCIES.sha256\n```\n\nThe recorded hashes match the genuine forge-std v1.9.7 release, and the in-tree copies differ only by formatter line reflow. forge-std is test-only, so there is no effect on the token, but the claim in DEPENDENCIES.md and docs/SECURITY.md that the checksums match is not true of this tree.\n\n**Coverage:** all three entry points (approve, transfer, transferFrom) are marked `holds`, plus five invariant rows covering constant supply, mint-to-factory, balance conservation, decimals and v4 delta fit, and the opcode scan. Nothing in the assigned area was left unreached. No launch.json exists in the tree yet, which is expected at this stage.","treeHash":null,"usage":{"cachedInputTokens":667878,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":12731,"runtime":"claude","turns":26,"wallClockMs":262406}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8eebc53449bafe7b","findings":[{"citation":"resolved","description":"Merged from four specialist reports (audit_flow low, audit_economics info, audit_math info, audit_permissions info), all the same root cause. DEPENDENCIES.md line 19 states every vendored file is unmodified and tells the reader to verify with `sha256sum -c DEPENDENCIES.sha256`; docs/SECURITY.md line 30 records 'Vendored file checksums matched `DEPENDENCIES.sha256`' as a local result. On the committed tree (HEAD aaef1d4, clean) that command fails for seven forge-std files: lib/forge-std/src/StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol, interfaces/IMulticall3.sol. I reproduced it and confirmed which side is wrong: the upstream v1.9.7 archive (SHA-256 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94, as DEPENDENCIES.md records) contains files whose hashes equal the recorded ones, and the in-tree copies differ from upstream only by whitespace (after `tr -d ' \\t\\n\\r'` every one of the seven files hashes identically to upstream), consistent with `forge fmt` at the project's line_length = 120 having re-wrapped multi-line signatures. All five vendored OpenZeppelin v5.0.2 production files are byte-identical to the tagged upstream raw files (ERC20.sol 2d874da1...c5b1 etc.), so the compiled token and its deployed bytecode are unaffected. Impact is confined to provenance and documentation: the project's own supply-chain verification step fails as shipped, and SECURITY.md records a result that does not reproduce, so a reviewer following the documented procedure cannot distinguish this benign reformat from a tampered assertion library without re-fetching upstream. Fix (author only; lib/ and config are outside a contributor's write set): either restore the seven files from the v1.9.7 archive and add `ignore = [\"lib/**\"]` under [fmt] so a later `forge fmt` does not re-wrap them, or regenerate DEPENDENCIES.sha256 from the committed tree and reword DEPENDENCIES.md line 19 and SECURITY.md line 30 to say forge-std was reformatted. The reformat is functionally harmless, so this is low severity, not blocking.","line":19,"path":"DEPENDENCIES.md","reproduction":"State: committed tree at HEAD aaef1d4, `git status` clean. Input: from the repository root run `sha256sum -c DEPENDENCIES.sha256`. Expected (per DEPENDENCIES.md lines 19-23 and docs/SECURITY.md line 30): every line prints OK, exit code 0. Actual: 29 lines OK, 7 lines FAILED (lib/forge-std/src/StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol, interfaces/IMulticall3.sol), then `sha256sum: WARNING: 7 computed checksums did NOT match`, exit code 1. Example: DEPENDENCIES.sha256 line 18 records 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1 for lib/forge-std/src/Vm.sol, while `sha256sum lib/forge-std/src/Vm.sol` prints a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15. Confirming direction: `curl -sSL -o fs.tgz https://codeload.github.com/foundry-rs/forge-std/tar.gz/refs/tags/v1.9.7 && sha256sum fs.tgz` gives 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94; after `tar xzf fs.tgz`, `sha256sum forge-std-1.9.7/src/Vm.sol` gives the recorded 9068805b...b2cb1, and `diff forge-std-1.9.7/src/Vm.sol lib/forge-std/src/Vm.sol` shows only line re-wrapping; `tr -d ' \\t\\n\\r' < FILE | sha256sum` is equal for upstream and local on all seven files. OpenZeppelin control: `sha256sum lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol` = 2d874da1c1478ed22a2d30dcf1a6ec0d09a13f897ca680d55fb49fbcc0e0c5b1, identical to raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v5.0.2/contracts/token/ERC20/ERC20.sol.","severity":"low","snippet":"Vendored source files and license texts are unmodified. Their SHA-256 checksums\nare recorded in `DEPENDENCIES.sha256`; verify them offline from the root with:","title":"Documented dependency integrity check fails: seven vendored forge-std files do not match DEPENDENCIES.sha256, contradicting the 'unmodified' claim and the result recorded in docs/SECURITY.md"}],"hash":"e87b4477a45cbbb9bfd739d4e35049fdeedf592789f64b08fde46b6c4a9938b7","nodeId":"81e25f43-2d02-4f1a-9c6d-2dc84bd84b00","outcome":"completed","summary":"The review is complete and the findings file is written and validated. The working tree shows no tracked changes.\n\n**Outcome.** The token is sound. One low-severity finding survives, merged from all four specialists.\n\n**What I verified myself**\n\n- `src/WorldMarketToken.sol` is a bare OpenZeppelin v5.0.2 ERC-20 that mints exactly 10^27 units to `msg.sender` in the constructor. It has no owner, mint, burn, pause, or upgrade path.\n- All five vendored OpenZeppelin files are byte-identical to the tagged upstream release, so the three entry points (approve, transfer, transferFrom) are unmodified library code and behave as the standard requires.\n- The manifest uses only schema keys, an empty constructor argument list matching the parameterless constructor, the exact minted supply, and a 16-character contract name. Creation code is well under the size limits.\n- Build, formatting check, and all 51 local tests pass with the project's fuzz seed.\n\n**The kept finding (low).** The documented command `sha256sum -c DEPENDENCIES.sha256` fails for seven forge-std files, while DEPENDENCIES.md calls the files unmodified and docs/SECURITY.md records the check as passing. I fetched the upstream v1.9.7 archive and confirmed the recorded hashes are the genuine ones. The in-tree copies differ only by whitespace from a formatter re-wrap. This is a provenance and documentation defect in test-only material with no effect on deployed bytecode, so it is low and not blocking. The fix is the author's, since it touches lib/ or configuration.\n\n**Dropped.** Nothing was dropped. All four specialist reports described the same root cause and are merged into the single finding above. The aderyn large-literal note is a style lead with no defect behind it.\n\nCoverage rows answer all three listed entry points as holds, plus one row for the constructor and manifest consistency.","treeHash":null,"usage":{"cachedInputTokens":362775,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":7793,"runtime":"claude","turns":17,"wallClockMs":117080}}],"verification":[{"checks":[{"durationMs":1638,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.56s\nCompiler run successful!\n","passed":true},{"durationMs":11905,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 33 tests for test/WorldMarketToken.t.sol:WorldMarketTokenTest\n[PASS] testFuzz_approveReplacesRatherThanAdds(uint256,uint256) (runs: 512, μ: 100760, ~: 100884)\n[PASS] testFuzz_overBalanceTransferIsAtomic(uint256,uint256) (runs: 512, μ: 137491, ~: 137768)\nLogs:\n  Bound result 11354158585634423881\n  Bound result 138180352534389013125609199250638764549608343157920077963229322665204663\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 512, μ: 110678, ~: 111291)\nLogs:\n  Bound result 418523317555248177468713687\n\n[PASS] testFuzz_transferFromTracksAllowance(uint256,uint256) (runs: 512, μ: 164286, ~: 165192)\nLogs:\n  Bound result 184\n  Bound result 344277\n\n[PASS] testFuzz_unapprovedSpenderCannotMoveTokens(address,uint256) (runs: 512, μ: 62288, ~: 62093)\nLogs:\n  Bound result 342968135591091872421758715\n\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 163795)\n[PASS] test_approvalIsSpecificToOwnerAndSpender() (gas: 175774)\n[PASS] test_approveEmitsEventWithoutMovingTokens() (gas: 88822)\n[PASS] test_approveZeroSpenderReverts() (gas: 30431)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9676)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 151983)\n[PASS] test_directDeploymentMintsToCaller() (gas: 20079)\n[PASS] test_factoryDeploymentMintsAllToFactory() (gas: 236788)\n[PASS] test_infiniteAllowanceIsNotDecreased() (gas: 128888)\n[PASS] test_launchDistributionAndClaimsArriveWhole() (gas: 562486)\n[PASS] test_metadataAndInitialSupply() (gas: 107605)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 1373146)\n[PASS] test_plainEtherTransferIsRejected() (gas: 42595)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_selfTransferStillRequiresBalance() (gas: 35864)\n[PASS] test_transferEntireSupply() (gas: 151411)\n[PASS] test_transferFromEmitsTransferAndSpendsAllowance() (gas: 242077)\n[PASS] test_transferFromInsufficientAllowanceRevertsAtomically() (gas: 115687)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 121786)\n[PASS] test_transferFromSelfSpendsAllowanceWithoutMovingBalance() (gas: 109732)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114091)\n[PASS] test_transferMaximumIntegerRevertsWithoutOverflow() (gas: 42337)\n[PASS] test_transferMovesExactAmountAndEmitsEvent() (gas: 93572)\n[PASS] test_transferOverBalanceReverts() (gas: 54969)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71926)\n[PASS] test_zeroAddressCannotBeTransferFromSource() (gas: 54982)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73411)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 78804)\nSuite result: ok. 33 passed; 0 failed; 0 skipped; finished in 77.81ms (288.62ms CPU time)\n\nRan 17 tests for test/WorldMarketToken.edge.t.sol:WorldMarketTokenEdgeTest\n[PASS] testFuzz_insufficientAllowanceIsAtomic(uint256,uint256,uint256) (runs: 1000, μ: 202594, ~: 205976)\nLogs:\n  Bound result 311256475\n  Bound result 251139966\n  Bound result 246569617\n\n[PASS] testFuzz_insufficientBalanceRestoresArbitraryAllowance(uint256,uint256,uint256) (runs: 1000, μ: 211263, ~: 211723)\nLogs:\n  Bound result 833819410808607482730573924\n  Bound result 115792089237316195423570985008687907853269984665639730220046775401144459956518\n  Bound result 115792089237316195423570985008687907853269984665640531819099233088961230862752\n\n[PASS] testFuzz_revocationAfterSpendingSurvivesNewFunding(uint256,uint256,bool) (runs: 1000, μ: 339049, ~: 338466)\nLogs:\n  Bound result 3347\n  Bound result 2\n\n[PASS] testFuzz_transferRoundTripRestoresBothBalances(uint256,uint256) (runs: 1000, μ: 257337, ~: 258344)\nLogs:\n  Bound result 25759\n  Bound result 5282\n\n[PASS] testFuzz_twoSpendersCannotSpendTheSameBalanceTwice(uint256,uint256) (runs: 1000, μ: 450028, ~: 452216)\nLogs:\n  Bound result 2933357757503\n  Bound result 342632307835\n\n[PASS] test_approvalBeforeFundingSurvivesFailureAndRefill() (gas: 413273)\n[PASS] test_approvalDoesNotFollowTokensToTheirNewOwner() (gas: 257388)\n[PASS] test_infiniteAllowanceCanBeReducedAndRevoked() (gas: 264676)\n[PASS] test_infiniteAllowanceCannotBypassBalanceCheck() (gas: 129472)\n[PASS] test_maximumMinusOneAllowanceIsFinite() (gas: 210768)\n[PASS] test_smallestUnitCanBeSpentExactlyOnce() (gas: 298609)\n[PASS] test_stateChangingFunctionsRejectEtherAtomically() (gas: 371523)\n[PASS] test_tokenContractCanReceiveTokensWithoutBurningThem() (gas: 193667)\n[PASS] test_transferFromByOwnerUsesItsOwnApproval() (gas: 288103)\n[PASS] test_zeroRecipientRejectedWithInfiniteAllowance() (gas: 149848)\n[PASS] test_zeroSpenderRejectedForZeroAndMaximumApproval() (gas: 135138)\n[PASS] test_zeroTransfersPreserveExistingBalancesAndAllowance() (gas: 291171)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 78.55ms (382.37ms CPU time)\n\nRan 1 test for test/WorldMarketToken.invariant.t.sol:WorldMarketTokenInvariantTest\n[PASS]\nWorldMarketTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchModel\n[PASS] invariant_metadataRemainsUnchanged\n[PASS] invariant_supplyAndBalancesMatchModel\n WorldMarketTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭-------------------+-----------------------+-------+---------+----------╮\n| Contract          | Selector              | Calls | Reverts | Discards |\n+========================================================================+\n| WorldTokenHandler | approve               | 3597  | 0       | 0        |\n|-------------------+-----------------------+-------+---------+----------|\n| WorldTokenHandler | attemptOverdraw       | 3590  | 0       | 0        |\n|-------------------+-----------------------+-------+---------+----------|\n| WorldTokenHandler | attemptZeroRecipient  | 3641  | 0       | 0        |\n|-------------------+-----------------------+-------+---------+----------|\n| WorldTokenHandler | attemptZeroSpender    | 3706  | 0       | 0        |\n|-------------------+-----------------------+-------+---------+----------|\n| WorldTokenHandler | fullBalanceRoundTrip  | 3581  | 0       | 0        |\n|-------------------+-----------------------+-------+---------+----------|\n| WorldTokenHandler | revokeAndAttemptSpend | 3701  | 0       | 0        |\n|-------------------+-----------------------+-------+---------+----------|\n| WorldTokenHandler | spend                 | 3693  | 0       | 0        |\n|-------------------+-----------------------+-------+---------+----------|\n| WorldTokenHandler | spendUnbounded        | 3616  | 0       | 0        |\n|-------------------+-----------------------+-------+---------+----------|\n| WorldTokenHandler | transfer              | 3643  | 0       | 0        |\n╰-------------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4072\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 841867844993317179063563250\n  Bound result 4\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 30\n  Bound result 0\n  Bound result 0\n  Bound result 7\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 12000000000000000000\n  Bound result 50\n  Bound result 241\n  Bound result 4876\n  Bound result 3\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.81s (11.81s CPU time)\n\nRan 3 test suites in 11.82s (11.97s CPU time): 51 tests passed, 0 failed, 0 skipped (51 total tests)\n","passed":true},{"durationMs":35,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WorldMarketToken.approve(address,uint256)\",\"WorldMarketToken.transfer(address,uint256)\",\"WorldMarketToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":28,\"DEPENDENCIES.sha256\":36,\"README.md\":114,\"docs/SECURITY.md\":45,\"foundry.toml\":21,\"remappings.txt\":2,\"src/WorldMarketToken.sol\":18,\"test/WorldMarketToken.edge.t.sol\":347,\"test/WorldMarketToken.invariant.t.sol\":226,\"test/WorldMarketToken.t.sol\":389,\"test/helpers/TokenFactoryProbe.sol\":11},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"6d250f33fb45b71561d305eac42d67f5eb22ecfad1d393c27edc71b90b91adf1","verifiedTreeHash":"f20789c404bfb11a49453c46999bd1de6b0af17e","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":2030,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.90s\nCompiler run successful!\n","passed":true},{"durationMs":3869,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 33 tests for test/WorldMarketToken.t.sol:WorldMarketTokenTest\n[PASS] testFuzz_approveReplacesRatherThanAdds(uint256,uint256) (runs: 512, μ: 100759, ~: 100884)\n[PASS] testFuzz_overBalanceTransferIsAtomic(uint256,uint256) (runs: 512, μ: 137497, ~: 137762)\nLogs:\n  Bound result 15512923609058243546\n  Bound result 115792089237316195423570985008687907853269984665640564039442071084304071396386\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 512, μ: 110609, ~: 111291)\nLogs:\n  Bound result 82158\n\n[PASS] testFuzz_transferFromTracksAllowance(uint256,uint256) (runs: 512, μ: 164262, ~: 165192)\nLogs:\n  Bound result 5\n  Bound result 21739\n\n[PASS] testFuzz_unapprovedSpenderCannotMoveTokens(address,uint256) (runs: 512, μ: 62283, ~: 62013)\nLogs:\n  Bound result 342968135591091872421758715\n\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 163795)\n[PASS] test_approvalIsSpecificToOwnerAndSpender() (gas: 175774)\n[PASS] test_approveEmitsEventWithoutMovingTokens() (gas: 88822)\n[PASS] test_approveZeroSpenderReverts() (gas: 30431)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9676)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 151983)\n[PASS] test_directDeploymentMintsToCaller() (gas: 20079)\n[PASS] test_factoryDeploymentMintsAllToFactory() (gas: 236788)\n[PASS] test_infiniteAllowanceIsNotDecreased() (gas: 128888)\n[PASS] test_launchDistributionAndClaimsArriveWhole() (gas: 562486)\n[PASS] test_metadataAndInitialSupply() (gas: 107605)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 1373146)\n[PASS] test_plainEtherTransferIsRejected() (gas: 42595)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_selfTransferStillRequiresBalance() (gas: 35864)\n[PASS] test_transferEntireSupply() (gas: 151411)\n[PASS] test_transferFromEmitsTransferAndSpendsAllowance() (gas: 242077)\n[PASS] test_transferFromInsufficientAllowanceRevertsAtomically() (gas: 115687)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 121786)\n[PASS] test_transferFromSelfSpendsAllowanceWithoutMovingBalance() (gas: 109732)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114091)\n[PASS] test_transferMaximumIntegerRevertsWithoutOverflow() (gas: 42337)\n[PASS] test_transferMovesExactAmountAndEmitsEvent() (gas: 93572)\n[PASS] test_transferOverBalanceReverts() (gas: 54969)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71926)\n[PASS] test_zeroAddressCannotBeTransferFromSource() (gas: 54982)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73411)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 78804)\nSuite result: ok. 33 passed; 0 failed; 0 skipped; finished in 36.93ms (165.18ms CPU time)\n\nRan 1 test for test/WorldMarketToken.invariant.t.sol:WorldMarketTokenInvariantTest\n[PASS]\nWorldMarketTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchModel\n[PASS] invariant_supplyAndBalancesMatchModel\n WorldMarketTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------------+-----------------+-------+---------+----------╮\n| Contract          | Selector        | Calls | Reverts | Discards |\n+==================================================================+\n| WorldTokenHandler | approve         | 1987  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| WorldTokenHandler | attemptOverdraw | 2021  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| WorldTokenHandler | spend           | 2105  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| WorldTokenHandler | transfer        | 2079  | 0       | 0        |\n╰-------------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5649\n  Bound result 0\n  Bound result 0\n  Bound result 2232\n  Bound result 252\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 57\n  Bound result 0\n  Bound result 0\n  Bound result 9\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 141597218199457815854904\n  Bound result 6391\n  Bound result 4498\n  Bound result 726\n  Bound result 2828\n  Bound result 8\n  Bound result 16\n  Bound result 32\n  Bound result 12\n  Bound result 370650825276640876082064103\n  Bound result 31\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.75s (3.75s CPU time)\n\nRan 2 test suites in 3.76s (3.79s CPU time): 34 tests passed, 0 failed, 0 skipped (34 total tests)\n","passed":true},{"durationMs":57,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WorldMarketToken.approve(address,uint256)\",\"WorldMarketToken.transfer(address,uint256)\",\"WorldMarketToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":28,\"DEPENDENCIES.sha256\":36,\"README.md\":114,\"docs/SECURITY.md\":45,\"foundry.toml\":21,\"remappings.txt\":2,\"src/WorldMarketToken.sol\":18,\"test/WorldMarketToken.invariant.t.sol\":110,\"test/WorldMarketToken.t.sol\":389,\"test/helpers/TokenFactoryProbe.sol\":11},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":678,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":368,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/WorldMarketToken.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"afe89384e66a62d04743a0738e1e04c206a4cd347d2fb8d7f1cd72e1fb83f6ca","verifiedTreeHash":"f6739075fbc6e854d9d00aa23abf801095ede6b8","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":1743,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.64s\nCompiler run successful!\n","passed":true},{"durationMs":3506,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 33 tests for test/WorldMarketToken.t.sol:WorldMarketTokenTest\n[PASS] testFuzz_approveReplacesRatherThanAdds(uint256,uint256) (runs: 512, μ: 100759, ~: 100884)\n[PASS] testFuzz_overBalanceTransferIsAtomic(uint256,uint256) (runs: 512, μ: 137497, ~: 137762)\nLogs:\n  Bound result 450663439317795787972625726\n  Bound result 3\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 512, μ: 110609, ~: 111291)\nLogs:\n  Bound result 82158\n\n[PASS] testFuzz_transferFromTracksAllowance(uint256,uint256) (runs: 512, μ: 164262, ~: 165192)\nLogs:\n  Bound result 3\n  Bound result 37980030336519450663439317833768002962245\n\n[PASS] testFuzz_unapprovedSpenderCannotMoveTokens(address,uint256) (runs: 512, μ: 62283, ~: 62013)\nLogs:\n  Bound result 787815562677788381190813638\n\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 163795)\n[PASS] test_approvalIsSpecificToOwnerAndSpender() (gas: 175774)\n[PASS] test_approveEmitsEventWithoutMovingTokens() (gas: 88822)\n[PASS] test_approveZeroSpenderReverts() (gas: 30431)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9676)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 151983)\n[PASS] test_directDeploymentMintsToCaller() (gas: 20079)\n[PASS] test_factoryDeploymentMintsAllToFactory() (gas: 236788)\n[PASS] test_infiniteAllowanceIsNotDecreased() (gas: 128888)\n[PASS] test_launchDistributionAndClaimsArriveWhole() (gas: 562486)\n[PASS] test_metadataAndInitialSupply() (gas: 107605)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 1373146)\n[PASS] test_plainEtherTransferIsRejected() (gas: 42595)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_selfTransferStillRequiresBalance() (gas: 35864)\n[PASS] test_transferEntireSupply() (gas: 151411)\n[PASS] test_transferFromEmitsTransferAndSpendsAllowance() (gas: 242077)\n[PASS] test_transferFromInsufficientAllowanceRevertsAtomically() (gas: 115687)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 121786)\n[PASS] test_transferFromSelfSpendsAllowanceWithoutMovingBalance() (gas: 109732)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 114091)\n[PASS] test_transferMaximumIntegerRevertsWithoutOverflow() (gas: 42337)\n[PASS] test_transferMovesExactAmountAndEmitsEvent() (gas: 93572)\n[PASS] test_transferOverBalanceReverts() (gas: 54969)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71926)\n[PASS] test_zeroAddressCannotBeTransferFromSource() (gas: 54982)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73411)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 78804)\nSuite result: ok. 33 passed; 0 failed; 0 skipped; finished in 36.45ms (174.24ms CPU time)\n\nRan 1 test for test/WorldMarketToken.invariant.t.sol:WorldMarketTokenInvariantTest\n[PASS]\nWorldMarketTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchModel\n[PASS] invariant_supplyAndBalancesMatchModel\n WorldMarketTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------------+-----------------+-------+---------+----------╮\n| Contract          | Selector        | Calls | Reverts | Discards |\n+==================================================================+\n| WorldTokenHandler | approve         | 1987  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| WorldTokenHandler | attemptOverdraw | 2021  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| WorldTokenHandler | spend           | 2105  | 0       | 0        |\n|-------------------+-----------------+-------+---------+----------|\n| WorldTokenHandler | transfer        | 2079  | 0       | 0        |\n╰-------------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5649\n  Bound result 0\n  Bound result 0\n  Bound result 2232\n  Bound result 252\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 57\n  Bound result 0\n  Bound result 0\n  Bound result 9\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 141597218199457815854904\n  Bound result 6391\n  Bound result 4498\n  Bound result 726\n  Bound result 2828\n  Bound result 8\n  Bound result 16\n  Bound result 32\n  Bound result 12\n  Bound result 370650825276640876082064103\n  Bound result 31\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.38s (3.38s CPU time)\n\nRan 2 test suites in 3.38s (3.42s CPU time): 34 tests passed, 0 failed, 0 skipped (34 total tests)\n","passed":true},{"durationMs":67,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WorldMarketToken.approve(address,uint256)\",\"WorldMarketToken.transfer(address,uint256)\",\"WorldMarketToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":28,\"DEPENDENCIES.sha256\":36,\"README.md\":114,\"docs/SECURITY.md\":45,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"src/WorldMarketToken.sol\":18,\"test/WorldMarketToken.invariant.t.sol\":110,\"test/WorldMarketToken.t.sol\":389,\"test/helpers/TokenFactoryProbe.sol\":11},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"b6f6cb0e8a85980652ff84a2cde1a1079f8c6b36b0e5df36ed08108332fd2d98","verifiedTreeHash":"fd596ca36ea29e15ba6bf1a759668f53902d4f7d","verifierVersion":"0.1.0+d952fceb"}]}