{"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":"5d73988a-559e-4021-8d51-a2a654a9d6e1","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"2bdf7dc3287b3fb7098838fcb4e47dee90161eaff94465dea942816a4bdc0b83","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"81b7052da6cdca6819abb4b1fb4924e31086633863b272c8ed89d9b24523ab82","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"81b7052da6cdca6819abb4b1fb4924e31086633863b272c8ed89d9b24523ab82","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_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":"working"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_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":"working"},{"acceptedSubmissionHash":"c0c83e74382249e095e1d2357e729737abefa8562d27e5cce509edd9f0650654","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_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":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_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":"working"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_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":"working"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"failed"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_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":"working"}],"objective":"This is a verification-only follow-up for existing launch 816.\nDo not create a new token, do not deploy onchain, and do not change any launch parameters.\n\nRepository:\nhttps://github.com/identity-md-launches/launch-816-imd-index\n\nOriginal launch job:\n6321056b-a125-48f2-9c7a-81cc8695a1f2\n\nRepair job:\n8a5d5e50-f972-4a86-ab69-1442ed0cc957\n\nThe repaired code is merged on main at:\n3a26e979a5198fa515ded5a32e28b6c34902001b\n\nUsing the exact existing launch 816 configuration, verify:\n\n1. The repaired commit is the source being checked.\n2. All seven application contracts deploy through the real launch-factory simulation path.\n3. FeeHookDeployer constructor arguments and contract references resolve correctly.\n4. The exact original launch parameters are preserved.\n5. Manifest, source commit, tree hash, attestation, and bytecode are consistent.\n6. No roles are assigned automatically.\n7. Full tests, verifier checks, and fork simulation pass.\n8. Report gas used, gas limit, safety margin, and any unresolved risk.\n\nReturn a concise GO / NO-GO report. If anything is unresolved, stop. Do not invent parameters and do not launch.","parentJobId":null,"planHash":"dd27433516d28bebc1dbd04f9fd692ae4027798f5403953817ee56bc56ae26de","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"5d73988a-559e-4021-8d51-a2a654a9d6e1","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1141-verification-only-follow-up-existing-lau"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52166","feedbackHash":"86d01cfdd698f1ee5cfb4cfc6e21a40bf6a079c2aadcaa89e213b5c3b343e33d","nodeKey":"adapt_contract_project","submissionHash":"2bdf7dc3287b3fb7098838fcb4e47dee90161eaff94465dea942816a4bdc0b83","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52158","feedbackHash":"736a6ad1f466db688bc2d982c4ca6fa2710a55bc82dcbad0f024b2f8a3d3dc02","nodeKey":"audit_imported_code","submissionHash":"c0c83e74382249e095e1d2357e729737abefa8562d27e5cce509edd9f0650654","tag1":"review:submission","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"a1412961bcd36b0dce36af1968fa99b653b21bc369316af4c13de84a26fa38e9","state":"blocked","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"2856dd3f17f5217dd7c5188eb8e9fe89fa68b58d15930a0ef80a18bac079719f","device":"7f1dec5ffcbde1d8","findings":[],"hash":"2bdf7dc3287b3fb7098838fcb4e47dee90161eaff94465dea942816a4bdc0b83","nodeId":"b27529dd-66a1-4435-bcde-1ec591d6dd95","outcome":"completed","summary":"**Verdict: NO-GO on one unresolved item.** Everything this repository can verify passes. The one thing it cannot resolve is the production-payload gas margin, which only the launch service holds.\n\n**What was verified**\n\n- **Source.** HEAD is the repaired commit 3a26e979 with tree b8800af7. GitHub main resolves to the same commit and tree. The repair job's accepted submission records that exact tree as its verified tree hash, which settles the audit's \"c6a77b2\" provenance question: that was the worker's local commit of the same tree.\n- **Factory path.** On a mainnet archive fork at block 26,137,298 against the real factory and operator, the original bytecode reverts with DeploymentFailed(6) and the repaired bytecode deploys the token, all seven applications and the distributor at the predicted addresses.\n- **FeeHookDeployer.** Its arguments resolve to the mainnet PoolManager, the predicted token, native quote and the predicted FeeWaterfall. Both waterfall reads return mainnet WETH, and the hook slot is zero after launch.\n- **Parameters.** launch.json differs from its first accepted commit only in the notes string. All seven constructor argument lists, the token block and the pool block match the original launch record's proof section exactly.\n- **Bytecode consistency.** The seven original creation hashes embedded in the repo equal both a clean rebuild of commit 6a78621 and the per-contract hashes in the public launch record. The repaired hashes are now pinned in a test. No attestation exists yet over the repaired tree, so the service must produce one.\n- **Roles.** Admin is $owner; guardian, executor, signers and quorum are unset; the factory holds no role and cannot schedule an operation.\n- **Checks.** forge build clean. forge test: 287 passed, 0 failed, 1 skipped (fork suite offline). The pinned contracts-only protected floor passes with manifest-resolved inputs. Fork suite: 3 of 3 pass.\n\n**Gas**\n\n| Quantity | Gas |\n| --- | ---: |\n| Cap | 16,777,216 |\n| Repaired total (rehearsal payload) | 16,759,438 |\n| Margin | 17,778 |\n| Cost of one extra agent ID | 23,203 |\n| Cost of one extra receipt-URL word | 22,767 |\n\nThe service recorded 20,816,126 gas for the original bytecode with the real payload, versus 19,733,790 for the rehearsal payload. That difference is payload, not code, and projects the repaired launch to roughly 1.06M gas over the cap. The public job record truncates the simulation call after its kind field, so the real agent count, owner and receipt cannot be recovered here. The launch service must re-simulate its exact payload before anything proceeds.\n\n**Audit findings**\n\n- Gas margin (medium): reproduces exactly. It is the NO-GO item, now covered by a fork test.\n- Heartbeat lapse (low): reproduces. Source left unchanged because this follow-up verifies a fixed, attested tree, and the mitigation the finding proposes is a post-launch timelock configuration. A new test pins the behaviour and the mitigation.\n- Manifest kind (info): confirmed and documented. Manifest unchanged, as the brief requires.\n- Provenance (info): resolved via the work record's verified tree hash.\n\n**Files delivered**\n\n- `docs/VERIFICATION-816.md` holds the full GO / NO-GO report.\n- `ADAPTATION.md` lists each change and the finding or brief item behind it.\n- New tests in `test/Launch816Record.t.sol` and `test/StaleFeedQuarantine.t.sol`, plus one fork-only margin test.\n- One index line added to README. No src, manifest or configuration file changed. Nothing was deployed or broadcast, and the working tree is left uncommitted for the harness.","treeHash":"223a0580f095c46cea80abd213d9fc3910d159ff","usage":{"cachedInputTokens":2554261,"inputTokens":674,"model":"claude-fable-5-1","outputTokens":46599,"runtime":"claude","turns":62,"wallClockMs":672815}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"4dd67dae195771b6","findings":[{"citation":"resolved","description":"The fork rehearsal that establishes the GO condition (test/fork/Launch816Fork.t.sol, docs/LAUNCH-816.md) uses a guessed payload: 12 synthetic agent IDs, a synthetic owner, placeholder receipt hashes and a guessed pool position. Re-running it on the real factory 0xfF03410d0Fe5fa8f7F59F743de35E333D9857120 at block 26,137,298 reproduces exactly 16,759,438 gas against the 16,777,216 cap, a margin of 17,778 gas. Measured on the same fork, every additional agent ID costs about 23,000 execution gas (SSTORE in the factory) plus calldata, so the margin is smaller than ONE extra agent ID: 13 agent IDs exceed the cap by 5,425 gas and 20 by 167,855 gas; a sourceRepoUrl one 32-byte word longer exceeds it by 27,505 gas. The agent count is not known to this repository: the launch record for job 6321056b-a125-48f2-9c7a-81cc8695a1f2 states '300 agents across 12 wallets', and the repair-job record (8a5d5e50-f972-4a86-ab69-1442ed0cc957) reports the ORIGINAL simulation failing at 20,816,126 gas, whereas the original bytecodes with the rehearsal payload and an unconstrained budget need only 19,733,790 gas on the same fork. That 1,082,336-gas difference between the service's real payload and the rehearsal payload is 60x the remaining margin; applied to the repaired bytecodes it predicts roughly 17.84M gas, over the cap by about 1.06M. Nothing in the repository or on-chain (Blockscout shows no launch-816 call to the factory; the original was never broadcast) lets a reviewer resolve this. The launch is therefore NO-GO until the launch service re-simulates the exact production payload (real agentIds length, owner, receipt hashes/URL, allocation and pool position) and shows the result under 16,777,216 with the 63/64 call-depth rule applied, as docs/LAUNCH-816.md itself requires.","line":76,"path":"test/fork/Launch816Fork.t.sol","reproduction":"Inputs: the repaired commit 3a26e979a5198fa515ded5a32e28b6c34902001b, mainnet fork at block 26137298, factory 0xfF03410d0Fe5fa8f7F59F743de35E333D9857120, operator 0xcECc29B037f5064fCdF45a5C318F132ef76aA551, the Launch816Fixture payload with tickUpper=0, liquidity=8e26. (1) `forge test --match-contract Launch816ForkTest --no-isolate --fork-url <mainnet RPC> --fork-block-number 26137298 -vv` -> total gas upper bound 16759438 (margin 17778). (2) Same payload with p.agentIds = new uint256[](13) and the factory called with 30M gas -> total 16782641, i.e. 5425 over the cap; with 20 agent IDs -> 16945071 (167855 over); with p.receipt.sourceRepoUrl one word longer -> 16804721 (27505 over). (3) Original bytecodes (Launch816Original) with 12 agent IDs and a 60M budget -> 19733790 total, versus the 20816126 gas the launch service recorded for the original simulation of the real payload. Expected: the rehearsal payload equals the production payload, or the margin covers the difference. Actual: the production agent count and receipt fields are unknown to the repo, and a single extra agent ID or a 1.08M-gas payload difference pushes the launch over the cap, reproducing the parked state (DeploymentFailed / out of gas, whole batch reverted).","severity":"medium","snippet":"        p.agentIds = new uint256[](12);","title":"Launch gas margin (17,778 gas, 0.106%) is below the cost of one agent ID; the production payload is unverified and the service-recorded original gas implies the repaired launch still exceeds the EIP-7"},{"citation":"resolved","description":"quarantineIfStale is permissionless and triggers whenever block.timestamp - updatedAt > heartbeat by even one second. Chainlink feeds routinely land their heartbeat update a few seconds to a block after the nominal heartbeat, so if governance sets `heartbeat` equal to the feed's nominal value, nearly every cycle opens a short window in which any address can hard-quarantine a healthy member. The quarantine is sticky: the feed recovering does not clear it, and only the timelock can call releaseQuarantine, which takes at least minDelay (172,800 s in launch 816). While quarantined, IndexVault._nav() reports the position as unpriced, so deposit() and FeeWaterfall.pushBasketReserve() revert with PriceUnavailable, and RebalanceExecutor._target() returns 0, which lets a keeper sell the entire position outside the rebalance window and drift threshold (at the oracle floor). This is within the documented 'tighten only' design and the keeper trust model, so it is a low-severity griefing/availability issue, but it is a concrete 2-day deposit outage any address can cause at the cost of one transaction. Mitigation without changing the design: configure `heartbeat` with slack above the feed's nominal heartbeat (for example 1.5x), or require staleness to persist beyond a grace period before the permissionless path applies.","line":210,"path":"src/AssetRegistry.sol","reproduction":"State: fixture with five active members bought (test/utils/Fixture.sol), tokens[0] approved with heartbeat 1 days. Inputs: feeds[0].setUpdatedAt(block.timestamp - 1 days - 1); then from an arbitrary address (0xBAD) call registry.quarantineIfStale(tokens[0]). Then skip(1) and refresh the feed (updatedAt = now). Expected (healthy feed one second later): the member is priced and deposits continue. Actual: registry.isQuarantined(tokens[0]) stays true; vault.deposit(1000e6, BOB, 0) reverts PriceUnavailable(tokens[0]); executor.position(tokens[0]) returns target 0 with current > 0; three days later (outside the 2-day window) the keeper's executeTrade(tokens[0], usdc, wholeBalance, ...) succeeds and empties the position; guardian's releaseQuarantine reverts NotTimelock, so only a >=2-day timelock operation reopens deposits. Verified with test/scratch/StaleLapse.t.sol (passes on current code, demonstrating the behaviour).","severity":"low","snippet":"    function quarantineIfStale(address token) external {","title":"A one-second feed heartbeat lapse lets anyone quarantine a basket member; quarantine survives feed recovery, closes deposits and zeroes the member's target until a timelocked release"},{"citation":"resolved","description":"launch.json declares kind evm_project with a token block, a pool block and a `$token` constructor argument for FeeHookDeployer. The protected check pinned for this task (.imd/reads/protected/evm_contracts/Contracts.protected.t.sol) only rehearses the seven application CREATE2 deployments from environment-supplied creation code; it does not resolve `$token`, deploy LaunchToken, or exercise allocation, pool initialization or receipt recording. Run locally with the manifest-resolved inputs (factory 0xfF03410d0Fe5fa8f7F59F743de35E333D9857120, salts keccak256(abi.encode(uint64(816), i)), predicted token 0x1787f33BbB7A0E03c33FD157ff7BcaA94a52B3a4) the protected test passes: all seven runtimes present, under EIP-170, no DELEGATECALL/CALLCODE/SELFDESTRUCT. The full evm_project path (token, 7 apps, distributor, pool, receipt) passes only in test/fork/Launch816Fork.t.sol, which is skipped offline and needs an archive RPC at block 26137298. This is not a code defect; it is a coverage note so the operator does not read a passing contracts-only floor as proof of the evm_project path. The launch parameters themselves are unchanged: launch.json differs from its first commit 68b04fd only in the `notes` string (verified with git diff), and the seven constructorArgs lists, token block and pool block are byte-identical.","line":2,"path":"launch.json","reproduction":"git diff 68b04fddd4d2f1445d906c7453806f185fef29d8 HEAD -- launch.json shows only the notes line changed. Copy the pinned protected test under test/ and run it with IMD_PROJECT_FACTORY=0xfF03410d0Fe5fa8f7F59F743de35E333D9857120, IMD_PROJECT_CHAIN_ID=1, IMD_PROJECT_COUNT=7 and the seven CODE/SALT/ADDRESS values resolved from launch.json (test/scratch/EmitProtectedEnv.t.sol prints them): it passes, but never deploys LaunchToken or resolves $token; only `forge test --match-contract Launch816ForkTest --fork-url <archive RPC> --fork-block-number 26137298` does.","severity":"info","snippet":"  \"kind\": \"evm_project\",","title":"The manifest is an evm_project launch (token + pool + $token) while the pinned verifier check supplied for this review is the contracts-only floor; $token resolution and the factory pool path are cove"},{"citation":"resolved","description":"Verified: HEAD is 3a26e979a5198fa515ded5a32e28b6c34902001b (tree b8800af76ee7df5b312018e26ee518f44636da27), the commit the task names. The seven original creation bytecodes embedded in test/utils/Launch816Original.sol hash identically to a clean solc 0.8.26 build of commit 6a78621 (e.g. TimelockedAdmin 0x6efe6a62..., FeeHookDeployer 0x85201fd7...), and the compiled runtime sizes match the table in docs/LAUNCH-816.md exactly (2,020 bytes for FeeHookDeployer). Repaired creation-code hashes at HEAD: TimelockedAdmin 0x00f6d88b..., AssetRegistry 0xd77b24e3..., EpochManager 0xe361d1e8..., IndexVault 0xb5c557b8..., RebalanceExecutor 0x283ebd04..., FeeWaterfall 0x3aae82b3..., FeeHookDeployer 0xe71c41f1...; FeeHook creation hash pinned by the deployer 0x3527a2fd.... Not verifiable here: no ReleaseAttestation, manifest hash or verifier signature exists in the repository or the pinned inputs, and the public job record for the repair names commit `c6a77b2` and a 16,723,731-gas first attempt, neither of which is an object in this repository (git cat-file -t c6a77b2 fails). The merged commit must be the one the service attests; any attestation over c6a77b2 would not bind the tree under review.","line":14,"path":"docs/LAUNCH-816.md","reproduction":"git rev-parse HEAD HEAD^{tree}; git cat-file -t c6a77b2 -> 'Not a valid object name'. git worktree add /tmp/orig 6a78621 && forge build && forge inspect src/FeeHookDeployer.sol:FeeHookDeployer bytecode | cast keccak -> 0x85201fd7756f013b60f220b874a28401827b676de8f88a8aff540b4fb8b2dec3, equal to keccak256(Launch816Original.creationCode(6)). Expected: the attestation's commit equals 3a26e979 and its creation hashes equal the values above; actual: no attestation is reachable from this review.","severity":"info","snippet":"The accepted source is commit `6a78621b5bfe9513d9da5f6e7e4fcf6551f5040b`. Its exact seven application","title":"Provenance: the repair-job record cites commit c6a77b2 and a 16,723,731-gas first attempt that do not exist in this repository; the checked source is 3a26e979 (tree b8800af7) and no attestation is pre"}],"hash":"c0c83e74382249e095e1d2357e729737abefa8562d27e5cce509edd9f0650654","nodeId":"be26394a-bf1b-4165-9ff5-11272c1918c9","outcome":"completed","summary":"Verification is complete. No tracked file changed; `.imd-findings.json` holds four findings and `test/scratch/` holds my harness copies.\n\n## Verdict: NO-GO (one unresolved launch risk, no contract defects found)\n\n**What passed**\n- **Source identity.** HEAD is `3a26e979a5198fa515ded5a32e28b6c34902001b`, tree `b8800af76ee7df5b312018e26ee518f44636da27`. The original-bytecode fixtures hash identically to a clean build of commit `6a78621`; compiled runtime sizes match the docs table exactly.\n- **Seven contracts deploy on the real factory.** Fork at mainnet block 26,137,298 against factory `0xfF03…7120`: original bytecodes reproduce `DeploymentFailed(6)`, repaired bytecodes complete the full launch (token, 7 apps, distributor, pool, receipt).\n- **FeeHookDeployer references.** poolManager literal, `$token` (predicted `0x1787…B3a4`), quote `address(0)`, waterfall = app 5; the constructor's `reserveAsset()`/`weth()` reads resolve to mainnet WETH so the native-quote check passes.\n- **Launch parameters preserved.** `launch.json` differs from its first commit only in the `notes` string; all constructor argument lists, token and pool blocks are byte-identical.\n- **No roles granted.** Guardian, executor, signers, quorum, keeper all unset; owner, operator, factory and all apps hold `Role.None`.\n- **Tests.** 280 offline tests pass, formatting clean, both fork tests pass, and the pinned contracts-only protected check passes with manifest-resolved inputs.\n\n**Gas (fork, exact factory)**\n\n| | gas |\n|---|---|\n| Measured total (rehearsal payload) | 16,759,438 |\n| EIP-7825 cap | 16,777,216 |\n| Margin | 17,778 (0.106%) |\n| Cost per additional agent ID | ~23,000 + calldata |\n\n**Unresolved risk (the blocker).** The rehearsal payload is a guess: 12 synthetic agent IDs, synthetic owner, placeholder receipt. Measured on the fork, 13 agent IDs overshoot the cap by 5,425 gas and a one-word-longer repo URL by 27,505. The launch record says \"300 agents across 12 wallets\", and the repair-job record reports the original simulation at 20,816,126 gas, while the same original bytecodes with the rehearsal payload need 19,733,790 here. That 1.08M difference is 60× the margin; applied to the repaired code it predicts ~17.84M. Nothing in the repo or on-chain can resolve the real agent count (no launch-816 call was ever broadcast). The service must re-simulate the exact production payload before proceeding.\n\n**Code findings**\n- Low: a one-second heartbeat lapse lets anyone hard-quarantine a member; it survives feed recovery, closes deposits and zeroes the target for ≥2 days (reproduced in `test/scratch/StaleLapse.t.sol`). Mitigate operationally with heartbeat slack.\n- Info: manifest is `evm_project` while the pinned verifier check is the contracts-only floor; the `$token`/pool path is covered only by the fork test.\n- Info: no attestation reachable; the job record cites commit `c6a77b2`, which is not in this repository.\n\n**Coverage.** Read in full: all nine `src/` contracts and interfaces, the fork/launch harnesses, fixtures, docs. Not reachable: the launch service's attestation, policy row, production payload, and the factory's source.","treeHash":null,"usage":{"cachedInputTokens":3562696,"inputTokens":738,"model":"claude-fable-5-1","outputTokens":58234,"runtime":"claude","turns":65,"wallClockMs":1049941}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8f08088e7a7f557f","findings":[],"hash":"f651ca073ae995ea5e74a9be11983fc8e663df51308bdf37031d971b6cbd4eec","nodeId":"57ff4aac-becb-4db4-b1ae-d670d90f5f04","outcome":"failed","summary":"needs input: The accepted launch 816 implementation and approved brief define FeeHookDeployer's second constructor argument (projectToken) as $token, the IMDEX LaunchToken the factory creates in the evm_project mode of the existing manifest. This assignment requires kind evm_contracts, which has no token block and no $token, and the pinned contracts-only protected floor deploys the seven applications with no token. FeeHookDeployer's constructor rejects a zero projectToken and a projectToken equal to the native quote currency, and projectToken is immutable with no setter. No IMDEX token exists onchain (the predicted address 0x1787f33BbB7A0E03c33FD157ff7BcaA94a52B3a4 and all seven predicted application addresses have no code on Ethereum mainnet at the latest block), and the brief names no token address, so there is no legitimate static value. Writing the predicted address would be an invented parameter, and omitting FeeHookDeployer (six contracts) would change the launch parameters the brief says to ","treeHash":null,"usage":{"cachedInputTokens":643488,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":10059,"runtime":"claude","turns":21,"wallClockMs":175402}}],"verification":[{"checks":[{"durationMs":10471,"exitCode":0,"name":"build","output":"Compiling 124 files with Solc 0.8.26\nSolc 0.8.26 finished in 10.35s\nCompiler run successful!\n","passed":true},{"durationMs":6403,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/Launch816Fork.t.sol:Launch816ForkTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 842.68µs (0.00ns CPU time)\n\nRan 6 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_transfersConserveSupply(address,uint256) (runs: 256, μ: 85751, ~: 85564)\n[PASS] test_metadataAndFixedSupplyMintedToDeployer() (gas: 51556)\n[PASS] test_noMintOrAdminEntryPointExists() (gas: 144953)\n[PASS] test_transferBeyondBalanceReverts() (gas: 32873)\n[PASS] test_transferFromNeedsAllowance() (gas: 137195)\n[PASS] test_transferMovesExactlyTheAmount() (gas: 74767)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 4.65ms (4.97ms CPU time)\n\nRan 3 tests for test/StaleFeedQuarantine.t.sol:StaleFeedQuarantineTest\n[PASS] test_exactHeartbeatAgeIsStillFresh() (gas: 79821)\n[PASS] test_heartbeatSlackClosesTheLapseWindow() (gas: 597352)\n[PASS] test_oneSecondLapseAllowsPermissionlessStickyQuarantine() (gas: 1402580)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 10.69ms (1.46ms CPU time)\n\nRan 24 tests for test/AssetRegistry.t.sol:AssetRegistryTest\n[PASS] testFuzz_convertRoundTripNeverCreatesValue(uint256,uint8,uint8) (runs: 256, μ: 73601, ~: 83242)\n[PASS] test_anyoneCanQuarantineAStaleTokenButNotAFreshOne() (gas: 150827)\n[PASS] test_approveTokenRejectsCodelessFeed() (gas: 760054)\n[PASS] test_approveTokenRejectsCodelessTokenAndFeed() (gas: 117530)\n[PASS] test_approveTokenRejectsReserveAsset() (gas: 117416)\n[PASS] test_approveTokenRejectsZeroCapAndFutureListing() (gas: 866368)\n[PASS] test_badFeedAnswersReadAsNoPrice() (gas: 364271)\n[PASS] test_convertFailsWhenReserveFeedIsStale() (gas: 70866)\n[PASS] test_convertHandlesDifferentDecimals() (gas: 172490)\n[PASS] test_defaultParametersMatchTheDocumentedStartingValues() (gas: 167510)\n[PASS] test_everySetterIsTimelockOnly() (gas: 178651)\n[PASS] test_freshPriceIsNormalisedTo18Decimals() (gas: 23738)\n[PASS] test_listedTokensAndAssetRecordArePublished() (gas: 41428)\n[PASS] test_methodologyVersionOnlyMovesForward() (gas: 514732)\n[PASS] test_minimumTokenAgeCannotGoBelowThirtyDays() (gas: 109737)\n[PASS] test_onlyGuardianExecutorOrTimelockQuarantine() (gas: 583327)\n[PASS] test_paramsStayInsideHardBounds() (gas: 473219)\n[PASS] test_priceIsValidAtHeartbeatAndStaleOneSecondLater() (gas: 53355)\n[PASS] test_revertingOrMalformedFeedDoesNotRevertTheReader() (gas: 177818)\n[PASS] test_revokedTokenIsNotEligibleButStillPriced() (gas: 402836)\n[PASS] test_routerAllowlist() (gas: 396988)\n[PASS] test_slippageLimitCannotBeSwitchedOff() (gas: 109539)\n[PASS] test_tokenYoungerThanThirtyDaysIsNotEligible() (gas: 1623635)\n[PASS] test_windowCannotExceedInterval() (gas: 112207)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 20.72ms (18.74ms CPU time)\n\nRan 14 tests for test/FeeWaterfall.t.sol:FeeWaterfallTest\n[PASS] testFuzz_distributionConservesEveryUnit(uint256,uint256,uint16,uint16) (runs: 256, μ: 422786, ~: 428411)\n[PASS] test_basketReserveIsDepositedAtNavForTheTreasury() (gas: 841029)\n[PASS] test_basketReserveKeepsAccumulatingWhileTheVaultIsClosed() (gas: 931489)\n[PASS] test_claimPaysOnlyTheConfiguredRecipient() (gas: 1329657)\n[PASS] test_configurationIsTimelockOnly() (gas: 102613)\n[PASS] test_distributeSplitsTheNonLpSeventyFivePercent() (gas: 388340)\n[PASS] test_pushHonoursMinShares() (gas: 425705)\n[PASS] test_rescueCannotTouchFeeAssets() (gas: 931184)\n[PASS] test_roundingDustGoesToTheBasketReserve() (gas: 246455)\n[PASS] test_splitChangeOnlyAffectsLaterFees() (gas: 789294)\n[PASS] test_splitMustSumToOneHundredPercent() (gas: 81320)\n[PASS] test_staleBasketSurchargeIsAppliedOnlyWhileStale() (gas: 1512119)\n[PASS] test_startingSplitAndFeeAreVisibleOnChain() (gas: 54016)\n[PASS] test_swapFeeIsBoundedAtThreePercentIncludingSurcharge() (gas: 94494)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 35.78ms (34.29ms CPU time)\n\nRan 21 tests for test/FeeHook.t.sol:FeeHookErc20QuoteHighTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 385873, ~: 387403)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 374122)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 352194)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114689)\n[PASS] test_create2CollisionCannotMarkHookAsDeployed() (gas: 23612044)\n[PASS] test_deployerAuthenticatesCodeAndAppendsOnlyItsFixedArguments() (gas: 25088335)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651861)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 25019553)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 240738)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 699072)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 365253)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 1162729)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1189571)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810958)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 75234)\n[PASS] test_quoteIsCurrencyOne() (gas: 5631)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 746250)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 299290)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 357542)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 356623)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 431486)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 84.83ms (189.51ms CPU time)\n\nRan 21 tests for test/FeeHook.t.sol:FeeHookErc20QuoteLowTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 385470, ~: 383135)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 380419)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 357085)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114108)\n[PASS] test_create2CollisionCannotMarkHookAsDeployed() (gas: 23704765)\n[PASS] test_deployerAuthenticatesCodeAndAppendsOnlyItsFixedArguments() (gas: 25180773)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651839)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 25112274)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 247265)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 704022)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 371441)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 1162204)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1188828)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810088)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 75204)\n[PASS] test_quoteIsCurrencyZero() (gas: 5581)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 752725)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 293009)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 350941)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 351230)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 436444)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 89.82ms (139.84ms CPU time)\n\nRan 29 tests for test/RebalanceExecutor.t.sol:RebalanceExecutorTest\n[PASS] testFuzz_sandwichedFillNeverCostsMoreThanTheSlippageLimit(uint256,uint256) (runs: 256, μ: 470317, ~: 469595)\n[PASS] test_buysTheTopFiveAtTwentyPercentAndKeepsTheBuffer() (gas: 4134962)\n[PASS] test_cannotBuyATokenOutsideTheActiveBasket() (gas: 138996)\n[PASS] test_cannotBuyBeyondTheTargetDelta() (gas: 3277094)\n[PASS] test_cannotSellATokenAtOrBelowTarget() (gas: 3121706)\n[PASS] test_disposalIsOnlyForQuarantinedTokensAndEnforcesItsFloor() (gas: 3083373)\n[PASS] test_dustTradeWithNoEnforceableFloorIsRefused() (gas: 542515)\n[PASS] test_fillAtTheSlippageLimitSucceedsAndResetsTheFailureCount() (gas: 760413)\n[PASS] test_fillBelowTheOracleFloorIsUndoneAndCounted() (gas: 502157)\n[PASS] test_keeperFloorAppliesWhenStricterThanTheOracleFloor() (gas: 413532)\n[PASS] test_noTradingBeforeAnyBasketIsActive() (gas: 90208)\n[PASS] test_oneLegMustBeTheReserve() (gas: 3055491)\n[PASS] test_onlyAllowlistedRoutersAndNeverProjectContracts() (gas: 1156929)\n[PASS] test_onlyKeepersTrade() (gas: 285430)\n[PASS] test_outputIsMeasuredOnTheVaultSoFeeOnTransferTokensFailTheFloor() (gas: 3250922)\n[PASS] test_partialFillReturnsTheUnsoldRemainder() (gas: 356993)\n[PASS] test_pauseStopsTrading() (gas: 130806)\n[PASS] test_quarantinedPositionCanBeExitedAtAnyTime() (gas: 3799227)\n[PASS] test_quarantinedTokenWithDeadFeedIsDisposedThroughTheTimelock() (gas: 3771767)\n[PASS] test_removedMemberIsSoldAndItsReplacementBought() (gas: 5579511)\n[PASS] test_repeatedFailuresQuarantineTheAssetInsteadOfBlockingTheBasket() (gas: 3337916)\n[PASS] test_replacedExecutorLosesAccessToTheVault() (gas: 1047087)\n[PASS] test_reserveBufferCannotBeSpent() (gas: 3872548)\n[PASS] test_routerCannotReenterVaultOrExecutorDuringASwap() (gas: 402687)\n[PASS] test_sellsOnlyTheExcessOverTarget() (gas: 4377560)\n[PASS] test_smallDriftDoesNotTradeButMaterialDriftDoes() (gas: 4404631)\n[PASS] test_staleOracleStopsATradeUntilTheTokenIsQuarantined() (gas: 4006949)\n[PASS] test_swapEntryPointIsNotCallableFromOutside() (gas: 38611)\n[PASS] test_tradesOutsideTheWindowWaitForTheNextInterval() (gas: 4908965)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 90.66ms (143.22ms CPU time)\n\nRan 7 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_constructorsLeaveTheLaunchSupplyWithItsHolder() (gas: 28038608)\n[PASS] test_constructorsNeedNoExternalContractAndWireInDependencyOrder() (gas: 28090754)\n[PASS] test_constructorsRejectZeroAddresses() (gas: 4047)\n[PASS] test_launchGrantsNoRoleToAnyoneAndNothingToTheDeployer() (gas: 28155707)\n[PASS] test_missingWaterfallAndIdenticalCurrenciesStillFailClosed() (gas: 8224)\n[PASS] test_nativeQuoteStillRequiresMatchingWrappedReserve() (gas: 8276)\n[PASS] test_runtimeFitsEip170AndContainsNoDelegatecallCallcodeOrSelfdestruct() (gas: 51161942)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 91.44ms (33.64ms CPU time)\n\nRan 9 tests for test/adversarial/ExternalTokenFailures.t.sol:ExternalTokenFailuresTest\n[PASS] testFuzz_taxedReserveCannotMintSharesForUnreceivedAssets(uint256) (runs: 1000, μ: 1022741, ~: 1024084)\n[PASS] test_failedFeeTransferRollsBackLiabilitiesAndUnlocksClaims() (gas: 1034474)\n[PASS] test_falseReturnStrictRollbackAndNonStrictExit() (gas: 1069012)\n[PASS] test_invalidBooleanStrictRollbackAndNonStrictExit() (gas: 1069357)\n[PASS] test_minShareFailureRollsBackFeeDistributionAndApproval() (gas: 905351)\n[PASS] test_noReturnTokenIsPaidDuringStrictRedemption() (gas: 954053)\n[PASS] test_reserveCallbacksCannotReenterOnDepositOrRedemption() (gas: 1278434)\n[PASS] test_shortReturnStrictRollbackAndNonStrictExit() (gas: 1068812)\n[PASS] test_taxedReserveOneUnitAndMaximumDeposit() (gas: 1991060)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 91.61ms (92.25ms CPU time)\n\nRan 4 tests for test/Launch816Record.t.sol:Launch816RecordTest\n[PASS] test_embeddedOriginalBytecodesMatchTheLaunchRecord() (gas: 46424)\n[PASS] test_manifestResolvesToTheRecordedAddresses() (gas: 223822)\n[PASS] test_repairedCreationCodeIsTheVerifiedTree() (gas: 40318)\n[PASS] test_repairedRuntimeIsBoundedAndHasNoEscapeOpcodes() (gas: 38139466)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 132.86ms (54.24ms CPU time)\n\nRan 23 tests for test/TimelockedAdmin.t.sol:TimelockedAdminTest\n[PASS] test_adminCannotBeHandedToARoleHolder() (gas: 107046)\n[PASS] test_adminHandoverIsTwoStep() (gas: 483977)\n[PASS] test_adminWalletCannotHoldARole() (gas: 105720)\n[PASS] test_configurationCannotBeCalledDirectly() (gas: 168794)\n[PASS] test_constructorValidatesInput() (gas: 3897)\n[PASS] test_executeAtExactlyReadyTimeSucceeds() (gas: 141031)\n[PASS] test_executeBubblesTargetRevertAndKeepsOperation() (gas: 107529)\n[PASS] test_executeRejectsCallDataForCodelessTarget() (gas: 99026)\n[PASS] test_executeRespectsDelayAndGraceBoundaries() (gas: 291764)\n[PASS] test_executorMustBeAContract() (gas: 116721)\n[PASS] test_guardianCanOnlyTighten() (gas: 257058)\n[PASS] test_guardianVetoesScheduledOperation() (gas: 157888)\n[PASS] test_minDelayChangeAppliesToLaterSchedules() (gas: 398687)\n[PASS] test_oneAddressHoldsAtMostOneRole() (gas: 110112)\n[PASS] test_onlyAdminSchedulesAndExecutes() (gas: 124156)\n[PASS] test_onlyGuardianPausesAndStrangerCannotUnpause() (gas: 472243)\n[PASS] test_quorumBounds() (gas: 104665)\n[PASS] test_quorumCannotExceedSigners() (gas: 106797)\n[PASS] test_rolesAreSeparatedAfterConfiguration() (gas: 68190)\n[PASS] test_scheduleRejectsShortLongAndDuplicate() (gas: 159223)\n[PASS] test_signerCannotBecomeGuardian() (gas: 144348)\n[PASS] test_timelockCannotDropSignersBelowQuorum() (gas: 487793)\n[PASS] test_treasuryEthLeavesOnlyThroughADelayedOperation() (gas: 129171)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 132.92ms (2.59ms CPU time)\n\nRan 21 tests for test/FeeHook.t.sol:FeeHookNativeEthTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 319856, ~: 314067)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 325183)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 301553)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114036)\n[PASS] test_create2CollisionCannotMarkHookAsDeployed() (gas: 162273386)\n[PASS] test_deployerAuthenticatesCodeAndAppendsOnlyItsFixedArguments() (gas: 163749408)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651839)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 163680931)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 214260)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 658115)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 314151)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 973549)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1132963)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810004)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 75182)\n[PASS] test_nativeFeesArriveAsEthAndTheReceiveHookDoesNothing() (gas: 330760)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 638393)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 242603)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 288369)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 288953)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 406821)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 133.01ms (325.38ms CPU time)\n\nRan 9 tests for test/adversarial/ProposalBoundaries.t.sol:ProposalBoundariesTest\n[PASS] testFuzz_everySignedFieldIsBoundToTheSignature(uint8,uint256) (runs: 1000, μ: 295513, ~: 352530)\n[PASS] test_clearExpiredAfterBoundaryPreservesReplayProtection() (gas: 974662)\n[PASS] test_clearExpiredAtBoundaryCannotEraseAnExecutableProposal() (gas: 1216965)\n[PASS] test_delayedAgeIncreaseIsRecheckedAtActivation() (gas: 1211646)\n[PASS] test_delayedMethodologyChangeInvalidatesPendingProposal() (gas: 1221045)\n[PASS] test_delayedRevocationIsRecheckedAtActivation() (gas: 1207764)\n[PASS] test_delayedWeightCapReductionIsRecheckedAtActivation() (gas: 1264448)\n[PASS] test_failedQuorumDoesNotPoisonARetryWithValidSignatures() (gas: 828851)\n[PASS] test_signatureCannotBeReusedOnAnotherManager() (gas: 326192)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 132.99ms (139.65ms CPU time)\n\nRan 4 tests for test/Launch816.t.sol:Launch816Test\n[PASS] test_originalFailsAtSeventhApplicationWithTransactionBudget() (gas: 36752803)\n[PASS] test_originalGettersAndResolvedArgumentsWorkWithEnoughGas() (gas: 17666768)\n[PASS] test_repairedLaunchFitsTransactionBudgetAndGrantsNoRoles() (gas: 32101007)\n[PASS] test_wrongReferenceIsRejectedAndRollsBack() (gas: 14645402)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 318.25ms (72.97ms CPU time)\n\nRan 41 tests for test/EpochManager.t.sol:EpochManagerTest\n[PASS] test_activatedProposalCannotBeReplayed() (gas: 1235847)\n[PASS] test_activationFailsOnceExpiredButSucceedsAtTheExpirySecond() (gas: 1411229)\n[PASS] test_basketGoesStaleWithoutSwarmActivityAndAReportRefreshesIt() (gas: 1837118)\n[PASS] test_basketMayHoldFewerThanFiveAndLeaveTheRestInReserve() (gas: 974431)\n[PASS] test_cancelledProposalCannotBeReplayed() (gas: 799075)\n[PASS] test_digestMatchesIndependentEip712Computation() (gas: 67665)\n[PASS] test_onlyOnePendingProposalUntilItExpires() (gas: 1340173)\n[PASS] test_pauseBlocksPublishAndActivate() (gas: 964870)\n[PASS] test_proposalSignedForAnOlderSignerSetIsRejected() (gas: 200105)\n[PASS] test_publishThenActivateAfterDelay() (gas: 1250824)\n[PASS] test_rejectsAProposalChangedAfterSigning() (gas: 290264)\n[PASS] test_rejectsASignatureFromANonSigner() (gas: 288805)\n[PASS] test_rejectsAttestedMarketDataBelowTheMinimums() (gas: 1218616)\n[PASS] test_rejectsBelowQuorum() (gas: 276586)\n[PASS] test_rejectsExpiredProposal() (gas: 149951)\n[PASS] test_rejectsExpiryThatCannotOutliveTheDelay() (gas: 695183)\n[PASS] test_rejectsExpiryTooFarAhead() (gas: 150567)\n[PASS] test_rejectsMalformedAndMalleableSignatures() (gas: 514847)\n[PASS] test_rejectsMismatchedArrays() (gas: 470056)\n[PASS] test_rejectsMoreThanFiveAssets() (gas: 163595)\n[PASS] test_rejectsQuarantinedToken() (gas: 243675)\n[PASS] test_rejectsStaleAndFutureSnapshots() (gas: 808215)\n[PASS] test_rejectsTheSameSignerTwice() (gas: 290281)\n[PASS] test_rejectsTokenThatIsNotAllowlisted() (gas: 859774)\n[PASS] test_rejectsTokenWithStalePrice() (gas: 287541)\n[PASS] test_rejectsTokenYoungerThanThirtyDays() (gas: 1696545)\n[PASS] test_rejectsTotalWeightAbove100Percent() (gas: 1146659)\n[PASS] test_rejectsWeightAboveTheTokenCap() (gas: 192616)\n[PASS] test_rejectsWhenNoQuorumIsConfigured() (gas: 369577)\n[PASS] test_rejectsWrongEpoch() (gas: 191280)\n[PASS] test_rejectsWrongMethodologyVersion() (gas: 157342)\n[PASS] test_rejectsZeroWeightAndDuplicates() (gas: 509371)\n[PASS] test_replacingLargeBasketTruncatesArraysAndClearsEveryPendingField() (gas: 2315520)\n[PASS] test_reportAnchorNeedsQuorumAndAFreshNewerSnapshot() (gas: 496464)\n[PASS] test_revokingASignerDuringTheDelayInvalidatesThePendingProposal() (gas: 880130)\n[PASS] test_secondEpochNeedsANewerSnapshot() (gas: 1323758)\n[PASS] test_signatureFromAnotherChainIsRejected() (gas: 290803)\n[PASS] test_staleFeedAtActivationBlocksActivation() (gas: 690018)\n[PASS] test_tokenQuarantinedDuringTheDelayBlocksActivation() (gas: 984868)\n[PASS] test_turnoverLimitCapsAdditionsPerEpoch() (gas: 2293819)\n[PASS] test_weeklyCadenceBlocksAnEarlySecondEpoch() (gas: 2279641)\nSuite result: ok. 41 passed; 0 failed; 0 skipped; finished in 318.39ms (31.60ms CPU time)\n\nRan 26 tests for test/Revision.t.sol:RevisionTest\n[PASS] test_activationAtSnapshotAgeBoundarySucceeds() (gas: 1189864)\n[PASS] test_activationRechecksSnapshotAgeWithFreshPrices() (gas: 866414)\n[PASS] test_adminCanCancelRecoveryAndGuardianStillVetoesOtherCalls() (gas: 329190)\n[PASS] test_autoQuarantineDoesNotVetoProposalOrCloseFairDeposits() (gas: 3919750)\n[PASS] test_autoQuarantineRetainsDeltaAndWindowUntilGuardianConfirms() (gas: 6878086)\n[PASS] test_deadUntransferablePositionPreservesClaimsAndClosesDeposits() (gas: 5648607)\n[PASS] test_dustDepositCannotLockExistingShares() (gas: 5439911)\n[PASS] test_emptyBasketCannotResetTurnoverHistory() (gas: 1833111)\n[PASS] test_firstDepositChecksRegistryReserveScale() (gas: 159589)\n[PASS] test_firstTradeCannotChooseWindowStart() (gas: 1829943)\n[PASS] test_fullDustExitCanFreeHeldSlot() (gas: 5167650)\n[PASS] test_gasBurningUnquarantinedBalanceFailsWithBoundedError() (gas: 5682630)\n[PASS] test_guardianCannotVetoReplacementOrUnpause() (gas: 881452)\n[PASS] test_heldQuarantineClosesDepositsEvenWithFreshFeed() (gas: 4705525)\n[PASS] test_keeperFailuresCannotCreateExitRightsForAnyMember() (gas: 13863486)\n[PASS] test_lateFirstTradeUsesTheActivationSchedule() (gas: 2542285)\n[PASS] test_newSharesCannotRedeemInTheirDepositBlock() (gas: 5048795)\n[PASS] test_newSharesCannotTransferOrTransferFromToBypassLock() (gas: 4836815)\n[PASS] test_onlyKeeperOrTimelockChoosesTreasuryDepositTime() (gas: 507779)\n[PASS] test_proposalDelayAndSnapshotAgeMustLeaveExecutionTime() (gas: 1315527)\n[PASS] test_proposalDelayCannotConsumeEntireValidityPeriod() (gas: 33045)\n[PASS] test_quarantinedGasBurnerCannotStopUnrelatedTrades() (gas: 5369040)\n[PASS] test_releaseStartsANewFailureStreak() (gas: 6663761)\n[PASS] test_strictUnreadableBalancePreservesSharesAfterHoldingPeriod() (gas: 4584309)\n[PASS] test_unreadableNonStrictRedemptionEmitsUnknownSkippedSlice() (gas: 4627010)\n[PASS] test_untrackedDonationDoesNotBlockMemberPurchase() (gas: 1982111)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 319.34ms (98.15ms CPU time)\n\nRan 22 tests for test/IndexVault.t.sol:IndexVaultTest\n[PASS] testFuzz_depositThenRedeemNeverReturnsMore(uint256,uint256) (runs: 256, μ: 5929486, ~: 5937219)\n[PASS] test_depositCapBoundsTheBeta() (gas: 1011567)\n[PASS] test_depositFeeAccruesToExistingHolders() (gas: 946551)\n[PASS] test_depositHonoursMinShares() (gas: 434943)\n[PASS] test_depositIsRefusedWhileAHeldTokenHasNoFreshPrice() (gas: 5061980)\n[PASS] test_depositRejectsZeroAmountAndZeroReceiver() (gas: 185781)\n[PASS] test_depositsStayClosedUntilAGuardianExists() (gas: 28153437)\n[PASS] test_donationInflationDoesNotStealFromTheNextDepositor() (gas: 760549)\n[PASS] test_executorCannotTakeUntrackedTokenOrEndWithoutBegin() (gas: 485451)\n[PASS] test_firstDepositMintsOneShareUnitPerReserveUnit() (gas: 357848)\n[PASS] test_laterDepositorPaysCurrentNav() (gas: 4773481)\n[PASS] test_navAndHoldingsFollowTheBasketAndPrices() (gas: 4955557)\n[PASS] test_onlyTheExecutorContractMovesAssets() (gas: 540082)\n[PASS] test_pauseClosesDepositsButNeverRedemptions() (gas: 559523)\n[PASS] test_redeemPaysProRataInKind() (gas: 4960250)\n[PASS] test_redeemRejectsZeroAndMoreThanBalance() (gas: 404240)\n[PASS] test_redeemWorksWithSwarmKeeperAndOraclesAllOffline() (gas: 4930189)\n[PASS] test_rescueCannotTouchReserveOrBasket() (gas: 5190181)\n[PASS] test_shareTokenMetadata() (gas: 41233)\n[PASS] test_tokenWithBrokenBalanceOfBlocksDepositsNotRedemptions() (gas: 5131387)\n[PASS] test_untransferableTokenCannotTrapHolders() (gas: 4826818)\n[PASS] test_wrongReserveDecimalsAreCaughtOnFirstDeposit() (gas: 156998)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 326.58ms (362.75ms CPU time)\n\nRan 1 test for test/invariant/Solvency.invariant.t.sol:SolvencyInvariantTest\n[PASS]\nSolvencyInvariantTest invariants:\n[PASS] invariant_executorHoldsNothingBetweenTrades\n[PASS] invariant_feeAccountingConserves\n[PASS] invariant_noPropertyViolatedMidSequence\n[PASS] invariant_vaultIsSolventAndConsistent\n SolvencyInvariantTest invariants (runs: 32, calls: 2048, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claim             | 287   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | collectFees       | 296   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | deposit           | 309   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | movePrice         | 302   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | pushBasketReserve | 294   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | rebalance         | 275   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | redeem            | 285   | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.03s (2.02s CPU time)\n\nRan 1 test for test/adversarial/TreasurySequence.invariant.t.sol:TreasurySequenceInvariantTest\n[PASS] invariant_treasuryAndFixedSupplyConserveValue() (runs: 256, calls: 24576, reverts: 0)\n\n╭-------------------------+---------------------+-------+---------+----------╮\n| Contract                | Selector            | Calls | Reverts | Discards |\n+============================================================================+\n| TreasurySequenceHandler | advance             | 3482  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | cancel              | 3539  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | execute             | 3491  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | fund                | 3535  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | moveLaunchTokens    | 3458  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | schedule            | 3522  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | unauthorizedExecute | 3549  | 0       | 0        |\n╰-------------------------+---------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.60s (3.59s CPU time)\n\nRan 1 test for test/adversarial/CustodySequence.invariant.t.sol:CustodySequenceInvariantTest\n[PASS]\nCustodySequenceInvariantTest invariants:\n[PASS] invariant_allSharesAreBackedAndAccountedFor\n[PASS] invariant_everyReserveUnitHasADestination\n CustodySequenceInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭------------------------+----------------+-------+---------+----------╮\n| Contract               | Selector       | Calls | Reverts | Discards |\n+======================================================================+\n| CustodySequenceHandler | changeSplit    | 2060  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | claim          | 2001  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | deposit        | 2073  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | distribute     | 2064  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | donate         | 2016  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | push           | 2019  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | receiveFees    | 2115  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | redeem         | 2080  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | roundTrip      | 2065  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | togglePause    | 2094  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | transferShares | 1984  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | treasuryRedeem | 2005  | 0       | 0        |\n╰------------------------+----------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.28s (6.27s CPU time)\n\nRan 21 test suites in 6.28s (14.24s CPU time): 287 tests passed, 0 failed, 1 skipped (288 total tests)\n","passed":true},{"durationMs":88,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AssetRegistry.approveToken(address,address,uint32,uint16,uint40,bytes32)\",\"AssetRegistry.quarantine(address)\",\"AssetRegistry.quarantineIfStale(address)\",\"AssetRegistry.releaseQuarantine(address)\",\"AssetRegistry.revokeToken(address)\",\"AssetRegistry.setMethodology(uint32,bytes32)\",\"AssetRegistry.setParam(uint8,uint256)\",\"AssetRegistry.setReserveFeed(address,uint32)\",\"AssetRegistry.setRouter(address,bool)\",\"EpochManager.activate()\",\"EpochManager.anchorReport(uint64,bytes32,bytes[])\",\"EpochManager.cancelPending()\",\"EpochManager.clearExpired()\",\"EpochManager.publish((uint64,uint64,uint64,uint32,uint32,bytes32,address[],uint16[],uint256[],uint256[],uint256[]),bytes[])\",\"FeeHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"FeeHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"FeeHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"FeeHookDeployer.deploy(bytes32,bytes)\",\"FeeWaterfall.claim(uint8)\",\"FeeWaterfall.distribute()\",\"FeeWaterfall.pushBasketReserve(uint256)\",\"FeeWaterfall.receive()\",\"FeeWaterfall.rescue(address,address)\",\"FeeWaterfall.setRecipient(uint8,address)\",\"FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16)\",\"FeeWaterfall.setSwapFee(uint24,uint24)\",\"IndexVault.approve(address,uint256)\",\"IndexVault.beginTrade(address,uint256)\",\"IndexVault.deposit(uint256,address,uint256)\",\"IndexVault.endTrade(address)\",\"IndexVault.redeem(uint256,address,bool)\",\"IndexVault.rescue(address,address)\",\"IndexVault.setDepositCap(uint256)\",\"IndexVault.transfer(address,uint256)\",\"IndexVault.transferFrom(address,address,uint256)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\",\"RebalanceExecutor.disposeQuarantined(address,uint256,uint256,address,bytes)\",\"RebalanceExecutor.executeTrade(address,address,uint256,uint256,address,bytes)\",\"RebalanceExecutor.swapThroughRouter(address,address,uint256,uint256,address,bytes)\",\"TimelockedAdmin.acceptAdmin()\",\"TimelockedAdmin.cancel(bytes32)\",\"TimelockedAdmin.execute(address,uint256,bytes,bytes32)\",\"TimelockedAdmin.pause()\",\"TimelockedAdmin.receive()\",\"TimelockedAdmin.revokeKeeper(address)\",\"TimelockedAdmin.revokeSigner(address)\",\"TimelockedAdmin.schedule(address,uint256,bytes,bytes32,uint256)\",\"TimelockedAdmin.setExecutor(address)\",\"TimelockedAdmin.setGuardian(address)\",\"TimelockedAdmin.setKeeper(address,bool)\",\"TimelockedAdmin.setMinDelay(uint256)\",\"TimelockedAdmin.setQuorum(uint32)\",\"TimelockedAdmin.setSigner(address,bool)\",\"TimelockedAdmin.transferAdmin(address)\",\"TimelockedAdmin.unpause()\"],\"files\":{\".gitignore\":3,\"ADAPTATION.md\":57,\"README.md\":300,\"docs/LAUNCH-816.md\":149,\"docs/METHODOLOGY.md\":139,\"docs/PROPOSAL.md\":99,\"docs/SECURITY.md\":105,\"docs/VERIFICATION-816.md\":145,\"foundry.toml\":34,\"launch.json\":71,\"script/Deploy.s.sol\":65,\"src/AssetRegistry.sol\":340,\"src/EpochManager.sol\":404,\"src/FeeHook.sol\":258,\"src/FeeHookDeployer.sol\":108,\"src/FeeWaterfall.sol\":254,\"src/IndexVault.sol\":407,\"src/LaunchToken.sol\":16,\"src/RebalanceExecutor.sol\":384,\"src/TimelockedAdmin.sol\":283,\"src/interfaces/IIndex.sol\":91,\"test/AssetRegistry.t.sol\":298,\"test/Deployment.t.sol\":155,\"test/EpochManager.t.sol\":611,\"test/FeeHook.t.sol\":481,\"test/FeeWaterfall.t.sol\":239,\"test/IndexVault.t.sol\":366,\"test/Launch816.t.sol\":113,\"test/Launch816Record.t.sol\":131,\"test/LaunchToken.t.sol\":69,\"test/RebalanceExecutor.t.sol\":488,\"test/Revision.t.sol\":426,\"test/StaleFeedQuarantine.t.sol\":89,\"test/TimelockedAdmin.t.sol\":272,\"test/adversarial/CustodySequence.invariant.t.sol\":315,\"test/adversarial/ExternalTokenFailures.t.sol\":212,\"test/adversarial/ProposalBoundaries.t.sol\":129,\"test/adversarial/README.md\":42,\"test/adversarial/TreasurySequence.invariant.t.sol\":224,\"test/fork/Launch816Fork.t.sol\":137,\"test/invariant/Handler.sol\":165,\"test/invariant/Solvency.invariant.t.sol\":95,\"test/utils/Fixture.sol\":282,\"test/utils/Launch816.sol\":220,\"test/utils/Launch816Original.sol\":40,\"test/utils/Mocks.sol\":180,\"test/utils/V4Router.sol\":78},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2bdf7dc3287b3fb7098838fcb4e47dee90161eaff94465dea942816a4bdc0b83","verifiedTreeHash":"223a0580f095c46cea80abd213d9fc3910d159ff","verifierVersion":"0.1.0+c4d32abc"}]}