{"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":"50be58df-6c55-4f75-98a3-9ee3aa432075","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"7ac051c9008b178ad12718c1dfa48c94d4cfb1c52dd84dd7d887be5f73caeee1","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"d5c07ba83518eeb4ecbf5ec150a0a45de744bda3fe9f2c85393d2ef516b7b621","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":"accepted"},{"acceptedSubmissionHash":"e802d34f4580e76750bc16ed9d593a8aed7d4c8ae06d65f62bde8cbe8ffe2248","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":"accepted"},{"acceptedSubmissionHash":"8cc7a94645531f3ff0a7a382e2a034ceef5b915494f549d94049f55431ff1f11","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":"fba05ee71505821ab086281e0c73de6e10a7b1274667f5e43580fe90323617e8","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":"accepted"},{"acceptedSubmissionHash":"24b272779d06b9a2ff5362791d110c96bf80e8d94b2170c33e1a03998cc34d4a","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":"accepted"},{"acceptedSubmissionHash":"365bb20aa853abbffdde933894b74f9f48635efddc71516443352570f67be210","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":"accepted"},{"acceptedSubmissionHash":"2cb317b12de3e4d87bfcdba65fbb089eb6060e016f78b44a8d9172e2c3c1bbe0","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"83c204c625376f89bb1baef2b9eca9b0d2aaec6647fce170fa51c25a3963403a","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":"accepted"}],"objective":"Launch imd/acc's Sepolia test run 5 from this repository (the launch-sepolia branch, which is the sepolia branch without .github/workflows; do not add any workflow file): deploy only the ProjectRegistry, exactly as launch.json lists it, wired to test run 2's live Stacker and to IdentityMD's Intake v2. This registry is the code the mainnet registry will use, with Sepolia settings: test run 4's registry (launch #1378, 0xfe4470a42df0e77f7efb1b2e8135134a9cd7d102) plus version 3 of the panel rules and owner-only applications, both from the mainnet Stacker launch's audit (launch #1409). This run tests them live (applications, a listing and a challenge) before mainnet. imd/acc pays trading cashback to traders as staked IMD (sIMD), 0.25% to 1% of each trade at each project's choice, funded from the project's existing fees; only credits from listed projects earn points.\n\nDEPLOY (Sepolia, one contract):\n- ProjectRegistry(intake, oracleAsset, stacker, oracleSigner, questionChainId, challengeBond, challengeCooldown) = (0xa43e6f75ee006411f79ac1c84120606c2330de82 Intake v2, 0x44a1cd38474fb1748400e7deb5f8d786cce3f89a Sepolia test IMD, 0x0457276d7b036818b3eddc1a4a3fceda61e9314d the live Stacker of launch #1294, 0x5598aa9146215bc13eb26f2c692ad1461fd32982 oracle signer, 1, 5e18, 3600). launch.json already lists exactly this.\n- Do not deploy a Stacker, TestIMD or TestSIMD. The Stacker at 0x0457...314d is live on the live TestIMD 0x2b69...1e82 and TestSIMD 0xf9e2...1cc1 of launch #1129 (it is src/Stacker.sol without the mainnet InvalidTrader check; test/SepoliaFork.t.sol checks that), and PLEA's hook already credits through it. The registry only names the Stacker in its questions and never calls it.\n- src/ProjectRegistry.sol and src/oracle/OracleAttestation.sol stay as they are: no owner; the constructor makes no external call. applyListing(project, name, sourceUrl, rateBps 25-100, beneficiary): when the project reports an owner through owner() (projectOwner: a staticcall capped at 30,000 gas reading at most 32 bytes; a revert, a malformed answer or zero means no owner), only that owner or the project itself may apply (NotProjectOwner, before any fee); a project without an owner can be applied for by anyone. Anyone may challengeForBeneficiary(project, reason, beneficiary) a listed project after its cooldown. Each ask pays the oracle fee read live from the Intake (ORACLE_FEE(), 0.5 test IMD), plus the bond for a challenge, and asks Intake v2 one yes-or-no question with requestWithFailure, with the 8 rules of version 3 (docs/panel-rules-v2.md: the trader is valid router hookData, else the router's msgSender(), else sender only if it has no code, never a router; LP fees and returns to the trader, owner or team do not count toward the fee guard), each under 512 characters. onOracleResult (0x510379c7) accepts only the Intake, only its own open request, each answer once, only a signature by the oracle signer for this contract issued after the ask (300-second tolerance), from a panel of 15 with at least 11 agreeing: yes lists from that block, or keeps a challenged project (bond to its beneficiary, cooldown not restarted); no rejects, or delists from that block (bond back). onOracleFailure (0xa7980e31) only clears the open question and returns a bond; expire clears one after a day or once the Intake completed it. A bond the token refuses is recorded in bondOwed and claimed with claimBond(to). setBeneficiary waits while a question is open and changes the wallet at most once per day. Questions are filed under chain 1 (the oracle has no Sepolia RPC) and name Sepolia in the text.\n- test/mocks and test/trial hold test doubles only. Keep foundry.toml as it is (solc 0.8.26, cancun, 10,000 runs, bytecode_hash none).\n\nFACTS (read on Sepolia 2026-10-12, block 11,899,362): Intake v2 is live (callback gas 1,000,000) and sells the question for 0.5 of the test IMD, which anyone can mint. TestSIMD is not paused. The registry's runtime is 23,256 bytes; deploying it estimates about 36.7M gas on Sepolia's current schedule (test run 4's registry deployed through the factory at 11,897,725). PLEA's hook 0x2d5a...a8cc reports owner() 0x4b91...6821.\n\nTESTS: forge test passes (236 tests on this branch: 223 run offline; 11 fork tests run when ETH_RPC_URL and SEPOLIA_RPC_URL are set, and 2 mainnet-manifest checks skip because this launch.json is the Sepolia one). test/RegistryApplicantGate.t.sol covers owner-only applications; test/RegistryPolicyRevision.t.sol the version 3 rules; test/Deployment.t.sol this manifest; test/RegistrySepoliaFork.t.sol a real application to Intake v2 as PLEA's owner. Keep all of them passing.\n\nREADME: once live, add the registry's address as \"Sepolia test run 5\" in the Deployments table.","parentJobId":null,"planHash":"19662ce87a184e522194fc21b0fcbb1e193e8f680fb4f5611aefacc3dffb5dc3","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"50be58df-6c55-4f75-98a3-9ee3aa432075","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1428-launch-imd-acc-s-sepolia-test"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52013","feedbackHash":"ff9f2db48aa24938a13da46ffa4a3392ca427a6b0adaaf09b4891639a57e76c2","nodeKey":"adapt_contract_project","submissionHash":"7ac051c9008b178ad12718c1dfa48c94d4cfb1c52dd84dd7d887be5f73caeee1","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51203","feedbackHash":"73b2e4c4677bf69d6df43bcb42293bb197feda69498f241352908d9ebff27c6b","nodeKey":"audit_economics","submissionHash":"d5c07ba83518eeb4ecbf5ec150a0a45de744bda3fe9f2c85393d2ef516b7b621","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51285","feedbackHash":"6f4be95575be91ad54b470056169eaa04f1193f72fa6b3768450b657b322cf14","nodeKey":"audit_flow","submissionHash":"e802d34f4580e76750bc16ed9d593a8aed7d4c8ae06d65f62bde8cbe8ffe2248","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52193","feedbackHash":"5d46a7ecb06ca22247f88bcf2d441e5e412ff83e579d574362f7e03971112eae","nodeKey":"audit_imported_code","submissionHash":"8cc7a94645531f3ff0a7a382e2a034ceef5b915494f549d94049f55431ff1f11","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51084","feedbackHash":"e0b8447c13c77517f4597da88c12c4afa27372f2a1210e404636c940d0e08bd2","nodeKey":"audit_judge","submissionHash":"fba05ee71505821ab086281e0c73de6e10a7b1274667f5e43580fe90323617e8","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50952","feedbackHash":"e421c8890dc804a4cddc4bf954483d0e5757da546b16fb0b14c5505b247e332f","nodeKey":"audit_math","submissionHash":"24b272779d06b9a2ff5362791d110c96bf80e8d94b2170c33e1a03998cc34d4a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50969","feedbackHash":"fadd226b536e52ebf18108433bfb36e4140d3adb15c1123a3beefd56203cd7c3","nodeKey":"audit_permissions","submissionHash":"365bb20aa853abbffdde933894b74f9f48635efddc71516443352570f67be210","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52143","feedbackHash":"c84789c7cd5aca6a762e17284a2c3cc8a054e4318e7cba8ba97345bf92ff0d4e","nodeKey":"manifest","submissionHash":"2cb317b12de3e4d87bfcdba65fbb089eb6060e016f78b44a8d9172e2c3c1bbe0","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51749","feedbackHash":"13e8e0a49823e8dc59b0d06b5b93ba16c625ab6494d574bda916a9378de65b54","nodeKey":"write_foundry_tests","submissionHash":"83c204c625376f89bb1baef2b9eca9b0d2aaec6647fce170fa51c25a3963403a","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"57752a1cf76476a012b653b87a301d40da2cf0d62f7807f29eaf2aebb7bc3a1f","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ce6eaff570c608ab","findings":[{"citation":"resolved","description":"Boundary (external call, gas corner case). projectOwner forwards a fixed 30,000 gas to the project's owner() and treats an out-of-gas revert like 'no owner' (line 247: `if (ok && size == 32 && word >> 160 == 0)`). A project that really does report an owner, but whose owner() costs more than 30,000 gas (for example one that derives the owner from several cold storage reads or an external registry), is therefore applied for by anyone, exactly as a project with no owner() at all, and a squatter can hold its single question slot until the panel rejects. The 30,000 figure is enough for every common pattern (OpenZeppelin/Solady Ownable ~2.3k, transparent/UUPS proxy ~8-12k, diamond ~10k), so this is a documented limit rather than a bypass: the opposite direction (an applicant starving the staticcall to skip the gate) is not reachable, because with G gas left the call receives min(30000, 63G/64) and a starved call leaves only G/64 (< 500 gas), far below what the rest of applyListing needs (~300k for the body and the Intake request). Reported so the threshold is explicit; no change is required unless the team wants to raise OWNER_CALL_GAS or surface a distinct error for a call that ran out of gas.","line":243,"path":"src/ProjectRegistry.sol","reproduction":"Deploy a project whose owner() does 40 cold SLOADs (~84k gas) and then returns a non-zero owner O. Call reg.projectOwner(project): it returns address(0) although project.owner() returns O. Then, as a stranger S (not O, not the project) holding 0.5 test IMD approved to the registry, call applyListing(project, \"X\", \"https://a.co\", 50, S). Expected per the brief ('only that owner or the project itself may apply'): revert NotProjectOwner(O). Actual: the application is accepted, S pays the fee and now occupies the project's question slot with S as the stated beneficiary. Verified with test/scratch/Margins.t.sol::test_expensiveOwnerIsOpenToAnyone on this tree.","severity":"info","snippet":"            ok := staticcall(OWNER_CALL_GAS, project, 0, 4, 0, 32)","title":"owner() costing more than 30,000 gas is read as 'no owner', so the owner-only application gate silently degrades to permissionless for that project"}],"hash":"24b272779d06b9a2ff5362791d110c96bf80e8d94b2170c33e1a03998cc34d4a","nodeId":"f728d7b1-c103-4160-a46e-35e14b9258ac","outcome":"completed","summary":"The review is complete and the findings file is written and validated.\n\n**Outcome.** The math, boundary and numerical-gap pass over `src/ProjectRegistry.sol` found no value-moving defect. The registry has no multiplication or division at all. Its arithmetic is limited to checked timestamp additions, one fee-plus-bond sum, and bond accounting against an immutable bond, and every boundary I traced behaves as the brief specifies.\n\n**What I checked, with numbers:**\n- Deadline boundaries line up with no gap or overlap. The callback refuses after one day and `expire` refuses at or before one day unless the Intake completed the request.\n- Signature-window edges are inclusive as specified: an answer issued up to 300 seconds before the ask is accepted, one issued earlier is refused, and `expiresAt` itself is still valid.\n- Callback gas under the 200k mainnet stipend has headroom. The heaviest cold path, a defended challenge, used about 131k gas. The bond-owed variants were lower, and failures used at most about 82k.\n- Question and rule lengths at maximum input stay well under the paid door's caps: about 1,010 characters for an application and 1,107 for a challenge, against a 2,000 limit. Each of the 8 rules is asserted at or under 512 by the existing tests.\n- Bond conservation holds for the standard Sepolia test IMD. The fee is forwarded exactly and each challenge bond is paid once or recorded in `bondOwed`.\n- The applicant cannot starve the `owner()` staticcall to skip the owner gate. The 63/64 rule leaves under 500 gas after a starved call, far less than the rest of `applyListing` needs.\n\n**One finding, severity info.** A project whose `owner()` genuinely costs more than the 30,000-gas cap reads as ownerless, so a stranger can apply for it and occupy its question slot. I reproduced this with a scratch test under `test/scratch/`. It matches the brief's own definition of the cap, so I reported it to make the threshold explicit rather than as a required fix.\n\n**Coverage.** All nine listed entry points have rows: eight `holds`, one `finding` for `applyListing`, plus two invariant rows. The live Intake's `requests()` return layout used by early `expire` is confirmed by the existing Sepolia fork test. I did not run the fork tests myself since no RPC URL is set here.","treeHash":null,"usage":{"cachedInputTokens":1231001,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":32369,"runtime":"claude","turns":29,"wallClockMs":532808}},{"artifacts":[],"attempt":1,"bundleHash":"e571eeff9cda72117356e52fe4816325bf9544e17e3a1f1bc17eba90d7a8bfb0","device":"f138d40b9355e7bf","findings":[],"hash":"2cb317b12de3e4d87bfcdba65fbb089eb6060e016f78b44a8d9172e2c3c1bbe0","nodeId":"0e2e917c-70d0-4700-90ed-67f7328ed26f","outcome":"completed","summary":"Updated only `launch.json`, preserving the exact ProjectRegistry constructor arguments and clarifying the Sepolia test run 5 notes.\n\nValidation passed: manifest structure, compiled ABI, and `forge build`. `forge test`: **224 passed, 0 failed, 13 skipped**—11 require RPC URLs; 2 apply only to mainnet.","treeHash":"6f152d578c7ca215d3d37e1c4eea118a53fe5cef","usage":{"cachedInputTokens":541824,"inputTokens":70158,"model":"gpt-6-astra","outputTokens":7112,"runtime":"codex","turns":5,"wallClockMs":288424}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"93ca4a1020037bf1","findings":[{"citation":"resolved","description":"Access-control lens, applicant gate (applyListing L269-272). projectOwner counts any non-zero 32-byte address word as an owner. Many contracts 'renounce' by transferring ownership to 0x000000000000000000000000000000000000dEaD (or 0x1) instead of zero. For those the gate admits only msg.sender == 0xdEaD (nobody holds that key) or msg.sender == project, and a pool, token or hook usually cannot make an arbitrary call. Such a project can then never be applied for, a permanent lockout. Its renounced owner would also never pass the beneficiary rule, so there is no squatting risk to justify it. This matches the brief's literal wording ('zero means no owner'), so it is a gap in the agreed design rather than a deviation from it. The author should decide whether burn addresses count as no owner.","line":247,"path":"src/ProjectRegistry.sol","reproduction":"Deploy ProjectRegistry(0x1111,0x2222,0x3333,0x4444,1,5e18,3600) and a project whose owner() returns 0x000000000000000000000000000000000000dEaD. projectOwner(project) returns 0xdEaD. vm.prank(0xBEEF); applyListing(project,\"Dead\",\"https://example.org\",50,0xBEEF) reverts NotProjectOwner(0xdEaD). Only 0xdEaD or the project contract itself can pass. Expected, if a renounced owner means no owner: the application proceeds like one for an ownerless project. Actual: the project can never be listed unless its own code can call applyListing. Verified with a local scratch Foundry test, which passed by observing the revert.","severity":"low","snippet":"        if (ok && size == 32 && word >> 160 == 0) owner = address(uint160(word));","title":"Owner gate treats a renounced-to-0xdEaD owner as a live owner, so such a project can only ever be applied for by itself"}],"hash":"365bb20aa853abbffdde933894b74f9f48635efddc71516443352570f67be210","nodeId":"6de5fb1a-d40c-4b9c-be77-cbf740d9462d","outcome":"completed","summary":"I found one low-severity issue and nothing else in the permission review. Results are in `.imd-findings.json`; no repository files were changed (the scratch test was deleted after it ran).\n\nThe baseline suite passes offline: 224 passed, 13 skipped, 237 tests in total. The brief says 236, so one test seems to have been added on this branch.\n\n**The finding (low): a project whose owner is `0xdEaD` can never be applied for by anyone else** (`src/ProjectRegistry.sol:247`)\n- `projectOwner` counts any non-zero address as an owner, including burn addresses like `0x…dEaD` that many contracts \"renounce\" to.\n- For such a project, `applyListing` admits only `0xdEaD`, whose key nobody holds, or the project contract itself, which usually can't make the call. Any other caller gets `NotProjectOwner(0xdEaD)`, so the project is locked out of listing for good.\n- A scratch Foundry test reproduced this: a call from `0xBEEF` reverted with `NotProjectOwner(0xdEaD)`.\n- This follows the brief exactly as written (\"zero means no owner\"), so it's a gap in the agreed design rather than a deviation from it. You'd need to decide whether burn addresses should count as no owner.\n\n**Coverage:** all 9 listed entry points have a row, plus two invariants (token balance equals open bonds plus `bondOwed`, and no privileged role after deployment):\n- **`applyListing`:** marked as having the finding. Apart from it, the owner check runs before any fee is taken, and its fixed 30,000-gas cap means an applicant can't make it fail by limiting gas.\n- **The other entry points hold:**\n  - `challenge` and `challengeForBeneficiary` check the beneficiary pin and refuse a changed wallet before taking any payment.\n  - `onOracleResult` and `onOracleFailure` accept only the Intake and only this contract's own open questions, with the signature, panel and timing checks in the brief.\n  - `expire`'s one-day boundary lines up with `onOracleResult`'s.\n  - `setBeneficiary` is limited to the current wallet, once per day, and never while a question is open.\n  - `claimBond` pays only what is owed to the caller.\n  - `Stacker.credit` isn't deployed by this launch and the registry never calls it.\n- **`launch.json`:** its constructor arguments match the brief.\n\n**Not reported:** I looked at three griefing routes and found none worth reporting, because each costs the attacker money or hands the bond to the beneficiary:\n- a beneficiary repeatedly challenging its own project to keep real challengers out;\n- someone challenging just ahead of a `setBeneficiary` call to block it;\n- a challenge reason worded to split the panel so the bond comes back.\n\nTest IMD is free to mint, so on Sepolia these cost almost nothing, but they don't break any guarantee in the brief. I didn't run the 11 fork tests, since that needs the RPC URLs.","treeHash":null,"usage":{"cachedInputTokens":517194,"inputTokens":16,"model":"claude-opus-5-5","outputTokens":17856,"runtime":"claude","turns":9,"wallClockMs":265776}},{"artifacts":[],"attempt":1,"bundleHash":"661110aed7fb1b1b2c17029043e1096a3a9c0e85d281beec71690d2607a1d329","device":"95e219c7eba8a53f","findings":[],"hash":"7ac051c9008b178ad12718c1dfa48c94d4cfb1c52dd84dd7d887be5f73caeee1","nodeId":"5bf2b646-e408-4806-9704-141db09e495d","outcome":"completed","summary":"Prepared the launch handoff: corrected fork targets, updated the registry-only factory rehearsal, and documented the reproduced self-challenge limit in [ADAPTATION.md](/root/.identitymd/work/50be58df-6c55-4f75-98a3-9ee3aa432075/5bf2b646-e408-4806-9704-141db09e495d/ADAPTATION.md).\n\nContracts, manifest, configuration and dependencies remain unchanged.\n\n- `forge build`: passed.\n- `forge test`: 224 passed, 13 skipped.\n- Fork verification: 12 passed, including all 11 fork tests.\n\nLive deployment and the README address await the launch service’s confirmed receipt.","treeHash":"2a583f90c1c05e5597d301c6859cbc9a766e0c83","usage":{"cachedInputTokens":2083712,"inputTokens":135377,"model":"gpt-6-astra","outputTokens":16232,"runtime":"codex","turns":7,"wallClockMs":619563}},{"artifacts":[],"attempt":1,"bundleHash":"cca34197e21f4e6b782392029a85127a79a2454156861c8806f9ac35bc76a562","device":"f6c59a24920668f6","findings":[],"hash":"83c204c625376f89bb1baef2b9eca9b0d2aaec6647fce170fa51c25a3963403a","nodeId":"66a0553b-bcb8-4c98-a7ea-3784f1bd44b4","outcome":"completed","summary":"Added owner-boundary tests and bond-recovery invariants covering refused payouts, failed claims, relistings, and expiry. Changes are confined to `test/`.\n\nVerification passed: **238 tests passed, 0 failed, 13 skipped**. Skips cover 11 RPC-dependent fork tests and 2 mainnet-manifest checks. `forge build` also passed.","treeHash":"5755fdb6304696db6d608119bcf84830e451aa82","usage":{"cachedInputTokens":2509184,"inputTokens":120783,"model":"gpt-6-astra","outputTokens":21129,"runtime":"codex","turns":9,"wallClockMs":868805}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"5d667e4b0751bcb5","findings":[{"citation":"resolved","description":"Each project has one question slot (`_challenge` reverts AskOpen while p.ask != None). A challenge the panel answers yes pays the bond to p.beneficiary and, by design, does not restart the cooldown. Nothing stops the beneficiary itself from being the challenger, so the beneficiary of a listed project can file challengeForBeneficiary(project, weak reason, itself) over and over: its 5 IMD bond always comes straight back to itself on a yes, the only cost is the 0.5 IMD oracle fee per round, and for the whole time its question is open (minutes to a day, until the writer completes it or `expire` clears it) no third party can challenge the project. Between rounds the beneficiary can watch the mempool and refile in the block after settlement, ahead of a real challenger. docs/design.md line 39 covers the cooldown half of this (no quiet time bought) but not the slot occupancy. Impact is limited: the panel judges every rule on a self-challenge too, so a non-compliant project risks delisting itself, and a compliant one blocks challenges that would fail anyway; what is lost is the pointed `reason` a real challenger would supply. On Sepolia the fee is free test IMD, so the live trial could see this. Possible minimal fixes that keep the agreed design: refuse a challenger equal to p.beneficiary (cheap, but trivially dodged via another wallet), or on a defended challenge forward the bond to the beneficiary only when the challenger is not the beneficiary and otherwise keep it, so each self-round costs 5.5 IMD instead of 0.5; or accept and document it as a limit alongside the first-come application slot.","line":409,"path":"src/ProjectRegistry.sol","reproduction":"State: project P listed, beneficiary B, cooldown elapsed, B holds IMD and approved the registry. 1) B calls challengeForBeneficiary(P, \"routine check\", B): fee 0.5 IMD and bond 5 IMD pulled, p.ask = Challenge. 2) Any other wallet calls challengeForBeneficiary(P, \"It credits wallets outside trades.\", B): reverts AskOpen. 3) The Intake delivers a signed yes: Defended, _payBond(B) returns the 5 IMD to B, challengeOpenAt unchanged. 4) B repeats step 1 immediately. Expected: a third party can file a challenge against P once the cooldown has passed; actual: B's net cost is 0.5 IMD per round and the project is unchallengeable by others while B's own question is open. Verified with a forge test on RegistryBase: three self-rounds, each with the outsider's challenge reverting AskOpen, cost B exactly 3 * 0.5e18 and left challengeOpenAt at the original value.","severity":"low","snippet":"            _payBond(p.beneficiary);","title":"A listed project's beneficiary can keep the single question slot busy by challenging itself, locking out real challengers for 0.5 IMD a round"},{"citation":"resolved","description":"The brief says the fork test makes a real application to Intake v2 as PLEA's owner for the hook that is listed today (0x2d5a03d5bab98a4a435edad11813373963bca8cc, owner 0x4b91...6821) with the registry wired to the live Stacker 0x0457...314d. The test instead applies for the earlier PLEA v10 hook 0x3d4C...68Cc and constructs the registry with the test run 1 Stacker 0x293C...F477. Read on Sepolia at block 11,899,443: 0x3d4C...68Cc also reports owner() = 0x4b91...6821, so the owner-only gate is still exercised and the test passes; the drift only means the rehearsed question body names a Stacker and a project that this launch does not use. Not a contract defect; worth aligning so the fork rehearsal matches the manifest.","line":22,"path":"test/RegistrySepoliaFork.t.sol","reproduction":"Run forge test --match-path test/RegistrySepoliaFork.t.sol with SEPOLIA_RPC_URL set: the Requested body names stacker 0x293c...f477 and project 0x3d4c...68cc. Expected per the brief: 0x0457...314d and 0x2d5a...a8cc. No failure; informational.","severity":"info","snippet":"    address internal constant PLEA_HOOK = 0x3d4CcAc329010b8beA3b14498d9a45EAB00c68Cc;","title":"The Sepolia fork test applies for PLEA's previous hook and names the test run 1 Stacker, not the launch's"},{"citation":"resolved","description":"Read in full: src/ProjectRegistry.sol, src/oracle/OracleAttestation.sol, src/Stacker.sol (not deployed by this launch), test/mocks/MockIntake.sol, test/ProjectRegistry.t.sol (fixture), test/RegistryApplicantGate.t.sol, test/RegistryPolicyRevision.t.sol, test/RegistrySepoliaFork.t.sol, test/Deployment.t.sol, launch.json, docs/panel-rules-v2.md, the pinned oracle-consumer reference and the protected deployment probe. Also read: the live Intake v2 source from Sourcify (chain 1, full match 2026-10-10): its `requests` getter returns (payer, callbackTarget, callbackSelector, completed) as the registry's IIntake declares, `_request` requires amount >= priceOf and pulls exactly amount, `complete` is writer-only, checks failure args[0:32]/[32:64] against the request id and status, and calls the callback with a fixed callbackGas stipend inside a raw call. The test run 4 registry's verified source (Sepolia, full match) was diffed against this tree: the only changes are projectOwner/OWNER_CALL_GAS/NotProjectOwner and the version 3 `trader` and `feeGuard` strings; OracleAttestation.sol is byte-identical to the live one and matches the canonical struct, type string and domain. Live Sepolia reads at block 11,899,443: Intake callbackGas 1,000,000, priceOf(oracle.request@oracle-1, 0x44a1...f89a) = 0.5e18, test run 4 registry oracleSigner = 0x5598...2982 with PLEA's hook 0x2d5a...a8cc listed (so the manifest's signer is the key that actually signs), PLEA's hook owner() = 0x4b91...6821, the Stacker 0x0457...314d has code. The Intake's own `signer()` (0x169B...279F) is its quote signer, not the attestation signer. Offline suite: 223 passed, 13 skipped (fork and mainnet-manifest tests). Checked and found sound: owner gate (cannot be starved by gas because of the 63/64 rule, every rest-of-call path needs far more than 1/64 of the gas; revert, short, long and dirty-word answers read as no owner; fee pulled only after the gate); every state-changing entry point and its guard (applyListing, challenge, challengeForBeneficiary, onOracleResult, onOracleFailure, expire, claimBond, setBeneficiary); bond conservation (one bond in per challenge, exactly one bond out on settle, clear or expire, bondOwed fallback); replay (consumed requestId, projectOfIntake cleared before payouts, CEI order, nonReentrant); attestation checks (expiry, issuedAt tolerance both ways, panel 15/11, chainId 1, bool type); manifest (7 args in declaration order, checksummed addresses, name and notes within limits, no $owner needed, constructor makes no external call); runtime forbids nothing the launch forbids (no DELEGATECALL/CALLCODE/SELFDESTRUCT, no owner, no setters, no proxy or initializer); rule strings are under 512 bytes and contain no quote or backslash; the question stays under 2000 bytes at maximum inputs. Not reachable from here: the oracle plane's off-chain validation of the body (PaidOracleInput, whether `consumer` and `allowAmbiguous` keys are accepted is inferred only from test run 4's answered questions using the same body shape), the panel's reading of the version 3 rules (no live rehearsal yet, as docs/panel-rules-v2.md says), and the launch factory and deployer policy (gas ceiling for a 23,256-byte runtime). Trust assumptions the design accepts and the adapter should keep in view: the Intake owner can change the price, the writer and callbackGas (a stipend below what onOracleResult needs would make every answer undeliverable, leaving only expire); the oracle signer is one fixed key for the life of the contract; the writer pairs answers to requests and the registry does not pin questionHash.","line":53,"path":"src/ProjectRegistry.sol","reproduction":"n/a: coverage statement, not a defect.","severity":"info","snippet":"contract ProjectRegistry is OracleAttestationConsumer, ReentrancyGuard {","title":"Review scope and coverage: what was read, what was checked live, what could not be reached"}],"hash":"8cc7a94645531f3ff0a7a382e2a034ceef5b915494f549d94049f55431ff1f11","nodeId":"d777090b-980f-448b-a0b5-68d69d14aabd","outcome":"completed","summary":"The review is complete and the findings are in `.imd-findings.json` at the repository root. No file in the tree was changed; the scratch test I used for verification was removed.\n\n**Outcome: no critical, high or medium defect.** The code the launch deploys is the live test run 4 registry plus exactly two changes, and both hold up.\n\n**What I read and checked**\n- Read in full: the registry, the oracle attestation library, the Stacker, the mock Intake, the gate, policy, fork, deployment and fixture tests, the manifest, the rule docs, and the pinned references.\n- Diffed the tree against the Sourcify-verified test run 4 registry: the only changes are the owner gate and the version 3 `trader` and `feeGuard` strings. The attestation library is byte-identical to the live one.\n- Read the live Intake v2 source from Sourcify. Its `requests` getter, payment pull, writer-only `complete`, failure-argument check and callback stipend all match what the registry assumes.\n- Live Sepolia reads: callback gas 1,000,000, price 0.5 test IMD, test run 4 registry trusts 0x5598…2982 and has PLEA listed, PLEA's hook reports owner 0x4b91…6821. The Intake's own `signer()` is a different key, but that one signs quotes, not attestations.\n- Offline suite: 223 passed, 13 skipped (fork and mainnet-manifest tests), as the brief states.\n- Manifest: seven arguments in declaration order, all four addresses correctly checksummed, name and notes within limits.\n\n**Findings written**\n- **Low.** A listed project's beneficiary can challenge itself repeatedly. Its bond comes straight back on each yes, the cooldown does not restart, and while its own question is open every outsider's challenge reverts with AskOpen. Net cost is one oracle fee per round. I verified the sequence with a forge test. The design doc covers the cooldown half but not the slot occupancy.\n- **Info.** The Sepolia fork test applies for PLEA's previous hook and wires the registry to the test run 1 Stacker rather than the launch's. It still passes, since both hooks report the same owner.\n- **Info.** A scope and coverage statement listing what was read, what was verified on chain, what could not be reached (the plane's off-chain body validation, the panel's reading of the new rules, the deployer's gas policy), and the trust assumptions the adapter should keep in view.\n\n**Confirmed sound**: the owner gate cannot be starved of gas because of the 63/64 rule, bond accounting pays out exactly once per challenge, answers are replay-protected and panel-checked, and the runtime contains nothing the launch forbids.","treeHash":null,"usage":{"cachedInputTokens":1447924,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":43407,"runtime":"claude","turns":32,"wallClockMs":727808}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"896d1238054266ca","findings":[{"citation":"resolved","description":"The brief and docs/design.md (line 60: 'Sepolia questions are filed under chain 1 ... and the text names Sepolia') promise that a question filed under questionChainId 1 names Sepolia in its text. _intro() only writes 'on chain 11155111' (block.chainid as a decimal), and no other part of applyQuestion, challengeQuestion or the definitions contains the word 'Sepolia'. The body therefore says \"chainId\":1 while the question says 'on chain 11155111' and the evidence rule tells the panel to use 'the verified source published for this address on the chain named in the question'. A panel member who resolves the chain from the filed chainId (1) looks the project up on Ethereum, finds no code there and, per the evidence rule, must answer false; a member who knows 11155111 answers from Sepolia. This is a wording risk for the live trial, not a loss of funds: the same wording was used by the test run 4 registry and the rehearsal body (docs/panel-rules-v2-rehearsal-body.json also says 'on chain 11155111'), and PLEA was listed 11 of 12 with it. Either the text should name the network ('Sepolia (chain 11155111)') as the brief states, or the brief and design.md should stop claiming it does.","line":585,"path":"src/ProjectRegistry.sol","reproduction":"Deploy ProjectRegistry with questionChainId = 1 under vm.chainId(11155111) and call applyQuestion(project, \"PLEA\", \"https://x.y/z\", 50, beneficiary) or challengeQuestion(project, \"r\", 50, beneficiary). Expected (brief, docs/design.md:60): the text names Sepolia. Actual: vm.contains(q, \"Sepolia\") is false and vm.contains(q, \"on chain 11155111\") is true; the body built by _body() carries \"chainId\":1. Reproduced in a scratch test (test_questionNeverNamesSepolia, passes on this tree).","severity":"low","snippet":"            \" on chain \",\n            Strings.toString(block.chainid),","title":"Question text names Sepolia only by chain id while the body is filed under chain 1; the word 'Sepolia' never appears, contrary to the brief and docs/design.md"},{"citation":"resolved","description":"The gate is the requested design (only the reported owner or the project itself may apply), so this is reported as a consequence to decide on, not a permission bypass. Uniswap v4 hooks are routinely deployed with address mining through a deployer contract (the deterministic CREATE2 proxy 0x4e59b44847b379578588920cA78FbF26c0B4956C or a factory). A hook that took Ownable(msg.sender) in its constructor then reports that deployer as owner(). The deployer cannot call applyListing, the hook has no function that does, and every other caller is refused with NotProjectOwner. In test run 4 anyone could apply for such a project; with this change it can never be listed, and the team's only remedy is to redeploy the hook. The panel's beneficiary rule already protects an owned project's points, so the gate adds a liveness cost without a fallback (for example, also admitting the beneficiary a previous listing recorded, or a wallet the project names through another getter).","line":269,"path":"src/ProjectRegistry.sol","reproduction":"Deploy a Deployer contract whose only function is create(0, code) and have it deploy a hook whose constructor sets owner = msg.sender. projectOwner(hook) == address(deployer). Call applyListing(hook, \"Hook\", \"https://x.y/z\", 50, team) from the team wallet and from any other wallet: both revert NotProjectOwner(deployer) before any fee. Nobody can ever list the hook. Reproduced in a scratch test (test_deployerOwnedProjectIsUnlistable, passes on this tree).","severity":"low","snippet":"        address owner_ = projectOwner(project);\n        if (owner_ != address(0) && msg.sender != owner_ && msg.sender != project) {\n            revert NotProjectOwner(owner_);\n        }","title":"Owner-only applications make a project unlistable when owner() reports a contract that cannot call applyListing (CREATE2 deployer, factory)"},{"citation":"resolved","description":"Economic-dependency note, already accepted by the owner as a documented limit (NEXT_SESSION.md: 'fixed signer and Intake ... accepted as documented limits'). The action id is a constant and intake, oracleAsset and oracleSigner are immutable, while the oracle-consumer reference says each must be settable so a new action version or moved price needs no redeploy. If the Intake owner calls setPrice(ACTION, imd, 0) or sells only oracle-2, every applyListing and challenge reverts OracleUnavailable: nothing can be listed or delisted again, and listed projects keep earning points with no way to challenge them. No funds are lost: open questions still clear through expire and bonds return. Recorded so the judge sees it was checked; no change is proposed for the Sepolia run.","line":345,"path":"src/ProjectRegistry.sol","reproduction":"MockIntake.setPrice(0) (the live Intake's setPrice(ACTION, asset, 0)), then applyListing(...) or challengeForBeneficiary(...): revert OracleUnavailable. A project listed before the change stays listed indefinitely; the only recovery is a new registry.","severity":"info","snippet":"        uint256 fee = ORACLE_FEE();\n        if (fee == 0) revert OracleUnavailable();","title":"Documented limit: with no owner, retiring action oracle.request@oracle-1 (price 0) or rotating the Intake or signer freezes the listing set permanently"}],"hash":"d5c07ba83518eeb4ecbf5ec150a0a45de744bda3fe9f2c85393d2ef516b7b621","nodeId":"a047c05a-c5fc-4c2e-8411-cc17d70f35fe","outcome":"completed","summary":"The review is complete and written to `.imd-findings.json`. The tree is otherwise untouched: the scratch probe test was removed and `git status` is clean apart from the findings file, which is ignored.\n\n**Outcome: no critical, high or medium defect in the economics, invariants or flow gaps.** Two low findings and one documented-limit note are recorded, each with a concrete reproduction, plus coverage rows for all nine entry points and five invariants.\n\nWhat I verified, beyond reading the code:\n\n- **Scope of change.** Diffing this tree against test run 4's verified source on Sourcify shows only the owner gate and the two version 3 rule strings differ. The rule text matches docs/panel-rules-v2.md character for character, at 473 and 408 characters.\n- **Live Intake v2 flows.** Its source on Sourcify confirms the assumptions `expire` relies on: a request is completed exactly once, the flag is set before the single callback attempt, and the `requests` getter has the shape the registry decodes. Live reads: price 0.5 test IMD, callback gas 1,000,000, PLEA's owner is the test wallet.\n- **Bond conservation.** Contract balance always covers open-challenge bonds plus `bondOwed`; the fee approval is consumed whole in the same call. The existing accounting invariant suite passes, and the full suite passes offline (224 passed, 13 fork tests skipped).\n\nThe findings:\n\n1. **Low. The question text never names Sepolia.** It says \"on chain 11155111\" while the body is filed under chain 1, although the brief and docs/design.md state the text names Sepolia. The rehearsal body that reached a signed yes had the same wording, so this is a wording and documentation mismatch rather than a loss.\n2. **Low. The owner gate can make a project unlistable.** A hook deployed through a CREATE2 deployer with `Ownable(msg.sender)` reports the deployer as owner, and nobody can then apply. This is the requested design, reported as a consequence for the author to weigh.\n3. **Info. Retiring the oracle action freezes the listing set.** With no owner and a constant action id, a zero price makes every ask revert. The owner has already accepted this as a documented limit; no funds are at risk.\n\nNothing in my area was left unreached. Stacker.credit is marked holds because this launch does not deploy it and the registry never calls it.","treeHash":null,"usage":{"cachedInputTokens":2046082,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":45232,"runtime":"claude","turns":40,"wallClockMs":841706}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7e929507773df661","findings":[{"citation":"resolved","description":"The comment above `_definitions` states the registry sends \"Version 2 of the panel's rules\". The function body (lines 563 and 568) carries the version 3 `trader` rule (\"Resolve valid router hookData first, else IMsgSender(sender).msgSender() during the swap, else sender only if it has no code; never tx.origin...\") and the version 3 `feeGuard` rule (\"LP fees do not count: the trader may also be the LP. Amounts returned to the trader, owner or team do not qualify.\"), which docs/panel-rules-v2.md lists under \"Version 3 (draft for the mainnet registry)\" and the launch notes describe as version 3. This source is what gets verified on Sourcify for the test run 5 registry and reused for mainnet, so a reader of the verified source is told the wrong rule version. No behavioral effect; documentation-only drift in the shipped source.","line":540,"path":"src/ProjectRegistry.sol","reproduction":"Read src/ProjectRegistry.sol:540 (\"Version 2 of the panel's rules\"). Call `definitions(<any project>, 50, <any beneficiary>)` on a deployed registry (or run test/RegistryPolicyRevision.t.sol) and compare the `trader` and `feeGuard` values with docs/panel-rules-v2.md: they match the table under \"Version 3\" (lines 50-53), not the version 2 table (lines 14 and 17). Expected: the comment names version 3 (eight rules, two revised by launch #1409's audit). Actual: it names version 2.","severity":"info","snippet":"    /// @dev Version 2 of the panel's rules (docs/panel-rules-v2.md), rehearsed on Sepolia. IMD","title":"NatSpec on _definitions says the registry sends version 2 of the panel rules while the code sends version 3"}],"hash":"e802d34f4580e76750bc16ed9d593a8aed7d4c8ae06d65f62bde8cbe8ffe2248","nodeId":"50193b43-2698-4054-9dda-5159aa9d0a0e","outcome":"completed","summary":"Review complete. The findings file is written and the scratch probe removed.\n\n**Outcome:** no exploitable defect in the registry's control flow. One info-level documentation drift reported.\n\n**What I checked, from the Execution Trace, Periphery and First Principles guides:**\n- Every entry point's guard order, state writes and failure paths: applications, both challenge forms, the signed result callback, the unsigned failure callback, expire, bond claims and beneficiary handoffs.\n- Interleavings across transactions: answers after expiry, failures after expire, re-applications after rejection or delisting, handoffs around challenges, self-challenges, third-party paid requests naming the registry as callback. All were either refused by a guard or already documented as accepted limits in docs/design.md.\n- The one lead I tested mechanically: a stranger starving the 30,000-gas owner() staticcall to read \"no owner\". A scratch test over gas limits from 25k to 2M never completed an application, because EIP-150 leaves under 1/64 of the gas after the sub-call fails.\n- Periphery: the EIP-712 struct hashing, signature verification order, and the two assembly helpers (owner read, tolerant transfer) use scratch memory correctly and gate on return size.\n- The offline suite passes (223 tests, 2 mainnet-manifest skips as expected).\n\n**The one finding (info):** the NatSpec at src/ProjectRegistry.sol:540 says the contract sends version 2 of the panel rules, while the definitions carry version 3's trader and fee-guard text. No behavioral effect, but this source is what gets verified and reused for mainnet.\n\n**Coverage record:** all nine listed entry points marked `holds` with reasons, plus rows for the bond-conservation and single-ask invariants and the two periphery pieces. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":1013034,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":35319,"runtime":"claude","turns":28,"wallClockMs":598220}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7c0191a32541eb74","findings":[{"citation":"resolved","description":"Merged from audit_permissions (0xdEaD owner) and audit_economics (deployer-owned hook): one root cause. projectOwner() treats every non-zero, well-formed 32-byte owner() answer as a live owner, and applyListing then admits only that address or the project itself. Two common patterns make that address one that can never call applyListing: (1) projects that 'renounce' by transferring ownership to 0x000000000000000000000000000000000000dEaD or 0x1 instead of zero; (2) Uniswap v4 hooks deployed through a CREATE2 deployer or factory with Ownable(msg.sender), which then report the deployer contract as owner(). In both cases the team wallet, the beneficiary and every stranger get NotProjectOwner, the project has no code path that calls applyListing, and the project can never be listed; test run 4's registry would have accepted an application from anyone. This matches the brief's literal wording ('zero means no owner', 'only that owner or the project itself may apply'), so it is a liveness gap in the agreed design for the author to decide on, not a permission bypass; the panel's beneficiary rule already protects an owned project's points, so no squatting risk justifies the lockout. Not a loss of funds: nothing is paid before the revert.","line":270,"path":"src/ProjectRegistry.sol","reproduction":"Deploy ProjectRegistry(mockIntake, mintableIMD, 0x57AC, signer, 1, 5e18, 3600). Case A: a project whose owner() returns 0x000000000000000000000000000000000000dEaD. reg.projectOwner(p) == 0xdEaD; vm.prank(anyWallet); reg.applyListing(p, \"Dead\", \"https://example.org/x\", 50, anyWallet) reverts NotProjectOwner(0xdEaD) for every caller except 0xdEaD (no key) or p itself. Case B: Deployer.create(type(OwnableHook).creationCode) where OwnableHook's constructor sets owner = msg.sender; reg.projectOwner(hook) == address(deployer); vm.prank(team); reg.applyListing(hook, \"Hook\", \"https://example.org/x\", 50, team) reverts NotProjectOwner(deployer). Expected if a renounced/deployer owner means 'no owner': the application proceeds like one for an ownerless project. Actual: the project can never be listed unless its own code calls applyListing. Reproduced in test/scratch/Judge.t.sol (test_deadOwnerLocksOut, test_deployerOwnedLocksOut) on this tree; both observe the revert.","severity":"low","snippet":"        if (owner_ != address(0) && msg.sender != owner_ && msg.sender != project) {","title":"Owner-only application gate permanently locks out a project whose reported owner() cannot call applyListing (burn-address renounce, CREATE2 deployer or factory as owner)"},{"citation":"resolved","description":"From audit_math, reproduced. projectOwner forwards a fixed 30,000 gas and treats an out-of-gas revert like a missing owner (line 247: `if (ok && size == 32 && word >> 160 == 0)`). A project whose owner() legitimately costs more than that (many cold storage reads, an external registry lookup) is applied for by anyone, exactly like an ownerless project, so a squatter can occupy its single question slot until the panel rejects. The limit is generous for every common pattern (OZ/Solady Ownable ~2.3k, proxies ~8-12k, diamonds ~10k) and is what the brief specifies ('a staticcall capped at 30,000 gas'; 'a revert ... means no owner'). The opposite direction (an applicant starving the staticcall to skip the gate) is not reachable: with G gas left the call receives min(30000, 63G/64), and a G small enough to starve a cheap owner() leaves far less than the ~300k the rest of applyListing and the Intake request need. Documented limit; no change required unless the team wants a distinct error for an owner() that ran out of gas.","line":243,"path":"src/ProjectRegistry.sol","reproduction":"Deploy ExpensiveOwner(team) whose owner() does 40 cold SLOADs (~84k gas) then returns team. p.owner() == team but reg.projectOwner(address(p)) == address(0). vm.prank(stranger); reg.applyListing(address(p), \"X\", \"https://example.org/x\", 50, stranger) succeeds; reg.projectOf(address(p)).asker == stranger and the stranger's 0.5 IMD was paid. Expected per the brief's intent ('only that owner or the project itself may apply'): revert NotProjectOwner(team). Actual: accepted. Reproduced in test/scratch/Judge.t.sol::test_expensiveOwnerOpenToAnyone on this tree.","severity":"info","snippet":"            ok := staticcall(OWNER_CALL_GAS, project, 0, 4, 0, 32)","title":"owner() costing more than 30,000 gas is read as 'no owner', so the owner-only gate silently becomes permissionless for that project"},{"citation":"resolved","description":"From audit_flow, reproduced. The comment names version 2, but the `trader` rule (line 563, 'Resolve valid router hookData first, else IMsgSender(sender).msgSender() during the swap, else sender only if sender has no code; never tx.origin...') and the `feeGuard` rule (line 568, 'LP fees do not count: the trader may also be the LP. Amounts returned to the trader, owner or team do not qualify.') are the version 3 texts from docs/panel-rules-v2.md lines 52-53 and the launch notes. This source is what gets published and verified for the test run 5 registry and reused for mainnet, so a reader of the verified source is told the wrong rule version. Documentation drift only; no behavioural effect. Each of the eight rules measured 173-473 characters, under the 512 limit, and contains no double quote or backslash.","line":540,"path":"src/ProjectRegistry.sol","reproduction":"Read src/ProjectRegistry.sol:540 ('Version 2 of the panel's rules'). Call definitions(anyProject, 50, anyBeneficiary) and compare the `trader` and `feeGuard` values with docs/panel-rules-v2.md: they equal the table under 'Version 3 (draft for the mainnet registry)' (lines 52-53), not the version 2 table (lines 14 and 17). Expected: the comment names version 3. Actual: it names version 2. Confirmed by printing definitions() in test/scratch/Judge.t.sol::test_textAndLimits.","severity":"info","snippet":"    /// @dev Version 2 of the panel's rules (docs/panel-rules-v2.md), rehearsed on Sepolia. IMD","title":"NatSpec above _definitions says the registry sends version 2 of the panel rules while the code sends version 3"},{"citation":"resolved","description":"From audit_economics, reproduced; recalibrated to info. The brief says questions 'name Sepolia in the text' and docs/design.md line 60 says 'the text names Sepolia', but _intro() only writes 'on chain ' + block.chainid ('on chain 11155111'), and no other part of applyQuestion, challengeQuestion or the definitions contains 'Sepolia'. The body is filed under \"chainId\":1 while the evidence rule tells the panel to use 'the chain named in the question'. launch.json's notes state the author's reading ('their text identifies Sepolia by chain 11155111'), test runs 3 and 4 used this exact wording live and PLEA was listed 11 of 12 and defended 11 of 11 with it, so there is no observed misreading and no fund or safety impact. It is a wording mismatch between the brief/design.md and the code for the author to resolve one way or the other (write 'Sepolia (chain 11155111)', or update the brief and design.md).","line":585,"path":"src/ProjectRegistry.sol","reproduction":"vm.chainId(11155111); deploy ProjectRegistry with questionChainId = 1; q = reg.applyQuestion(project, \"PLEA\", \"https://github.com/khaed1/plea\", 50, beneficiary). Expected (brief, docs/design.md:60): vm.contains(q, \"Sepolia\") is true. Actual: vm.contains(q, \"Sepolia\") is false and vm.contains(q, \"on chain 11155111\") is true; _body() emits \"chainId\":1 for the same question. Reproduced in test/scratch/Judge.t.sol::test_textAndLimits on this tree.","severity":"info","snippet":"            \" on chain \",","title":"Question text identifies Sepolia only as 'chain 11155111'; the word 'Sepolia' never appears although the brief and docs/design.md say the text names Sepolia"},{"citation":"resolved","description":"From audit_economics, reproduced; kept as a trust assumption, not a defect, because the brief requires 'no owner' and names the Intake, asset and signer as constructor inputs. The oracle-consumer reference recommends these be owner-settable so a new action version or moved price needs no redeploy; here ACTION is a constant and intake/oracleAsset/oracleSigner are immutable. If IdentityMD stops selling oracle.request@oracle-1 in this asset (priceOf returns 0), rotates the signer, or replaces the Intake, every applyListing and challenge reverts OracleUnavailable or every answer fails BadSignature: nothing can be listed or delisted again, and listed projects keep earning points with no way to challenge them. No funds are lost: open questions still clear through expire and bonds return or accrue in bondOwed. The author already records this as an accepted limit (NEXT_SESSION.md). Recorded so the judge sees it was checked; the only remedy is a new registry.","line":346,"path":"src/ProjectRegistry.sol","reproduction":"MockIntake.setPrice(0) (the live Intake's setPrice(ACTION, asset, 0)); vm.prank(stranger); reg.applyListing(project, \"X\", \"https://example.org/x\", 50, stranger) reverts OracleUnavailable; challengeForBeneficiary on a listed project reverts the same way. A project listed before the change stays listed indefinitely. Reproduced in test/scratch/Judge.t.sol::test_textAndLimits on this tree.","severity":"info","snippet":"        if (fee == 0) revert OracleUnavailable();","title":"Documented trust assumption: with no owner and an immutable Intake, asset, signer and constant action id, a zero price or retired action freezes the listing set permanently"}],"hash":"fba05ee71505821ab086281e0c73de6e10a7b1274667f5e43580fe90323617e8","nodeId":"553d1a48-3924-44ea-8776-4d4dc7520e5f","outcome":"completed","summary":"The review is complete and the findings file is written. `git status` shows only the untracked `.imd-findings.json`, which is the deliverable; the scratch test directory is removed and no repository file was changed.\n\n**Outcome:** no blocking defects. The registry deploys through the factory and behaves as the brief specifies. I kept five findings, one low and four info, every one reproduced on this tree.\n\n**What I verified myself**\n\n- The full suite passes offline: 238 tests pass and 13 fork or mainnet-manifest tests skip, as the brief describes.\n- Deployability holds. Runtime is 23,256 bytes and init code with arguments is 25,059 bytes, both under the factory limits. The constructor makes no external call and accepts the manifest's seven arguments in order. The manifest has only the three schema keys and its notes are under 4,000 characters.\n- Every one of the nine entry points traced as intended: the Intake-only callbacks with their selectors confirmed, the one-day expiry boundary shared by result and expire so they cannot race, bond routing on keep and delist, the handoff interval, and the once-per-request replay key.\n- The eight rules measure 173 to 473 characters, worst-case questions stay under 2,000, and the version 3 trader and feeGuard texts match the docs word for word.\n- Live Sepolia reads at block 11,899,669 match the brief: the Intake sells the question for 0.5 test IMD, PLEA's hook reports the expected owner, the Stacker has code, and the Intake's request getter returns the four words the registry decodes.\n\n**Findings kept**\n\n1. **Low, merged from two specialists.** The owner-only gate permanently locks out any project whose reported owner cannot call applyListing, such as a burn-address renounce or a CREATE2 deployer that became the hook's owner. It follows the brief's literal wording, so it is a design gap for the author to decide on, not a bypass.\n2. **Info.** An owner() costing over 30,000 gas reads as no owner, so that project's gate becomes permissionless. Starving the call from the applicant's side is not reachable.\n3. **Info.** The comment above the rules still says version 2 while the code sends version 3.\n4. **Info.** The question text names the chain only as 11155111 and never contains the word \"Sepolia\", while the brief and design doc say it does. The manifest notes state the chain-id reading and test runs 3 and 4 were listed and defended with this exact wording, so I lowered it from the specialist's low.\n5. **Info, trust assumption.** With no owner and immutable Intake, asset and signer, a retired action or zero price freezes the listing set. The brief requires no owner, and the author already records this limit.\n\nThe coverage record answers all nine entry points plus four invariant rows. No finding carries a proof file because none is critical or high.","treeHash":null,"usage":{"cachedInputTokens":831894,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":29333,"runtime":"claude","turns":31,"wallClockMs":487517}}],"verification":[{"checks":[{"durationMs":12743,"exitCode":0,"name":"build","output":"Compiling 88 files with Solc 0.8.26\nSolc 0.8.26 finished in 12.63s\nCompiler run successful!\n","passed":true},{"durationMs":6347,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 482.77µs (270.46µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 413.41µs (62.17µs CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 543.72µs (81.80µs CPU time)\n\nRan 2 tests for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[PASS] test_rehearsalTargetsMatchTestRun5() (gas: 18171)\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 1 passed; 0 failed; 1 skipped; finished in 692.67µs (342.00µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysOnlyManifestRegistryOnAnEmptyChain() (gas: 5501571)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 875.44µs (701.23µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.61ms (249.27µs CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.35ms (905.54µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.03ms (146.81µs CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.64ms (522.92µs CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 2.82ms (1.57ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.88ms (160.18µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.12ms (134.13µs CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.47ms (272.67µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6777034)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 6.86ms (6.08ms CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6376232)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15471223)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3066914)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3413914)\n[PASS] test_ownerMayApply() (gas: 3298722)\n[PASS] test_projectItselfMayApply() (gas: 3359581)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3261732)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3527779)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390836)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 12.88ms (12.43ms CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111414)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 938906)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232514)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219610)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052619)\n[PASS] test_owedBondsAccumulate() (gas: 1421784)\n[PASS] test_unblocked_paysAtOnce() (gas: 950689)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 14.44ms (11.17ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 268588, ~: 55797)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 380222, ~: 47827)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3508842)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3197576)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3207264)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3292728)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3205068)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3095258)\n[PASS] test_apply_validation() (gas: 566706)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6017771)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6317727)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9296293)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9272555)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6269769)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6422729)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6071345)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5945556)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3035457)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6127160)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3296817)\n[PASS] test_yes_listsFromThisBlock() (gas: 3138179)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 51.98ms (61.86ms CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3084067, ~: 3083879)\nLogs:\n  Bound result 3\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9267836)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21726037)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6166284)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9461534)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281173)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6365138)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3199403)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4304235)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345252)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 113.99ms (120.09ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1448034, ~: 1398331)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 128.13ms (127.79ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394550, ~: 394389)\nLogs:\n  Bound result 24416\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367331, ~: 368890)\nLogs:\n  Bound result 5531632194183\n  Bound result 2\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430319, ~: 430416)\nLogs:\n  Bound result 2\n  Bound result 5531632194183\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 154.90ms (160.84ms CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 427   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 422   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 408   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 412   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 379   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 6701\n  Bound result 9\n  Bound result 999999999999999999000001\n  Bound result 13\n  Bound result 90000000000000000000\n  Bound result 308572012459006603118\n  Bound result 250\n  Bound result 3\n  Bound result 3600\n  Bound result 13294\n  Bound result 855855550002406615173\n  Bound result 9\n  Bound result 50000000000000000000000\n  Bound result 1000000000000\n  Bound result 548462945542112313196826415485\n  Bound result 22859169565042759192535866598\n  Bound result 684882980270897138085332\n  Bound result 1\n  Bound result 8\n  Bound result 3984\n  Bound result 761113102084054195289685\n  Bound result 3\n  Bound result 3151\n  Bound result 14635\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 537.46ms (534.78ms CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9278837, ~: 9281510)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6296817, ~: 6301999)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7276099, ~: 7276294)\nLogs:\n  Bound result 28\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3217815, ~: 3217517)\nLogs:\n  Bound result 3\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6257959)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6717590)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6258061)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6676334)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12585253)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3278702)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12577193)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6695987)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6370954)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6807752)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 16056514)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6285439)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6346119)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 657.87ms (906.90ms CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268140, ~: 3268027)\nLogs:\n  Bound result 32269870053316302674324\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 657.94ms (658.61ms CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 230   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 261   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 283   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 255   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 261   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 235   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 262   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 261   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 974\n  Bound result 85\n  Bound result 172800\n  Bound result 9711\n  Bound result 92\n  Bound result 58843\n  Bound result 27200\n  Bound result 38400\n  Bound result 87551\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18835351)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 657.63ms (658.27ms CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234747, ~: 234510)\nLogs:\n  Bound result 194096515645586783862785\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1536373, ~: 1370398)\nLogs:\n  Bound result 12\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388835, ~: 388794)\nLogs:\n  Bound result 2585\n  Bound result 77\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 744899, ~: 761962)\nLogs:\n  Bound result 16949\n  Bound result 12904\n  Bound result 243\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 684140, ~: 689048)\nLogs:\n  Bound result 29382127464017197674186\n  Bound result 2538\n  Bound result 13851\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 488326, ~: 510443)\nLogs:\n  Bound result 1502220578564696664\n  Bound result 23074332527\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 660.63ms (1.58s CPU time)\n\nRan 4 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25809)\n[PASS] test_launchManifest_knownShape() (gas: 25995)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8366565)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294731)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 667.36ms (34.91ms CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3595058, ~: 3557835)\nLogs:\n  Bound result 6\n  Bound result 15\n  Bound result 25\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6740806, ~: 6672585)\nLogs:\n  Bound result 1\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3837657)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3480159)\n[PASS] test_challengeMaximumReason() (gas: 7071382)\n[PASS] test_challengeMinimumReason() (gas: 6596710)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53764105)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3728134)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 667.36ms (1.21s CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6062063)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3179226)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9212521)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 667.41ms (9.29ms CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6510158, ~: 6510118)\nLogs:\n  Bound result 3494\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6596033, ~: 6602132)\nLogs:\n  Bound result 2\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 4986950, ~: 6524362)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6389085, ~: 6388829)\nLogs:\n  Bound result 20\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3392647)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3383106)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9764945)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6368847)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3570454)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4168632)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10569374)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3383395)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6642378)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3507056)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9889703)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6516792)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6530723)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6513868)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3604827)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3515175)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 667.49ms (2.33s CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976874, ~: 976865)\nLogs:\n  Bound result 99999000000000000013317\n  Bound result 2510\n  Bound result 1\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935550, ~: 2930480)\nLogs:\n  Bound result 61895364809161426\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 667.46ms (1.32s CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674648, ~: 674352)\nLogs:\n  Bound result 24\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 904879, ~: 931057)\nLogs:\n  Bound result 26\n  Bound result 1597\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842936, ~: 845502)\nLogs:\n  Bound result 2\n  Bound result 8127097222\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 877005, ~: 876271)\nLogs:\n  Bound result 2\n  Bound result 8127097222\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 667.50ms (1.81s CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6494756, ~: 6494898)\nLogs:\n  Bound result 13151\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3293738, ~: 3291717)\nLogs:\n  Bound result 2605\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6449049)\n[PASS] test_clockIsPerProject() (gas: 6459188)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9350547)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3268602)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3311351)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18688011)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 667.45ms (1.19s CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 490   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 468   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 492   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 482   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 440   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 482   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 422   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 485   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 474   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 487   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 465   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 485   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 472   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 2\n  Bound result 4659941369066764958348\n  Bound result 88580\n  Bound result 2716283019655932542975\n  Bound result 5311463547872562551539\n  Bound result 650264\n  Bound result 97\n  Bound result 413\n  Bound result 3776873640667591707674\n  Bound result 2034217234026890685486887116\n  Bound result 2724\n  Bound result 10111\n  Bound result 6915\n  Bound result 5235\n  Bound result 2255\n  Bound result 10000000000000000000000\n  Bound result 4761\n  Bound result 32421\n  Bound result 6\n  Bound result 18318\n  Bound result 1181569\n  Bound result 2166\n  Bound result 200000\n  Bound result 10000000000000000000000\n  Bound result 767508\n  Bound result 14898050647644752395503\n  Bound result 5\n  Bound result 1715\n  Bound result 17\n  Bound result 999500000000000000000\n  Bound result 990001\n  Bound result 1559\n  Bound result 134964\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.79s (3.79s CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1821  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1903  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1758  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1811  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1853  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1787  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1823  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1820  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1808  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 33\n  Bound result 755\n  Bound result 38\n  Bound result 5\n  Bound result 32\n  Bound result 22191\n  Bound result 34\n  Bound result 49\n  Bound result 6381\n  Bound result 2957397980\n  Bound result 3071\n  Bound result 4294967296\n  Bound result 5071\n  Bound result 1352\n  Bound result 30\n  Bound result 28582\n  Bound result 1626\n  Bound result 19868\n  Bound result 72\n  Bound result 22815\n  Bound result 50\n  Bound result 95\n  Bound result 980477304808868829\n  Bound result 14476\n  Bound result 23204\n  Bound result 1301754954293428253\n  Bound result 1\n  Bound result 1000\n  Bound result 28\n  Bound result 4\n  Bound result 3714247997\n  Bound result 10134\n  Bound result 74\n  Bound result 58\n  Bound result 264337593543950332\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40213580)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16415226)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.79s (4.81s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 2034  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2044  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2098  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2053  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2039  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 1994  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2049  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2073  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 816\n  Bound result 540\n  Bound result 9\n  Bound result 10\n  Bound result 7000000000000000000\n  Bound result 6688\n  Bound result 10000000000000000000\n  Bound result 4\n  Bound result 0\n  Bound result 423652561\n  Bound result 160\n  Bound result 0\n  Bound result 4\n  Bound result 49152\n  Bound result 15104039167686408970\n  Bound result 1427149587\n  Bound result 990000000142719955400\n  Bound result 0\n  Bound result 1000000000000\n  Bound result 410000\n  Bound result 2378\n  Bound result 2\n  Bound result 9\n  Bound result 15066\n  Bound result 9\n  Bound result 493514164\n  Bound result 10\n  Bound result 10\n  Bound result 69439985\n  Bound result 7099429460705030838969\n  Bound result 7576\n  Bound result 8\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.24s (6.23s CPU time)\n\nRan 35 test suites in 6.24s (23.18s CPU time): 224 tests passed, 0 failed, 13 skipped (237 total tests)\n","passed":true},{"durationMs":89,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":65,\"NEXT_SESSION.md\":69,\"README.md\":277,\"app.js\":2261,\"docs/data-api.md\":97,\"docs/design.md\":321,\"docs/explainer.html\":247,\"docs/history.md\":330,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":60,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":166,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":18,\"listings/sepolia.json\":1,\"llms.txt\":47,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":706,\"src/Stacker.sol\":104,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1599,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":124,\"test/FactoryRehearsal.t.sol\":85,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryPolicyRevision.t.sol\":44,\"test/RegistryRevisionRegression.t.sol\":445,\"test/RegistrySepoliaFork.t.sol\":146,\"test/SepoliaFork.t.sol\":141,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/VaultTrustRegression.t.sol\":41,\"test/mocks/MockIntake.sol\":108,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":180,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":131,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2cb317b12de3e4d87bfcdba65fbb089eb6060e016f78b44a8d9172e2c3c1bbe0","verifiedTreeHash":"6f152d578c7ca215d3d37e1c4eea118a53fe5cef","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":12129,"exitCode":0,"name":"build","output":"Compiling 88 files with Solc 0.8.26\nSolc 0.8.26 finished in 12.02s\nCompiler run successful!\n","passed":true},{"durationMs":6086,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 399.47µs (207.72µs CPU time)\n\nRan 2 tests for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[PASS] test_rehearsalTargetsMatchTestRun5() (gas: 17239)\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 1 passed; 0 failed; 1 skipped; finished in 377.54µs (258.39µs CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 495.11µs (63.69µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 552.25µs (77.09µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysOnlyManifestRegistryOnAnEmptyChain() (gas: 5499852)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 971.03µs (777.03µs CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.91ms (1.19ms CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 1.99ms (697.00µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.05ms (160.08µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6777034)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.80ms (1.09ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.38ms (270.06µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.54ms (208.94µs CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.52ms (471.52µs CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.64ms (2.82ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.04ms (387.98µs CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6062063)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3179226)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9212521)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 8.84ms (7.39ms CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6376232)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15471223)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3066914)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3413914)\n[PASS] test_ownerMayApply() (gas: 3298722)\n[PASS] test_projectItselfMayApply() (gas: 3359581)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3261732)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3527779)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390836)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 9.00ms (7.97ms CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111414)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 938906)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232514)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219610)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052619)\n[PASS] test_owedBondsAccumulate() (gas: 1421784)\n[PASS] test_unblocked_paysAtOnce() (gas: 950689)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 11.06ms (11.62ms CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3084025, ~: 3083879)\nLogs:\n  Bound result 14264337593543950334\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9267836)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21726037)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6166284)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9461534)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281173)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6365138)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3199403)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4304235)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345252)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 90.02ms (103.28ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394510, ~: 394377)\nLogs:\n  Bound result 1000000000000000000000000\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367778, ~: 368960)\nLogs:\n  Bound result 999952368024719308814914\n  Bound result 21615362853941261061\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430335, ~: 430428)\nLogs:\n  Bound result 21615362853941261061\n  Bound result 499952368024719308814914\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 133.88ms (145.07ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1448829, ~: 1449026)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 161.22ms (159.71ms CPU time)\n\nRan 4 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25809)\n[PASS] test_launchManifest_knownShape() (gas: 24859)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8366565)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294731)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 172.52ms (18.55ms CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 400   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 424   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 417   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 417   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 390   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 97\n  Bound result 10099\n  Bound result 127\n  Bound result 1000000000000\n  Bound result 10\n  Bound result 1294\n  Bound result 765231946929992494746\n  Bound result 2\n  Bound result 12\n  Bound result 1359182279\n  Bound result 3000000000000000000\n  Bound result 2000000000000000000000\n  Bound result 1\n  Bound result 5\n  Bound result 1800003600\n  Bound result 346619730714412418379539\n  Bound result 10\n  Bound result 2000000000000000000\n  Bound result 1\n  Bound result 2061\n  Bound result 8\n  Bound result 7\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 523.83ms (521.83ms CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 250   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 255   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 275   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 243   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 261   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 267   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 255   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 242   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 65217\n  Bound result 48\n  Bound result 97\n  Bound result 43\n  Bound result 53\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18835351)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 604.04ms (605.60ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 205722, ~: 55797)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 322911, ~: 47827)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3508842)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3197576)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3207264)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3292728)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3205068)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3095258)\n[PASS] test_apply_validation() (gas: 566706)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6017771)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6317727)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9296293)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9272555)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6269769)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6422729)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6071345)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5945556)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3035457)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6127160)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3296817)\n[PASS] test_yes_listsFromThisBlock() (gas: 3138179)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 632.72ms (47.53ms CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9278212, ~: 9275115)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6295606, ~: 6289601)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7276151, ~: 7276294)\nLogs:\n  Bound result 98\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3217834, ~: 3217517)\nLogs:\n  Bound result 21136808\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6257959)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6717590)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6258061)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6676334)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12585253)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3278702)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12577193)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6695987)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6370954)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6807752)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 16056514)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6285439)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6346119)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 632.74ms (1.55s CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976899, ~: 976872)\nLogs:\n  Bound result 38564925893154812253873\n  Bound result 34062747218401124603339\n  Bound result 3\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935854, ~: 2941251)\nLogs:\n  Bound result 12514264337593543950334\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 633.87ms (661.23ms CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234723, ~: 234498)\nLogs:\n  Bound result 264881538129025690393330\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1544305, ~: 1370428)\nLogs:\n  Bound result 12\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388843, ~: 388806)\nLogs:\n  Bound result 15976359026851218214546\n  Bound result 853445385653747112\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 737287, ~: 761974)\nLogs:\n  Bound result 3135545680751485433778\n  Bound result 53705976373057021953492\n  Bound result 3\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 682002, ~: 689048)\nLogs:\n  Bound result 3135545680751485433778\n  Bound result 53705976373057021953492\n  Bound result 3\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 491651, ~: 510606)\nLogs:\n  Bound result 4611663383789690664\n  Bound result 427637495642770012\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 633.33ms (1.96s CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6494752, ~: 6494898)\nLogs:\n  Bound result 20279\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3293851, ~: 3291717)\nLogs:\n  Bound result 102414\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6449049)\n[PASS] test_clockIsPerProject() (gas: 6459188)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9350547)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3268602)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3311351)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18688011)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 633.93ms (1.27s CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674628, ~: 674352)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 905332, ~: 931093)\nLogs:\n  Bound result 19\n  Bound result 2000\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842889, ~: 845418)\nLogs:\n  Bound result 3\n  Bound result 430855584\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 877024, ~: 876271)\nLogs:\n  Bound result 3\n  Bound result 430855584\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 648.15ms (2.04s CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268134, ~: 3268005)\nLogs:\n  Bound result 12514264337593543950334\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 647.59ms (647.78ms CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6510157, ~: 6510118)\nLogs:\n  Bound result 512\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6595722, ~: 6602132)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 4924310, ~: 3412334)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6389081, ~: 6388829)\nLogs:\n  Bound result 31\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3392647)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3383106)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9764945)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6368847)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3570454)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4168632)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10569374)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3383395)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6642378)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3507056)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9889703)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6516792)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6530723)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6513868)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3604827)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3515175)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 648.38ms (1.94s CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3595741, ~: 3558150)\nLogs:\n  Bound result 9\n  Bound result 158\n  Bound result 26\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6740018, ~: 6671956)\nLogs:\n  Bound result 1\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3837657)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3480159)\n[PASS] test_challengeMaximumReason() (gas: 7071382)\n[PASS] test_challengeMinimumReason() (gas: 6596710)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53764105)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3728134)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 648.28ms (1.27s CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 488   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 470   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 435   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 479   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 489   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 505   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 467   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 465   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 466   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 470   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 452   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 470   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 488   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 10\n  Bound result 800000\n  Bound result 659918\n  Bound result 17742\n  Bound result 8595361908\n  Bound result 386572127\n  Bound result 2766480784\n  Bound result 12\n  Bound result 14739653174\n  Bound result 10\n  Bound result 19906\n  Bound result 7118\n  Bound result 2\n  Bound result 6\n  Bound result 1\n  Bound result 11051\n  Bound result 15453\n  Bound result 1294\n  Bound result 5727\n  Bound result 2000000000000000000000\n  Bound result 17216\n  Bound result 303139\n  Bound result 7543274147187639180460\n  Bound result 683\n  Bound result 36818034509118508142459\n  Bound result 31\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.81s (3.82s CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1784  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1762  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1775  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1829  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1844  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1842  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1878  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1829  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1841  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 6\n  Bound result 4\n  Bound result 264337553929869078\n  Bound result 0\n  Bound result 9\n  Bound result 95\n  Bound result 97578\n  Bound result 1\n  Bound result 15995\n  Bound result 4\n  Bound result 23701\n  Bound result 32\n  Bound result 1681\n  Bound result 51\n  Bound result 364\n  Bound result 1700000000\n  Bound result 2\n  Bound result 13952\n  Bound result 729922641720206438\n  Bound result 97\n  Bound result 115297488570622\n  Bound result 756\n  Bound result 45\n  Bound result 30338\n  Bound result 1\n  Bound result 25449\n  Bound result 57\n  Bound result 22365\n  Bound result 1331\n  Bound result 30\n  Bound result 91\n  Bound result 778609533278170612\n  Bound result 4369\n  Bound result 62\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40213580)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16415226)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.84s (4.86s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 2033  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2059  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2011  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2113  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 1993  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2041  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2020  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2114  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 24576\n  Bound result 1000000000000\n  Bound result 504698532441463006783\n  Bound result 10\n  Bound result 15228\n  Bound result 2\n  Bound result 0\n  Bound result 1522700000000\n  Bound result 7251802196\n  Bound result 10\n  Bound result 12548\n  Bound result 5\n  Bound result 9990000000000002432925\n  Bound result 0\n  Bound result 10\n  Bound result 11\n  Bound result 0\n  Bound result 2070\n  Bound result 5046985334414630067820\n  Bound result 10\n  Bound result 8841128467392539284\n  Bound result 1800000000\n  Bound result 10\n  Bound result 10\n  Bound result 0\n  Bound result 7\n  Bound result 5\n  Bound result 12\n  Bound result 4\n  Bound result 834\n  Bound result 301\n  Bound result 4\n  Bound result 60893515967936769897\n  Bound result 912210603644138035\n  Bound result 547\n  Bound result 53289407775964039\n  Bound result 2744209573\n  Bound result 2109585939064805001805\n  Bound result 9\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 5.98s (5.98s CPU time)\n\nRan 35 test suites in 5.98s (22.13s CPU time): 224 tests passed, 0 failed, 13 skipped (237 total tests)\n","passed":true},{"durationMs":70,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":65,\"NEXT_SESSION.md\":69,\"README.md\":277,\"app.js\":2261,\"docs/data-api.md\":97,\"docs/design.md\":321,\"docs/explainer.html\":247,\"docs/history.md\":330,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":60,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":166,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":18,\"listings/sepolia.json\":1,\"llms.txt\":47,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":706,\"src/Stacker.sol\":104,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1599,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":124,\"test/FactoryRehearsal.t.sol\":85,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryPolicyRevision.t.sol\":44,\"test/RegistryRevisionRegression.t.sol\":445,\"test/RegistrySepoliaFork.t.sol\":146,\"test/SepoliaFork.t.sol\":141,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/VaultTrustRegression.t.sol\":41,\"test/mocks/MockIntake.sol\":108,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":180,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":131,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"7ac051c9008b178ad12718c1dfa48c94d4cfb1c52dd84dd7d887be5f73caeee1","verifiedTreeHash":"2a583f90c1c05e5597d301c6859cbc9a766e0c83","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":14542,"exitCode":0,"name":"build","output":"Compiling 92 files with Solc 0.8.26\nSolc 0.8.26 finished in 14.40s\nCompiler run successful!\n","passed":true},{"durationMs":7194,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[PASS] test_rehearsalTargetsMatchTestRun5() (gas: 17239)\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 1 passed; 0 failed; 1 skipped; finished in 719.07µs (324.08µs CPU time)\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 765.79µs (407.90µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysOnlyManifestRegistryOnAnEmptyChain() (gas: 5499852)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.19ms (1.01ms CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 1.26ms (217.52µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 609.65µs (72.77µs CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.06ms (853.26µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.46ms (218.10µs CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.65ms (230.27µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.81ms (153.24µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6777034)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.06ms (3.02ms CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.37ms (1.03ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.48ms (318.95µs CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 2.50ms (1.59ms CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6062063)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3179226)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9212521)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 5.13ms (4.08ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.29ms (357.56µs CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111414)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 938906)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232514)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219610)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052619)\n[PASS] test_owedBondsAccumulate() (gas: 1421784)\n[PASS] test_unblocked_paysAtOnce() (gas: 950689)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 21.65ms (18.40ms CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6376232)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15471223)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3066914)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3413914)\n[PASS] test_ownerMayApply() (gas: 3298722)\n[PASS] test_projectItselfMayApply() (gas: 3359581)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3261732)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3527779)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390836)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 31.70ms (29.08ms CPU time)\n\nRan 4 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25809)\n[PASS] test_launchManifest_knownShape() (gas: 24859)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8366565)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294731)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 32.27ms (23.28ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 306717, ~: 55797)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 460458, ~: 47827)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3508842)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3197576)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3207264)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3292728)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3205068)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3095258)\n[PASS] test_apply_validation() (gas: 566706)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6017771)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6317727)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9296293)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9272555)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6269769)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6422729)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6071345)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5945556)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3035457)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6127160)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3296817)\n[PASS] test_yes_listsFromThisBlock() (gas: 3138179)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 61.55ms (101.03ms CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3084196, ~: 3083915)\nLogs:\n  Bound result 112934398433\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9267836)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21726037)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6166284)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9461534)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281173)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6365138)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3199403)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4304235)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345252)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 106.23ms (113.69ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1442871, ~: 1398205)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 135.60ms (135.62ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394535, ~: 394377)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367777, ~: 368890)\nLogs:\n  Bound result 34870357618858569\n  Bound result 3\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430348, ~: 430416)\nLogs:\n  Bound result 3\n  Bound result 34870357618858569\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 152.61ms (175.49ms CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 408   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 411   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 437   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 424   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 368   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1725540767\n  Bound result 5564\n  Bound result 3457\n  Bound result 10\n  Bound result 2354\n  Bound result 1\n  Bound result 49\n  Bound result 6995\n  Bound result 160\n  Bound result 1950940079\n  Bound result 2288\n  Bound result 90000000000000000000\n  Bound result 10\n  Bound result 436170562217222427911\n  Bound result 3714247999\n  Bound result 48281356799341418196847\n  Bound result 1\n  Bound result 7347\n  Bound result 1185\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 594.89ms (592.60ms CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268269, ~: 3268201)\nLogs:\n  Bound result 1596122\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 743.77ms (743.26ms CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 254   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 280   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 251   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 275   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 247   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 259   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 236   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 246   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 28\n  Bound result 820\n  Bound result 90\n  Bound result 3616\n  Bound result 4786\n  Bound result 52\n  Bound result 21107\n  Bound result 58\n  Bound result 93532\n  Bound result 52\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18835351)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 783.66ms (784.93ms CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6494754, ~: 6494898)\nLogs:\n  Bound result 82864\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3293713, ~: 3291717)\nLogs:\n  Bound result 93361\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6449049)\n[PASS] test_clockIsPerProject() (gas: 6459188)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9350547)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3268602)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3311351)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18688011)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 813.49ms (1.37s CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9278862, ~: 9281510)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6296865, ~: 6301999)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7276098, ~: 7276294)\nLogs:\n  Bound result 33\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3217804, ~: 3217517)\nLogs:\n  Bound result 23734753\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6257959)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6717590)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6258061)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6676334)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12585253)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3278702)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12577193)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6695987)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6370954)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6807752)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 16056514)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6285439)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6346119)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 818.31ms (2.19s CPU time)\n\nRan 9 tests for test/RegistryOwnerBoundary.t.sol:RegistryOwnerBoundaryTest\n[PASS] testFuzz_dirtyAddressWordCannotBlockAnUnownedApplication(uint96) (runs: 1000, μ: 3273697, ~: 3273694)\nLogs:\n  Bound result 1019922991349419375902\n\n[PASS] testFuzz_nonWordLengthCannotBeDecodedAsOwner(uint8) (runs: 1000, μ: 3270598, ~: 3273559)\nLogs:\n  Bound result 3\n\n[PASS] test_gasExhaustingOwnerDoesNotExhaustApplication() (gas: 3380801)\n[PASS] test_ownerAnswerLengthEdges() (gas: 22044776)\n[PASS] test_ownerGateRunsBeforeEvenReadingTheLiveOracleFee() (gas: 3353512)\n[PASS] test_ownerReadCannotWriteProjectStorage() (gas: 3347154)\n[PASS] test_ownershipChangeCannotReplaceAnOpenQuestionButControlsTheNextOne() (gas: 6432736)\n[PASS] test_returnAndRevertBombsStayWithinOwnerReadBudget() (gas: 6539473)\n[PASS] test_validOwnerIsReadWithAtMostThirtyThousandGas() (gas: 3230048)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 818.31ms (1.40s CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3600059, ~: 3558978)\nLogs:\n  Bound result 1\n  Bound result 14\n  Bound result 55\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6746629, ~: 6681928)\nLogs:\n  Bound result 257\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3837657)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3480159)\n[PASS] test_challengeMaximumReason() (gas: 7071382)\n[PASS] test_challengeMinimumReason() (gas: 6596710)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53764105)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3728134)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 818.50ms (1.65s CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 977231, ~: 977183)\nLogs:\n  Bound result 99999000000000000000022\n  Bound result 2141569398822480\n  Bound result 1\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2936121, ~: 2941287)\nLogs:\n  Bound result 334\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 818.52ms (819.42ms CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234739, ~: 234510)\nLogs:\n  Bound result 16336\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1521603, ~: 1370404)\nLogs:\n  Bound result 5\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388858, ~: 388794)\nLogs:\n  Bound result 992938252765120267964280\n  Bound result 11\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 744867, ~: 761950)\nLogs:\n  Bound result 794\n  Bound result 64\n  Bound result 517440283\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 684027, ~: 689048)\nLogs:\n  Bound result 7667324529667540340403\n  Bound result 16946004759909058530894\n  Bound result 99999999999999999999998\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 492146, ~: 510594)\nLogs:\n  Bound result 27538584015128928\n  Bound result 857597981222334681\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 818.60ms (1.46s CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6510150, ~: 6510094)\nLogs:\n  Bound result 201976695204701954135484004922467149089592819699625917726\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6596195, ~: 6602132)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 4980764, ~: 6524362)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6389083, ~: 6388829)\nLogs:\n  Bound result 3\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3392647)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3383106)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9764945)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6368847)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3570454)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4168632)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10569374)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3383395)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6642378)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3507056)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9889703)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6516792)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6530723)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6513868)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3604827)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3515175)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 818.65ms (2.78s CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674649, ~: 674352)\nLogs:\n  Bound result 5\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 904045, ~: 885781)\nLogs:\n  Bound result 18\n  Bound result 12514264337593543950335\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842821, ~: 840448)\nLogs:\n  Bound result 2\n  Bound result 2079\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 877332, ~: 878100)\nLogs:\n  Bound result 2\n  Bound result 2079\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 818.78ms (2.18s CPU time)\n\nRan 5 tests for test/RegistryRecoveryInvariant.t.sol:RegistryRecoveryInvariantTest\n[PASS]\nRegistryRecoveryInvariantTest invariants:\n[PASS] invariant_claimsAndRefusedTransfersPreserveQuestions\n[PASS] invariant_openAndDeferredBondsRemainFullyBacked\n RegistryRecoveryInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------------------+--------------------+-------+---------+----------╮\n| Contract                | Selector           | Calls | Reverts | Discards |\n+===========================================================================+\n| RegistryRecoveryHandler | ask                | 1793  | 0       | 0        |\n|-------------------------+--------------------+-------+---------+----------|\n| RegistryRecoveryHandler | claim              | 1861  | 0       | 0        |\n|-------------------------+--------------------+-------+---------+----------|\n| RegistryRecoveryHandler | configureRecipient | 1770  | 0       | 0        |\n|-------------------------+--------------------+-------+---------+----------|\n| RegistryRecoveryHandler | donate             | 1856  | 0       | 0        |\n|-------------------------+--------------------+-------+---------+----------|\n| RegistryRecoveryHandler | handOver           | 1786  | 0       | 0        |\n|-------------------------+--------------------+-------+---------+----------|\n| RegistryRecoveryHandler | passTime           | 1889  | 0       | 0        |\n|-------------------------+--------------------+-------+---------+----------|\n| RegistryRecoveryHandler | replay             | 1828  | 0       | 0        |\n|-------------------------+--------------------+-------+---------+----------|\n| RegistryRecoveryHandler | reprice            | 1847  | 0       | 0        |\n|-------------------------+--------------------+-------+---------+----------|\n| RegistryRecoveryHandler | settle             | 1754  | 0       | 0        |\n╰-------------------------+--------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 25\n  Bound result 0\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 7466\n  Bound result 775646967661854563\n  Bound result 15969191850\n  Bound result 1\n  Bound result 264337593543950335\n  Bound result 264337593543950335\n  Bound result 264337593543950335\n  Bound result 1\n  Bound result 1\n  Bound result 2\n  Bound result 3\n  Bound result 48\n  Bound result 9\n  Bound result 264337593543950335\n  Bound result 3\n  Bound result 81138\n  Bound result 6\n  Bound result 0\n  Bound result 64\n  Bound result 13054\n  Bound result 14045\n  Bound result 14\n  Bound result 2\n  Bound result 15\n  Bound result 49\n  Bound result 695082468721904107\n  Bound result 2\n  Bound result 264337593543950335\n  Bound result 9305\n  Bound result 264337593543950335\n  Bound result 1\n  Bound result 300\n  Bound result 25\n  Bound result 1\n  Bound result 82\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 126\n  Bound result 1\n  Bound result 14855288\n  Bound result 264337593543950335\n  Bound result 1\n  Bound result 5\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n\n[PASS] test_handlerAccumulatesDebtAcrossHandoffsAndPaysEachRecipientOnce() (gas: 15465522)\nLogs:\n  Bound result 25\n  Bound result 0\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 1\n  Bound result 25\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n\n[PASS] test_handlerKeepsOtherBondsAndDonationsWhileDrainingOneDebt() (gas: 8368374)\nLogs:\n  Bound result 25\n  Bound result 0\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 1\n  Bound result 4\n  Bound result 2\n  Bound result 3\n  Bound result 3\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n\n[PASS] test_noReturnSettlementPaysWithoutCreatingPhantomDebt() (gas: 7841867)\nLogs:\n  Bound result 25\n  Bound result 0\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 3\n  Bound result 0\n  Bound result 3\n  Bound result 1\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n\n[PASS] test_unreadableIntakeCannotTrapAStaleBondOrEraseAnOwedRefund() (gas: 4937025)\nLogs:\n  Bound result 25\n  Bound result 0\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 4\n  Bound result 5\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 4.11s (4.13s CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 512   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 460   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 499   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 467   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 446   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 488   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 479   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 455   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 482   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 478   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 441   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 457   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 480   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 10000\n  Bound result 5\n  Bound result 8306\n  Bound result 1500000000000000000\n  Bound result 20623747402956026959386\n  Bound result 1\n  Bound result 2255\n  Bound result 92\n  Bound result 1000000\n  Bound result 999901\n  Bound result 600000000000000000\n  Bound result 12502351993206686686918\n  Bound result 9490516677714995752086\n  Bound result 2683536401597568469864\n  Bound result 391338927675350868741\n  Bound result 1510218523\n  Bound result 16483\n  Bound result 199260\n  Bound result 1726033903215466908776\n  Bound result 16504662334482858641457\n  Bound result 96\n  Bound result 36713130076968362383139\n  Bound result 2827\n  Bound result 65\n  Bound result 6850\n  Bound result 6\n  Bound result 16384\n  Bound result 1\n  Bound result 9\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.28s (4.28s CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1839  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1870  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1786  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1818  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1824  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1760  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1853  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1823  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1811  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21092\n  Bound result 1\n  Bound result 127\n  Bound result 12\n  Bound result 5000\n  Bound result 20\n  Bound result 48\n  Bound result 87\n  Bound result 0\n  Bound result 39\n  Bound result 3\n  Bound result 39\n  Bound result 50\n  Bound result 37\n  Bound result 5539\n  Bound result 264337553929869078\n  Bound result 264337553929869078\n  Bound result 264337593543950335\n  Bound result 8140\n  Bound result 8279\n  Bound result 5235\n  Bound result 4350\n  Bound result 33\n  Bound result 264337593543950335\n  Bound result 264337553929869078\n  Bound result 280\n  Bound result 56\n  Bound result 104001\n  Bound result 59\n  Bound result 28\n  Bound result 264337593543950335\n  Bound result 10466\n  Bound result 4679\n  Bound result 264337553929869078\n  Bound result 4\n  Bound result 4743\n  Bound result 5\n  Bound result 44129\n  Bound result 14\n  Bound result 264337553929869078\n  Bound result 15430\n  Bound result 77\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40213580)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16415226)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 5.79s (5.81s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 1946  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2075  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2094  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2000  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2076  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2027  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2050  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2116  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1\n  Bound result 8\n  Bound result 16323\n  Bound result 160\n  Bound result 6399013083\n  Bound result 2\n  Bound result 0\n  Bound result 75026539\n  Bound result 5550\n  Bound result 1\n  Bound result 97\n  Bound result 9509941755017656923573\n  Bound result 10\n  Bound result 1\n  Bound result 0\n  Bound result 2737\n  Bound result 421649342021650564393\n  Bound result 10\n  Bound result 11652\n  Bound result 30010063576057617679\n  Bound result 1\n  Bound result 718\n  Bound result 0\n  Bound result 10\n  Bound result 14269\n  Bound result 2971547293\n  Bound result 2837704791343711607974\n  Bound result 2420\n  Bound result 5171\n  Bound result 0\n  Bound result 6000000000000000000\n  Bound result 160\n  Bound result 9\n  Bound result 4414633816622338278\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.07s (7.06s CPU time)\n\nRan 37 test suites in 7.07s (30.49s CPU time): 238 tests passed, 0 failed, 13 skipped (251 total tests)\n","passed":true},{"durationMs":97,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":65,\"NEXT_SESSION.md\":69,\"README.md\":277,\"app.js\":2261,\"docs/data-api.md\":97,\"docs/design.md\":321,\"docs/explainer.html\":247,\"docs/history.md\":330,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":60,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":166,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":18,\"listings/sepolia.json\":1,\"llms.txt\":47,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":706,\"src/Stacker.sol\":104,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1599,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":124,\"test/FactoryRehearsal.t.sol\":85,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryOwnerBoundary.t.sol\":145,\"test/RegistryPolicyRevision.t.sol\":44,\"test/RegistryRecoveryInvariant.t.sol\":482,\"test/RegistryRevisionRegression.t.sol\":445,\"test/RegistrySepoliaFork.t.sol\":146,\"test/SEPOLIA_RUN5_RECOVERY_COVERAGE.md\":48,\"test/SepoliaFork.t.sol\":141,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/VaultTrustRegression.t.sol\":41,\"test/mocks/MockIntake.sol\":108,\"test/mocks/RegistryOwnerResponse.sol\":37,\"test/mocks/RegistryRecoveryAsset.sol\":36,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":180,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":131,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"83c204c625376f89bb1baef2b9eca9b0d2aaec6647fce170fa51c25a3963403a","verifiedTreeHash":"5755fdb6304696db6d608119bcf84830e451aa82","verifierVersion":"0.1.0+fb8278c5"}]}