{"assessments":[],"deployments":[{"attestationHash":"ca14b3d769917d577c75cf33799334ab3f44c019a3e3bcf261f9ca343fbeb702","chainId":11155111,"contracts":[{"address":"0x30a3bb4d75989cb19f83607abc2dffe52a253384","blockNumber":11900978,"name":"ProjectRegistry","role":"other","txHash":"0x9abfa35e58575341b0c88c7af9189b92945b3db9a159ee540ad9daa5dec5c2a5"}],"id":"ff1256fa-f31f-49fa-bed9-ae3249a000ca","manifestHash":"b463184b3c27e1f9ca298678f2f73c144a342ac1891ea68fdb2b2dbf7d64034c","status":"live"}],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"3f5d2049-b807-43eb-853f-3aeddefa485f","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"e452e631b5732f6392fb94f2722c0c8b90ddfc5ba58ef06ea92b9e4fb398c73a","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":"8d5d010c75f584b18bfd938b4365e6c3b646a9db528d9fce01c5ae5f5c433ce9","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":"3f00a600af2a7c87b242c59f246eb0446f51cf1c9970f4483ff0a8cdcd3fad02","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":"c2cae0ce54ea16fc2b58cd5b663b281396ca0f64298ef43101ad371876a7c06b","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":"048c2c0c8235abb8adbc3391ff6366b3ddb2d32b2095869fef380a173277f95e","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":"e3e8709dcec8a03427508b01d5e5200856004b0bb9a147ab6d3e822b504545eb","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":"e8b207d77847c5d071a89f58d5227956986be0f37791c1a868efb79d1e3266b9","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":"dca733848a83b1d09b6b428a63eb3805de6d432bcc2d4ac6e79935dbcdb6da15","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"019dfd8d1bb8655545367a42a0e4d4d5932c2d2958b429e269b51b19524264d2","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 6 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 5's registry (launch #1428, 0x5f63cdead0f5f693b8964d82b56155f55645ccea, tested live: a rejection, a listing and a defended challenge) with one rule text clarified, version 3.1 of the panel rules. Under version 3 the trader rule said \"reject ... forwarding-router recipients\", which some panel members read as any contract a router's msgSender() reports; version 3.1 says the router itself is rejected and the address msgSender() reports is a valid trader even when it is a contract. Rehearsed on Sepolia with a real panel: 11 of 11 true. Only that string changed. This run tests it live 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 and the trial venue already credit 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.1 (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 tx.origin; the router itself is rejected, a contract msgSender() reports is a valid trader; 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 give the real chain id in the text.\n- test/mocks and test/trial hold test doubles and the trial contracts only (SelfCredit, the negative case; TrialVenue, the positive case, live at 0xf2520b379021ae989bb0ebbd350a0c8571256fef). 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,900,766): 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,295 bytes; deploying it estimates about 36.7M gas on Sepolia's current schedule (test run 5's registry deployed through the factory at block 11,899,694). The trial venue 0xf252...6fef reports owner() 0x4b91...6821.\n\nTESTS: forge test passes (246 tests on this branch: 232 run offline; 12 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/RegistryPolicyRevision.t.sol checks the version 3.1 trader rule's text; test/RegistryApplicantGate.t.sol owner-only applications; test/Deployment.t.sol this manifest; test/RegistrySepoliaFork.t.sol a real application to Intake v2 as the project's owner. Keep all of them passing.\n\nREADME: once live, add the registry's address as \"Sepolia test run 6\" in the Deployments table.","parentJobId":null,"planHash":"7d74e43a59e1b763477f0fdeb21f3ded55af59a132d5ab52d6c5ac134d110402","previousHash":"ebf2d8686581b0d969edfa9cb1c2e6cbcd8b21bbf46aa548c7a16838c8d49a87","projectId":"3f5d2049-b807-43eb-853f-3aeddefa485f","publication":{"commit":"6ca22433c8635a8ae93d8b2b2d4bc81ce5ee5af8","deliveredAt":"2026-10-12T19:25:50.467Z","repoUrl":"https://github.com/identity-md-launches/launch-1463-launch-imd-acc-s-sepolia-test"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"7341b143d48dbf0cfd01d25105ae05310bf80b0f4143594e8b18283ea8bd1e87","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"4f78b5e6f85048982229b87920496a8442eeed05eae510abaaf2d9e39648b206","device":"71ee8cbe44073cf6","findings":[],"hash":"019dfd8d1bb8655545367a42a0e4d4d5932c2d2958b429e269b51b19524264d2","nodeId":"3129969c-4717-4feb-b652-2f97bbd7c0d2","outcome":"completed","summary":"Added 13 tests covering deferred-bond accounting, claim recovery, and signer failure paths. Invariants exercise 256 random sequences of 96 calls.\n\nOffline verification passed:\n- `forge build`: successful\n- `forge test`: 246 passed, 0 failed, 14 skipped—12 fork tests and 2 mainnet-manifest checks\n\nAll changes are under `test/`.","treeHash":"5ef2c5c0c80bf78eb8a454a8182cd2cf3d50a386","usage":{"cachedInputTokens":1931264,"inputTokens":119293,"model":"gpt-6-astra","outputTokens":19033,"runtime":"codex","turns":7,"wallClockMs":566862}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"76f57db4177175be","findings":[{"citation":"resolved","description":"projectOwner forwards exactly OWNER_CALL_GAS = 30,000 gas (line 100) to the project's owner() and, on any failure (line 247: `if (ok && size == 32 && word >> 160 == 0)`), reports no owner. applyListing (line 270) then lets anyone apply. An out-of-gas owner() is indistinguishable from 'no such function', and the failure direction is permissive: the NotProjectOwner guarantee the applicant-gate revision added (test/RegistryApplicantGate.t.sol test_squatterCannotBlockTheTeam) silently stops holding for a project whose owner() legitimately costs more than the cap when cold. This is within the brief's stated design ('a staticcall capped at 30,000 gas ... a revert, a malformed answer or zero means no owner'), so it is a documented trade-off rather than a broken rule, and no funds are at risk: the consequence is the pre-gate squatting (a stranger files for the project, names its own beneficiary, and the team cannot apply until that question settles or expires, 0.5 IMD per day held). Reproduction note: the specialist's claim that a 4-hop owner chain already exceeds the cap did NOT reproduce under this repository's build (solc 0.8.26, 10,000 runs, cancun): measured cold, a beacon proxy behind an Ownable implementation costs 13,303 gas, each additional forwarding hop (owner() that returns IOwned(parent).owner()) about 3,053, and projectOwner still returns the team wallet through 6 hops; it returns zero from 7 hops on (about 34.7k cold). Such a shape is exotic, which is why this is low, not medium; the cap also sits against a gas schedule the code does not control (a repricing of cold account access or SLOAD moves the edge). Two of the three specialist reports (audit_math 'projectOwner's fixed 30,000-gas cap' and audit_permissions 'Applicant gate fails open') are the same root cause and are merged here. Minimal fix preserving the design: raise OWNER_CALL_GAS (100,000 still bounds a hostile owner()) and document the supported depth, or treat `ok == false` after a non-trivial gas spend distinctly from 'no owner'.","line":243,"path":"src/ProjectRegistry.sol","reproduction":"Deploy OwnableImpl (slot 1 = owner), Beacon(impl), BeaconProxyLike(beacon), call set(team) through the proxy, then wrap it in 7 Forwarder contracts whose owner() returns IOwned(parent).owner(); call the outermost p7. In a fresh transaction (cold state, e.g. deployed in setUp): IOwned(p7).owner() == team, but registry.projectOwner(p7) == address(0). Then vm.prank(squatter); registry.applyListing(p7, \"X\", \"https://example.com/x\", 50, squatter) succeeds and projectOf(p7).asker == squatter. Expected (as for the same project with 1-6 hops, where projectOwner(p) == team): revert NotProjectOwner(team) before any fee. Actual: the squatter's application is filed and the slot is held. Measured with test/scratch/Cold.t.sol (ColdEdge2Test.test_po6 prints the team wallet, test_po7..9 print zero, test_cold7_squats passes against the current code demonstrating the bypass).","severity":"low","snippet":"            ok := staticcall(OWNER_CALL_GAS, project, 0, 4, 0, 32)","title":"Applicant gate fails open: a project whose owner() cannot answer inside the fixed 30,000-gas cap is treated as ownerless, so a stranger can hold its question slot (merged: audit_math low + audit_permi"},{"citation":"resolved","description":"_challenge (line 321 `if (p.ask != Ask.None) revert AskOpen();`) lets anyone, including the project's beneficiary, open the one challenge a listed project can have at a time, and a signed yes pays the bond to p.beneficiary (line 409). When the challenger is the beneficiary (or any wallet it controls, since the bond goes to the beneficiary regardless of who filed), the bond returns to it, so each self-challenge costs 0.5 IMD while an outside challenger of a compliant project forfeits 5 IMD per round. A beneficiary bot that refiles in the settlement block can keep a third party's challenge, whose [REASON] would point the panel at the actual violation, reverting with AskOpen, and the panel is only ever asked under the beneficiary's own framing. Mitigations already in the code: the cooldown is not restarted by a defence (line 407-408), the panel is still asked the full rule set each round, and the author records this as a retained limit (test/RegistryRevisionRegression.t.sol:404-417 test_selfChallengeOccupiesSlotOnlyUntilItSettles; docs/history.md line 214). Also a mempool race: the honest challenger can file in the same settlement block. No funds are lost, hence low. Note on the specialist's proposed fix: reverting when msg.sender == p.beneficiary does not close this, because the bond goes to the beneficiary whoever files, so a second wallet achieves the same at the same cost; only a design change (the defended bond of a challenge filed from the beneficiary's own wallet burned or retained rather than paid to the beneficiary, or a per-asker minimum interval) would, and that is a scope decision for the author.","line":409,"path":"src/ProjectRegistry.sol","reproduction":"State: project P listed with beneficiary B (applyListing by anyone, signed yes), cooldown elapsed; B funded and approved. (1) vm.prank(B); challengeForBeneficiary(P, \"routine check\", B): pays 0.5 fee + 5 bond, ask opens. (2) vm.prank(C); challengeForBeneficiary(P, \"credits wallets outside trades\", B): reverts AskOpen. (3) Intake delivers a signed yes: Defended, _payBond(p.beneficiary) sends the 5 IMD to B. B's balance is down exactly 0.5e18; P stays listed; challengeOpenAt unchanged. (4) B repeats (1) in the same block. Expected: a self-challenge costs the beneficiary at least what it costs anyone else, or is refused. Actual: it costs only the oracle fee. Verified with test/scratch/Review.t.sol test_selfChallengeCostsOnlyFee (passes against the current code, asserting before - balanceOf(B) == 0.5e18 after the defended round).","severity":"low","snippet":"            _payBond(p.beneficiary);","title":"A listed project's beneficiary can occupy its single challenge slot for the oracle fee alone, because a defended bond is paid to the beneficiary, i.e. back to itself"},{"citation":"resolved","description":"A contract whose owner() returns uint256 (an owner token id, say 7) or bool (true = 1) also returns one 32-byte word with zero upper bits, so projectOwner reports address(7) or address(1), a precompile that can never call applyListing; the gate then refuses every caller except the project itself. Fail-closed, so no funds or slot are at risk, and the brief's rule ('a malformed answer ... means no owner') is honoured ABI-wise since 7 is a validly encoded address. Recorded as an accepted limitation worth a line in docs/listing.md (the project can still apply for itself, or redeploy); there is no sound on-chain distinction to add.","line":247,"path":"src/ProjectRegistry.sol","reproduction":"contract UintOwnerProject { function owner() external pure returns (uint256) { return 7; } } deployed as p. registry.projectOwner(p) == address(7). vm.prank(anyone); registry.applyListing(p, \"X\", \"https://example.com/x\", 50, b) reverts NotProjectOwner(0x0000000000000000000000000000000000000007) for every caller except p itself. Verified with test/scratch/Review.t.sol test_uintOwnerLocksOut (passes against the current code).","severity":"info","snippet":"        if (ok && size == 32 && word >> 160 == 0) owner = address(uint160(word));","title":"projectOwner accepts any 32-byte owner() answer with zero upper 96 bits as an address, so a project whose owner() returns a small uint256 or bool is permanently unlistable"},{"citation":"resolved","description":"By the brief's design the registry has no owner: oracleSigner is set once here (_setOracleSigner in src/oracle/OracleAttestation.sol:203 is internal and only the constructor calls it), intake and oracleAsset are immutable, and ACTION is a constant. The supplied oracle-consumer reference asks for these to be owner-settable so a key rotation or a new action version needs no redeploy; the brief wins, and this only records what differs. Consequences the operator accepts: if IdentityMD rotates the signer away from 0x5598...2982, every later answer reverts BadSignature (OracleAttestation.sol:188), the fee is spent and the question clears only through expire a day later; if the Intake stops selling oracle.request@oracle-1 for this asset, ORACLE_FEE() is 0 and every ask reverts OracleUnavailable (line 346). The only privileged actors are the Intake (msg.sender of both callbacks) and the signer's key; every state-changing entry point was traced and none writes listing state without both the Intake as caller and a signature for this contract. Bonds held are never at risk (expire and claimBond return them). Not a defect; the mainnet registry inherits the same liveness dependency.","line":204,"path":"src/ProjectRegistry.sol","reproduction":"Read-only: `oracleSigner()` has no public writer (grep _setOracleSigner src/ shows only the constructor call at OracleAttestation.sol:150). State: registry live; IdentityMD signs an answer for an open application with a new key K2. onOracleResult(intakeId, a, sigK2) from the Intake reverts BadSignature; expire(project) after 1 day clears it. Alternatively MockIntake.setPrice(0): applyListing reverts OracleUnavailable.","severity":"info","snippet":"    ) OracleAttestationConsumer(oracleSigner_) {","title":"Trust assumption of the no-owner design: the oracle signer, the Intake, the asset and the action id are fixed for the registry's life (merged: audit_permissions + audit_flow)"},{"citation":"resolved","description":"A signed yes lists from the answer block and sets challengeOpenAt = now + challengeCooldown (3600 s here, 7 days on mainnet); _challenge reverts ChallengeTooSoon until then (line 322), and a later signed no ends the listing at the answer block (line 413), never at the block the project stopped complying. Points are credits inside [fromBlock, toBlock], so an upgradeable project that changes what it credits after the panel judged it earns points for the cooldown plus the time to a challenge and an answer, and keeps them. The signed attestation's `figure` field could carry the breach block, and the code ignores it. docs/design.md states this as the chosen trade-off, so it is information for the indexer and the mainnet settings decision, not a defect.","line":413,"path":"src/ProjectRegistry.sol","reproduction":"Mainnet settings (cooldown 7 days). Owner of upgradeable hook P: applyListing(P, name, url, 50, B); signed yes at block N: listed, fromBlock = N, challengeOpenAt = T + 7d. At N+1 the owner upgrades P to credit wallets it picks. Any challengeForBeneficiary(P, reason, B) before T + 7d reverts ChallengeTooSoon(T + 7d). At T + 7d a challenger files; signed no at block M: toBlock = M. Expected by first principles: credits between N+1 and M earn nothing. Actual: the registry records [N, M] and nothing on chain marks N+1.","severity":"info","snippet":"            p.toBlock = uint64(block.number);","title":"Delisting is never retroactive and the cooldown is an immunity window: a project that changes behaviour right after listing keeps every point until the delist block (documented trade-off)"}],"hash":"048c2c0c8235abb8adbc3391ff6366b3ddb2d32b2095869fef380a173277f95e","nodeId":"4faba7ea-af3c-4add-b9b1-15867bc04f99","outcome":"completed","summary":"Review complete. The findings file is written at `.imd-findings.json` and the tracked tree is unchanged.\n\n**Outcome: nothing blocks this launch.** The seven specialist items reduced to five findings, two low and three informational. No critical or high finding, so no proof test was needed.\n\n**What I kept, after reproducing each against the code**\n\n- **Low, owner gate fails open past the 30k gas cap** (merged from audit_math and audit_permissions, same root cause). The specialist's claim that a 4-hop owner chain already trips it did not reproduce under this build. Measured cold, a beacon proxy behind an Ownable costs about 13.3k and each forwarding hop about 3k more, so `projectOwner` still answers correctly through 6 hops and only returns zero from 7. The bypass is real but exotic, and it is the brief's stated design, so low.\n- **Low, beneficiary self-challenge costs only the fee.** Reproduced: the defended bond goes to the beneficiary, so a self-challenge costs 0.5 IMD per round while an outsider forfeits 5. The author already records this as a retained limit. I noted that the specialist's proposed fix, refusing the beneficiary as caller, does not close it since a second wallet gets the same result.\n- **Info, uint256 or bool owner() locks a project out.** Reproduced; fail-closed, no funds or slot at risk.\n- **Info, signer, Intake and action fixed for life** (merged from audit_permissions and audit_flow). Trust assumption of the no-owner design, not a defect.\n- **Info, delisting is not retroactive.** Documented trade-off in the design notes.\n\n**My own pass found nothing further.** Checks I ran beyond the specialists: runtime 23,295 and initcode 24,874 bytes, both within the limits; no forbidden opcodes; the manifest has schema keys only, seven arguments in declaration order, and notes of 2,196 characters; no workflow directory on the branch; the version 3.1 trader rule matches the docs character for character at 505 of 512; the longest question at maximum inputs is 1,107 of 2,000. I also traced a possible 63/64 gas trick against the owner gate and confirmed it cannot work, since the rest of `applyListing` needs far more than the 1/64 remainder. The full suite passes with 246 tests and 14 skipped fork or mainnet-manifest tests.\n\nCoverage records all nine listed entry points plus three invariant rows. Two entry points carry findings (`applyListing` and `challengeForBeneficiary`), the rest hold.","treeHash":null,"usage":{"cachedInputTokens":1429453,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":35451,"runtime":"claude","turns":35,"wallClockMs":486085}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"9e51ef2afd7c2af8","findings":[{"citation":"resolved","description":"The brief requires a registry with no owner, so `oracleSigner` is set once in the constructor (`_setOracleSigner` is never reachable afterwards) and `ACTION` is a constant (`oracle.request@oracle-1`). The supplied oracle-consumer reference says the signer, action id and price should be owner-settable so a key rotation or a new action version does not need a redeploy; the brief's design wins, and this note only records what differs. Consequence if IdentityMD rotates the oracle signer away from 0x5598...2982 or stops selling `oracle.request@oracle-1`: every later answer reverts with BadSignature in `_verifyAttestation` (src/oracle/OracleAttestation.sol:188), the Intake records it as not delivered, the fee is spent, and the question is cleared only by `expire` a day later; or `ORACLE_FEE()` returns 0 and every ask reverts OracleUnavailable. No funds held by the registry are at risk (bonds return through `expire`/`claimBond`). Nothing to fix for this launch; the mainnet registry inherits the same liveness dependency and that should be a conscious choice.","line":204,"path":"src/ProjectRegistry.sol","reproduction":"State: registry deployed with oracleSigner 0x5598...2982. IdentityMD rotates its oracle key to K2 and signs an answer for an open application with K2. Call onOracleResult(intakeId, a, sigK2) from the Intake: expected (by the reference's rotation story) the answer settles; actual: revert BadSignature, listing never happens, 0.5 IMD fee gone; expire(project) after 1 day clears it. Alternatively Intake.setPrice(ACTION, TestIMD, 0): applyListing reverts OracleUnavailable (src/ProjectRegistry.sol:346) for the registry's whole life.","severity":"info","snippet":"    ) OracleAttestationConsumer(oracleSigner_) {","title":"Trust assumption, not a defect: oracle signer and action id are fixed for the registry's life (no owner, by the brief's design)"}],"hash":"3f00a600af2a7c87b242c59f246eb0446f51cf1c9970f4483ff0a8cdcd3fad02","nodeId":"1c48f9aa-e5fb-47aa-8dc5-0cc004e864da","outcome":"completed","summary":"The review is complete and the findings file is written. No source files were changed (git status is clean apart from the untracked findings file, which the task asks for).\n\n**Outcome: no defect found in the assigned area.** The control flow of the ProjectRegistry holds against the Execution Trace, Periphery and First Principles guides. The file records one info-level trust note and eleven coverage rows, all nine entry points marked `holds`.\n\n**What I verified**\n\n- **Offline suite**: 233 tests pass, 14 skipped (fork and mainnet-manifest tests).\n- **Live Sepolia fork**: both Sepolia fork suites pass against the real Intake v2 and the test run 2 Stacker through a public RPC.\n- **Live Intake source** (Sourcify): the `requests` getter returns exactly the tuple the registry declares, and `complete` marks the request completed before a one-shot callback. So `expire` and the deadline logic behave as intended.\n- **Live facts**: callback gas 1,000,000, price 0.5 test IMD, Stacker tokens match launch #1129, venue owner matches, and run 5's registry has the same signer, Stacker, bond and chain settings.\n- **Body limits**: every rule is under 512 characters (the trader rule is 505), and the longest application and challenge questions are 1,010 and 1,107 characters.\n- **Manifest**: three schema keys, seven string arguments in constructor order equal to the brief, notes 2,031 characters. Since run 5 only the trader rule string and its comment changed.\n- **Callback gas**: every cold settlement path stays under the mainnet 200k stipend.\n\n**Specific traces that came up clean**\n\n- The owner gate cannot be bypassed by starving the `owner()` staticcall of gas: after a forced out-of-gas, less than 1/64 of the gas remains, far short of the fee pull and Intake request.\n- Answer replay, cross-question delivery, pre-ask answers and expired questions are all refused. Pairing of an answer to its request rests on the Intake writer, exactly as the oracle-consumer reference specifies.\n- Bond accounting never blocks settlement and the registry's balance always covers owed and open bonds.\n\n**The one note recorded** is a design-accepted trust assumption rather than a defect: with no owner, the oracle signer and action id are fixed for the registry's life, so a key rotation or action retirement by IdentityMD would stall every later question. The brief's no-owner design wins over the reference's advice, and the mainnet registry inherits the same dependency.","treeHash":null,"usage":{"cachedInputTokens":1773231,"inputTokens":578,"model":"claude-fable-5-1","outputTokens":38504,"runtime":"claude","turns":31,"wallClockMs":618353}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0e78515c4d95885a","findings":[{"citation":"resolved","description":"Economic Security guide, 'legitimate features turned against the protocol'. A signed yes lists the project and sets challengeOpenAt = now + challengeCooldown (3600 s on Sepolia, 7 days on mainnet per docs/design.md). Until then _challenge reverts ChallengeTooSoon for everyone (line 322), and when a later challenge is answered no, the listing ends at the answer block (line 413: p.toBlock = uint64(block.number)), never at the block the project stopped complying. Points are 'credits from listed projects between fromBlock and toBlock' (docs/design.md), so a project whose behaviour can change after the panel judged it (an upgradeable proxy, a hook whose owner can retarget credit(), a rate parameter without the on-chain range guard the rules ask for) earns points for its whole cooldown plus the time to a challenge and an answer, and keeps them. The panel rules bind the rate ('if the rate can change, the code must keep it between 25 and 100') but say nothing about upgradeability or an owner who can change what is credited, so the panel is not told to refuse such code. The attestation's signed `figure` field could carry the block the breach began and the registry could record it as toBlock, or the indexer can cut points from the breach block; the code ignores figure. This is the tradeoff docs/design.md states ('Seven days gives a listed or defended project a quiet week; a project that starts cheating can still be challenged within a week, and its points stop from the block it is delisted'), so it is reported as information, not as a defect that reopens the work.","line":401,"path":"src/ProjectRegistry.sol","reproduction":"Mainnet settings (challengeCooldown = 7 days). 1) Owner of upgradeable hook P calls applyListing(P, name, url, 50, B); panel answers yes at block N: listed = true, fromBlock = N, challengeOpenAt = T+7d. 2) At block N+1 the owner upgrades P so that credit(trader, amount) is called for wallets it picks with its own IMD; it stacks 10,000 IMD over the week. 3) Any challengeForBeneficiary(P, reason, B) before T+7d reverts ChallengeTooSoon(T+7d). 4) At T+7d a challenger files; the panel answers no at block M: toBlock = M. Expected (first principles: 'only credits from listed projects that follow the rules earn points'): the 10,000 IMD stacked between N+1 and M earn nothing. Actual: the registry records the listing period [N, M] and the Stacked events in it count; nothing on chain marks N+1 as the breach, and the honest challenger is out 0.5 IMD and a week.","severity":"info","snippet":"                p.challengeOpenAt = uint64(block.timestamp) + challengeCooldown;","title":"Delisting is never retroactive and the cooldown is an immunity window, so a project that changes behaviour right after listing keeps every point earned until the delist block (documented design tradeo"}],"hash":"8d5d010c75f584b18bfd938b4365e6c3b646a9db528d9fce01c5ae5f5c433ce9","nodeId":"962305f0-05b4-4089-9b21-410029a95014","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result. The working tree is otherwise unchanged, and the scratch test I used for gas measurement was removed.\n\n**Outcome: no defect found in the assigned area.** The ProjectRegistry's value flows, bond accounting, and oracle-settlement paths hold against the Economic Security, Invariant and Flow Gap checklists. The file records one informational note and twelve coverage rows.\n\n**What I verified**\n\n- Bond conservation: every close path (signed answer, failure, expire) pays or records exactly one bond, after state is closed, to the wallet pinned when the challenge opened. The fee leaves to the Intake in the same transaction, so the registry balance always covers open bonds plus `bondOwed`.\n- Settlement gas: a scratch test measured the minimum gas for every callback outcome, including a zero-balance recipient and a token that refuses the transfer. All settle in roughly 70k to 102k, against the 200k mainnet stipend.\n- Live Sepolia reads: the Intake's `requests()` fourth return is `completed`, true for two settled request ids from the history notes, so `expire`'s early path matches the live contract. The live `priceOf` for the Sepolia test IMD returns 0.5e18, so asks will not revert with `OracleUnavailable` at launch.\n- Manifest: keys, one contract, seven string arguments in constructor order matching the brief, notes under 4,000 characters.\n- Offline suite: 233 passed, 2 skipped (the mainnet-manifest checks), none failed.\n\n**The one note (severity info)**: delisting ends a listing at the answer block, never at the block a breach began, and the cooldown blocks every challenge after listing. A project whose code can change after judgment keeps every point earned through the cooldown and until the challenge settles. The design notes state this tradeoff deliberately, so I recorded it for the judge rather than as a defect. The signed attestation's unused `figure` field, or the indexer, could carry a breach block if the author wants to close it.\n\n**Leads I rejected**, so the judge need not re-trace them: beneficiary self-challenge holding the question slot (costs 0.5 IMD per round and gets a real verdict, no immunity gained); application spam on ownerless projects (documented known limit); a beneficiary naming the registry or a blocked wallet as its own payee (self-harm only).","treeHash":null,"usage":{"cachedInputTokens":1500908,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":45912,"runtime":"claude","turns":34,"wallClockMs":715300}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"827152cce766ca0d","findings":[],"hash":"c2cae0ce54ea16fc2b58cd5b663b281396ca0f64298ef43101ad371876a7c06b","nodeId":"334cbbbf-5c97-48ac-9579-81cd9f30b522","outcome":"completed","summary":"I found no defects I could back with a failing input, so `.imd-findings.json` holds `{\"findings\":[]}`. No repository file was changed. That means no defect turned up within what I could check; it isn't proof there are none.\n\n**What I read**\n- `src/ProjectRegistry.sol` (all of it), the only contract this launch deploys. I traced every function that changes state: `applyListing`, `challenge`, `challengeForBeneficiary`, `onOracleResult`, `onOracleFailure`, `expire`, `claimBond`, `setBeneficiary`, plus the constructor and `projectOwner`.\n- `src/oracle/OracleAttestation.sol`, checked against the oracle-consumer reference (struct, type hash, domain, decoders).\n- `src/Stacker.sol`, for context only; this launch doesn't deploy it.\n- `test/trial/TrialVenue.sol`, skimmed, along with the mock `requests()` getters and the fork tests that call the real one.\n- `launch.json`: it has only the allowed keys (kind, contracts, notes), seven string arguments in the constructor's order matching the brief, and notes of 2,031 characters.\n- `docs/panel-rules-v2.md`: the version 3.1 trader and feeGuard text matches the strings in the contract exactly.\n\n**Checked against the brief, all holding**\n- **Owner-only applications:** `NotProjectOwner` fires before any fee. A project that reverts, gives a malformed answer or reports zero has no owner. The 30,000 gas cap can't be gamed by limiting the caller's gas, because the rest of `applyListing` needs far more gas than that trick would leave.\n- **Answers:** only the Intake can deliver one, only for this contract's own open request, with each oracle request id used once. The signature must be for this contract, issued after the ask (300 s tolerance), from a panel of 15 with at least 11 agreeing, filed under chain 1.\n- **Settling:** a \"yes\" lists the project or keeps it listed, with the bond going to the beneficiary and the cooldown not restarted. A \"no\" rejects or delists and returns the bond. A failure only clears the question and returns the bond.\n- **Clearing and bonds:** `expire` works after a day or once the Intake has completed the request. A bond the token refuses is recorded in `bondOwed` and claimed with `claimBond`. The tokens the contract holds always equal open bonds plus bonds owed.\n- **Beneficiary handoff:** `setBeneficiary` is blocked while a question is open and allowed once a day. A handoff then forces challengers to name the expected beneficiary, so a challenge can't be redirected to a different wallet.\n- **Question text:** applicant text is limited to printable ASCII without quotes, backslashes or brackets, so the JSON body stays valid. Each rule is under 512 characters, which the tests check.\n- **Forbidden features:** no owner, no minting, pausing, delegatecall, selfdestruct, proxy or initializer, and the constructor makes no external call.\n\n**Accepted by the brief, not reported**\n- Anyone can apply for a project with no owner, so they can tie up its one question slot for 0.5 IMD per try.\n- A challenger can make a failed question come back, which returns their bond and loses only the fee.\n\n**What I couldn't reach**\n- No RPC URL is set on this machine. So I couldn't read the live Sepolia contracts (Intake v2, Stacker `0x0457…314d`, TestIMD, TestSIMD, TrialVenue `0xf252…6fef`, test run 5's registry), and the Intake v2 source isn't in the repository. I relied on the fork tests' and mocks' view of its `requests()` getter and its callback behaviour.\n- The 12 fork tests and 2 mainnet-manifest checks were skipped.\n- **Tests:** `forge test --offline` passed 232 tests with 0 failures and 14 skipped, out of 246.","treeHash":null,"usage":{"cachedInputTokens":589957,"inputTokens":20,"model":"claude-opus-5-5","outputTokens":12420,"runtime":"claude","turns":11,"wallClockMs":274073}},{"artifacts":[],"attempt":1,"bundleHash":"3a3ba8937c0334751226e97057a8344ddbdc9a767794d7569eb0bc67059a8597","device":"6f30d6341cbff249","findings":[],"hash":"dca733848a83b1d09b6b428a63eb3805de6d432bcc2d4ac6e79935dbcdb6da15","nodeId":"64adab3b-1730-4408-8606-f157158a3966","outcome":"completed","summary":"Updated only `launch.json`, preserving the exact ProjectRegistry deployment arguments and clarifying the launch notes.\n\nValidation passed: manifest structure, compiled constructor ABI, `forge build`, 233 offline tests, and all 12 fork tests. Two mainnet-manifest checks remain skipped as expected.","treeHash":"967a7cb65c334f82e6b7afcf3fc6c2c8748b8238","usage":{"cachedInputTokens":365824,"inputTokens":50522,"model":"gpt-6-astra","outputTokens":4651,"runtime":"codex","turns":4,"wallClockMs":147712}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"03845cacb54c3a73","findings":[{"citation":"resolved","description":"Boundary exercised: the staticcall to the project's owner() in projectOwner (src/ProjectRegistry.sol:243), forwarded exactly OWNER_CALL_GAS = 30,000 gas (line 100). Assumption the caller makes: a project that answers owner() will answer it within 30,000 gas, so a failed call means 'no owner' and anyone may apply (line 247 and applyListing line 270). Actual behaviour: owner() resolution that walks a chain of cold contracts exceeds the cap and fails on gas alone, and the failure mode is permissive, not restrictive: the project is treated as ownerless and the NotProjectOwner gate (the squatter protection the applicant-gate revision added, test/RegistryApplicantGate.t.sol test_squatterCannotBlockTheTeam) is bypassed. Measured cold costs under the cancun schedule in a Foundry test (each hop is a contract whose owner() returns IOwned(parent).owner(), ending at an Ownable implementation behind a beacon proxy; a realistic shape for a venue owned by a factory owned by a DAO module behind an upgradeable beacon): 1 hop ~20k inside the call (projectOwner total 27,877 from a cold caller), 2 hops ~25k (33,065), 3 hops ~30k (just fits), 4 hops: owner() itself answers the team wallet at 38,100 gas cold, projectOwner returns address(0). The cap also sits against a gas schedule the code does not control: any repricing of cold account access or SLOAD moves the depth at which honest projects fall over the edge. Impact: for such a project the pre-revision behaviour returns: anyone can file applyListing for it, hold its single question slot for up to PENDING_EXPIRY (1 day) per 0.5 IMD, and name their own beneficiary (the panel's beneficiary rule should then answer no, but the team is locked out of applying until the squatter's question settles or expires, and the squatter can refile). No funds are lost. Minimal fix that preserves the design: treat an out-of-gas owner() distinctly from a revert, e.g. forward a larger fixed budget (the bound only needs to stop unbounded spend, 100k still caps a hostile project), or require that at least OWNER_CALL_GAS was available and treat `ok == false && gasleft-after < threshold`... simplest is to raise OWNER_CALL_GAS and document the depth it supports.","line":243,"path":"src/ProjectRegistry.sol","reproduction":"Deploy OwnableImpl (slot 0 reserved for the proxy's beacon, slot 1 = owner), Beacon(impl), BeaconProxyLike(beacon) and call set(team) through the proxy; then deploy Forwarder(proxy), Forwarder(that), Forwarder(that), Forwarder(that) where Forwarder.owner() returns IOwned(parent).owner(); call the last one p4. In a fresh transaction: IOwned(p4).owner() == team (costs 38,100 gas cold), but registry.projectOwner(p4) == address(0). Then vm.prank(squatter); registry.applyListing(p4, \"X\", \"https://example.com/x\", 50, squatter) succeeds and projectOf(p4).asker == squatter. Expected: NotProjectOwner(team) before any fee, as it is for the same project with 1-3 hops (projectOwner(p1) == team). With 3 hops projectOwner still returns team but at ~30k inside the call, i.e. at the cap. Test used: test/scratch/OwnerGasCap.t.sol (test_threeHops_cold_squatter with _chain(4)).","severity":"low","snippet":"            ok := staticcall(OWNER_CALL_GAS, project, 0, 4, 0, 32)","title":"projectOwner's fixed 30,000-gas cap silently opens the owner-only gate for a project whose owner() legitimately costs more than that (boundary: external call return value on out-of-gas)"},{"citation":"resolved","description":"Boundary exercised: the decode of owner()'s return word in projectOwner. Assumption: a 32-byte word with zero upper 96 bits is an address. Actual: a contract whose owner() returns uint256 (an owner token id, e.g. 7) or bool (true = 1) also returns a 32-byte word with zero upper bits, so projectOwner reports address(7) or address(1), a precompile that can never call applyListing. The applicant gate then refuses everyone except the project contract itself (which has no code to apply). This matches the documented rule ('a malformed answer ... means no owner' does not cover this shape, ABI-wise 7 is a validly encoded address) and the fallback is restrictive rather than permissive, so no funds or slot are at risk; recorded for the author's awareness because the lock-out is permanent for such a project unless the registry is replaced. Possible refinement: also require word != 0 && word > 0xffff (or check the address has code or is an EOA-looking value) is not sound either; the honest answer is that this is an accepted limitation worth a line in the docs.","line":247,"path":"src/ProjectRegistry.sol","reproduction":"contract UintOwnerProject { function owner() external pure returns (uint256) { return 7; } } deployed as p; registry.projectOwner(p) == address(7); vm.prank(anyone); registry.applyListing(p, \"X\", \"https://example.com/x\", 50, b) reverts NotProjectOwner(0x0000000000000000000000000000000000000007) for every caller. Same with returns (bool) true -> address(1). Test used: test/scratch/Boundaries.t.sol test_uintOwnerLocksOutApplicants and test_boolOwnerLocksOutApplicants (both pass on the current code, demonstrating the lock-out).","severity":"info","snippet":"        if (ok && size == 32 && word >> 160 == 0) owner = address(uint160(word));","title":"projectOwner accepts any 32-byte owner() answer whose upper 96 bits are zero as an address, so a project whose owner() returns a small non-address word (uint256 id, bool) becomes unlistable by anyone"}],"hash":"e3e8709dcec8a03427508b01d5e5200856004b0bb9a147ab6d3e822b504545eb","nodeId":"eb0daf8f-1760-4f72-8ccf-94999d9a76f4","outcome":"completed","summary":"The findings file is valid, both snippets match the tree, and git shows no tracked-file changes (the findings file and `test/scratch/` are untracked and allowed).\n\n**Result: no medium or higher defect in the math, boundary or numerical-gap area.** The registry has no divisions, no scaling, and only checked additions on values bounded by immutables, so the precision guide had nothing to bite on. The boundary work turned up one low and one informational item, both in `projectOwner`.\n\n**Findings written to `.imd-findings.json`:**\n\n- **Low, `src/ProjectRegistry.sol:243`.** The fixed 30,000-gas budget for `owner()` fails permissively. An honest project whose ownership resolves through four cold forwarding hops ending in a beacon proxy answers `owner()` at 38,100 gas, but the registry reads it as ownerless. A stranger then files the application and holds the slot for up to a day per 0.5 IMD, which is exactly what the owner gate was added to stop. Three hops already sit at the cap. Reproduced in a scratch test with measured costs per depth. No funds are at risk.\n- **Info, `src/ProjectRegistry.sol:247`.** Any 32-byte `owner()` answer with zero upper bits is taken as an address. A project returning `uint256 7` or `bool true` gets owner `0x…07` or `0x…01`, so nobody can ever apply for it. Restrictive rather than exploitable, so recorded for awareness only.\n\n**What I verified as holding, with evidence:**\n\n- Deadline edges are consistent to the second. At exactly asked-plus-one-day the answer is still accepted and `expire` needs `completed`; one second later the answer is TooLate and `expire` works. The issuedAt tolerance is inclusive at 300 seconds and rejects 301.\n- The live Intake v2 source from Sourcify sets `completed` in the same transaction as the callback, and its `requests` getter returns the four-field tuple the registry decodes, so the early-expire path cannot be raced.\n- Minimum cold callback stipend per path, bisected: 70,489 listing, 64,130 rejection, 99,386 defended, 80,373 delisted. Sepolia's live `callbackGas` reads 1,000,000, mainnet's 200,000 leaves a 2x margin.\n- Every version 3.1 definition fits the 512-character cap at maximum inputs; the trader rule is 505.\n- Live Sepolia reads match the brief: price 0.5 test IMD, trial venue owner `0x4b91…6821`, manifest arguments in declaration order.\n\n**Coverage:** all nine listed entry points have a row (eight hold, `applyListing` carries finding 1), plus two invariant rows. The full offline suite passes at 233 tests with 14 fork tests skipped. Nothing in my area was left unreached.","treeHash":null,"usage":{"cachedInputTokens":1887885,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":46688,"runtime":"claude","turns":35,"wallClockMs":704227}},{"artifacts":[],"attempt":1,"bundleHash":"0853f3659a233b19edceccdf2e7ffcd49a001fb4b07d9663ae7bcbd159c8057a","device":"f5975850d31ab58a","findings":[],"hash":"e452e631b5732f6392fb94f2722c0c8b90ddfc5ba58ef06ea92b9e4fb398c73a","nodeId":"eeba6e14-5f9a-40a6-af46-6d142ab431c7","outcome":"completed","summary":"Prepared the run 6 launch handoff: added an exact-manifest factory test, README updates, and `ADAPTATION.md`. Contracts, manifest, and build configuration remain unchanged.\n\nValidation passed: `forge build`, 233 offline tests, and all 12 fork tests. Offline runs have 14 expected skips.\n\nNo transaction was broadcast. The confirmed registry address must be recorded after deployment.","treeHash":"8a92e4ae1cc911c2513f3de3dd4184a86e6cd33d","usage":{"cachedInputTokens":1159808,"inputTokens":100203,"model":"gpt-6-astra","outputTokens":11266,"runtime":"codex","turns":6,"wallClockMs":339697}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"93c37f17670e4d98","findings":[{"citation":"resolved","description":"Area: Trust Gap (access x economics x asymmetry). `_challenge` (src/ProjectRegistry.sol:321 `if (p.ask != Ask.None) revert AskOpen();`) lets anyone, including the project's own beneficiary, open the one challenge slot a listed project has, and a signed yes pays the bond to `p.beneficiary` (line 409). When the challenger IS the beneficiary the bond is paid back to the challenger, so a self-challenge costs 0.5 IMD per round while every other challenger risks 5 IMD plus the fee. The author's test `test_selfChallengeOccupiesSlotOnlyUntilItSettles` (test/RegistryRevisionRegression.t.sol:405) records 'anyone can buy the one slot' as a retained limit, and the cooldown is deliberately not restarted, but the retained limit is cheaper for the beneficiary than for anyone else: a beneficiary bot that re-challenges its own listing in the same block each settlement lands (reason text of its choosing, e.g. 'routine check') keeps a third party's challenge, whose reason would point the panel at the actual violation, reverting with AskOpen indefinitely, and the panel is only ever asked the beneficiary's framing. The comment at lines 407-408 considers only the cooldown side of self-defence, not the fee-only cost. Minimal fix preserving the design: in `_challenge` revert when `msg.sender == p.beneficiary` (the beneficiary gains nothing legitimate from challenging itself), or route a defended bond whose asker equals the beneficiary to `bondOwed[address(0)]`/a burn instead of back to the asker, so a self-challenge costs the full bond like any other.","line":409,"path":"src/ProjectRegistry.sol","reproduction":"State: project P listed with beneficiary B (B applied, panel yes), cooldown elapsed. Calls: (1) B: challengeForBeneficiary(P, 'all good', B) -> pays 0.5 fee + 5 bond, ask opens. (2) C (an honest challenger): challengeForBeneficiary(P, 'credits wallets outside trades', B) -> reverts AskOpen. (3) Intake delivers a signed yes -> Defended, `_payBond(p.beneficiary)` sends the 5 IMD bond to B, i.e. back to the challenger; challengeOpenAt unchanged. (4) B repeats (1) in the settlement block. After 3 rounds B's balance is down exactly 3 * 0.5e18 and C has never been able to file; a non-beneficiary doing the same would have 15 IMD of bonds at risk per 3 rounds. Expected: a self-challenge should cost the beneficiary at least what it costs anyone else, or be refused. Actual: it costs only the oracle fee. Verified with test/scratch/SelfChallengeHog.t.sol (passes against the current code, demonstrating the trace; it is a demonstration, not a failing proof).","severity":"low","snippet":"            _payBond(p.beneficiary);","title":"Beneficiary can hold a listed project's single question slot by self-challenging for the fee only: a defended self-challenge returns its own bond, so the cost asymmetry that deters nuisance challenges"},{"citation":"resolved","description":"Area: Access Control. This is the behaviour the brief specifies ('a revert, a malformed answer or zero means no owner') and the author tests it as intended (test/RegistryApplicantGate.t.sol OddOwner modes 1-5), so it is recorded as a trust assumption rather than a defect: the NotProjectOwner guarantee of launch #1409's squatting fix only holds for projects whose owner() is a plain read that fits in 30,000 gas and returns exactly one word. A project whose owner() legitimately costs more (for example an owner derived through two cold proxy hops plus an external registry read, or an owner() that returns (address, uint256)) is open to the squatting the gate was added to stop, with no signal to the applicant that the gate was bypassed. No code change is required by the brief; if the author wants the guarantee to fail closed instead, `applyListing` could revert when the staticcall itself fails (ok == false) and still treat a zero or malformed answer as 'no owner'.","line":247,"path":"src/ProjectRegistry.sol","reproduction":"Deploy a project whose owner() loops (test/RegistryApplicantGate.t.sol OddOwner mode 2) or returns 64 bytes (mode 3); `reg.projectOwner(p)` returns address(0); any stranger's `applyListing(p, ...)` succeeds and occupies the slot, whereas for an OZ Ownable project the same call reverts NotProjectOwner.","severity":"info","snippet":"        if (ok && size == 32 && word >> 160 == 0) owner = address(uint160(word));","title":"Applicant gate fails open: a project whose owner() cannot answer inside 30,000 gas or returns a non-32-byte word is treated as ownerless and any stranger may hold its question slot"},{"citation":"resolved","description":"Area: Access Control (roles after deployment). Documented, not a defect: the registry exposes no setter for `oracleSigner` (`_setOracleSigner` is internal and called once from the constructor) and `intake`/`oracleAsset` are immutable, so the only privileged actors are the Intake (as msg.sender of onOracleResult/onOracleFailure) and the oracle signer's key; the oracle-consumer reference's 'owner-settable, never a constant' guidance is intentionally not followed because there is no owner. Consequences the operator should accept: a signer rotation or an Intake v3 requires redeploying the registry and re-listing every project; a compromise of the one signer key, paired with the Intake writer, can list or delist anything (the registry still refuses answers for request ids it did not create, so the writer must also cooperate). Every entry point was traced for weaker guards: none writes listing state without both the Intake as caller and a signature for this contract.","line":204,"path":"src/ProjectRegistry.sol","reproduction":"Read-only: `oracleSigner()` has no public writer; `grep -n _setOracleSigner src/` shows only the constructor call in OracleAttestation.sol:150. Any call path to change it does not exist, so a rotated signer makes every future `onOracleResult` revert BadSignature and only `expire` can clear questions.","severity":"info","snippet":"    ) OracleAttestationConsumer(oracleSigner_) {","title":"Trust assumptions of the no-owner design: the oracle signer and the Intake are fixed for the registry's life"}],"hash":"e8b207d77847c5d071a89f58d5227956986be0f37791c1a868efb79d1e3266b9","nodeId":"29bde9d7-147b-484c-b390-17c900bf7bfd","outcome":"completed","summary":"The review is complete and the findings file is written and validated.\n\n**Outcome:** the permission model of the ProjectRegistry holds. No critical, high or medium defect was found in the Access Control, Trust Gap or Asymmetry areas. The file `.imd-findings.json` holds one low finding, two documented trust assumptions, and coverage rows for all nine entry points plus the manifest and one invariant.\n\n**What was checked**\n- Every state-changing entry point was traced for caller, guard, writes and failure paths. Only the Intake can settle or clear a question, and only for a request id the registry created. A stranger who pays the Intake and names this contract as callback reaches `UnknownRequest`. A signature for another consumer, an answer issued before the ask, a short panel, or a reused request id all revert before any effect.\n- Paired surfaces were diffed: apply versus settle, challenge versus defend or delist, failure versus expire, bond payout versus claim. Writes mirror correctly and the defended bond goes to the beneficiary frozen while the question is open.\n- The manifest has only the schema's keys, seven string arguments in declaration order matching the brief, and correct EIP-55 checksums. The live Sepolia Intake v2 answers `requests(bytes32)` and `priceOf` with the shapes the registry decodes.\n- The offline suite passes with 233 tests and 14 skipped fork or mainnet checks.\n\n**Findings reported**\n- **Low:** a listed project's beneficiary can hold the single challenge slot by challenging itself, and a defended self-challenge pays the bond back to itself. Each round costs only the oracle fee, while any other challenger risks the full bond. An honest challenger whose reason would point the panel at the real violation keeps reverting with `AskOpen`. The author's regression test records slot buying as a retained limit, but not this cost asymmetry. Reproduced in `test/scratch/SelfChallengeHog.t.sol`.\n- **Info:** the applicant gate fails open when a project's `owner()` cannot answer within the gas cap or returns a malformed word. This is the behaviour the brief specifies and is recorded as a trust assumption.\n- **Info:** no signer rotation or Intake change is possible without a redeploy, by the no-owner design.\n\n**Not reached:** nothing in the assigned area was left untraced. Fork tests were not run because no RPC environment variables are set on this machine; the live Intake reads above were done directly with a public Sepolia endpoint instead.","treeHash":null,"usage":{"cachedInputTokens":1508565,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":34568,"runtime":"claude","turns":28,"wallClockMs":561708}}],"verification":[{"checks":[{"durationMs":14812,"exitCode":0,"name":"build","output":"Compiling 96 files with Solc 0.8.26\nSolc 0.8.26 finished in 14.69s\nCompiler run successful!\n","passed":true},{"durationMs":7523,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 1.75ms (646.14µs CPU time)\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 1.70ms (889.36µ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 1.71ms (551.65µ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 1.88ms (632.68µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.69ms (2.16ms 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.54ms (1.14ms CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 3.44ms (1.25ms 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 4.04ms (1.99ms 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 4.47ms (3.19ms 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.87ms (157.16µ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 7.02ms (261.08µ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 7.14ms (189.50µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829078)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.36ms (5.44ms 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.14ms (159.92µs CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106533)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201461)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279227)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 4.94ms (4.34ms 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 8.66ms (4.50ms CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420702)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582398)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089149)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436149)\n[PASS] test_ownerMayApply() (gas: 3320957)\n[PASS] test_projectItselfMayApply() (gas: 3381816)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3283967)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550014)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390836)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 13.61ms (11.58ms CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111500)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 938992)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232643)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219696)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052705)\n[PASS] test_owedBondsAccumulate() (gas: 1421913)\n[PASS] test_unblocked_paysAtOnce() (gas: 950775)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 16.39ms (15.89ms CPU time)\n\nRan 10 tests for test/RegistrySignerCompatibility.t.sol:RegistrySignerCompatibilityTest\n[PASS] test_codeAddedToEOASignerDoesNotInvalidateItsSignedAnswer() (gas: 3281853)\n[PASS] test_codeBearingEOASignerCanDelistAndRefund() (gas: 6432352)\n[PASS] test_codeBearingEOASignerStillRejectsWrongKeyWithoutConsumingAnswer() (gas: 6644040)\n[PASS] test_contractApprovalCannotBypassPanelPolicyOrRequestAuthentication() (gas: 7209530)\n[PASS] test_contractSignerApprovalForAnotherConsumerCannotSettle() (gas: 7150574)\n[PASS] test_contractSignerOpaqueSignatureCanDefend() (gas: 6972891)\n[PASS] test_contractSignerOpaqueSignatureCanDelist() (gas: 6935253)\n[PASS] test_contractSignerRequiresApprovedDigestAndSignature() (gas: 7329349)\n[PASS] test_malformedContractSignerResponsesCannotReleaseChallengeBond() (gas: 8387663)\n[PASS] test_revokedContractSignatureCanBeExpiredAfterFailedDelivery() (gas: 7044140)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 18.51ms (17.73ms CPU time)\n\nRan 4 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25953)\n[PASS] test_launchManifest_knownShape() (gas: 30643)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8370970)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 22.90ms (25.79ms CPU time)\n\nRan 1 test for test/RegistryLaunchRun6.t.sol:RegistryLaunchRun6Test\n[PASS] test_run6ManifestDeploysOnlyRegistryWithoutExternalConstructorCalls() (gas: 14346774)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 64.89ms (64.40ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 332241, ~: 55855)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 452035, ~: 47827)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531077)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219811)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229499)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317228)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227303)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117493)\n[PASS] test_apply_validation() (gas: 566706)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062241)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362198)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363000)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339261)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314240)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469384)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115815)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990026)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057692)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171630)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319052)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160414)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 78.97ms (84.32ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394570, ~: 394389)\nLogs:\n  Bound result 892953500801554769561\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367367, ~: 368890)\nLogs:\n  Bound result 999999999999999999999998\n  Bound result 755011490131087354764221\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430315, ~: 430416)\nLogs:\n  Bound result 53376366989535472496465\n  Bound result 499999999999999999999998\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 166.86ms (167.78ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1447272, ~: 1398295)\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 183.84ms (183.15ms CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106300, ~: 3106114)\nLogs:\n  Bound result 1943\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334541)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881679)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210754)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528239)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281207)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409642)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221638)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326504)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345286)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 569.93ms (582.10ms 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     | 421   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 408   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 424   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 420   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 375   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 4\n  Bound result 7314\n  Bound result 987\n  Bound result 7435\n  Bound result 2\n  Bound result 659918\n  Bound result 334626887592400295777\n  Bound result 282574920914\n  Bound result 8\n  Bound result 6871\n  Bound result 5830\n  Bound result 3793\n  Bound result 766\n  Bound result 92\n  Bound result 2585\n  Bound result 11934\n  Bound result 2008\n  Bound result 980183569390868494436\n  Bound result 10\n  Bound result 10\n  Bound result 1700000000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 669.60ms (666.63ms 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            | 263   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 255   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 270   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 238   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 257   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 236   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 266   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 263   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 91\n  Bound result 14580\n  Bound result 62984\n  Bound result 12800\n  Bound result 66405\n  Bound result 108800\n  Bound result 433\n  Bound result 139926\n  Bound result 68982\n  Bound result 65\n  Bound result 93532\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968758)\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 744.32ms (744.54ms CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539216, ~: 6539367)\nLogs:\n  Bound result 3603\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3315886, ~: 3313952)\nLogs:\n  Bound result 3\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493518)\n[PASS] test_clockIsPerProject() (gas: 6503658)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417251)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290837)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333586)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821419)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 820.38ms (1.18s CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268149, ~: 3268027)\nLogs:\n  Bound result 418430966\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 826.78ms (826.90ms CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234726, ~: 234498)\nLogs:\n  Bound result 759145692506025900743505\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1536986, ~: 1370428)\nLogs:\n  Bound result 4\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388837, ~: 388782)\nLogs:\n  Bound result 12922\n  Bound result 2596\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 740346, ~: 761950)\nLogs:\n  Bound result 200000000000000000\n  Bound result 6\n  Bound result 9900\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 683279, ~: 689030)\nLogs:\n  Bound result 54774845736040355098051\n  Bound result 325834666025369153900\n  Bound result 29402101890121496658123\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 491250, ~: 510594)\nLogs:\n  Bound result 2596\n  Bound result 12922\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 826.81ms (2.49s CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3620028, ~: 3580651)\nLogs:\n  Bound result 15\n  Bound result 38\n  Bound result 74\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6778221, ~: 6718793)\nLogs:\n  Bound result 7\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862212)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504712)\n[PASS] test_challengeMaximumReason() (gas: 7118161)\n[PASS] test_challengeMinimumReason() (gas: 6643494)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53786340)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750369)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 826.84ms (1.66s CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554628, ~: 6554577)\nLogs:\n  Bound result 3\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6639069, ~: 6646069)\nLogs:\n  Bound result 3\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 5039583, ~: 6568833)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433560, ~: 6433300)\nLogs:\n  Bound result 3\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414882)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405341)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831651)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413317)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592723)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190867)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613845)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405630)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686893)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529325)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956410)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561263)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575194)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558339)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627062)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537444)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 826.90ms (1.96s CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674637, ~: 674352)\nLogs:\n  Bound result 15\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 903435, ~: 885097)\nLogs:\n  Bound result 0\n  Bound result 7087\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 843012, ~: 845708)\nLogs:\n  Bound result 2\n  Bound result 1577001248\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 876971, ~: 876223)\nLogs:\n  Bound result 1\n  Bound result 31461483317\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 827.16ms (1.90s CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976908, ~: 976865)\nLogs:\n  Bound result 99999000000000000008055\n  Bound result 2098\n  Bound result 1699\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935858, ~: 2941251)\nLogs:\n  Bound result 418430966\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 827.16ms (1.64s CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9345492, ~: 9348215)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6341185, ~: 6346464)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327146, ~: 7327323)\nLogs:\n  Bound result 80\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240063, ~: 3239746)\nLogs:\n  Bound result 300\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302422)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764246)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302532)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723040)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674185)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300937)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666121)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742630)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415411)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854391)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349310)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329910)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390577)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 827.33ms (1.83s 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        | 483   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 522   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 433   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 492   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 495   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 450   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 450   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 487   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 472   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 450   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 455   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 460   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 495   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3960811609542965143241\n  Bound result 999995\n  Bound result 9794783026591461906424\n  Bound result 3171\n  Bound result 10000000000000000002\n  Bound result 122\n  Bound result 5469\n  Bound result 25\n  Bound result 2000000000000000000\n  Bound result 999993\n  Bound result 16865\n  Bound result 1\n  Bound result 18446744073709551615\n  Bound result 907998\n  Bound result 128\n  Bound result 1800003600\n  Bound result 618\n  Bound result 3\n  Bound result 1294\n  Bound result 9630\n  Bound result 910484757\n  Bound result 1552370723480902374507\n  Bound result 1\n  Bound result 1000000000000000000000\n  Bound result 1862633798316499002100\n  Bound result 2\n  Bound result 9734\n  Bound result 92\n  Bound result 11155111\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.60s (4.60s 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                  | 1832  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1820  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1844  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1822  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1841  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1861  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1807  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1782  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1775  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 800145516872395205\n  Bound result 13508\n  Bound result 5895\n  Bound result 1\n  Bound result 28512\n  Bound result 7\n  Bound result 87\n  Bound result 0\n  Bound result 2\n  Bound result 1752\n  Bound result 6\n  Bound result 7428\n  Bound result 20\n  Bound result 78\n  Bound result 25\n  Bound result 86\n  Bound result 8451\n  Bound result 5\n  Bound result 15045\n  Bound result 627740598683712627\n  Bound result 89014\n  Bound result 15\n  Bound result 27582\n  Bound result 89\n  Bound result 15828\n  Bound result 8\n  Bound result 5557\n  Bound result 37\n  Bound result 16170\n  Bound result 891\n  Bound result 55696663393056852\n  Bound result 95\n  Bound result 156563\n  Bound result 64\n  Bound result 6323\n  Bound result 113182\n  Bound result 11\n  Bound result 676970507656257868\n  Bound result 104784\n  Bound result 63\n  Bound result 200\n  Bound result 20\n  Bound result 13952\n  Bound result 260741233531652851\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458199)\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: 16504200)\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.96s (5.98s 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              | 2000  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2083  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2032  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2112  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2102  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2002  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2061  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 1992  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 8\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 939599341078487707221\n  Bound result 2552549929364112189107\n  Bound result 9\n  Bound result 0\n  Bound result 0\n  Bound result 14552\n  Bound result 0\n  Bound result 2\n  Bound result 9886869749160934763809\n  Bound result 10\n  Bound result 5\n  Bound result 1000\n  Bound result 1440\n  Bound result 92\n  Bound result 7\n  Bound result 10\n  Bound result 2186\n  Bound result 77700658526572667648\n  Bound result 5886\n  Bound result 613662\n  Bound result 255\n  Bound result 7598\n  Bound result 8\n  Bound result 0\n  Bound result 1764\n  Bound result 2831169\n  Bound result 2000000000000000000\n  Bound result 7\n  Bound result 4\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.24s (7.24s 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 7.24s (543.86µs CPU time)\n\nRan 3 tests for test/RegistryDeferredBondInvariant.t.sol:RegistryDeferredBondInvariantTest\n[PASS] invariant_allPendingAndDeferredBondsRemainBackedAndOwned() (runs: 256, calls: 24576, reverts: 0)\n\n╭---------------------+---------------+-------+---------+----------╮\n| Contract            | Selector      | Calls | Reverts | Discards |\n+==================================================================+\n| DeferredBondHandler | claim         | 3525  | 0       | 0        |\n|---------------------+---------------+-------+---------+----------|\n| DeferredBondHandler | donate        | 3478  | 0       | 0        |\n|---------------------+---------------+-------+---------+----------|\n| DeferredBondHandler | handover      | 3537  | 0       | 0        |\n|---------------------+---------------+-------+---------+----------|\n| DeferredBondHandler | openChallenge | 3515  | 0       | 0        |\n|---------------------+---------------+-------+---------+----------|\n| DeferredBondHandler | payoutMode    | 3521  | 0       | 0        |\n|---------------------+---------------+-------+---------+----------|\n| DeferredBondHandler | reprice       | 3555  | 0       | 0        |\n|---------------------+---------------+-------+---------+----------|\n| DeferredBondHandler | resolve       | 3445  | 0       | 0        |\n╰---------------------+---------------+-------+---------+----------╯\n\nLogs:\n  Bound result 2\n  Bound result 1634607204\n  Bound result 1269\n  Bound result 14936\n  Bound result 22910\n  Bound result 1657221200720445919\n  Bound result 12206\n  Bound result 18861\n  Bound result 11779\n  Bound result 599338744346915101\n  Bound result 9049\n  Bound result 13338\n  Bound result 2015309202596\n  Bound result 1644015175378403329\n  Bound result 16204\n  Bound result 14680\n  Bound result 839\n  Bound result 4333\n  Bound result 5083\n  Bound result 15696\n  Bound result 3730691180045\n  Bound result 4543\n  Bound result 11101\n  Bound result 18270\n  Bound result 252765426868989\n  Bound result 129\n  Bound result 400048436695809975\n  Bound result 7608\n  Bound result 72817775025488646\n\n[PASS] test_campaignAccumulatesDebtWithoutSpendingOtherOpenBonds() (gas: 15597765)\n[PASS] test_campaignReachesEverySettlementAndOptionalReturnPath() (gas: 30718649)\nLogs:\n  Bound result 1\n  Bound result 1\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.37s (7.40s CPU time)\n\nRan 40 test suites in 7.39s (41.64s CPU time): 246 tests passed, 0 failed, 14 skipped (260 total tests)\n","passed":true},{"durationMs":88,"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\":34,\"NEXT_SESSION.md\":73,\"README.md\":288,\"app.js\":2272,\"docs/data-api.md\":97,\"docs/design.md\":322,\"docs/explainer.html\":247,\"docs/history.md\":387,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":88,\"docs/plea-handoff.md\":73,\"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/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-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/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-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\":709,\"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\":144,\"test/FactoryRehearsal.t.sol\":47,\"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/RUN6_ADDITIONAL_COVERAGE.md\":59,\"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/RegistryDeferredBondInvariant.t.sol\":420,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryLaunchRun6.t.sol\":121,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySepoliaFork.t.sol\":113,\"test/RegistrySignerCompatibility.t.sol\":208,\"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/TrialVenue.t.sol\":147,\"test/VaultTrustRegression.t.sol\":41,\"test/mocks/MockIntake.sol\":108,\"test/mocks/Registry1271Signer.sol\":67,\"test/mocks/RegistryPayoutToken.sol\":43,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"test/trial/TrialVenue.sol\":222,\"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\":156,\"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":"019dfd8d1bb8655545367a42a0e4d4d5932c2d2958b429e269b51b19524264d2","verifiedTreeHash":"5ef2c5c0c80bf78eb8a454a8182cd2cf3d50a386","verifierVersion":"0.1.0+7ff5db2c"},{"checks":[{"durationMs":14077,"exitCode":0,"name":"build","output":"Compiling 92 files with Solc 0.8.26\nSolc 0.8.26 finished in 13.95s\nCompiler run successful!\n","passed":true},{"durationMs":7020,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 373.56µs (61.76µs CPU time)\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 442.90µs (34.11µ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 396.24µs (218.42µ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 559.92µs (80.25µ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 574.98µs (65.24µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 883.88µs (723.28µ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.25ms (694.85µs CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 2.41ms (1.28ms 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.14ms (313.26µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829078)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.36ms (2.49ms 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 3.44ms (2.12ms 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.74ms (429.00µ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.05ms (743.15µ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 4.07ms (240.55µs CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106533)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201461)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279227)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 5.11ms (4.11ms 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.56ms (137.42µ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 8.59ms (141.58µs CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111500)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 938992)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232643)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219696)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052705)\n[PASS] test_owedBondsAccumulate() (gas: 1421913)\n[PASS] test_unblocked_paysAtOnce() (gas: 950775)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 8.80ms (7.36ms CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420702)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582398)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089149)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436149)\n[PASS] test_ownerMayApply() (gas: 3320957)\n[PASS] test_projectItselfMayApply() (gas: 3381816)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3283967)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550014)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390836)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 11.02ms (8.93ms CPU time)\n\nRan 4 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25953)\n[PASS] test_launchManifest_knownShape() (gas: 30827)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8370970)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 39.35ms (44.51ms CPU time)\n\nRan 1 test for test/RegistryLaunchRun6.t.sol:RegistryLaunchRun6Test\n[PASS] test_run6ManifestDeploysOnlyRegistryWithoutExternalConstructorCalls() (gas: 14347766)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 55.41ms (55.25ms CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106283, ~: 3106102)\nLogs:\n  Bound result 54465987624\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334541)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881679)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210754)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528239)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281207)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409642)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221638)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326504)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345286)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 106.85ms (115.49ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394580, ~: 394383)\nLogs:\n  Bound result 350000\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 368111, ~: 368936)\nLogs:\n  Bound result 920456872996738929497477\n  Bound result 864077583166700634832711\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430354, ~: 430428)\nLogs:\n  Bound result 150448505330219224148090\n  Bound result 420456872996738929497477\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 153.37ms (167.92ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1451674, ~: 1499757)\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 416.15ms (415.70ms 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     | 447   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 379   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 392   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 407   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 423   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 10\n  Bound result 12345678901234567890\n  Bound result 10000000000000000000000\n  Bound result 999999999999999999951\n  Bound result 177000\n  Bound result 200000000000000000\n  Bound result 882551226704710944087\n  Bound result 98804547724390334102\n  Bound result 600000000000000000\n  Bound result 6\n  Bound result 4\n  Bound result 1300000\n  Bound result 4\n  Bound result 6\n  Bound result 999500000000000000000\n  Bound result 4\n  Bound result 18\n  Bound result 9\n  Bound result 2\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 788.21ms (785.54ms CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268133, ~: 3268027)\nLogs:\n  Bound result 42583231034347022\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 795.14ms (795.70ms CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9344892, ~: 9341820)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6340022, ~: 6334066)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327090, ~: 7327323)\nLogs:\n  Bound result 40\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240020, ~: 3239746)\nLogs:\n  Bound result 7144488\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302422)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764246)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302532)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723040)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674185)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300937)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666121)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742630)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415411)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854391)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349310)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329910)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390577)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 795.18ms (1.41s CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539226, ~: 6539367)\nLogs:\n  Bound result 31737\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3316012, ~: 3313952)\nLogs:\n  Bound result 18593\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493518)\n[PASS] test_clockIsPerProject() (gas: 6503658)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417251)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290837)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333586)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821419)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 813.43ms (1.27s CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554627, ~: 6554577)\nLogs:\n  Bound result 808404670236841530655896444925645382914580185523\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6639479, ~: 6646602)\nLogs:\n  Bound result 2\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 4945681, ~: 3434569)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433540, ~: 6433300)\nLogs:\n  Bound result 19\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414882)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405341)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831651)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413317)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592723)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190867)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613845)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405630)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686893)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529325)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956410)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561263)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575194)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558339)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627062)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537444)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 812.89ms (2.42s CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3621095, ~: 3583442)\nLogs:\n  Bound result 13\n  Bound result 13\n  Bound result 58\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6798372, ~: 6729692)\nLogs:\n  Bound result 193\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862212)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504712)\n[PASS] test_challengeMaximumReason() (gas: 7118161)\n[PASS] test_challengeMinimumReason() (gas: 6643494)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53786340)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750369)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 813.70ms (1.64s CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674622, ~: 674352)\nLogs:\n  Bound result 2\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 905450, ~: 931057)\nLogs:\n  Bound result 11\n  Bound result 3462\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842996, ~: 845703)\nLogs:\n  Bound result 3\n  Bound result 12514264337593543950335\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 876985, ~: 876211)\nLogs:\n  Bound result 3\n  Bound result 12514264337593543950335\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 813.99ms (1.82s CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234717, ~: 234498)\nLogs:\n  Bound result 482493692\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1589705, ~: 1371100)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388863, ~: 388800)\nLogs:\n  Bound result 10000000000000000000000\n  Bound result 20000000000000000000\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 743891, ~: 761920)\nLogs:\n  Bound result 404687231\n  Bound result 71007596112709040768928\n  Bound result 8116481206182208854321\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 684031, ~: 689012)\nLogs:\n  Bound result 404687231\n  Bound result 71007596112709040768928\n  Bound result 8116481206182208854321\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 491823, ~: 510594)\nLogs:\n  Bound result 411000\n  Bound result 6869\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 814.16ms (2.97s CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976881, ~: 976865)\nLogs:\n  Bound result 99999000000000000000384\n  Bound result 534680681042213066\n  Bound result 141562913987483953\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935549, ~: 2930480)\nLogs:\n  Bound result 1924\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 814.18ms (1.60s CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 344741, ~: 55839)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 394288, ~: 47827)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531077)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219811)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229499)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317228)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227303)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117493)\n[PASS] test_apply_validation() (gas: 566706)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062241)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362198)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363000)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339261)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314240)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469384)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115815)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990026)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057692)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171630)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319052)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160414)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 814.16ms (830.13ms 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          | 260   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 254   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 259   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 254   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 271   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 247   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 249   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 70\n  Bound result 57600\n  Bound result 25\n  Bound result 24576\n  Bound result 110279\n  Bound result 25\n  Bound result 162182\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968758)\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 815.84ms (818.48ms 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        | 452   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 472   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 507   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 464   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 436   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 481   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 485   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 449   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 490   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 469   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 473   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 495   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 471   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 14\n  Bound result 6\n  Bound result 256\n  Bound result 1958\n  Bound result 101\n  Bound result 7541\n  Bound result 16906\n  Bound result 50000000000000000000\n  Bound result 16800\n  Bound result 0\n  Bound result 10197040\n  Bound result 9831\n  Bound result 9233\n  Bound result 9889149779869808532\n  Bound result 4116\n  Bound result 9999999999999999999998\n  Bound result 965\n  Bound result 20\n  Bound result 49\n  Bound result 9\n  Bound result 43078349882930611454167\n  Bound result 6\n  Bound result 4164780498053859540302\n  Bound result 2\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.15s (4.15s 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                  | 1791  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1814  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1834  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1812  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1880  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1903  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1800  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1810  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1740  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 49\n  Bound result 18201536555244936\n  Bound result 88\n  Bound result 22608\n  Bound result 1973733860777763209\n  Bound result 6938\n  Bound result 22444\n  Bound result 23\n  Bound result 84\n  Bound result 313\n  Bound result 15158\n  Bound result 22\n  Bound result 4\n  Bound result 48\n  Bound result 34\n  Bound result 171239\n  Bound result 2\n  Bound result 22977\n  Bound result 86218\n  Bound result 34\n  Bound result 13253\n  Bound result 11\n  Bound result 21950\n  Bound result 38\n  Bound result 17456\n  Bound result 10516\n  Bound result 11204\n  Bound result 357858205853622368\n  Bound result 2463\n  Bound result 15576\n  Bound result 4164\n  Bound result 6086\n  Bound result 56\n  Bound result 851883445000593\n  Bound result 0\n  Bound result 22\n  Bound result 66\n  Bound result 24\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458199)\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: 16504200)\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.28s (5.30s 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              | 2060  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2048  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2006  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2072  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2035  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2069  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 1987  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2107  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3954\n  Bound result 160\n  Bound result 14252\n  Bound result 5000\n  Bound result 5\n  Bound result 10302\n  Bound result 0\n  Bound result 9629318675142576138756\n  Bound result 5\n  Bound result 10\n  Bound result 2\n  Bound result 17\n  Bound result 9\n  Bound result 12\n  Bound result 284202\n  Bound result 880\n  Bound result 685\n  Bound result 23\n  Bound result 349579043475630938943\n  Bound result 50\n  Bound result 10550\n  Bound result 10341018116374910306\n  Bound result 6608370094841009063984\n  Bound result 200\n  Bound result 194\n  Bound result 98549\n  Bound result 2360658509465216656\n  Bound result 5749\n  Bound result 15762\n  Bound result 1002\n  Bound result 604800\n  Bound result 652299666908908222662\n  Bound result 5\n  Bound result 200000000000000000\n  Bound result 6018299312157544082674\n  Bound result 512\n  Bound result 24576\n  Bound result 10\n  Bound result 14\n  Bound result 1340164490987701339444\n  Bound result 172800\n  Bound result 604800\n  Bound result 3\n  Bound result 1\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.90s (6.90s CPU time)\n\nRan 38 test suites in 6.90s (26.06s CPU time): 233 tests passed, 0 failed, 14 skipped (247 total tests)\n","passed":true},{"durationMs":131,"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\":34,\"NEXT_SESSION.md\":73,\"README.md\":288,\"app.js\":2272,\"docs/data-api.md\":97,\"docs/design.md\":322,\"docs/explainer.html\":247,\"docs/history.md\":387,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":88,\"docs/plea-handoff.md\":73,\"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/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-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/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-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\":709,\"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\":144,\"test/FactoryRehearsal.t.sol\":47,\"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/RegistryLaunchRun6.t.sol\":121,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySepoliaFork.t.sol\":113,\"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/TrialVenue.t.sol\":147,\"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,\"test/trial/TrialVenue.sol\":222,\"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\":156,\"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":"dca733848a83b1d09b6b428a63eb3805de6d432bcc2d4ac6e79935dbcdb6da15","verifiedTreeHash":"967a7cb65c334f82e6b7afcf3fc6c2c8748b8238","verifierVersion":"0.1.0+7ff5db2c"},{"checks":[{"durationMs":22465,"exitCode":0,"name":"build","output":"Compiling 92 files with Solc 0.8.26\nSolc 0.8.26 finished in 22.27s\nCompiler run successful!\n","passed":true},{"durationMs":9626,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 2.79ms (76.03µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.70ms (3.42ms 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 4.14ms (92.83µ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 4.11ms (114.03µs CPU time)\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 3.97ms (39.65µ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 7.38ms (2.51ms 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 7.35ms (6.57ms CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 8.60ms (6.83ms 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 17.47ms (10.76ms 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 17.41ms (10.86ms 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 16.24ms (23.88ms 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 18.52ms (344.03µ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 18.89ms (363.74µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829078)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 18.74ms (14.31ms 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 20.02ms (290.38µs CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106533)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201461)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279227)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 20.64ms (10.04ms CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420702)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582398)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089149)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436149)\n[PASS] test_ownerMayApply() (gas: 3320957)\n[PASS] test_projectItselfMayApply() (gas: 3381816)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3283967)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550014)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390836)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 26.95ms (21.81ms 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 28.57ms (25.91ms CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111500)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 938992)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232643)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219696)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052705)\n[PASS] test_owedBondsAccumulate() (gas: 1421913)\n[PASS] test_unblocked_paysAtOnce() (gas: 950775)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 28.67ms (23.41ms CPU time)\n\nRan 1 test for test/RegistryLaunchRun6.t.sol:RegistryLaunchRun6Test\n[PASS] test_run6ManifestDeploysOnlyRegistryWithoutExternalConstructorCalls() (gas: 14346774)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 361.05ms (360.79ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1447651, ~: 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 371.88ms (368.71ms 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            | 263   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 230   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 259   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 251   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 265   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 270   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 235   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 275   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 25151\n  Bound result 33\n  Bound result 28\n  Bound result 102986\n  Bound result 5559\n  Bound result 6128\n  Bound result 66\n  Bound result 51\n  Bound result 710\n  Bound result 2586\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968758)\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 1.03s (1.03s CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268137, ~: 3268017)\nLogs:\n  Bound result 537323115390613925\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 1.14s (1.14s CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 333437, ~: 55856)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 463585, ~: 47827)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531077)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219811)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229499)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317228)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227303)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117493)\n[PASS] test_apply_validation() (gas: 566706)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062241)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362198)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363000)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339261)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314240)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469384)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115815)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990026)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057692)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171630)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319052)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160414)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 1.19s (118.60ms CPU time)\n\nRan 4 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25953)\n[PASS] test_launchManifest_knownShape() (gas: 30643)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8370970)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.19s (67.39ms CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539221, ~: 6539367)\nLogs:\n  Bound result 11689\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3316106, ~: 3313952)\nLogs:\n  Bound result 11266\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493518)\n[PASS] test_clockIsPerProject() (gas: 6503658)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417251)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290837)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333586)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821419)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 1.27s (1.94s CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9344917, ~: 9341820)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6340071, ~: 6334066)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327124, ~: 7327323)\nLogs:\n  Bound result 98\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240023, ~: 3239746)\nLogs:\n  Bound result 21136808\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302422)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764246)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302532)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723040)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674185)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300937)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666121)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742630)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415411)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854391)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349310)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329910)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390577)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 1.31s (3.00s 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     | 416   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 399   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 409   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 398   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 426   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 5\n  Bound result 799435661116222822992651\n  Bound result 9\n  Bound result 860675432547988902395336\n  Bound result 12301\n  Bound result 7\n  Bound result 10\n  Bound result 999999999999000000000001\n  Bound result 75\n  Bound result 177805575416855192041\n  Bound result 935913628786696541437914\n  Bound result 2308\n  Bound result 242\n  Bound result 9\n  Bound result 2\n  Bound result 2000\n  Bound result 2\n  Bound result 6\n  Bound result 9\n  Bound result 4\n  Bound result 655332569978887730855022\n  Bound result 7612921560970123\n  Bound result 150216027670530386275778\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.32s (1.31s CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554630, ~: 6554589)\nLogs:\n  Bound result 1114479481276173\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6640450, ~: 6646602)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 5011145, ~: 6568833)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433558, ~: 6433300)\nLogs:\n  Bound result 9\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414882)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405341)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831651)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413317)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592723)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190867)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613845)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405630)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686893)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529325)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956410)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561263)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575194)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558339)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627062)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537444)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 1.35s (4.29s CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3619130, ~: 3581410)\nLogs:\n  Bound result 7\n  Bound result 46\n  Bound result 83\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6794537, ~: 6725095)\nLogs:\n  Bound result 6\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862212)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504712)\n[PASS] test_challengeMaximumReason() (gas: 7118161)\n[PASS] test_challengeMinimumReason() (gas: 6643494)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53786340)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750369)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 1.37s (2.24s 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        | 492   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 461   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 463   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 480   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 495   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 469   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 446   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 464   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 438   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 460   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 473   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 504   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 499   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 14120\n  Bound result 10000000000000000000000\n  Bound result 1007\n  Bound result 9612\n  Bound result 68855\n  Bound result 100000000000000000000\n  Bound result 18854\n  Bound result 10\n  Bound result 2\n  Bound result 50656\n  Bound result 999990\n  Bound result 24999999999999999999998\n  Bound result 880824790\n  Bound result 66\n  Bound result 5970458089233741591132\n  Bound result 5000000000000000000000\n  Bound result 1523\n  Bound result 5000000000000000000000\n  Bound result 11988\n  Bound result 77192968682585037385693\n  Bound result 4138\n  Bound result 6079\n  Bound result 92\n  Bound result 21184963084205635771873\n  Bound result 10913\n  Bound result 2428038168\n  Bound result 300\n  Bound result 19047\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 5.84s (5.84s 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                  | 1806  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1855  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1826  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1820  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1804  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1844  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1828  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1742  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1859  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 72\n  Bound result 183221972639979667\n  Bound result 127159508\n  Bound result 26\n  Bound result 1\n  Bound result 26\n  Bound result 29\n  Bound result 281\n  Bound result 18\n  Bound result 578963571886022963\n  Bound result 22724\n  Bound result 58\n  Bound result 16470\n  Bound result 44\n  Bound result 381759182807681\n  Bound result 2408\n  Bound result 5\n  Bound result 2\n  Bound result 4\n  Bound result 326\n  Bound result 19248146\n  Bound result 79\n  Bound result 264337553913157399\n  Bound result 676058303919715104\n  Bound result 97394\n  Bound result 1\n  Bound result 28\n  Bound result 91\n  Bound result 6\n  Bound result 11702\n  Bound result 1816778027359520334\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458199)\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: 16504200)\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 7.60s (7.66s 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              | 2026  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2067  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 1985  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2065  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2004  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2001  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2105  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2131  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 6\n  Bound result 6283\n  Bound result 999\n  Bound result 126\n  Bound result 31536000\n  Bound result 14711\n  Bound result 785923145989648661836\n  Bound result 26\n  Bound result 100000000000000000\n  Bound result 24019882957675427759\n  Bound result 93\n  Bound result 16384\n  Bound result 9459\n  Bound result 7402\n  Bound result 10\n  Bound result 0\n  Bound result 10\n  Bound result 6\n  Bound result 14052\n  Bound result 11421540214115221962\n  Bound result 1\n  Bound result 6547\n  Bound result 3332\n  Bound result 23960062488939963619\n  Bound result 10\n  Bound result 8\n  Bound result 8167\n  Bound result 1\n  Bound result 2\n  Bound result 12975\n  Bound result 1800000000\n  Bound result 15828\n  Bound result 6493916198551608057838\n  Bound result 417\n  Bound result 346654159637775573\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 8.85s (8.86s CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106300, ~: 3106114)\nLogs:\n  Bound result 14264337593543950334\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334541)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881679)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210754)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528239)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281207)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409642)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221638)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326504)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345286)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 9.42s (9.44s CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976836, ~: 976865)\nLogs:\n  Bound result 1000000000000000001\n  Bound result 6447\n  Bound result 126\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935795, ~: 2941251)\nLogs:\n  Bound result 12667901577995478031\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 9.42s (10.59s CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394548, ~: 394377)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367954, ~: 368890)\nLogs:\n  Bound result 3\n  Bound result 2\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430282, ~: 430410)\nLogs:\n  Bound result 144664675787458924340966\n  Bound result 3\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 9.42s (561.37ms CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674638, ~: 674352)\nLogs:\n  Bound result 9\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 903686, ~: 885427)\nLogs:\n  Bound result 0\n  Bound result 1316543158246439856411\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842743, ~: 840448)\nLogs:\n  Bound result 3\n  Bound result 5446\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 877074, ~: 878035)\nLogs:\n  Bound result 2\n  Bound result 14415\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 9.42s (19.67s CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234734, ~: 234510)\nLogs:\n  Bound result 664123408537510188021300\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1525784, ~: 1370440)\nLogs:\n  Bound result 7\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388844, ~: 388806)\nLogs:\n  Bound result 92506154428405244755968\n  Bound result 15075\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 743084, ~: 761950)\nLogs:\n  Bound result 14080841431854328459499\n  Bound result 87048995791523047766407\n  Bound result 55333640206894125482909\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 684414, ~: 689048)\nLogs:\n  Bound result 8701500\n  Bound result 94894545122874118914799\n  Bound result 84618338168451151847450\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 491006, ~: 510594)\nLogs:\n  Bound result 15075\n  Bound result 154428405244755968\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 9.41s (12.32s CPU time)\n\nRan 38 test suites in 9.43s (81.55s CPU time): 233 tests passed, 0 failed, 14 skipped (247 total tests)\n","passed":true},{"durationMs":193,"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\":34,\"NEXT_SESSION.md\":73,\"README.md\":288,\"app.js\":2272,\"docs/data-api.md\":97,\"docs/design.md\":322,\"docs/explainer.html\":247,\"docs/history.md\":387,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":88,\"docs/plea-handoff.md\":73,\"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/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-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/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-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\":709,\"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\":144,\"test/FactoryRehearsal.t.sol\":47,\"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/RegistryLaunchRun6.t.sol\":121,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySepoliaFork.t.sol\":113,\"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/TrialVenue.t.sol\":147,\"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,\"test/trial/TrialVenue.sol\":222,\"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\":156,\"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":"e452e631b5732f6392fb94f2722c0c8b90ddfc5ba58ef06ea92b9e4fb398c73a","verifiedTreeHash":"8a92e4ae1cc911c2513f3de3dd4184a86e6cd33d","verifierVersion":"0.1.0+7ff5db2c"}]}