{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"2df4193f-923f-4e11-bbbe-0e2ca6c5159a","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"3599106a7b3786b14af88b7c8f4cc93392fc3f67744485d273760b0285b39d33","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":null,"dependsOn":["adapt_contract_project","write_foundry_tests","gas_and_size_report","manifest"],"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":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_contract_project","write_foundry_tests","gas_and_size_report","manifest"],"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":"waiting"},{"acceptedSubmissionHash":"cbc5612243965bdebf7af24b6a80299c595dd1444a6d3ecc88fd0c6c260cc6ad","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_contract_project","write_foundry_tests","gas_and_size_report","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_contract_project","write_foundry_tests","gas_and_size_report","manifest"],"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":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["adapt_contract_project","write_foundry_tests","gas_and_size_report","manifest"],"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":"waiting"},{"acceptedSubmissionHash":"0678bba8c2e7c42263d41bdd7769fac0aa92be668cd05acb84eff9c4daab9a0f","dependsOn":["write_foundry_tests"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"30969efdf166eb4a7d01a215c4655adeac1cd303dea3ef1c3ba1fc75789474d4","skillId":"gas-and-size-report","tools":[]},"key":"gas_and_size_report","kind":"code","role":"tests","skillHash":"30969efdf166eb4a7d01a215c4655adeac1cd303dea3ef1c3ba1fc75789474d4","skillId":"gas-and-size-report","state":"accepted"},{"acceptedSubmissionHash":null,"dependsOn":["audit_imported_code","adapt_contract_project","write_foundry_tests","gas_and_size_report"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"failed"},{"acceptedSubmissionHash":"25bd689151e8d347460881ebdd1a23df2ea6ba11b2360ea9816bf873a86f4640","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Launch Quorum Compatibility Probe (QPROBE), a paid technical TEST on Ethereum mainnet paired with IMD, not QUORUM production. Import the pinned repository and review the constitution, code, prerequisites and all nineteen positive tests. The external immutable constitution and core-creation package are deployed with verified receipts in PREREQUISITES.json. Token QProbeToken has a zero-argument constructor fixing their addresses. Hook constructor calls that package to CREATE the full immutable Core with actual token and Hook addresses. Preserve this composition and all governance semantics; do not replace it with a generic token or mutable binding. Verify the reconstructed package bytes and creationHash exactly equal compiled QuorumBoundCore creation code, and the constitution bytes match the committed SHA-256. No admin, proxy or upgrade. No governance-source or constructor-argument changes that invalidate the external package. If such changes are necessary or the platform cannot launch this composition, report the specific incompatibility instead of weakening checks. Supply 1 billion with 18 decimals and plain transfers; 90% pool and 10% standard swarm, no founder allocation. Fixed test stake 62,500 tokens, one address per seat, unlimited total seats. Charge 3% IMD on each buy and sell, retained in the immutable treasury with 50/50 allowance/operations accounting, on top of platform fees. Keep authenticated purchase/original/reward sale quotas, original-proof checking, fixed qualification and all voting/work/payout rules. IMD is never automatically converted to ETH. New LP remains restricted to the factory. Preserve nineteen positive tests without skips or weakened assertions. Respect 49,152-byte initcode, 24,576-byte runtime, and 16,777,216 transaction gas cap; use official policy opening price. Check actual post-deployment bindings, registry and external code. Future platform requester fees should go to Hook; if the platform assigns payer by default, explicitly disclose that handover remains for the payer before acceptance. No frontend, hosting, ENS, purchase bot or recurring service. Acceptance means correct composition and immutable semantics deployed, not just a successful launch status.","parentJobId":null,"planHash":"f0400d6c45671aa8ce920c817315b8f9d29ffff1dda4a3c3f07c841696452ac1","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"2df4193f-923f-4e11-bbbe-0e2ca6c5159a","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2236-launch-quorum-compatibility-probe"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"50903","feedbackHash":"818677f3dd66171568c42b0d54bbfc37a3399d7f676c587d4036f37214a18cc4","nodeKey":"adapt_contract_project","submissionHash":"3599106a7b3786b14af88b7c8f4cc93392fc3f67744485d273760b0285b39d33","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52607","feedbackHash":"4e1ceb032d3f7a29a7d2843419b41e46d27f3fbf44ce2ce80cbaa3d31544dd79","nodeKey":"audit_imported_code","submissionHash":"cbc5612243965bdebf7af24b6a80299c595dd1444a6d3ecc88fd0c6c260cc6ad","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52667","feedbackHash":"794057480b7d1de101897cd39611999c1b266fc6a1d0223e6015f48cc6291745","nodeKey":"gas_and_size_report","submissionHash":"0678bba8c2e7c42263d41bdd7769fac0aa92be668cd05acb84eff9c4daab9a0f","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52468","feedbackHash":"110a06f087cb87f7a7bb500b8b253f99e0225a9cce23f7bb3cb84ef344468697","nodeKey":"write_foundry_tests","submissionHash":"25bd689151e8d347460881ebdd1a23df2ea6ba11b2360ea9816bf873a86f4640","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"94af942c0b4c4f2a3faedaf489dbe52a7438bda9ffb7bd74e54e3578b7f779c5","state":"blocked","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"cca416c88d884e01943056458e3be00071663aaeb6575fef5e679a7b76fe603c","device":"b38bea3c04869138","findings":[],"hash":"0678bba8c2e7c42263d41bdd7769fac0aa92be668cd05acb84eff9c4daab9a0f","nodeId":"d45d4021-ef1c-40cc-8197-3267f7493427","outcome":"completed","summary":"The gas and size report is complete and committed. The composition fits every current mainnet limit, and no contract is over the runtime cap.\n\n**What was delivered** (commit `eb181ac`, only test/**, .gas-snapshot and reports/** touched; no contract or config changed, pinned test hashes unchanged):\n\n- `test/positive/CompositionGas.t.sol`: 51 tests, one per public function of the launched composition, plus the whole factory launch, the hook constructor, the package create, the token constructor, and deployed-size checks. All 81 tests in the suite pass with the verifier's fuzz seed, and `forge snapshot --check` passes.\n- `test/positive/LaunchTransactionScript.sol`: a forge script (not a test) that stages the pinned prerequisites on a local Osaka anvil and sends the real launch transaction.\n- `.gas-snapshot` and `reports/gas.md`.\n\n**Key measurements**\n\n| Item | Value |\n|---|---:|\n| Real launch transaction on Osaka anvil with the EIP-7825 check on | 13,248,248 gas used, accepted under the 16,777,216 cap |\n| Headroom under the cap | 3,528,968 (21%) |\n| Largest runtime (QuorumWork) | 17,027 bytes of 24,576 |\n| Largest nested initcode (core package + args) | 40,378 bytes of 49,152 |\n\nPost-launch bindings were read back on chain through the actual `hook.core()` getter: token, stake, constitution hash, IMD asset, reward reporter, seeder, initialization flag and registry record all match the brief.\n\n**No size defect.** Every contract is under 24,576 bytes, so the report states that plainly rather than reporting a defect. No findings file was needed.\n\n**What stands out in the report:** launch gas is dominated by code deposit (10.36M of the 13.2M), the constitution's hourly `respond` rule costs about 14M gas per seat per week, and `settleWeek` and `prepareBallot` grow linearly with the roster but are bounded per call by their batch limit.\n\nOne caveat is written into the report: the Foundry measurements run under the protected `evm_version = cancun` setting, so the Osaka anvil transaction is the measurement under current rules. The composition uses no opcode whose price changed after Cancun, and the EIP-7623 calldata floor does not bind.","treeHash":"251fa7545977cda515337a50d9fbb4cb19433c50","usage":{"cachedInputTokens":3999010,"inputTokens":930,"model":"claude-fable-5-1","outputTokens":71651,"runtime":"claude","turns":44,"wallClockMs":1111743}},{"artifacts":[],"attempt":1,"bundleHash":"0ee1e6c9f6058f6f60f1e88431ccd76e4ad134a5086df70009b06668a53b87fd","device":"c9743cd9807c4c3a","findings":[{"description":"foundry.toml sets `test = \"test/positive\"`, so a plain `forge test` compiles and runs only test/positive (30 tests). The compatibility suite in test/compatibility (deployment/binding integration, failure paths, tax fuzz, tax/quota invariants, live-mainnet fork check) runs only when the test root includes it. foundry.toml is protected for this assignment, so it was not changed.","line":3,"path":"foundry.toml","reproduction":"`forge test --list` lists no test/compatibility contract. `FOUNDRY_TEST=test forge test` runs 9 suites: 51 passed, 1 skipped (the fork test without an RPC). `FOUNDRY_TEST=test/compatibility forge test` also runs the 19 required cases, because RequiredPositiveCases.t.sol imports the two hash-pinned suites.","severity":"info","title":"Plain `forge test` does not discover test/compatibility"},{"description":"The repository has no IMD policy file. The tests open the pool at a 2,500 IMD market cap for the whole supply (tick +/-129,000 on the 60 grid, depending on address order, which is about 2,499.66 IMD), as ADAPTATION.md states. launch.json's `initialPrice` (2^96, a 1:1 price) is not that price, and its notes say the platform derives the price. The hook does not constrain the price, so launch acceptance depends on the platform using its official value.","line":51,"path":"test/compatibility/CompatibilityBase.sol","reproduction":"testPolicyOpeningPriceAndSupplySplit: after factory.launch at the policy sqrtPrice, slot0 equals the policy price, the pool holds at least 899,999,000 QPROBE and at most 90% of supply, the distributor holds 10%, and no IMD is seeded.","severity":"info","title":"Policy opening price taken from ADAPTATION.md, not from a platform policy file"}],"hash":"25bd689151e8d347460881ebdd1a23df2ea6ba11b2360ea9816bf873a86f4640","nodeId":"d3399abb-8aa5-41dd-98af-ba1f0aec96d0","outcome":"completed","summary":"I found no defects in the contracts. All 19 required cases pass without skips, and the new compatibility suite passes, but **a plain `forge test` will not run the new suite**. `foundry.toml` sets `test = \"test/positive\"`, so it only finds the 30 tests in `test/positive`. To include mine, run `FOUNDRY_TEST=test forge test`. I couldn't change `foundry.toml` because it's protected, so I recorded this in `.imd-findings.json`.\n\n**Results**, run with the verifier's fuzz seed:\n- `forge test`: 30 passed, 0 failed, 0 skipped. The 19 required cases are among them, and the two pinned suites still match their recorded hashes.\n- `FOUNDRY_TEST=test forge test`: 51 passed, 1 skipped. The skipped one is the mainnet fork test, which skips when no RPC is set.\n- I also ran the fork test once against a public mainnet RPC and it passed. The two deployed package parts rebuild byte-for-byte into the compiled `QuorumBoundCore` creation code with the pinned hash. The deployed constitution matches `constitution.en.md` and its SHA-256, and IMD reports symbol `IMD` with 18 decimals.\n\n**What I added in `test/compatibility/`** (nothing in `test/positive` changed):\n- **`CompatibilityBase.sol`**: a shared setup that launches the real `QProbeToken` and hook in one `factory.launch` call, using the unchanged factory and PoolManager bytecode. IMD and the two prerequisites sit at their mainnet addresses. The pool opens at a 2,500 IMD market cap and is seeded with tokens only.\n- **`DeploymentCompatibility.t.sol`** (19 tests):\n  - **Package and constitution:** the package parts rebuild the compiled core exactly; the constitution bytes and hash match; the package refuses a wrong hash, an empty part and a constitution with no code; each caller gets a fresh core that reports to that caller.\n  - **Launch failures:** the token reverts on a chain without the prerequisites, and the factory launch fails at the token step there. Over-share, a wrong salt, too much liquidity, a non-deployer caller and a repeat launch number are all refused. The hook constructor refuses a zero pool manager and an address whose flags don't match.\n  - **After launch:** opening price, 90% pool / 10% swarm and no founder allocation; every contract binding and the registry entries; initcode, runtime and gas limits; no ETH accepted anywhere.\n  - **Tax and router:** a fuzz test checks the 3% buy and sell tax rounds up, stays in IMD, and is split 50/50 between allowance and operations. The router refuses a past deadline, a zero amount, price bounds, the wrong hook and a direct callback.\n  - **Quotas:** tokens received by plain transfer can't be sold; nobody can sell more than they bought; original allocations need a valid proof, register only once, and stay locked until qualification; quota and reward entry points reject outsiders.\n  - **Fees:** donations are accounted into the treasury. Fee collection is refused while the payer is the requester. A second setup makes the hook the requester directly and checks the fees reach the treasury.\n- **`TaxQuotaInvariant.t.sol`**: 48 runs of 30 random calls covering buys, sells (including attempts above quota), plain transfers, donations, fee collection and time passing. It checks after every sequence that:\n  - supply never changes;\n  - the treasury holds exactly what its ledger records, in both assets;\n  - nothing is left in the router or hook;\n  - no contract holds ETH;\n  - each trader's quota matches their actual trades.\n\n  I confirmed that successful sells and refused oversells both actually occur during these runs.\n- **`RequiredPositiveCases.t.sol`**: fails to compile if any of the 19 required cases is removed or renamed. Importing the pinned suites also makes them run with the new tests.\n- **`MainnetPrerequisitesFork.t.sol`**: the live check above. It needs `QPROBE_MAINNET_RPC_URL`, and no RPC address is committed.\n\n`.imd-findings.json` has two info-level items: the test-discovery issue above, and the opening price. The 2,500 IMD market cap comes only from","treeHash":"21825bfa4511e8c7973b9c47047ab8c7340ce349","usage":{"cachedInputTokens":3224564,"inputTokens":66,"model":"claude-opus-5-5","outputTokens":52527,"runtime":"claude","turns":37,"wallClockMs":714538}},{"artifacts":[],"attempt":1,"bundleHash":"5da099478ca81f65653917545c4b0e59be667bbc2ae1ed0fca9050c08a29fc7f","device":"523ef565dd740e25","findings":[],"hash":"3599106a7b3786b14af88b7c8f4cc93392fc3f67744485d273760b0285b39d33","nodeId":"024613eb-f8a0-4404-925d-17b85944a387","outcome":"completed","summary":"Done. The project launches through the official `univ4_hook` factory without any contract change, and the one reproduced audit defect is repaired on the test side.\n\n**What I verified**\n\n- The compiled `QuorumBoundCore` creation code hashes to the pinned package hash, and the two mainnet code parts are byte-equal to it after stripping their prefixes. The constitution file hashes to the on-chain constitution hash. Re-checked live on Ethereum at block 26,227,100, including IMD's symbol and decimals.\n- The audit's high finding reproduces: under the committed config, the suspension governance case runs out of Foundry's default per-test gas budget. The low finding (operating plans cannot trade through the router) reproduces by code reading. The requester-bound-to-payer finding reproduces.\n\n**What I changed** (committed as 1915cbf, no `src/`, config or dependency changes)\n\n- `test/positive/NormalIntegrated.t.sol`: the shared simulated-clock helper now pauses gas metering for the hourly replay. Every contract call and assertion still runs. All 14 pinned governance cases pass under plain `forge test --json`, and both pinned test files keep their ACCEPTANCE.json hashes.\n- `test/positive/LaunchIntegration.t.sol`: six new tests launch the real zero-argument `QProbeToken` and hook through the unchanged factory bytecode, with the prerequisites and IMD staged at their mainnet addresses. They check the package hash, atomic core bindings, size and gas limits, initialization and unauthorized callback rejection, IMD-only tax with no ETH, and the payer-to-hook fee handover.\n- `ADAPTATION.md` and a README section list each change, the launch rules checked, the audit findings and the platform conditions.\n\n**Results**\n\n| Check | Outcome |\n|---|---|\n| `forge build` | clean |\n| `forge test --json` with the verifier's fuzz seed | 30 passed, 0 failed |\n| Required positive cases | 19 of 19 pass |\n| Factory launch execution gas | 13,425,721 |\n\n**Disclosures for acceptance**\n\n- The launch needs Ethereum mainnet state at or after block 26,226,975. On an empty chain the token constructor reverts with \"predeployed immutable code\", which is the precise rejected stage if the platform can only simulate constructors without state. The brief forbids replacing this composition, so it is kept.\n- The audit's low finding is not fixed. The treasury lock is inside the fixed package, and deferring the tax deposit would weaken the atomic 3% rule. It is documented as a limitation with no loss of funds.\n- If the platform assigns the payer as requester, the payer must hand over future fees to the hook before acceptance. Fees claimed before that go to the payer and cannot be moved.","treeHash":"de1b4352e623e217b861dd8fa062ac78aa162584","usage":{"cachedInputTokens":2258406,"inputTokens":738,"model":"claude-fable-5-1","outputTokens":45518,"runtime":"claude","turns":24,"wallClockMs":787330}},{"artifacts":[],"attempt":3,"bundleHash":null,"device":"2d33950b9728fd89","findings":[],"hash":"481470d9be61c9a23a97cb5fa4420966de910cfa6e13e77c09ea237c8be13a16","nodeId":"1144cfee-d917-4c13-b6ec-bdf0af9ee2ba","outcome":"failed","summary":"the launch check failed, so this was not submitted:\nQuorumIssuanceHook has no getHookPermissions(), which the protocol's floor calls to check the hook against launch.json's hook.permissions, 0x28c0 (beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap), so the launch would park. Add it, returning Hooks.Permissions with exactly those set.","treeHash":null,"usage":{"cachedInputTokens":3399680,"inputTokens":189337,"model":"gpt-6-astra","outputTokens":26156,"runtime":"codex","turns":13,"wallClockMs":925791}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"9f80d540720b8fc0","findings":[],"hash":"8565b15e05079a911d1cd5b041b0dd6b1addae87c473717cdbc863006b9d521a","nodeId":"1144cfee-d917-4c13-b6ec-bdf0af9ee2ba","outcome":"failed","summary":"the launch check failed, so this was not submitted:\nQuorumIssuanceHook has no getHookPermissions(), which the protocol's floor calls to check the hook against launch.json's hook.permissions, 0x28c0 (beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap), so the launch would park. Add it, returning Hooks.Permissions with exactly those set.","treeHash":null,"usage":{"cachedInputTokens":3214656,"inputTokens":177054,"model":"gpt-6.1-sol","outputTokens":18936,"runtime":"codex","turns":13,"wallClockMs":669437}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dc176559ff153c37","findings":[{"citation":"resolved","description":"ACCEPTANCE.json requires all nineteen positive cases to pass under `forge test --json`, with GovernancePositive.t.sol pinned to sha256 a44cc17f... and ImdFactoryPositive.t.sol to 8369814702.... Running the committed tree with the committed foundry.toml (no `gas_limit` key, so Foundry's default 2^30 = 1,073,741,824 gas per test applies) gives 18 of 19 required cases passing and this one failing: `[FAIL: EvmError: Revert] testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks() (gas: 1073690032)`. The trace ends in `QuorumWork::agendaRevision() ← [OutOfGas]` inside `QuorumMembership::respond(4, 14, ...)` at week 107 hour 36, i.e. the hourly `maintainUntil` simulation (7 agents × 168 hours × ~9 weeks of responses plus weekly settlement) exhausts the per-test gas budget before the assertions on lines 95-99 run. The test is not a contract defect: re-running with `FOUNDRY_GAS_LIMIT=5000000000` passes with gas 1,348,071,868, so the case needs roughly 1.35e9 gas, about 26% above the default limit. The incompatibility is structural for this launch: the test file is hash-pinned by ACCEPTANCE.json (so its loops cannot be shortened without invalidating the pinned suite) and foundry.toml is a configuration file the adapter may not modify, so neither side can be changed inside this attempt. The requester must either re-pin a cheaper test or ship a foundry.toml that sets `gas_limit` (and ideally `memory_limit`) high enough; a verifier that runs the plain `forge test --json` from ACCEPTANCE.json will record this suite as FAILED. No 'proof' test is attached because the defect is the harness budget, not Solidity behaviour; the reproduction is the required command itself.","line":71,"path":"test/positive/GovernancePositive.t.sol","reproduction":"Input: committed tree at HEAD 14c0c35, `forge test --json` (or `forge test --match-test testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks -vvv`). Expected: PASS (ACCEPTANCE.json requiredCases). Actual: `[FAIL: EvmError: Revert] ... (gas: 1073690032)`, Suite result FAILED, 23 passed / 1 failed; trace tail: `QuorumMembership::respond(4, 14, 0xbb7b..., 5, \"Local rehearsal...\") → QuorumLocalSystem::agendaRevision() → QuorumWork::agendaRevision() ← [OutOfGas]`. Control: `FOUNDRY_GAS_LIMIT=5000000000 forge test --match-test testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks` → `[PASS] (gas: 1348071868)`.","severity":"high","snippet":"    function testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks() public {","title":"Required positive test testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks fails with OutOfGas under the committed foundry.toml"},{"citation":"resolved","description":"`executeOperating` is `nonReentrant` (sets `entered=true`, QuorumTreasury.sol:33) and then hands control to `QuorumOperatingAccount.execute`, which performs the approved external calls. `QuorumSwapRouter.unlockCallback` (QuorumIssuanceHook.sol:181) always ends with `treasury.depositRevenue(tax)`, and `depositRevenue` is itself `nonReentrant`, so any operating call whose target is the router (the only way to trade the QPROBE/IMD pool, since `beforeSwap` accepts only the router) reverts with \"busy\" and the whole operation reverts with \"operating call failed\". The same lock blocks `hook.flushRevenue` / `hook.collectPlatformFees` as operating calls. Funds are not lost (the revert leaves `operatingFunds` intact and the proposal stays in BudgetVoting, exactly as testNormalUnavailableServiceLeavesBudgetAndAllowsRetry shows for a failing call), but a voted operation to convert IMD operating funds into QPROBE (or vice versa) through the launch pool can never execute, and the constitution's operations budget cannot touch its own market. This is a design limitation to disclose to the adapter rather than a loss; if conversion through the pool is intended, the tax deposit would have to be decoupled from the treasury lock, which is core governance code outside this paid attempt (new package required).","line":132,"path":"src/QuorumTreasury.sol","reproduction":"State: launched system from ImdFactoryPositive.setUp with ≥5 qualified members and ≥1030e18 IMD in `operatingFunds`. Call sequence: (1) agent of enrollment 0 calls `work.proposeOperation(0, plan, [], \"buy\")` where `plan.primaryBudget=1030e18`, `plan.approvals=[(imd, router, 1030e18)]`, `plan.calls=[(router, 0, abi.encodeCall(router.swap,(key,!project0,1000e18,1030e18,1,limit,deadline)), 0)]`; (2) prepareBallot, 4 yes votes, warp +120h; (3) `work.executeOperation(id, plan)`. Expected: operation executes and the operating account receives QPROBE. Actual: `QuorumTreasury.executeOperating` → `operatingAccount.execute` → `router.swap` → `manager.unlock` → `router.unlockCallback` → `treasury.depositRevenue(30e18)` reverts \"busy\" (entered==true) → `execute` reverts \"operating call failed\" → `executeOperation` reverts; stage remains BudgetVoting.","severity":"low","snippet":"    function executeOperating(OperatingPlan calldata plan) external onlyWork nonReentrant {","title":"Governance operating plans cannot route through the project's own swap router: the treasury's reentrancy lock makes every router.swap inside executeOperating revert"},{"citation":"resolved","description":"The hook has no requester-transfer facility (by design, see the comment on line 75). Its only path to the platform's requester share is `collectPlatformFees`, which requires `positionOf(launchNumber).requester == hook`. In the pinned factory the requester is whatever `LaunchParams.requester` the deployer passes (lib/imd-launch-verified/src/LaunchFactory.sol:182); the positive test sets it to the predicted hook, but the launch brief says the platform assigns the payer by default and PoolFees.sol:79 `setRequester` can only be called by the current requester. Consequences the adapter and acceptance review must state explicitly: (a) until the payer executes `setRequester(launchNumber, hook)`, `hook.collectPlatformFees` reverts \"fee destination not bound\"; (b) anyone can still call `factory.claimFees(launchNumber)` meanwhile, and the 80% requester share is paid to the payer wallet, not the treasury, and cannot be moved later (PoolFees.sol:78: what was already paid or owed stays with its address); (c) the hook's QPROBE/IMD fee accounting (`flushRevenue`, two-asset 50/50 ledger) therefore only begins after the handover. This is the disclosure the assignment asks for, not a code defect; the launch manifest has no field to set the requester, so the handover is a payer action after deployment and before acceptance.","line":80,"path":"src/QuorumIssuanceHook.sol","reproduction":"State: launch recorded with `LaunchParams.requester = payer` (platform default). Call: any address calls `hook.collectPlatformFees(launchNumber)`. Expected (per brief): fees reach the treasury. Actual: `positionOf` returns `(key, lower, upper, payer)`, `recipient != address(this)` → revert \"fee destination not bound\". Separately: `factory.claimFees(launchNumber)` succeeds and `_payAccount(payer, c0/c1)` sends the requester share to the payer. After `vm.prank(payer); factory.setRequester(launchNumber, address(hook))` the same `collectPlatformFees` call succeeds (ImdFactoryPositive.testNormalPlatformFeesReachTwoAssetTreasury shows the post-handover accounting).","severity":"info","snippet":"        require(recipient==address(this),\"fee destination not bound\");","title":"Platform LP fee share is bound to the payer by default; collectPlatformFees reverts until the payer calls PoolFees.setRequester(launchNumber, hook)"},{"citation":"resolved","description":"Verified against Ethereum mainnet (public RPC, head block 26227041) and a local build with the committed foundry.toml (solc 0.8.28, via_ir, 200 runs, cancun, bytecode_hash=none): (1) code at part0 0xbaf7...9f3e is 24,001 bytes and part1 0x05db...2ee5 is 16,219 bytes, each prefixed 0x00; stripping the prefixes and concatenating yields exactly the 40,218-byte compiled `QuorumBoundCore` creation code (byte-equal) and keccak256 0x0f4739...610e, equal to both PREREQUISITES.json and the on-chain `creationHash()` of 0x3a01...f161. (2) `ConstitutionPrototype` 0xa0ff...224a: `constitutionHash()` = 0xbdcd...28d7 = sha256(constitution.en.md), `textLength()` = 11236, and the 11,237-byte code at `textAddress()` 0x00203e...4f09 is 0x00 followed by the exact bytes of constitution.en.md. (3) Runtime code of both prerequisites equals the locally compiled runtime after masking immutable slots (555 and 919 bytes; sha256 3c3616... and 6cfb44... as listed). (4) Both receipts: status 1, from 0x2F29...e7C1, contractAddress and blockNumber/blockHash/gasUsed as listed. (5) QProbeToken's zero-argument constructor pins exactly these addresses, IMD 0xd34a...63b7 and 62,500e18 stake; the launch manifest hook args (`$poolManager`, `$token`), permissions (beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap = flags 1<<13|1<<11|1<<7|1<<6) and token name/symbol/decimals match the source. (6) Sizes: hook runtime 8,000 B, QuorumWork 17,027 B, QuorumTreasury 9,969 B, Membership 6,903 B, all children ≤ 24,576; hook initcode with args 17,840 B and core initcode 40,218 + 160 B, both ≤ 49,152; the positive test's full factory launch executes in 13,290,632 gas (≈3.5M below the 16,777,216 cap, before calldata and base cost ≈ 0.4M). (7) Test-file hashes equal ACCEPTANCE.json. Not verifiable here: the IMD token's source (22,990 bytes of code, `owner()` = 0x047F606fD5b2BaA5f5C6c4aB8958E45CB6B054B7, no Sourcify metadata, no Etherscan key); the treasury's `_deposit` exact-receipt check and the router assume plain transfer semantics, so any owner-enabled fee, pause or blacklist on IMD would make every pool swap revert; the chain's launch policy fee tiers (the hook hard-codes fee 12500 / tickSpacing 60 in `_check`, QuorumIssuanceHook.sol:94, and refuses any other pool); `constitution.packed.hex` (7,253 bytes, 4-byte length 11236 then an undocumented compressed encoding, referenced by nothing in the tree) was not decoded and should not be treated as evidence. Contracts read in full: all 19 files in src/, the three test files, ExternalInterfaces.sol, lib/imd-launch-verified PoolFees/LaunchFactory/LaunchRegistry/MerkleDistributor (relevant parts). Review passes applied: access control, execution trace, invariants, math, boundary, asymmetry on hook/router/quota/treasury/membership/work; no loss-of-funds, minting, pause/freeze/seize, delegatecall, selfdestruct, proxy or post-deployment configuration path was found in the project code. Governance semantics checked against constitution.en.md line 17 (rotation ends the current week; stake carry only without pending withdrawal) and the ACCEPTANCE immutableRules match the code.","line":7,"path":"PREREQUISITES.json","reproduction":"Commands: `cast code 0xbaf7f0427b5602ab2d2f9565df5b3343251f9f3e`, `cast code 0x05db6106aefb26f539cec9a452432ee03dd22ee5`, strip the first byte of each, concatenate, compare with out/QuorumBoundCore.sol/QuorumBoundCore.json bytecode.object → equal; `cast keccak` of the concatenation → 0x0f47399545e4659030ba4a70dc0b4dc2fe7bf295559b316547a854d580c0610e; `cast call 0xa0ffc637788cf803d05f459128f475487cf9224a \"constitutionHash()(bytes32)\"` → 0xbdcd594240fc645a1f41fabf3bbb7be35ecb05e3466160dbc3fb5928da7228d7 = `sha256sum constitution.en.md`; `cast code 0x00203eac4170f596c9db6c8dd8109292c32e4f09`[1:] == constitution.en.md bytes; `cast receipt` of both transaction hashes → status 1 and the listed contract addresses.","severity":"info","snippet":"  \"coreCreationKeccak256\": \"0x0f47399545e4659030ba4a70dc0b4dc2fe7bf295559b316547a854d580c0610e\",","title":"Prerequisite verification: deployed constitution and core-creation package match source; coverage and unverified items"}],"hash":"cbc5612243965bdebf7af24b6a80299c595dd1444a6d3ecc88fd0c6c260cc6ad","nodeId":"73d1a150-7e88-492b-a0a0-c39c9f222dc6","outcome":"completed","summary":"Review complete. Findings are in `.imd-findings.json` at the repository root, and no repository file was changed (only `out/` build artifacts, which `.gitignore` excludes).\n\n**What I verified against mainnet and the local build**\n- The two core-code parts on chain reconstruct byte-for-byte into the compiled `QuorumBoundCore` creation code, and their keccak equals both the committed and the on-chain `creationHash`.\n- The deployed constitution contract hashes to the sha256 of `constitution.en.md`, and the on-chain text contract holds the exact file bytes.\n- Both prerequisite runtimes equal the local compile after masking immutables. Both receipts succeed from the listed wallet with the listed addresses, blocks and gas.\n- The token pins exactly those addresses plus the 62,500 token stake and the IMD pairing. Manifest constructor args, permissions and token metadata match the source. All runtimes stay under 24,576 bytes and both initcodes under 49,152 bytes.\n\n**Findings**\n- **High.** One of the nineteen required cases, the four-week suspension test, fails under the committed `foundry.toml`. It runs out of Foundry's default per-test gas budget and reverts with OutOfGas. It passes when the gas limit is raised, so the contracts are not at fault, but the test file is hash-pinned and the config file is off limits to the adapter. The requester has to re-pin a cheaper test or ship a config with a higher gas limit. The plain required command will otherwise report the suite as failed.\n- **Low.** A voted operating plan can never trade through the project's own pool, because the router's tax deposit hits the treasury's reentrancy lock while the operation is executing. Funds stay intact, but the conversion path is dead and fixing it means new core code.\n- **Info.** Platform fee share defaults to the payer, so the hook's fee collection reverts until the payer hands the requester role to the hook. Fees claimed before that go to the payer permanently. This is the disclosure the brief asks for.\n- **Info.** Verification record, coverage and open items. The IMD token source could not be reached. It has an owner and 23 KB of code, and the treasury's exact-receipt check assumes plain transfers. The hook hard-codes fee tier 12500, which the chain's policy must allow. The unreferenced `constitution.packed.hex` was not decoded and is not evidence.\n\n**Coverage.** I read all nineteen source files, the three test files, the external interface facade, and the relevant parts of the launch factory, pool fees, registry and distributor libraries. The project's launch gas in the positive test is about 13.3 million, under the cap. I found no fund-loss, mint, pause, seize, delegatecall, selfdestruct, proxy or post-deployment configuration path in the project code, and the governance semantics I traced match the constitution text.","treeHash":null,"usage":{"cachedInputTokens":1748732,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":43194,"runtime":"claude","turns":57,"wallClockMs":648197}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"f7cb61cceaa27e78","findings":[],"hash":"ffd22bb5681e4685a38c2cd6529aea7380545d66d63c76e0d79375b0696f960d","nodeId":"1144cfee-d917-4c13-b6ec-bdf0af9ee2ba","outcome":"failed","summary":"the launch check failed, so this was not submitted:\nQuorumIssuanceHook has no getHookPermissions(), which the protocol's floor calls to check the hook against launch.json's hook.permissions, 0x28c0 (beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap), so the launch would park. Add it, returning Hooks.Permissions with exactly those set.","treeHash":null,"usage":{"cachedInputTokens":3640192,"inputTokens":193589,"model":"gpt-6-astra","outputTokens":28741,"runtime":"codex","turns":14,"wallClockMs":1035122}}],"verification":[{"checks":[{"durationMs":29508,"exitCode":0,"name":"build","output":"Compiling 61 files with Solc 0.8.28\nSolc 0.8.28 finished in 29.43s\nCompiler run successful!\n","passed":true},{"durationMs":1089,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 6 tests for test/positive/LaunchIntegration.t.sol:LaunchIntegrationTest\n[PASS] testLaunchHookCreatesCoreFromPackageWithActualAddresses() (gas: 244259)\nLogs:\n  factory_launch_execution_gas: 13425721\n  hook_initcode_with_arguments_bytes: 17840\n  token_initcode_bytes: 3087\n\n[PASS] testLaunchInitializationCallbackRejectsOutsidersAndRepeats() (gas: 157601711)\n[PASS] testLaunchLiquidityAndSwapCallbacksRejectOutsiders() (gas: 980561)\n[PASS] testLaunchPinnedTokenConstantsAndStandardSupply() (gas: 115906)\n[PASS] testLaunchRequesterDefaultsToPayerUntilHandover() (gas: 1955864)\n[PASS] testLaunchTaxStaysInImdAndIsNeverConvertedToEth() (gas: 810051)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 192.15ms (116.49ms CPU time)\n\nRan 5 tests for test/positive/ImdFactoryPositive.t.sol:ImdFactoryPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 579832)\nLogs:\n  factory_launch_execution_gas: 13290632\n  hook_initcode_with_arguments_bytes: 17840\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1163882)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 496179378)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1575226)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 832440890)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 663.07ms (802.32ms CPU time)\n\nRan 51 tests for test/positive/CompositionGas.t.sol:CompositionGasTest\n[PASS] testGasCompositionViews() (gas: 252367)\nLogs:\n  QProbeToken.balanceOf: 9924\n  QuorumIssuanceHook.core: 5729\n  QuorumBoundCore.agendaRevision: 10726\n  QuorumBoundCore.isSuspended: 11793\n  QuorumMembership.live: 29639\n  QuorumMembership.enrollment: 25768\n  QuorumMembership.qualified: 6207\n  QuorumMembership.isSeatAgent: 30592\n  QuorumTreasury.accountedBalance: 16270\n  QuorumTreasury.ledger: 15470\n  QuorumTreasury.weekInfo: 17091\n  QuotaPrototype.available: 14385\n  QuotaPrototype.unlocked: 5835\n  ConstitutionPrototype.text: 18357\n  QuorumCoreCode.creationHash: 3228\n\n[PASS] testGasDeployedCodeSizesWithinMainnetLimits() (gas: 243691)\nLogs:\n  runtime_QProbeToken: 1857\n  runtime_QuorumIssuanceHook: 8000\n  runtime_QuorumSwapRouter: 4030\n  runtime_QuotaPrototype: 2123\n  runtime_QuorumBoundCore: 802\n  runtime_QuorumMembership: 6903\n  runtime_QuorumTreasury: 9969\n  runtime_QuorumWork: 17027\n  runtime_QuorumOperatingAccount: 2938\n  runtime_ConstitutionPrototype: 555\n  runtime_ConstitutionTextPrototype: 11237\n  runtime_QuorumCoreCode: 919\n  runtime_CoreCodePart0: 24001\n  runtime_CoreCodePart1: 16219\n  initcode_QuorumBoundCore_with_arguments: 40378\n  initcode_QuorumTreasury_with_arguments: 31522\n  initcode_QuorumMembership_with_arguments: 7414\n  initcode_QuorumWork_with_arguments: 17389\n  initcode_QuorumSwapRouter_with_arguments: 5006\n  initcode_QuotaPrototype_with_arguments: 2443\n\n[PASS] testGasHookBeforeAddLiquidity() (gas: 21364)\nLogs:\n  QuorumIssuanceHook.beforeAddLiquidity: 15218\n\n[PASS] testGasHookBeforeInitialize() (gas: 60266)\nLogs:\n  QuorumIssuanceHook.beforeInitialize: 50537\n\n[PASS] testGasHookCollectPlatformFees() (gas: 547508)\nLogs:\n  QuorumIssuanceHook.collectPlatformFees: 643869\n\n[PASS] testGasHookCountQualifiedWeek() (gas: 113041)\nLogs:\n  QuorumIssuanceHook.countQualifiedWeek: 99254\n\n[PASS] testGasHookFlushRevenue() (gas: 218686)\nLogs:\n  QuorumIssuanceHook.flushRevenue: 228260\n\n[PASS] testGasHookRegisterOriginal() (gas: 169758)\nLogs:\n  QuorumIssuanceHook.registerOriginal: 151971\n\n[PASS] testGasHookRewardPaid() (gas: 70127)\nLogs:\n  QuorumIssuanceHook.rewardPaid: 59346\n\n[PASS] testGasLaunchFactoryLaunchFullComposition() (gas: 13283390)\nLogs:\n  launch_execution_gas: 13298516\n  launch_calldata_bytes: 22116\n  launch_calldata_zero_bytes: 3018\n  launch_calldata_nonzero_bytes: 19098\n  launch_transaction_gas_estimate: 13637156\n  launch_headroom_under_16777216: 3140060\n  token_initcode_bytes: 3087\n  hook_initcode_with_arguments_bytes: 17840\n\n[PASS] testGasMembershipAcceptKeyRotation() (gas: 303716)\nLogs:\n  QuorumMembership.accept(key rotation): 268219\n\n[PASS] testGasMembershipAcceptNewDeposit() (gas: 275156)\nLogs:\n  QuorumMembership.accept(new deposit): 295267\n\n[PASS] testGasMembershipAuthorize() (gas: 127044)\nLogs:\n  QuorumMembership.authorize: 120892\n\n[PASS] testGasMembershipReport() (gas: 83195)\nLogs:\n  QuorumMembership.report: 77866\n\n[PASS] testGasMembershipRequestExit() (gas: 69926)\nLogs:\n  QuorumMembership.requestExit: 63639\n\n[PASS] testGasMembershipRespond() (gas: 116586)\nLogs:\n  QuorumMembership.respond: 110657\n\n[PASS] testGasMembershipRevoke() (gas: 59623)\nLogs:\n  QuorumMembership.revoke: 53385\n\n[PASS] testGasMembershipWithdraw() (gas: 100135)\nLogs:\n  QuorumMembership.withdraw: 100499\n\n[PASS] testGasQProbeTokenApprove() (gas: 56381)\nLogs:\n  QProbeToken.approve: 53153\n\n[PASS] testGasQProbeTokenConstructor() (gas: 616900)\nLogs:\n  token_constructor_create_gas: 601292\n\n[PASS] testGasQProbeTokenTransfer() (gas: 60828)\nLogs:\n  QProbeToken.transfer: 58502\n\n[PASS] testGasQProbeTokenTransferFrom() (gas: 62454)\nLogs:\n  QProbeToken.transferFrom: 56590\n\n[PASS] testGasQuorumCoreCodeCreate() (gas: 7814284)\nLogs:\n  package_create_gas: 7797949\n\n[PASS] testGasQuorumIssuanceHookConstructor() (gas: 10816667)\nLogs:\n  hook_constructor_create2_gas: 10795441\n\n[PASS] testGasQuotaConsume() (gas: 51088)\nLogs:\n  QuotaPrototype.consume: 35174\n\n[PASS] testGasQuotaQualify() (gas: 66715)\nLogs:\n  QuotaPrototype.qualify: 57134\n\n[PASS] testGasQuotaRecordBuy() (gas: 57872)\nLogs:\n  QuotaPrototype.recordBuy: 51500\n\n[PASS] testGasQuotaRecordEarned() (gas: 59136)\nLogs:\n  QuotaPrototype.recordEarned: 52874\n\n[PASS] testGasQuotaRegister() (gas: 102578)\nLogs:\n  QuotaPrototype.register: 96869\n\n[PASS] testGasRouterSwapBuy() (gas: 252970)\nLogs:\n  QuorumSwapRouter.swap(buy): 300238\n\n[PASS] testGasRouterSwapSell() (gas: 241334)\nLogs:\n  QuorumSwapRouter.swap(sell): 272369\n\n[PASS] testGasTreasuryClaimAllowance() (gas: 147259)\nLogs:\n  QuorumTreasury.claimAllowance: 154457\n\n[PASS] testGasTreasuryDepositAssetRevenue() (gas: 156994)\nLogs:\n  QuorumTreasury.depositAssetRevenue: 161602\n\n[PASS] testGasTreasuryDepositRevenue() (gas: 90505)\nLogs:\n  QuorumTreasury.depositRevenue: 93520\n\n[PASS] testGasTreasurySettleWeek() (gas: 709438)\nLogs:\n  QuorumTreasury.settleWeek(7 seats): 703572\n\n[PASS] testGasWorkAccept() (gas: 93648)\nLogs:\n  QuorumWork.accept: 84527\n\n[PASS] testGasWorkClaim() (gas: 140898)\nLogs:\n  QuorumWork.claim: 107795\n\n[PASS] testGasWorkDefend() (gas: 50103)\nLogs:\n  QuorumWork.defend: 43785\n\n[PASS] testGasWorkExecuteOperation() (gas: 200329)\nLogs:\n  QuorumWork.executeOperation: 178465\n\n[PASS] testGasWorkExecuteSuspension() (gas: 171410)\nLogs:\n  QuorumWork.executeSuspension: 155674\n\n[PASS] testGasWorkExpire() (gas: 104225)\nLogs:\n  QuorumWork.expire(funded): 61692\n\n[PASS] testGasWorkExplain() (gas: 70185)\nLogs:\n  QuorumWork.explain: 64707\n\n[PASS] testGasWorkFund() (gas: 104064)\nLogs:\n  QuorumWork.fund: 90253\n\n[PASS] testGasWorkPrepareBallot() (gas: 651561)\nLogs:\n  QuorumWork.prepareBallot(7 entries): 532518\n\n[PASS] testGasWorkPropose() (gas: 451946)\nLogs:\n  QuorumWork.propose: 412732\n\n[PASS] testGasWorkProposeAsset() (gas: 419912)\nLogs:\n  QuorumWork.proposeAsset: 414454\n\n[PASS] testGasWorkProposeOperation() (gas: 393314)\nLogs:\n  QuorumWork.proposeOperation: 387696\n\n[PASS] testGasWorkProposeSuspension() (gas: 412888)\nLogs:\n  QuorumWork.proposeSuspension: 406636\n\n[PASS] testGasWorkResolveAcceptance() (gas: 135354)\nLogs:\n  QuorumWork.resolveAcceptance: 96577\n\n[PASS] testGasWorkSubmit() (gas: 259208)\nLogs:\n  QuorumWork.submit: 220381\n\n[PASS] testGasWorkVote() (gas: 117372)\nLogs:\n  QuorumWork.vote: 110992\n\nSuite result: ok. 51 passed; 0 failed; 0 skipped; finished in 663.15ms (7.37s CPU time)\n\nRan 5 tests for test/positive/NormalIntegrated.t.sol:NormalIntegratedTest\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 1637661)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87158)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 683051)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 449211)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 11817981)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 732.72ms (1.40s CPU time)\n\nRan 14 tests for test/positive/GovernancePositive.t.sol:GovernancePositiveTest\n[PASS] testNormalDelayedResolutionDoesNotExtendRepairClock() (gas: 3067061)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 1638237)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87276)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 683380)\n[PASS] testNormalMissedRepairReturnsBudget() (gas: 3286027)\n[PASS] testNormalOneRepairFreshVoteThenPayment() (gas: 4775109)\n[PASS] testNormalOperatingConversionNameAndLaterUpdate() (gas: 3888012)\n[PASS] testNormalSecondUnapprovedDeliveryReturnsBudget() (gas: 4072516)\n[PASS] testNormalSnapshotTimeoutAndRepairClock() (gas: 3419191)\n[PASS] testNormalSuspendedMemberCanExitAndReceiveOriginalStake() (gas: 1886663)\n[PASS] testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks() (gas: 8015819)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 449534)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 11822117)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\n[PASS] testNormalUnavailableServiceLeavesBudgetAndAllowsRetry() (gas: 2552899)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 989.14ms (7.87s CPU time)\n\nRan 5 test suites in 993.96ms (3.24s CPU time): 81 tests passed, 0 failed, 0 skipped (81 total tests)\n","passed":true},{"durationMs":63,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AuthenticatedRouterPrototype.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"AuthenticatedRouterPrototype.unlockCallback(bytes)\",\"LocalSeats.mint(address,uint256)\",\"LocalSeats.transferFrom(address,address,uint256)\",\"LocalToken.approve(address,uint256)\",\"LocalToken.mint(address,uint256)\",\"LocalToken.transfer(address,uint256)\",\"LocalToken.transferFrom(address,address,uint256)\",\"QProbeToken.approve(address,uint256)\",\"QProbeToken.transfer(address,uint256)\",\"QProbeToken.transferFrom(address,address,uint256)\",\"QuorumCoreCode.create(address,address,uint256,address)\",\"QuorumIssuanceHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"QuorumIssuanceHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"QuorumIssuanceHook.collectPlatformFees(uint64)\",\"QuorumIssuanceHook.countQualifiedWeek(uint256,uint256)\",\"QuorumIssuanceHook.flushRevenue()\",\"QuorumIssuanceHook.registerOriginal(uint64,uint256,bytes32[])\",\"QuorumIssuanceHook.rewardPaid(address,uint256)\",\"QuorumLaunchToken.approve(address,uint256)\",\"QuorumLaunchToken.transfer(address,uint256)\",\"QuorumLaunchToken.transferFrom(address,address,uint256)\",\"QuorumMembership.accept(address,uint256,bytes32)\",\"QuorumMembership.authorize(address,uint256)\",\"QuorumMembership.report(uint256,string)\",\"QuorumMembership.requestExit(uint256)\",\"QuorumMembership.respond(uint256,uint256,bytes32,uint256,string)\",\"QuorumMembership.revoke()\",\"QuorumMembership.withdraw(uint256)\",\"QuorumOperatingAccount.execute((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumOperatingAccount.receive()\",\"QuorumRevenueSink.flush()\",\"QuorumSwapRouter.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"QuorumSwapRouter.unlockCallback(bytes)\",\"QuorumTreasury.claimAllowance(uint256,uint256)\",\"QuorumTreasury.depositAssetRevenue(address,uint256)\",\"QuorumTreasury.depositRevenue(uint256)\",\"QuorumTreasury.executeOperating((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumTreasury.makePayable(address,uint256)\",\"QuorumTreasury.pay(address,address,uint256)\",\"QuorumTreasury.receive()\",\"QuorumTreasury.release(address,uint256)\",\"QuorumTreasury.reserve(address,uint256)\",\"QuorumTreasury.settleWeek(uint256,uint256)\",\"QuorumWork.accept(uint256)\",\"QuorumWork.appendEntry(uint256)\",\"QuorumWork.claim(uint256)\",\"QuorumWork.defend(uint256,string)\",\"QuorumWork.executeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumWork.executeSuspension(uint256)\",\"QuorumWork.expire(uint256)\",\"QuorumWork.explain(uint256,string)\",\"QuorumWork.fund(uint256)\",\"QuorumWork.prepareBallot(uint256,uint256)\",\"QuorumWork.propose(uint256,uint256,address,uint256,uint256,string)\",\"QuorumWork.proposeAsset(uint256,uint256,address,address,uint256,uint256,string)\",\"QuorumWork.proposeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]),address[],string)\",\"QuorumWork.proposeSuspension(uint256,address,string)\",\"QuorumWork.resolveAcceptance(uint256)\",\"QuorumWork.submit(uint256,string)\",\"QuorumWork.vote(uint256,uint256,bool)\",\"QuotaPrototype.consume(address,uint256)\",\"QuotaPrototype.qualify(address,uint256)\",\"QuotaPrototype.recordBuy(address,uint256)\",\"QuotaPrototype.recordEarned(address,uint256)\",\"QuotaPrototype.register(address,bytes32,uint256)\",\"RestrictedPoolPrototype.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"RestrictedPoolPrototype.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"WorkCyclePrototype.acceptWork(uint256)\",\"WorkCyclePrototype.claim(uint256)\",\"WorkCyclePrototype.depositRevenue(uint256)\",\"WorkCyclePrototype.expire(uint256)\",\"WorkCyclePrototype.propose(address,address,uint256,uint256,string)\",\"WorkCyclePrototype.reserveBudget(uint256)\",\"WorkCyclePrototype.submit(uint256,string)\",\"WorkCyclePrototype.vote(uint256,bool,bool)\"],\"files\":{\".gas-snapshot\":81,\".gitignore\":7,\"ACCEPTANCE.json\":65,\"ADAPTATION.md\":106,\"PREREQUISITES.json\":67,\"README.md\":44,\"constitution.en.md\":66,\"constitution.packed.hex\":1,\"fixtures/external-build/out/LaunchFactory.sol/LaunchFactory.json\":1,\"fixtures/external-build/out/LaunchFees.sol/LaunchFees.json\":1,\"fixtures/external-build/out/LaunchRegistry.sol/LaunchRegistry.json\":1,\"fixtures/external-build/out/MerkleDistributor.sol/MerkleDistributor.json\":1,\"fixtures/external-build/out/PoolManager.sol/PoolManager.json\":1,\"foundry.toml\":14,\"launch.json\":29,\"reports/gas.md\":303,\"src/ConstitutionPrototype.sol\":28,\"src/ImdLaunchProof.sol\":36,\"src/LocalFixtures.sol\":24,\"src/QProbeToken.sol\":9,\"src/QuorumBoundCore.sol\":20,\"src/QuorumCodeCatalog.sol\":21,\"src/QuorumCoreCode.sol\":34,\"src/QuorumCreate.sol\":14,\"src/QuorumIssuanceHook.sol\":200,\"src/QuorumLaunchToken.sol\":18,\"src/QuorumLocalSystem.sol\":28,\"src/QuorumMembership.sol\":178,\"src/QuorumOperatingAccount.sol\":45,\"src/QuorumRevenueSink.sol\":22,\"src/QuorumTreasury.sol\":148,\"src/QuorumWork.sol\":316,\"src/QuotaPrototype.sol\":99,\"src/RestrictedPoolPrototype.sol\":143,\"src/WorkCyclePrototype.sol\":201,\"test/compatibility/CompatibilityBase.sol\":237,\"test/compatibility/DeploymentCompatibility.t.sol\":496,\"test/compatibility/MainnetPrerequisitesFork.t.sol\":62,\"test/compatibility/RequiredPositiveCases.t.sol\":42,\"test/compatibility/TaxQuotaInvariant.t.sol\":216,\"test/positive/CompositionGas.t.sol\":634,\"test/positive/ExternalInterfaces.sol\":70,\"test/positive/GovernancePositive.t.sol\":162,\"test/positive/ImdFactoryPositive.t.sol\":237,\"test/positive/LaunchIntegration.t.sol\":316,\"test/positive/LaunchTransactionScript.sol\":94,\"test/positive/NormalIntegrated.t.sol\":181,\"tools/build_external_fixtures.py\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"0678bba8c2e7c42263d41bdd7769fac0aa92be668cd05acb84eff9c4daab9a0f","verifiedTreeHash":"251fa7545977cda515337a50d9fbb4cb19433c50","verifierVersion":"0.1.0+a6ee6548"},{"checks":[{"durationMs":20825,"exitCode":0,"name":"build","output":"Compiling 59 files with Solc 0.8.28\nSolc 0.8.28 finished in 20.76s\nCompiler run successful!\n","passed":true},{"durationMs":985,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 6 tests for test/positive/LaunchIntegration.t.sol:LaunchIntegrationTest\n[PASS] testLaunchHookCreatesCoreFromPackageWithActualAddresses() (gas: 244259)\nLogs:\n  factory_launch_execution_gas: 13425721\n  hook_initcode_with_arguments_bytes: 17840\n  token_initcode_bytes: 3087\n\n[PASS] testLaunchInitializationCallbackRejectsOutsidersAndRepeats() (gas: 157601711)\n[PASS] testLaunchLiquidityAndSwapCallbacksRejectOutsiders() (gas: 980561)\n[PASS] testLaunchPinnedTokenConstantsAndStandardSupply() (gas: 115906)\n[PASS] testLaunchRequesterDefaultsToPayerUntilHandover() (gas: 1955864)\n[PASS] testLaunchTaxStaysInImdAndIsNeverConvertedToEth() (gas: 810051)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 107.51ms (69.90ms CPU time)\n\nRan 5 tests for test/positive/ImdFactoryPositive.t.sol:ImdFactoryPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 579832)\nLogs:\n  factory_launch_execution_gas: 13290632\n  hook_initcode_with_arguments_bytes: 17840\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1163882)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 496179378)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1575226)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 832440890)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 367.41ms (539.06ms CPU time)\n\nRan 5 tests for test/positive/NormalIntegrated.t.sol:NormalIntegratedTest\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 1637661)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87158)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 683051)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 449211)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 11817981)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 580.73ms (1.08s CPU time)\n\nRan 14 tests for test/positive/GovernancePositive.t.sol:GovernancePositiveTest\n[PASS] testNormalDelayedResolutionDoesNotExtendRepairClock() (gas: 3067061)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 1638237)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87276)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 683380)\n[PASS] testNormalMissedRepairReturnsBudget() (gas: 3286027)\n[PASS] testNormalOneRepairFreshVoteThenPayment() (gas: 4775109)\n[PASS] testNormalOperatingConversionNameAndLaterUpdate() (gas: 3888012)\n[PASS] testNormalSecondUnapprovedDeliveryReturnsBudget() (gas: 4072516)\n[PASS] testNormalSnapshotTimeoutAndRepairClock() (gas: 3419191)\n[PASS] testNormalSuspendedMemberCanExitAndReceiveOriginalStake() (gas: 1886663)\n[PASS] testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks() (gas: 8015819)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 449534)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 11822117)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\n[PASS] testNormalUnavailableServiceLeavesBudgetAndAllowsRetry() (gas: 2552899)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 897.07ms (6.81s CPU time)\n\nRan 4 test suites in 902.10ms (1.95s CPU time): 30 tests passed, 0 failed, 0 skipped (30 total tests)\n","passed":true},{"durationMs":47,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AuthenticatedRouterPrototype.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"AuthenticatedRouterPrototype.unlockCallback(bytes)\",\"LocalSeats.mint(address,uint256)\",\"LocalSeats.transferFrom(address,address,uint256)\",\"LocalToken.approve(address,uint256)\",\"LocalToken.mint(address,uint256)\",\"LocalToken.transfer(address,uint256)\",\"LocalToken.transferFrom(address,address,uint256)\",\"QProbeToken.approve(address,uint256)\",\"QProbeToken.transfer(address,uint256)\",\"QProbeToken.transferFrom(address,address,uint256)\",\"QuorumCoreCode.create(address,address,uint256,address)\",\"QuorumIssuanceHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"QuorumIssuanceHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"QuorumIssuanceHook.collectPlatformFees(uint64)\",\"QuorumIssuanceHook.countQualifiedWeek(uint256,uint256)\",\"QuorumIssuanceHook.flushRevenue()\",\"QuorumIssuanceHook.registerOriginal(uint64,uint256,bytes32[])\",\"QuorumIssuanceHook.rewardPaid(address,uint256)\",\"QuorumLaunchToken.approve(address,uint256)\",\"QuorumLaunchToken.transfer(address,uint256)\",\"QuorumLaunchToken.transferFrom(address,address,uint256)\",\"QuorumMembership.accept(address,uint256,bytes32)\",\"QuorumMembership.authorize(address,uint256)\",\"QuorumMembership.report(uint256,string)\",\"QuorumMembership.requestExit(uint256)\",\"QuorumMembership.respond(uint256,uint256,bytes32,uint256,string)\",\"QuorumMembership.revoke()\",\"QuorumMembership.withdraw(uint256)\",\"QuorumOperatingAccount.execute((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumOperatingAccount.receive()\",\"QuorumRevenueSink.flush()\",\"QuorumSwapRouter.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"QuorumSwapRouter.unlockCallback(bytes)\",\"QuorumTreasury.claimAllowance(uint256,uint256)\",\"QuorumTreasury.depositAssetRevenue(address,uint256)\",\"QuorumTreasury.depositRevenue(uint256)\",\"QuorumTreasury.executeOperating((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumTreasury.makePayable(address,uint256)\",\"QuorumTreasury.pay(address,address,uint256)\",\"QuorumTreasury.receive()\",\"QuorumTreasury.release(address,uint256)\",\"QuorumTreasury.reserve(address,uint256)\",\"QuorumTreasury.settleWeek(uint256,uint256)\",\"QuorumWork.accept(uint256)\",\"QuorumWork.appendEntry(uint256)\",\"QuorumWork.claim(uint256)\",\"QuorumWork.defend(uint256,string)\",\"QuorumWork.executeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumWork.executeSuspension(uint256)\",\"QuorumWork.expire(uint256)\",\"QuorumWork.explain(uint256,string)\",\"QuorumWork.fund(uint256)\",\"QuorumWork.prepareBallot(uint256,uint256)\",\"QuorumWork.propose(uint256,uint256,address,uint256,uint256,string)\",\"QuorumWork.proposeAsset(uint256,uint256,address,address,uint256,uint256,string)\",\"QuorumWork.proposeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]),address[],string)\",\"QuorumWork.proposeSuspension(uint256,address,string)\",\"QuorumWork.resolveAcceptance(uint256)\",\"QuorumWork.submit(uint256,string)\",\"QuorumWork.vote(uint256,uint256,bool)\",\"QuotaPrototype.consume(address,uint256)\",\"QuotaPrototype.qualify(address,uint256)\",\"QuotaPrototype.recordBuy(address,uint256)\",\"QuotaPrototype.recordEarned(address,uint256)\",\"QuotaPrototype.register(address,bytes32,uint256)\",\"RestrictedPoolPrototype.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"RestrictedPoolPrototype.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"WorkCyclePrototype.acceptWork(uint256)\",\"WorkCyclePrototype.claim(uint256)\",\"WorkCyclePrototype.depositRevenue(uint256)\",\"WorkCyclePrototype.expire(uint256)\",\"WorkCyclePrototype.propose(address,address,uint256,uint256,string)\",\"WorkCyclePrototype.reserveBudget(uint256)\",\"WorkCyclePrototype.submit(uint256,string)\",\"WorkCyclePrototype.vote(uint256,bool,bool)\"],\"files\":{\".gitignore\":7,\"ACCEPTANCE.json\":65,\"ADAPTATION.md\":106,\"PREREQUISITES.json\":67,\"README.md\":44,\"constitution.en.md\":66,\"constitution.packed.hex\":1,\"fixtures/external-build/out/LaunchFactory.sol/LaunchFactory.json\":1,\"fixtures/external-build/out/LaunchFees.sol/LaunchFees.json\":1,\"fixtures/external-build/out/LaunchRegistry.sol/LaunchRegistry.json\":1,\"fixtures/external-build/out/MerkleDistributor.sol/MerkleDistributor.json\":1,\"fixtures/external-build/out/PoolManager.sol/PoolManager.json\":1,\"foundry.toml\":14,\"launch.json\":29,\"src/ConstitutionPrototype.sol\":28,\"src/ImdLaunchProof.sol\":36,\"src/LocalFixtures.sol\":24,\"src/QProbeToken.sol\":9,\"src/QuorumBoundCore.sol\":20,\"src/QuorumCodeCatalog.sol\":21,\"src/QuorumCoreCode.sol\":34,\"src/QuorumCreate.sol\":14,\"src/QuorumIssuanceHook.sol\":200,\"src/QuorumLaunchToken.sol\":18,\"src/QuorumLocalSystem.sol\":28,\"src/QuorumMembership.sol\":178,\"src/QuorumOperatingAccount.sol\":45,\"src/QuorumRevenueSink.sol\":22,\"src/QuorumTreasury.sol\":148,\"src/QuorumWork.sol\":316,\"src/QuotaPrototype.sol\":99,\"src/RestrictedPoolPrototype.sol\":143,\"src/WorkCyclePrototype.sol\":201,\"test/compatibility/CompatibilityBase.sol\":237,\"test/compatibility/DeploymentCompatibility.t.sol\":496,\"test/compatibility/MainnetPrerequisitesFork.t.sol\":62,\"test/compatibility/RequiredPositiveCases.t.sol\":42,\"test/compatibility/TaxQuotaInvariant.t.sol\":216,\"test/positive/ExternalInterfaces.sol\":70,\"test/positive/GovernancePositive.t.sol\":162,\"test/positive/ImdFactoryPositive.t.sol\":237,\"test/positive/LaunchIntegration.t.sol\":316,\"test/positive/NormalIntegrated.t.sol\":181,\"tools/build_external_fixtures.py\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"25bd689151e8d347460881ebdd1a23df2ea6ba11b2360ea9816bf873a86f4640","verifiedTreeHash":"21825bfa4511e8c7973b9c47047ab8c7340ce349","verifierVersion":"0.1.0+a6ee6548"},{"checks":[{"durationMs":22091,"exitCode":0,"name":"build","output":"Compiling 59 files with Solc 0.8.28\nSolc 0.8.28 finished in 22.02s\nCompiler run successful!\n","passed":true},{"durationMs":1033,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 6 tests for test/positive/LaunchIntegration.t.sol:LaunchIntegrationTest\n[PASS] testLaunchHookCreatesCoreFromPackageWithActualAddresses() (gas: 244259)\nLogs:\n  factory_launch_execution_gas: 13425721\n  hook_initcode_with_arguments_bytes: 17840\n  token_initcode_bytes: 3087\n\n[PASS] testLaunchInitializationCallbackRejectsOutsidersAndRepeats() (gas: 157601711)\n[PASS] testLaunchLiquidityAndSwapCallbacksRejectOutsiders() (gas: 980561)\n[PASS] testLaunchPinnedTokenConstantsAndStandardSupply() (gas: 115906)\n[PASS] testLaunchRequesterDefaultsToPayerUntilHandover() (gas: 1955864)\n[PASS] testLaunchTaxStaysInImdAndIsNeverConvertedToEth() (gas: 810051)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 122.92ms (81.06ms CPU time)\n\nRan 5 tests for test/positive/ImdFactoryPositive.t.sol:ImdFactoryPositiveTest\n[PASS] testNormalAtomicFactorySeedRecordProofAndClaim() (gas: 579832)\nLogs:\n  factory_launch_execution_gas: 13290632\n  hook_initcode_with_arguments_bytes: 17840\n\n[PASS] testNormalBuySellAndFactoryFeeCollection() (gas: 1163882)\n[PASS] testNormalLaunchTaxFundsQualifiedMembersAndAcceptedWork() (gas: 496179378)\n[PASS] testNormalPlatformFeesReachTwoAssetTreasury() (gas: 1575226)\n[PASS] testNormalTwoAssetAllowanceWorkRewardAndSale() (gas: 832440890)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 389.50ms (600.63ms CPU time)\n\nRan 5 tests for test/positive/NormalIntegrated.t.sol:NormalIntegratedTest\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 1637661)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87158)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 683051)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 449211)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 11817981)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 601.12ms (1.13s CPU time)\n\nRan 14 tests for test/positive/GovernancePositive.t.sol:GovernancePositiveTest\n[PASS] testNormalDelayedResolutionDoesNotExtendRepairClock() (gas: 3067061)\n[PASS] testNormalFixedStakeHasNoSnapshotOrSeatCap() (gas: 1638237)\n[PASS] testNormalJoinAuthorizationAndSeparateStake() (gas: 87276)\n[PASS] testNormalKeyRotationCarriesStakeAndPreservesPastEarnings() (gas: 683380)\n[PASS] testNormalMissedRepairReturnsBudget() (gas: 3286027)\n[PASS] testNormalOneRepairFreshVoteThenPayment() (gas: 4775109)\n[PASS] testNormalOperatingConversionNameAndLaterUpdate() (gas: 3888012)\n[PASS] testNormalSecondUnapprovedDeliveryReturnsBudget() (gas: 4072516)\n[PASS] testNormalSnapshotTimeoutAndRepairClock() (gas: 3419191)\n[PASS] testNormalSuspendedMemberCanExitAndReceiveOriginalStake() (gas: 1886663)\n[PASS] testNormalSuspensionPreservesOldBallotAndRecoversAfterFourWeeks() (gas: 8015819)\n[PASS] testNormalTwoQualifiedPeriodsAndAllowanceClaim() (gas: 449534)\n[PASS] testNormalTwoWorkRoundsAndExit() (gas: 11822117)\nLogs:\n  operating: 870000000000000000000\n  remaining_stake: 4500000000000000000000\n  treasury_accounted: 870000000000000000000\n\n[PASS] testNormalUnavailableServiceLeavesBudgetAndAllowsRetry() (gas: 2552899)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 939.84ms (6.93s CPU time)\n\nRan 4 test suites in 944.55ms (2.05s CPU time): 30 tests passed, 0 failed, 0 skipped (30 total tests)\n","passed":true},{"durationMs":49,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AuthenticatedRouterPrototype.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"AuthenticatedRouterPrototype.unlockCallback(bytes)\",\"LocalSeats.mint(address,uint256)\",\"LocalSeats.transferFrom(address,address,uint256)\",\"LocalToken.approve(address,uint256)\",\"LocalToken.mint(address,uint256)\",\"LocalToken.transfer(address,uint256)\",\"LocalToken.transferFrom(address,address,uint256)\",\"QProbeToken.approve(address,uint256)\",\"QProbeToken.transfer(address,uint256)\",\"QProbeToken.transferFrom(address,address,uint256)\",\"QuorumCoreCode.create(address,address,uint256,address)\",\"QuorumIssuanceHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"QuorumIssuanceHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"QuorumIssuanceHook.collectPlatformFees(uint64)\",\"QuorumIssuanceHook.countQualifiedWeek(uint256,uint256)\",\"QuorumIssuanceHook.flushRevenue()\",\"QuorumIssuanceHook.registerOriginal(uint64,uint256,bytes32[])\",\"QuorumIssuanceHook.rewardPaid(address,uint256)\",\"QuorumLaunchToken.approve(address,uint256)\",\"QuorumLaunchToken.transfer(address,uint256)\",\"QuorumLaunchToken.transferFrom(address,address,uint256)\",\"QuorumMembership.accept(address,uint256,bytes32)\",\"QuorumMembership.authorize(address,uint256)\",\"QuorumMembership.report(uint256,string)\",\"QuorumMembership.requestExit(uint256)\",\"QuorumMembership.respond(uint256,uint256,bytes32,uint256,string)\",\"QuorumMembership.revoke()\",\"QuorumMembership.withdraw(uint256)\",\"QuorumOperatingAccount.execute((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumOperatingAccount.receive()\",\"QuorumRevenueSink.flush()\",\"QuorumSwapRouter.swap((address,address,uint24,int24,address),bool,uint128,uint256,uint256,uint160,uint256)\",\"QuorumSwapRouter.unlockCallback(bytes)\",\"QuorumTreasury.claimAllowance(uint256,uint256)\",\"QuorumTreasury.depositAssetRevenue(address,uint256)\",\"QuorumTreasury.depositRevenue(uint256)\",\"QuorumTreasury.executeOperating((uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumTreasury.makePayable(address,uint256)\",\"QuorumTreasury.pay(address,address,uint256)\",\"QuorumTreasury.receive()\",\"QuorumTreasury.release(address,uint256)\",\"QuorumTreasury.reserve(address,uint256)\",\"QuorumTreasury.settleWeek(uint256,uint256)\",\"QuorumWork.accept(uint256)\",\"QuorumWork.appendEntry(uint256)\",\"QuorumWork.claim(uint256)\",\"QuorumWork.defend(uint256,string)\",\"QuorumWork.executeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]))\",\"QuorumWork.executeSuspension(uint256)\",\"QuorumWork.expire(uint256)\",\"QuorumWork.explain(uint256,string)\",\"QuorumWork.fund(uint256)\",\"QuorumWork.prepareBallot(uint256,uint256)\",\"QuorumWork.propose(uint256,uint256,address,uint256,uint256,string)\",\"QuorumWork.proposeAsset(uint256,uint256,address,address,uint256,uint256,string)\",\"QuorumWork.proposeOperation(uint256,(uint256,uint256,uint256,(address,address,uint256)[],(address,uint256,bytes,bytes32)[]),address[],string)\",\"QuorumWork.proposeSuspension(uint256,address,string)\",\"QuorumWork.resolveAcceptance(uint256)\",\"QuorumWork.submit(uint256,string)\",\"QuorumWork.vote(uint256,uint256,bool)\",\"QuotaPrototype.consume(address,uint256)\",\"QuotaPrototype.qualify(address,uint256)\",\"QuotaPrototype.recordBuy(address,uint256)\",\"QuotaPrototype.recordEarned(address,uint256)\",\"QuotaPrototype.register(address,bytes32,uint256)\",\"RestrictedPoolPrototype.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"RestrictedPoolPrototype.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"WorkCyclePrototype.acceptWork(uint256)\",\"WorkCyclePrototype.claim(uint256)\",\"WorkCyclePrototype.depositRevenue(uint256)\",\"WorkCyclePrototype.expire(uint256)\",\"WorkCyclePrototype.propose(address,address,uint256,uint256,string)\",\"WorkCyclePrototype.reserveBudget(uint256)\",\"WorkCyclePrototype.submit(uint256,string)\",\"WorkCyclePrototype.vote(uint256,bool,bool)\"],\"files\":{\".gitignore\":7,\"ACCEPTANCE.json\":65,\"ADAPTATION.md\":106,\"PREREQUISITES.json\":67,\"README.md\":44,\"constitution.en.md\":66,\"constitution.packed.hex\":1,\"fixtures/external-build/out/LaunchFactory.sol/LaunchFactory.json\":1,\"fixtures/external-build/out/LaunchFees.sol/LaunchFees.json\":1,\"fixtures/external-build/out/LaunchRegistry.sol/LaunchRegistry.json\":1,\"fixtures/external-build/out/MerkleDistributor.sol/MerkleDistributor.json\":1,\"fixtures/external-build/out/PoolManager.sol/PoolManager.json\":1,\"foundry.toml\":14,\"launch.json\":29,\"src/ConstitutionPrototype.sol\":28,\"src/ImdLaunchProof.sol\":36,\"src/LocalFixtures.sol\":24,\"src/QProbeToken.sol\":9,\"src/QuorumBoundCore.sol\":20,\"src/QuorumCodeCatalog.sol\":21,\"src/QuorumCoreCode.sol\":34,\"src/QuorumCreate.sol\":14,\"src/QuorumIssuanceHook.sol\":200,\"src/QuorumLaunchToken.sol\":18,\"src/QuorumLocalSystem.sol\":28,\"src/QuorumMembership.sol\":178,\"src/QuorumOperatingAccount.sol\":45,\"src/QuorumRevenueSink.sol\":22,\"src/QuorumTreasury.sol\":148,\"src/QuorumWork.sol\":316,\"src/QuotaPrototype.sol\":99,\"src/RestrictedPoolPrototype.sol\":143,\"src/WorkCyclePrototype.sol\":201,\"test/positive/ExternalInterfaces.sol\":70,\"test/positive/GovernancePositive.t.sol\":162,\"test/positive/ImdFactoryPositive.t.sol\":237,\"test/positive/LaunchIntegration.t.sol\":316,\"test/positive/NormalIntegrated.t.sol\":181,\"tools/build_external_fixtures.py\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"3599106a7b3786b14af88b7c8f4cc93392fc3f67744485d273760b0285b39d33","verifiedTreeHash":"de1b4352e623e217b861dd8fa062ac78aa162584","verifierVersion":"0.1.0+a6ee6548"}]}