{"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":"9bb313a3-dfc5-4fcc-8cff-7dbe4cb2dfff","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"8cdef01d4333da0da0060683bd7f1e68253210a29e65e7f60cfe5a9f545f2441","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":"75211fa3d4b9e2589e7f6fd482d7feea6f381eeefc961151e761eb3367b65559","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":"6d6de780d1ed8da7dbfbb19ee28d5fb475492fc8e216e8cfefa012fbb5be9e2c","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":"013e95849601516664b9e5b04d6a895834d2297d8d407af0112647e40725e132","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":"f238d4275e6ff647fe5976f8f3b4c313f8fe7a74df3e222d4da41686b4d35465","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":"407801abe19dd806455178cd08f7567cfe4c7a3ddb6a82d76e733057747e9105","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":"67eb7ad12810f066150e89162139ec8415e0c7571fc2b083daf770be0eec9608","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":"48e27ab566edb4c4e571a2049481aea1e0f782e1dbeb06e570c81fc11df7b110","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"461f04a2f71005fa4dbb6959a01dfe4b9a9cd564aa5f6d3b93d11930ecdccc74","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 the Sworn registry (symbol SWORN) from this repository on Sepolia as a rehearsal of the mainnet launch, deployed in this order and with no other contracts: Renderer (no constructor arguments), Composer (no constructor arguments), then Registry with constructor arguments curator 0x0919ba50b206c3f31d516de818b1fbc7da21653d, idmd 0x2c3013c90a1bb65573aae9a7c64fafb82697e4e4, imd 0x44a1cd38474fb1748400e7deb5f8d786cce3f89a (Sepolia test IMD), intake 0xa43e6f75ee006411f79ac1c84120606c2330de82 (Intake v2), attester 0x5598aa9146215bc13eb26f2c692ad1461fd32982 (the IMD oracle signer), renderer $contract:Renderer, composer $contract:Composer, burnExecutor 0x097A19e0f021BBA5072701132625ad2401043A2E (a verified BurnExecutor V1 on Sepolia used as a coded stand-in: it has no previewBridge(), so the registry's try/catch records BurnSkipped(1) and refunds; the burn rule is effectively off here; never the zero address, which the manifest validator rejects). The contracts have no owner roles. DESIGN DECISIONS, not defects (each is documented in the repository and must not be adapted): the constructor's checks (Curator settled, Intake price nonzero, executor code) run only when not all four of Curator, IDMD, IMD and Intake lack code, so the pipeline's empty-chain floor deploys and a mistyped address on a real chain still reverts; abandon() after 14 days is claimant-only for personal requests and public for shared facts; every question is about Ethereum mainnet (attestation chainId 1), the body's consumer chain is the deployment chain; the action id, attester, Intake and token are fixed for ever by decision (no owner, no setter, no upgrade); the registry keeps no ETH. Adapt nothing in src/ unless a check fails; if the audit disputes a decision above, report it as a finding and leave the code. Report every change the adapt step makes.","parentJobId":null,"planHash":"3fa90770c348b6062cd247452e7ec3c7cd7ba59c5fb71d05d217a4c89f734272","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"9bb313a3-dfc5-4fcc-8cff-7dbe4cb2dfff","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1953-launch-sworn-registry-symbol"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51291","feedbackHash":"faedcd8afb4d92f3d57077c54ee9296e8b6b6b23a0eadf0d365fe84822268373","nodeKey":"adapt_contract_project","submissionHash":"8cdef01d4333da0da0060683bd7f1e68253210a29e65e7f60cfe5a9f545f2441","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52657","feedbackHash":"af06c6c9cc7936bf3cdee3bb9ba2df4b8df2fee33f98c124db9f09358fbb0947","nodeKey":"adapt_contract_project","submissionHash":"db6b20183be11177ef271c57646aca70cb60134e8a4c4cc987a43b6d5376e8f0","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51104","feedbackHash":"92df869045e0e288b7119ed29dc182c85877b5b08bca430a7cca58e50211e67a","nodeKey":"audit_economics","submissionHash":"75211fa3d4b9e2589e7f6fd482d7feea6f381eeefc961151e761eb3367b65559","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52289","feedbackHash":"b86c99ee3d0f4120c8ff0948081e2646045c5a36ee801fdb1b54410a20f1566e","nodeKey":"audit_flow","submissionHash":"6d6de780d1ed8da7dbfbb19ee28d5fb475492fc8e216e8cfefa012fbb5be9e2c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52150","feedbackHash":"fdafbdcab9f5da0f7b7cb04d8145aea8963e69a6e3dc58db71970fe415e0af24","nodeKey":"audit_imported_code","submissionHash":"013e95849601516664b9e5b04d6a895834d2297d8d407af0112647e40725e132","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52607","feedbackHash":"4e0373921390aede2ba3a5e4079effd6257e519bad00012592963fdbe2944abc","nodeKey":"audit_judge","submissionHash":"f238d4275e6ff647fe5976f8f3b4c313f8fe7a74df3e222d4da41686b4d35465","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52482","feedbackHash":"6cdf8559f8487a22db91f485db8df106bdb80d7f6b8af4d0437b903f406ae771","nodeKey":"audit_judge","submissionHash":"081a6bb32154af5b7daab370a3590d0dcfcec4f2a4586fb4dad3cc218c092aa3","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51027","feedbackHash":"2ca0d8c83f80bb1b205297f4991fefe39cfedb3d6240f6dcce7f8494d7b1480c","nodeKey":"audit_math","submissionHash":"407801abe19dd806455178cd08f7567cfe4c7a3ddb6a82d76e733057747e9105","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51420","feedbackHash":"fcc2dc1bf8c30f671ccaa7d89c8e73a1d17be9e79a16c7a3632a539eb4eaef40","nodeKey":"audit_permissions","submissionHash":"67eb7ad12810f066150e89162139ec8415e0c7571fc2b083daf770be0eec9608","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52251","feedbackHash":"747e4d68cdcc4cedf5aa969b02c4afa2f427e1f73e8e214bb395bcf9b428a3ad","nodeKey":"manifest","submissionHash":"48e27ab566edb4c4e571a2049481aea1e0f782e1dbeb06e570c81fc11df7b110","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52166","feedbackHash":"616840a527e18985fd307c33267eb68d4a2d7aa3b1edc9117483d8e380e6bd4a","nodeKey":"manifest","submissionHash":"b2d2b38cba4e83043cfd994e05e160d6fc4624b86eb189ffb2e7aaab943c146d","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52668","feedbackHash":"e968869cd48c4b88b069cd75a3a1f9af7c536e9015d5de2339c49b9f8a3a621e","nodeKey":"write_foundry_tests","submissionHash":"a007f32be491ec98708fa092b1717a3412725675e29b1725008bd7ac3c58757a","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51083","feedbackHash":"35a3bd033bf09a06b52d60a00e93c83e61125e9d1de48311d9879e3a2ba637e1","nodeKey":"write_foundry_tests","submissionHash":"461f04a2f71005fa4dbb6959a01dfe4b9a9cd564aa5f6d3b93d11930ecdccc74","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"f793c993aac54f59d06b032e923bfd201c454a98407054d4bff65bdf653534be","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e764f15311426447","findings":[{"citation":"resolved","description":"Every spec window is a range of Ethereum mainnet blocks (design decision: all questions are about mainnet), but Registry.registerSpec hands Composer.validateSpec the deployment chain's block.number. Composer.sol:279 then requires `s.toBlock < blockNumber` for T1-T4 and Composer.sol:277 requires `s.toBlock + 7200 <= blockNumber` for T5. On Sepolia (height 11,926,230 on 2026-10-16, checked over a public RPC) every window at or after the Curator deploy block B_DEPLOY = 25,769,870 is refused with BadSpec(\"window\"), although the same spec is valid on mainnet (height 26,203,948). Consequence for the rehearsal: registerSpec, community upgrades, community shared facts and the renderer's community attributes cannot be exercised on Sepolia with any mainnet-relevant window; only windows below Sepolia's own height (which name no real mainnet activity for this game) pass. No funds are at risk and mainnet behaviour is correct, so this is low. It follows from the documented decision that questions are about mainnet while the consumer chain is the deployment chain; reported so the adapter and operator know the rehearsal cannot cover community specs, not as a request to change src/. If the author wants Sepolia parity they could take the evidence chain's height as a documented constant or argument, but that is a design change, not a fix this review requires.","line":633,"path":"src/Registry.sol","reproduction":"Scratch test test/scratch/Rehearsal.t.sol::test_windowGuardUsesDeploymentChainHeight (passes, i.e. reproduces): Spec{kind:1, target:0x0919ba50b206C3F31D516De818b1fBc7dA21653D, item:\"event Deposited(address indexed contributor, uint256 indexed hour, uint256 amount)\", arg:\"contributor\", threshold:1, fromBlock:25769870, toBlock:25789604, name:\"Uptime copy\"}. Composer.validateSpec(spec, 26_203_948) succeeds (mainnet height). Composer.validateSpec(spec, 11_926_230) reverts BadSpec(\"window\") (Sepolia height). Same for a T5 spec pinned at fromBlock = toBlock = 25769870. Through the registry: on chainid 11155111 at block 11,926,230, registry.registerSpec(spec) after approving 6.4 TestIMD reverts BadSpec(\"window\"); expected (for a rehearsal of mainnet behaviour) a registered spec id 10001.","severity":"low","snippet":"        composer.validateSpec(spec, block.number);","title":"registerSpec checks a mainnet block window against the deployment chain's height, so no realistic community spec can be registered in the Sepolia rehearsal"},{"citation":"resolved","description":"Composer.catalogSpec builds every T1/T3 catalog question with `s.target = curator`, the registry's constructor argument, and the question text and definitions pin the evidence to Ethereum mainnet (chainId 1, hex mainnet block window). With the Sepolia curator 0x0919ba50b206c3f31d516de818b1fbc7da21653d (which has no code on mainnet, checked over a public RPC) a correct panel finds no Deposited/FirstDeposit/HourSaved events, answers 0 for 701-1105 and an empty or refused list for 1201, and the registry records Missed(requestId, traitId, 8) or a decode miss, spending 0.5 TestIMD per attempt. Only trait 1301 (the claimant's mainnet nonce at B_DEPLOY) and T5 community specs ask something that does not depend on the target address, so they are the only oracle paths the rehearsal can drive to Verified against the real plane. Also note the Sepolia Intake's callbackGas is 1,000,000 (mainnet: 200,000; both read over RPC), so a Sepolia completion does not exercise the mainnet stipend the suite's gas tests target. This is the stated design (every question is about mainnet); it is reported so nobody reads a Sepolia Missed(8) as a registry defect and so the rehearsal plan uses 1301 for the end-to-end verified path.","line":72,"path":"src/Composer.sol","reproduction":"Scratch test test/scratch/Rehearsal.t.sol::test_sepoliaBodyNamesSepoliaCuratorAsMainnetContract: vm.chainId(11155111); body = composer.compose(composer.catalogSpec(701, 0x0919...), claimant, registry, false, 0x0919...). The body contains `\"chainId\": 1`, `on Ethereum mainnet`, `emitted by the contract 0x0919ba50b206c3f31d516de818b1fbc7da21653d` and `\"consumer\": {\"chainId\": 11155111, ...}`. Mainnet eth_getCode(0x0919ba50b206c3f31d516de818b1fbc7da21653d) = 0x. Expected by a reader of the rehearsal: a verified Uptime trait for a Sepolia test member; actual: onResult emits Missed(_, 701, 8) because the signed answer is 0 < threshold 1.","severity":"info","snippet":"        s.target = curator;","title":"On Sepolia every chain-evidence question names the Sepolia Curator address as a mainnet contract, so all nine catalog chain traits and 1201 will answer 0 / empty and be recorded as Missed(8)"},{"citation":"resolved","description":"`forge build --sizes` with the pinned foundry.toml (solc 0.8.24, optimizer 200 runs, Cancun, via_ir off) reports Registry runtime 24,561 bytes against the 24,576-byte EIP-170 limit enforced by Contracts.protected.t.sol (`assertLe(code.length, 24_576)`). Composer has 1,174 bytes and Renderer 3,006 bytes of headroom. The README records the figure, but the adapt step must know that even a one-word revert-string change, an extra event argument or a new require in Registry.sol will push the runtime over the limit and park the launch, and that changing foundry.toml to recover room is itself rejected. Nothing in this review requires a src/ change, so the correct adaptation is none.","line":31,"path":"src/Registry.sol","reproduction":"Run `forge build --sizes` in the repository root: `| Registry | 24,561 | 26,354 | 15 | 22,798 |`. Add any statement to Registry.sol, for example change the revert string \"Intake price\" to \"Intake price is zero\" at line 208, rebuild: runtime exceeds 24,576 and `test_applicationRuntimeIsPresentBoundedAndHasNoEscapeOpcodes` fails with \"runtime exceeds EIP-170\".","severity":"info","snippet":"contract Registry is ERC721, IERC4906, ReentrancyGuard, IOracleConsumer {","title":"Registry runtime is 24,561 bytes, 15 bytes under EIP-170: any adaptation that adds code fails the protected floor's size assertion"},{"citation":"resolved","description":"On Sepolia the brief's V1 executor 0x097A19e0f021BBA5072701132625ad2401043A2E has no previewBridge(): eth_call reverts (checked over RPC), the try/catch emits BurnSkipped(claimant, 1) and the rule is effectively off, exactly as the brief says. On mainnet the V2 executor 0xe29386719C155B6847aD5a4E97C6674f10ffc750 (script/Deploy.s.sol, README) answered previewBridge() = (454939975000000000000, 454939975000000000000, 219261761563315) on 2026-10-16: amount 454.94 IMD >= BURN_MIN 69 IMD and nativeFee 0.000219 ETH <= BURN_FEE_CAP 0.005 ETH, so the first free claim after the mainnet launch requires msg.value >= 219,261,761,563,315 wei or reverts atomically, including the already-made oracle request. This is the documented burn rule (CATALOG section 6, test/BurnRule.t.sol covers it) and not a defect; it is recorded because the Sepolia rehearsal never reaches this branch, so the front-end's fee quoting and the operator's monitoring of BurnTriggered/BurnSkipped get their first real exercise on mainnet.","line":742,"path":"src/Registry.sol","reproduction":"On a mainnet state where previewBridge() returns (amount >= 69e18, _, fee <= 5e15), a Curator member calls registry.claimSponsored(701) with msg.value = 0: reverts BurnFeeRequired(fee) and nothing is spent. Same call with msg.value = fee: oracle request made, bridgeToBaseBurnReceiver(amount, member) called with 800,000 gas, BurnTriggered(member, amount, fee). On Sepolia with the V1 executor the same msg.value = 0 call succeeds and emits BurnSkipped(member, 1).","severity":"info","snippet":"                        if (msg.value < fee) revert BurnFeeRequired(fee);","title":"Burn rule is live on mainnet at launch: the mainnet executor currently quotes 454.9 IMD, so claimSponsored/upgradeSponsored revert BurnFeeRequired unless the caller sends the LayerZero fee"},{"citation":"resolved","description":"Read in full: src/Registry.sol (761 lines), src/Composer.sol (629), src/Renderer.sol (427), src/Types.sol, src/HiveData.sol, src/TemplateData.sol, src/interfaces/{IOracleConsumer,IIntake,IBurnExecutor,IIDMD,IWhitelistCurator}.sol, script/Deploy.s.sol, the pinned protected tests, the Pashov Senior Auditor's Mindset and the oracle-consumer reference; reference/IntakeV2.sol complete()/_request() and reference/burn/BurnExecutorV2.sol.txt bridge/preview were read for the callback encoding and refund semantics; reference/plane/quotes and checks confirmed the plane accepts the composed bodies including the `head` key. Every external/public state-changing function was walked (mintCard, upgrade, abandon, onResult, onFailure, registerSpec, requestSharedFact, applySharedFact, sponsor, upgradeSponsored, claimSponsored) for caller, value moved and trust: Intake-only callbacks with pending-id, question-hash, window, panel, chain, signer, expiry and answer-shape checks before any state is written; nonReentrant on every IMD-moving entry point; no owner, setter, pause, blacklist, proxy, initializer, DELEGATECALL, CALLCODE or SELFDESTRUCT; ETH only ever msg.value of the current call, forwarded to the executor or refunded. The 169-test suite (14 suites, invariants excluded for time) passes on this tree. Live inputs confirmed over public RPCs on 2026-10-16: Sepolia curator/IDMD/TestIMD/Intake/V1 executor all have code, Sepolia curator isSettled()=true, Intake priceOf(ACTION, TestIMD)=0.5e18, V1 previewBridge reverts; mainnet curator isSettled()=true, priceOf=0.5e18, IDMD has code, V2 previewBridge quotes 454.9 IMD. Not reached: the two fork suites (skipped without CHAINTRAITS_FORK_RPC), the invariant suites (not run for time; they pass per test/NOTES.md), the plane's live quote for a Sepolia-domain body, and the deployed bytecode of the Sepolia curator/IDMD test contracts beyond code presence and isSettled(). No defect was found that loses funds, pays the wrong party, breaks accounting or weakens access control; no src/ change is recommended, so the adapt step should report zero changes.","line":22,"path":"src/Registry.sol","reproduction":"forge build; forge test --no-match-contract Invariant (169 passed, 0 failed, 17 skipped); forge build --sizes; cast call <addresses above> isSettled()/priceOf()/previewBridge() on https://ethereum-sepolia-rpc.publicnode.com and https://ethereum-rpc.publicnode.com.","severity":"info","snippet":"/// @title Sworn registry","title":"Audit scope: contracts read, checks performed, and what could not be reached"}],"hash":"013e95849601516664b9e5b04d6a895834d2297d8d407af0112647e40725e132","nodeId":"c1af1886-6b3b-4e2a-85ba-ab6cf07216f8","outcome":"completed","summary":"The report is written and every finding's path, line and snippet match the tree. The scratch test is removed, and git status shows only the untracked findings file, so the review changes nothing in the repository.\n\n## Audit result: no defects that warrant a code change\n\nI read all six contracts in `src/` plus the interfaces, deploy script, pinned protected tests, the Pashov checklist, and the oracle-consumer reference. I also read the Intake v2 and BurnExecutor V2 reference sources for the callback and refund semantics. The 169-test non-invariant suite passes on this tree.\n\n**Every state-changing entry point was walked** for caller, value moved, and what it trusts. The oracle callbacks are Intake-only and check the pending id, question hash, exact window, panel minimums, chain, signer, expiry and answer shape before writing anything. All IMD-moving functions are reentrancy-guarded. There is no owner, setter, pause, blacklist, proxy, initializer, DELEGATECALL, CALLCODE or SELFDESTRUCT. ETH is only ever the current call's value, forwarded to the executor or refunded. I did not find loss of funds, misdirected payments, broken accounting, or weak access control. None of the listed design decisions is disputed as a defect.\n\n**Live inputs verified over public RPCs today.** On Sepolia all five constructor addresses have code, the curator is settled, the Intake sells the action for 0.5 TestIMD, and the V1 executor's previewBridge reverts, so the burn rule records BurnSkipped(1) exactly as the brief says. The mainnet counterparts also check out.\n\n**Findings written to `.imd-findings.json`** (one low, four info):\n\n- **Low.** `registerSpec` checks the mainnet block window against the deployment chain's height. Sepolia is at block 11.9M while the Curator deploy block is 25.77M, so no community spec with a real mainnet window can be registered in the rehearsal. Mainnet behaviour is correct.\n- **Info.** On Sepolia every chain-evidence question names the Sepolia curator address as a mainnet contract, so traits 701 to 1201 will come back as Missed(8). Only trait 1301 and T5 specs can reach Verified in the rehearsal.\n- **Info.** Registry runtime is 15 bytes under the EIP-170 limit. Any adaptation that adds code to it parks the launch.\n- **Info.** The mainnet executor currently quotes 454.9 IMD, so the burn rule will be live on mainnet from the first sponsored claim, a branch Sepolia never exercises.\n- **Info.** Scope statement: what was read, what was checked, and what was not reached (fork suites, invariant suites, a live Sepolia plane quote).\n\n**For the adapter:** nothing in `src/` needs changing, so the adapt step should report zero changes. The rehearsal plan should use trait 1301 for the end-to-end verified path.","treeHash":null,"usage":{"cachedInputTokens":1675602,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":46225,"runtime":"claude","turns":31,"wallClockMs":845551}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e8e860c7f2306473","findings":[{"citation":"resolved","description":"Merged from audit_flow, audit_economics, audit_permissions, audit_math and write_foundry_tests (same root cause, one finding). Every question is about Ethereum mainnet by decision, so Spec.fromBlock/toBlock are mainnet heights, but Composer.validateSpec (src/Composer.sol:277 `uint256(s.toBlock) + 7200 > blockNumber` for T5 and :279 `s.toBlock >= blockNumber` for T1-T4) receives the consumer chain's block.number from Registry.registerSpec. On mainnet the two heights coincide and the guard is right. On Sepolia (head 11,926,460 read over https://ethereum-sepolia-rpc.publicnode.com on 2026-10-16; mainnet head 26,204,167) every window that ends after mainnet block ~11.9M (February 2021) is rejected as not yet mined, including the whole Curator game (25,769,870..25,789,604) that the catalog itself pins. Consequences on this launch: registerSpec, and through it upgrade/requestSharedFact/applySharedFact/cardOf for community ids, cannot be rehearsed with any realistic input; no fee is lost (validateSpec runs before the 6.4 IMD pull and nextSpecId does not advance). The same guard is inverted on a chain whose height exceeds mainnet's (Base): an unmined mainnet toBlock passes, the spec can never be answered and each upgrade on it spends 0.5 IMD on a Missed. The design decisions in the brief fix the question chain and the consumer chain but say nothing about which chain's height bounds a window, so this is not a disputed decision; it is, however, recorded in ADAPTATION.md as a retained rehearsal limitation. Minimal fix that keeps the catalog rules: apply the height comparison only when block.chainid == 1 (or bound the window with an evidence-chain height the caller cannot forge), keeping the 7200-block length and ordering checks everywhere. Severity medium: the entry point's guarantee is broken on the launch chain and the rehearsal cannot exercise it; no funds are lost.","line":633,"path":"src/Registry.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport {Registry} from \"src/Registry.sol\";\nimport {Renderer} from \"src/Renderer.sol\";\nimport {Composer} from \"src/Composer.sol\";\nimport {Spec} from \"src/Types.sol\";\n\ncontract WindowIMD is ERC20 {\n    constructor() ERC20(\"IMD\", \"IMD\") {}\n\n    function mint(address to, uint256 amount) external {\n        _mint(to, amount);\n    }\n}\n\ncontract WindowCurator {\n    function isSettled() external pure returns (bool) {\n        return true;\n    }\n\n    function firstHourOf(address) external pure returns (uint256, bool) {\n        return (0, false);\n    }\n}\n\ncontract WindowIDMD {\n    function balanceOf(address) external pure returns (uint256) {\n        return 0;\n    }\n}\n\ncontract WindowIntake {\n    address public imd;\n\n    constructor(address imd_) {\n        imd = imd_;\n    }\n\n    function priceOf(bytes32, address asset) external view returns (uint256) {\n        return asset == imd ? 0.5 ether : 0;\n    }\n}\n\n/// @notice `registerSpec` bounds a mainnet (chainId 1) window with the deployment chain's `block.number`.\n///         On Sepolia (height 11,926,383 on 2026-10-16) every spec about the Curator game\n///         (mainnet blocks 25,769,870 to 25,789,604) reverts `BadSpec(\"window\")`, so the rehearsal\n///         cannot register the specs the mainnet launch will take.\ncontract SepoliaSpecWindowTest is Test {\n    uint64 internal constant B_DEPLOY = 0x189378e; // 25,769,870 on mainnet\n    uint64 internal constant B_END = 0x18984a4; // 25,789,604 on mainnet\n    address internal constant SEPOLIA_CURATOR = 0x0919ba50b206C3F31D516De818b1fBc7dA21653D;\n\n    Registry internal registry;\n    WindowIMD internal imd;\n    address internal alice = address(0xA11CE);\n\n    function setUp() public {\n        vm.chainId(11155111);\n        vm.roll(11_926_383); // Sepolia height, 2026-10-16\n        vm.warp(1_792_000_000);\n        imd = new WindowIMD();\n        WindowCurator curator = new WindowCurator();\n        WindowIDMD idmd = new WindowIDMD();\n        WindowIntake intake = new WindowIntake(address(imd));\n        Renderer renderer = new Renderer();\n        Composer composer = new Composer();\n        registry = new Registry(\n            address(curator),\n            address(idmd),\n            address(imd),\n            address(intake),\n            address(0x5598Aa9146215Bc13eb26f2c692Ad1461Fd32982),\n            address(renderer),\n            address(composer),\n            address(0)\n        );\n        imd.mint(alice, 100 ether);\n        vm.prank(alice);\n        imd.approve(address(registry), type(uint256).max);\n    }\n\n    function gameSpec() internal pure returns (Spec memory s) {\n        s.kind = 1;\n        s.target = SEPOLIA_CURATOR;\n        s.item =\n            \"event Deposited(address indexed contributor, uint256 indexed hour, uint256 amount, uint256 creditedDelta, uint256 weightAdded, uint256 newWeight, uint256 txCount, uint256 hourTotal, uint256 earlyBps)\";\n        s.arg = \"contributor\";\n        s.threshold = 2;\n        s.fromBlock = B_DEPLOY;\n        s.toBlock = B_END;\n        s.name = \"Two deposits\";\n    }\n\n    /// @dev The whole Curator game window is mined on mainnet (height 26,204,085), so a T1 spec over it is a\n    ///      valid community spec and the mainnet launch accepts it. The Sepolia rehearsal must accept it too.\n    function test_sepoliaRehearsalRegistersAMainnetGameWindowSpec() public {\n        vm.prank(alice);\n        uint16 id = registry.registerSpec(gameSpec());\n        assertEq(id, 10001);\n        assertEq(registry.specOf(id).toBlock, B_END);\n    }\n\n    /// @dev The catalog's own T5 trait (1301) pins the Curator deploy block; a community T5 spec on the same\n    ///      block is the shape TEMPLATES.md documents, and it is likewise refused on Sepolia.\n    function test_sepoliaRehearsalRegistersAMainnetNonceSpec() public {\n        Spec memory s;\n        s.kind = 5;\n        s.threshold = 20;\n        s.fromBlock = B_DEPLOY;\n        s.toBlock = B_DEPLOY;\n        s.name = \"Pretrained twin\";\n        vm.prank(alice);\n        uint16 id = registry.registerSpec(s);\n        assertEq(id, 10001);\n    }\n}","reproduction":"State: vm.chainId(11155111); vm.roll(11_926_383); Renderer, Composer and Registry deployed as the manifest describes with coded stand-ins (settled Curator, IDMD with code, ERC-20 IMD, Intake quoting 0.5e18). Alice holds and approves 6.4 IMD. Call registry.registerSpec({kind:1, target:0x0919ba50b206C3F31D516De818b1fBc7dA21653D, item:Composer.DEPOSITED, arg:\"contributor\", threshold:2, fromBlock:0x189378e, toBlock:0x18984a4, name:\"Two deposits\"}). Expected: returns 10001, SpecRegistered(10001, alice), specOf(10001).toBlock == 0x18984a4, exactly as the same call returns at mainnet height 26,204,085 (composer.validateSpec(s, 26_204_085) passes). Actual: revert BadSpec(\"window\") because 25,789,604 >= 11,926,383. Same for the T5 spec {kind:5, threshold:20, fromBlock:toBlock:0x189378e, name:\"Pretrained twin\"}: 25,769,870 + 7200 > 11,926,383 reverts BadSpec(\"window\"). Boundary: toBlock 11,926,382 with fromBlock = toBlock - 7199 validates, toBlock 11,926,383 reverts. The attached proof (test/scratch/SepoliaSpecWindow.t.sol) fails both tests with BadSpec(\"window\") on this tree (run by me: 0 passed, 2 failed); the write_foundry_tests proof additionally shows the identical kind-1 spec registering at chainId 1 / block 26,203,948 (positive control passed).","severity":"medium","snippet":"        composer.validateSpec(spec, block.number);","title":"registerSpec validates a mainnet (chainId 1) block window against the deployment chain's block.number, so on the Sepolia rehearsal every community spec about the Curator game is refused with BadSpec(\""},{"citation":"resolved","description":"From audit_flow (reproduced). specOf and composeBody build every catalog oracle question from Composer.catalogSpec(traitId, address(curator)), which sets `s.target = curator` (src/Composer.sol:72), and the T5 parenthesis of trait 1301 writes `Strings.toHexString(curator)` after 'the block in which the WhitelistCurator contract' (src/Composer.sol:475-477). The question text and body say 'on Ethereum mainnet' with chainId 1, so on the Sepolia launch, where `curator` is the stand-in 0x0919ba50b206c3f31d516de818b1fbc7da21653d, every catalog question asks about a contract that has no code on chain 1 (cast code on https://ethereum-rpc.publicnode.com returns 0x, 2026-10-16). The plane's free wording check (POST https://api.imd.fun/requests/check, run 2026-10-16 with the composed 701 and 1301 questions) returns no blockers, so the requests are accepted and paid: traits 701, 801, 901, 1001, 1101..1105 receive an honest count of 0, which _decodeAndJudge turns into Missed(reason 8) after the 0.5 TestIMD is spent and the pending pair is cleared; 1201 asks for the top 32 keys of a contract with no logs, so the panel disagrees (status 2, NoVerdict via onFailure) or returns an empty list that _decodeAndJudge rejects (reason 9); 1301 asserts that mainnet block 0x189378e (hash 0x43ac0aad..., the mainnet Curator's deploy block) is the block in which 0x0919ba50... was deployed, which is false, and TEMPLATES.md line 105 writes that parenthesis with the fixed mainnet address 0xcb0b0531e86a9ac36fa865ca8e3dbccf047fda91, so the Sepolia body deviates from the normative template. Consequently upgrade, claimSponsored, upgradeSponsored and requestSharedFact spend claimant and pool TestIMD on this launch and can never reach _mark or SharedFactStored for any catalog id; the rehearsal never exercises the onResult success path, the card's oracle metadata or applySharedFact, which is what the rehearsal is for. Not a disputed decision: the brief fixes the question chain to mainnet and the consumer chain to the deployment chain, and says nothing about which contract a mainnet question names. Minimal fix keeping the design: the mainnet question must name the mainnet Curator 0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91 as its target (and in the 1301 parenthesis) regardless of the consumer chain, while direct-read traits keep reading the deployment chain's Curator; alternatively state in the rehearsal plan that catalog oracle traits are dead on Sepolia (community specs are also blocked by finding 1, so nothing oracle-related would be rehearsed). Severity medium: a broken guarantee of the launch, with test IMD spent on guaranteed misses; no real value at stake.","line":378,"path":"src/Registry.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {Registry} from \"src/Registry.sol\";\nimport {Renderer} from \"src/Renderer.sol\";\nimport {Composer} from \"src/Composer.sol\";\n\ncontract SettledCurator {\n    function isSettled() external pure returns (bool) {\n        return true;\n    }\n\n    function firstHourOf(address) external pure returns (uint256, bool) {\n        return (0, false);\n    }\n\n    function txCountOf(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function contributedBy(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function pointsOf(address) external pure returns (uint256) {\n        return 0;\n    }\n}\n\ncontract CodedIdmd {\n    function balanceOf(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function ownerOf(uint256) external pure returns (address) {\n        return address(0);\n    }\n}\n\ncontract CodedToken {\n    function balanceOf(address) external pure returns (uint256) {\n        return 0;\n    }\n}\n\ncontract PricedIntake {\n    function priceOf(bytes32, address) external pure returns (uint256) {\n        return 0.5 ether;\n    }\n}\n\n/// @notice Sepolia rehearsal: every catalog oracle question is \"about Ethereum mainnet\" but names the\n///         deployment chain's Curator (`catalogSpec(traitId, address(curator))`) as the mainnet contract whose\n///         events are counted. The Sepolia Curator 0x0919ba50... has no code on mainnet (eth_getCode on chain 1\n///         returns 0x, 2026-10-16), so on Sepolia every catalog chain trait is a guaranteed count of 0 and no\n///         claimant can ever verify 701..1105, nor can 1201 be stored. Fails on the current code; passes once\n///         the mainnet question names the mainnet Curator regardless of the consumer chain.\ncontract QuestionTargetOnSepoliaTest is Test {\n    address internal constant SEPOLIA_CURATOR = 0x0919ba50b206C3F31D516De818b1fBc7dA21653D;\n    address internal constant MAINNET_CURATOR = 0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91;\n\n    Registry internal registry;\n\n    function setUp() public {\n        vm.chainId(11155111);\n        vm.roll(11_926_368);\n        vm.warp(1_791_700_000);\n        SettledCurator impl = new SettledCurator();\n        vm.etch(SEPOLIA_CURATOR, address(impl).code);\n        CodedIdmd idmd = new CodedIdmd();\n        CodedToken imd = new CodedToken();\n        PricedIntake intake = new PricedIntake();\n        Renderer renderer = new Renderer();\n        Composer composer = new Composer();\n        registry = new Registry(\n            SEPOLIA_CURATOR,\n            address(idmd),\n            address(imd),\n            address(intake),\n            address(0x5598Aa9146215Bc13eb26f2c692Ad1461Fd32982),\n            address(renderer),\n            address(composer),\n            address(0)\n        );\n    }\n\n    function _contains(bytes memory haystack, bytes memory needle) internal pure returns (bool) {\n        if (needle.length > haystack.length) return false;\n        for (uint256 i; i + needle.length <= haystack.length; ++i) {\n            bool ok = true;\n            for (uint256 j; j < needle.length; ++j) {\n                if (haystack[i + j] != needle[j]) {\n                    ok = false;\n                    break;\n                }\n            }\n            if (ok) return true;\n        }\n        return false;\n    }\n\n    function test_catalogQuestionOnSepoliaNamesAMainnetContract() public view {\n        (bytes memory body,) = registry.composeBody(701, address(0xA11CE));\n        // The question is explicitly about Ethereum mainnet...\n        assertTrue(_contains(body, bytes(\"on Ethereum mainnet\")), \"question chain is mainnet\");\n        assertTrue(_contains(body, bytes('\"chainId\": 1,')), \"body chainId is 1\");\n        // ...so the contract it names must exist on mainnet: the mainnet Curator, not the Sepolia stub,\n        // which has no code on chain 1 and therefore never emitted a Deposited event there.\n        assertFalse(\n            _contains(body, bytes(\"0x0919ba50b206c3f31d516de818b1fbc7da21653d\")),\n            \"mainnet question names the Sepolia Curator, a contract with no code on mainnet\"\n        );\n        assertTrue(\n            _contains(body, bytes(\"0xcb0b0531e86a9ac36fa865ca8e3dbccf047fda91\")),\n            \"mainnet question should name the mainnet Curator\"\n        );\n        // The stored evidence target agrees with the question.\n        assertEq(registry.specOf(701).target, MAINNET_CURATOR, \"catalog spec target\");\n    }\n}","reproduction":"State: vm.chainId(11155111); a settled Curator stand-in etched at 0x0919ba50b206C3F31D516De818b1fBc7dA21653D; Registry deployed with it as `curator`. Call registry.composeBody(701, 0xA11CE). Actual body (dumped from test/scratch/Judge.t.sol on this tree): '\"chainId\": 1, ... \"question\": \"Within the request's pinned block window (fromBlock 0x1895395 to toBlock 0x18984a4, both inclusive) on Ethereum mainnet, count the `event Deposited(...)` events emitted by the contract 0x0919ba50b206c3f31d516de818b1fbc7da21653d whose indexed contributor argument equals 0x...0a11ce...\"'; registry.specOf(701).target == 0x0919ba50.... composeBody(1301, 0xA11CE) contains '; the block in which the WhitelistCurator contract 0x0919ba50b206c3f31d516de818b1fbc7da21653d was deployed)'. Expected for a question about Ethereum mainnet: the mainnet Curator 0xcb0b0531e86a9ac36fa865ca8e3dbccf047fda91, as TEMPLATES.md line 105 writes it. Live: `cast code 0x0919ba50b206c3f31d516de818b1fbc7da21653d --rpc-url https://ethereum-rpc.publicnode.com` -> 0x. End to end with the repository's MockIntake: a member calls claimSponsored(801) (pool -0.5), the writer completes with a correctly signed answer of 0 -> Missed(id, 801, 8), hasTrait(member, 801) stays false. The attached proof (test/scratch/QuestionTargetOnSepolia.t.sol) fails on this tree with 'mainnet question names the Sepolia Curator, a contract with no code on mainnet' (run by me: 0 passed, 1 failed).","severity":"medium","snippet":"        return composer.catalogSpec(traitId, address(curator));","title":"Catalog oracle questions name the deployment chain's Curator as the mainnet contract, so on Sepolia every catalog oracle trait (701..1301) is a guaranteed miss and Top Weights (1201) can never be stor"},{"citation":"resolved","description":"From audit_permissions (reproduced). The brief lists 'the action id, attester, Intake and token are fixed for ever by decision (no owner, no setter, no upgrade)' and asks that a dispute be reported, not adapted; this finding is that report and no code change is proposed. The oracle-consumer reference says the intake, action id, asset/price and signer must each be constructor input AND owner-settable, and that a rotated signer may be an ERC-1271 contract. The registry stores all of them with no setter and verifies with ECDSA.tryRecover against a bare address, so a rotation to an ERC-1271 signer registry is a reason-2 miss here too. INTEGRATION.md 'What can kill the registry' records the consequences, except one: _fromPool does not know that answers can no longer verify, so after a key rotation every claimSponsored/upgradeSponsored still pulls 0.5 IMD of pool money per request for an answer that is guaranteed Missed(2), consuming poolUsed and lastPoolDay, until the pool is empty; mint fees, spec fees and donations already in the registry can never be recovered by anyone. Second trigger: the Intake owner setting the price to 0 makes _price/_fromPool revert (ActionNotSold) for ever and freezes the balance. Severity low: the trigger is the oracle operator's own action and the brief accepts it; the judge can weigh the brief against the protocol reference.","line":561,"path":"src/Registry.sol","reproduction":"State (test/scratch/Judge.t.sol test_rotatedSignerStrandsPool, passes on this tree): Sepolia fixture with the repository's MockIntake; donor sponsors 100 IMD (pool() == 100e18); Alice is a member. Alice calls claimSponsored(801): pool() == 99.5e18, pending id = pendingOf(alice, 801). An attestation for that request (chainId 1, questionHash = the pending hash, answerType 3, answer abi.encode(1), window 0x189378e..0x18984a4, panel 5/3/5, fresh issuedAt/expiresAt) is signed over registry.attestationDigest(a) by a key K2 != attester (a rotated plane key). intake.complete(id, 0, abi.encode(id, a, sig)) emits Missed(id, 801, 2); hasTrait(alice, 801) == false; pool() stays 99.5e18; poolUsed[alice][801] == true. Expected per the oracle-consumer reference: a settable signer (or ERC-1271 acceptance) lets the deployment keep working; actual: no setter exists (the ABI has none), every later request is paid and can never verify, and the remaining 99.5 IMD is unrecoverable.","severity":"low","snippet":"        if (err != ECDSA.RecoverError.NoError || signer == address(0) || signer != attester) return 2;","title":"Disputed design decision: attester, Intake, action and token are fixed with no setter and the attester is checked by bare ECDSA recovery, so a signer rotation or an Intake price change strands the poo"},{"citation":"resolved","description":"From audit_permissions (reproduced live). The registry's only gates on pool money (claimSponsored, upgradeSponsored) are curator.firstHourOf(msg.sender).joined and idmd.ownerOf(idmdTokenId). The manifest points these at 0x0919ba50b206c3f31d516de818b1fbc7da21653d and 0x2c3013c90a1bb65573aae9a7c64fafb82697e4e4 on Sepolia. Read on 2026-10-16 over https://ethereum-sepolia-rpc.publicnode.com: the Curator has 1,559 bytes of code, isSettled() == true, no owner() (reverts), and an eth_call of set(address,uint256,bool,uint256,uint256,uint256) from 0x1111...1111 returns 0x without reverting; the IDMD stand-in likewise accepts setOwner(uint256,address) from an arbitrary EOA. Membership and IDMD ownership are therefore self-granted on the rehearsal chain: any wallet can spend the Sepolia pool at 0.5 TestIMD per request (one per UTC day, nine lifetime per wallet) and mark itself for the direct-read traits 101-601. TestIMD has an open mint and the mainnet arguments point at the settled WhitelistCurator and the real IDMD, so this is a trust gap of the rehearsal, not a code defect: the Sepolia run does not rehearse the membership gate, and any Sepolia pool balance should be treated as spendable by anyone.","line":714,"path":"src/Registry.sol","reproduction":"Sepolia, any EOA A with no Curator history. 1) `cast call 0x0919ba50b206c3f31d516de818b1fbc7da21653d 'set(address,uint256,bool,uint256,uint256,uint256)' A 0 true 10 1000000000000000000000 100000 --from A --rpc-url https://ethereum-sepolia-rpc.publicnode.com` -> 0x (no revert); sent as a transaction it sets firstHourOf(A) = (0, true). 2) A calls Registry.claimSponsored(801) with pool() >= 0.5e18. Expected under the mainnet trust model: revert NotMember(A). Actual on Sepolia: the request is paid from the pool and PoolSpent(A, 801, id) is emitted; hasTrait(A, 101/202/303/404/503) all read true. Likewise setOwner(7, A) on 0x2c3013c90a1bb65573aae9a7c64fafb82697e4e4 (simulated: 0x, no revert) then upgradeSponsored(7, [901]) passes the NotIdmdHolder check. Offline, the same sequence runs against the repository's MockCurator/MockIDMD in test/helpers/SepoliaFixture.sol, whose selectors the live stand-ins dispatch.","severity":"info","snippet":"        (, bool joined) = curator.firstHourOf(msg.sender);","title":"The Sepolia stand-ins for Curator and IDMD have permissionless setters, so on this launch anyone can make themselves a member or an IDMD holder and draw sponsored pool requests"},{"citation":"resolved","description":"From audit_flow (reproduced live). Read on 2026-10-16 over https://ethereum-sepolia-rpc.publicnode.com: Intake 0xa43e6f75ee006411f79ac1c84120606c2330de82 on chain 11155111 returns callbackGas() = 1000000 and priceOf(ACTION, 0x44a1cd38...) = 500000000000000000. INTEGRATION.md line 30 states 200,000 for the Intake addresses (read 2026-10-12). The registry's onResult is sized for the 200,000-gas mainnet stipend and the unit tests measure it under that budget (MockIntake.callbackGas = 200_000), so the rehearsal's gas evidence must come from those tests, not from Sepolia deliveries, which would succeed with five times the budget. No code change; the documentation row is stale and the rehearsal plan should say so.","line":30,"path":"INTEGRATION.md","reproduction":"`cast call 0xa43e6f75ee006411f79ac1c84120606c2330de82 'callbackGas()(uint64)' --rpc-url https://ethereum-sepolia-rpc.publicnode.com` -> 1000000. Expected per INTEGRATION.md line 30: 200000. A callback that consumed, say, 300,000 gas would be recorded as delivered on Sepolia and as not delivered on mainnet.","severity":"info","snippet":"addresses return `priceOf` 0.5 IMD, `callbackGas` 200,000 and the same writer (read 2026-10-12 00:30 UTC).","title":"Sepolia Intake v2 gives callbacks 1,000,000 gas, not the 200,000 INTEGRATION.md states, so a Sepolia completion does not rehearse the mainnet callback budget"},{"citation":"resolved","description":"From audit_economics (reproduced). _fromPool accepts any of the nine catalog chain ids for the caller. Ids 1101 to 1104 (PID #1, #1000, #10000, #19522) are each true for exactly one wallet by construction (CATALOG.md section 3), so for every other member a sponsored request for them is a guaranteed miss that still forwards 0.5 IMD of pool money to the Intake. A member who wants to waste the pool can do so at gas cost: four certain misses plus up to five speculative ones, one per UTC day, 4.5 IMD per wallet lifetime, 4.5 x M IMD for M members. CONCEPT.md section 4 and DISCLOSURE.md state that each accepted request spends its allowance regardless of the oracle outcome and that the pool is an irrevocable donation, and the registry cannot know a trait's truth before asking, so this is recorded as a quantified trust assumption, not a defect; no change proposed.","line":722,"path":"src/Registry.sol","reproduction":"State (test/scratch/Judge.t.sol test_ordinalGriefing, passes on this tree): Sepolia fixture, donor sponsors 10 IMD, Alice is a member and not the PID #1 wallet. Day d: alice.claimSponsored(1101) -> PoolSpent, pool() == 9.5e18; days d+1..d+3: 1102, 1103, 1104 likewise. After four days pool() == 8e18 and the four answers (0 each) end as Missed(reason 8); no donor can recover the 2 IMD. Expected per the design: exactly this.","severity":"info","snippet":"        if (!_isCatalogChain(traitId)) revert NotACatalogChainTrait(traitId);","title":"Any member can spend pool money on catalog ordinals that are true for exactly one wallet (1101..1104), 0.5 IMD per guaranteed miss at gas cost only; a quantified trust assumption for donors, documente"}],"hash":"081a6bb32154af5b7daab370a3590d0dcfcec4f2a4586fb4dad3cc218c092aa3","nodeId":"4db63024-82f4-471b-984c-d73e17b67faf","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds six findings and an 18-row coverage record. The working tree is clean apart from that file.\n\n**What I kept, after reproducing each against the code**\n\n- **Medium, src/Registry.sol:633.** Five specialists reported the same root cause, merged into one finding. `registerSpec` bounds a mainnet block window with the deployment chain's height. On Sepolia the Curator game window and every realistic mainnet window revert with `BadSpec(\"window\")`. I ran all four attached proofs and each fails for exactly that reason. The permissions specialist's proof is attached, since it covers both the T1 and T5 shapes.\n- **Medium, src/Registry.sol:378.** Catalog questions name the deployment chain's Curator as the mainnet contract. I dumped the composed Sepolia bodies and confirmed they ask about events of the Sepolia stand-in \"on Ethereum mainnet\", where that address has no code. The 1301 question also falsely calls the mainnet deploy block that contract's deploy block. The plane's free wording check accepts both questions with no blockers, so requests are paid and end as guaranteed misses. The flow specialist's proof is attached.\n- **Low, src/Registry.sol:561.** The disputed design decision on fixed attester and Intake, reported as the brief asks and not adapted. My scratch test confirmed that after a signer rotation the sponsored path still spends pool money on a guaranteed reason-2 miss.\n- **Info, three items.** The Sepolia Curator and IDMD stand-ins accept setter calls from any EOA, confirmed by live simulation. Sepolia Intake callback gas is 1,000,000 against the 200,000 that INTEGRATION.md states. Pool spending on single-wallet ordinals is a quantified trust assumption, which the docs already describe as the design.\n\n**What I verified beyond the specialists**\n\n- The existing suite passes with 192 tests and 17 skipped fork tests.\n- Live Sepolia reads show the constructor's non-floor checks pass on the launch inputs. The Curator is settled, the Intake quotes 0.5 TestIMD, and the V1 executor has code and reverts on `previewBridge`.\n- Sizes fit: Registry runtime is 24,561 bytes with 15 bytes of headroom, init code 26,610 bytes.\n- The manifest has only the three schema keys, correct argument order, backward references, and 1,922 characters of notes.\n- My own pass over the callback, shared-fact, abandon, pool and ERC-721 paths found nothing the specialists missed. Each entry point has a coverage row with its reason.","treeHash":null,"usage":{"cachedInputTokens":1391205,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":31822,"runtime":"claude","turns":24,"wallClockMs":676130}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"61b4050710026370","findings":[{"citation":"resolved","description":"Boundary x invariant seam (two scales mixed). Every question is about Ethereum mainnet by decision, so Spec.fromBlock/toBlock are mainnet block numbers. Composer.validateSpec (src/Composer.sol:277 and :279) guards them with `s.toBlock >= blockNumber` (T1-T4) and `uint256(s.toBlock) + 7200 > blockNumber` (T5), and Registry.registerSpec passes the deployment chain's `block.number`. On mainnet the two scales coincide. On Sepolia (head 11,926,371 read 2026-10-16 from https://ethereum-sepolia-rpc.publicnode.com) the mainnet windows are far above the local height: the catalog's own window B_DEPLOY..B_END = 25,769,870..25,789,604 and any recent mainnet block fail BadSpec(\"window\"). The newest mainnet toBlock the rehearsal accepts is Sepolia height - 1 (about 11.9M, a January-2021 mainnet block), so the rehearsal cannot exercise community specs about the WhitelistCurator game or any contract deployed after early 2021, while the same registerSpec call succeeds on mainnet. The constructor and the catalog traits are unaffected (their windows are constants, not validated against block.number). ADAPTATION.md records this as a retained rehearsal limitation; it is reported here because it is a concrete failing input on the Sepolia launch and the judge should decide whether the rehearsal is acceptable with community specs effectively disabled. Fix options, each a design decision: pass an evidence-chain height (a constructor argument or an oracle-read anchor) instead of block.number, or accept the limitation and state in the rehearsal plan that registerSpec is only tested with windows ending below Sepolia's height. No fee is lost: validateSpec runs before the 6.4 IMD pull and nextSpecId does not advance.","line":633,"path":"src/Registry.sol","reproduction":"Deploy Composer. Spec s = {kind:1, target:0x0919ba50b206C3F31D516De818b1fBc7dA21653D, item:\"event Transfer(address indexed from, address indexed to, uint256 value)\", arg:\"to\", threshold:1, fromBlock:0x189378e (25,769,870), toBlock:0x18984a4 (25,789,604), name:\"Window\"}. composer.validateSpec(s, 26_203_984) (mainnet head) returns. composer.validateSpec(s, 11_926_371) (Sepolia head) reverts BadSpec(\"window\") because 25,789,604 >= 11,926,371. Same for T5: {kind:5, threshold:20, fromBlock:toBlock:0x189378e, name:\"Nonce\"} passes at 26,203,984 and reverts BadSpec(\"window\") at 11,926,371 (25,769,870 + 7200 > 11,926,371). Boundary: with toBlock = 11,926,370 and fromBlock = toBlock - 7199 the T1 spec validates at 11,926,371; with toBlock = 11,926,371 it reverts. Through the registry: vm.chainId(11155111); vm.roll(11_926_371); registry.registerSpec(s) reverts BadSpec(\"window\"); expected (on the mainnet launch, vm.roll(26_203_984)) the spec registers with id 10001. Verified locally with a scratch test (3 passed).","severity":"low","snippet":"        composer.validateSpec(spec, block.number);","title":"registerSpec compares mainnet block windows against the deployment chain's block.number, so on the Sepolia rehearsal every community spec using the game's mainnet windows is rejected"}],"hash":"407801abe19dd806455178cd08f7567cfe4c7a3ddb6a82d76e733057747e9105","nodeId":"86281a08-9a28-4f64-94aa-f2faf2f392e2","outcome":"completed","summary":"Review complete. The findings file is written and the tree is otherwise unchanged (my scratch tests are removed).\n\n**Result: one low finding, no critical, high or medium defects in the math, boundary or numerical-gap area.**\n\n**Finding 1 (low), `src/Registry.sol:633`.** The spec-registration window guard mixes two block-number scales. Every spec window is a mainnet block range by design, but `registerSpec` validates it against the deployment chain's `block.number`. On mainnet the scales coincide. On Sepolia the local head is about 11.9M while the game's windows sit at 25.77M to 25.79M, so every community spec about the WhitelistCurator game, or about any contract deployed after early 2021, reverts with `BadSpec(\"window\")` in the rehearsal. The same call succeeds on mainnet. No fee is lost, and the catalog traits are unaffected because their windows are constants. ADAPTATION.md already records this as a retained limitation. I reported it anyway because it is a concrete failing input on the Sepolia launch and leaves community specs effectively untested in the rehearsal. Both fix options are design decisions, so the code was left alone.\n\n**What I checked and found sound:**\n- Callback arithmetic: answer length cap of 2112 bytes is exactly 64 addresses, the T3 envelope is validated word by word before the uint16 cast, threshold comparison is exact at the uint256 maximum, expiry and issuedAt edges behave as documented.\n- Shared facts: the hash match forces the caller's list to equal the stored length, so head indexing is in bounds. Position 31 is found and position 32 is rejected for head 32.\n- Pool and counters: the IDMD counter stops at 9, the daily allowance uses a UTC day in uint64, and all three invariant suites pass.\n- Composer: every maximum-size spec that passes validation still composes under the 1,000-character question and 512-character definition caps across all five kinds.\n- Renderer: the step, ring, honey-pair and end-point index math stays within the generated tables at every edge.\n- Live Sepolia reads: the Curator is settled, IDMD and TestIMD have code, the Intake quotes 0.5 IMD, and the V1 executor lacks the preview selector and reverts, so free claims skip the burn and refund as described.\n\n**One observation outside the code:** the Sepolia Intake grants a 1,000,000-gas callback stipend versus 200,000 on mainnet, so a successful rehearsal completion does not prove the mainnet gas budget. The existing cold-gas tests cover that case.\n\nCoverage: all 16 listed entry points have a row, plus three invariant rows. Tests run: 169 unit tests and 5 invariant tests passed, 14 scratch probes passed.","treeHash":null,"usage":{"cachedInputTokens":2465143,"inputTokens":578,"model":"claude-fable-5-1","outputTokens":41658,"runtime":"claude","turns":43,"wallClockMs":631943}},{"artifacts":[],"attempt":1,"bundleHash":"4cc16ea5d80e1592b8ec905f3675d82ea2c59531ec75c17236241599c68205b0","device":"dc7103e773ea194a","findings":[{"description":"The adapt step's fix for the first-round window finding bounds a community spec's mainnet window, on any chain but 1, by `mainnetHeightBound()` = 15,537,395 + (block.timestamp - 1,663,224,191) / 12. That is the number of slots since the merge, so it is never below the real mainnet height, but mainnet misses slots and the bound runs ahead of the real head by about 0.3%. On Sepolia a registrant can therefore register, and pay 0.5 IMD per ask for, a window that ends in blocks mainnet has not mined yet; the panel cannot answer such a question until the blocks exist, and every attempt spends the price (a refusal is `onFailure`, nothing is refunded by design). The T5 rule `toBlock + 7200 <= bound` has the same slack minus 7200. This is the documented design (an upper bound the caller cannot forge; CATALOG.md section 5, ADAPTATION.md) and only affects the rehearsal: on chain 1 the guard is `block.number`, exactly as before, and the mainnet tests pin that. Reported for the record, not as a defect to adapt; a tighter bound would need an evidence-height argument or oracle, which the design decisions exclude.","line":313,"path":"src/Composer.sol","reproduction":"Scratch test on chain 11155111 at timestamp 1,792,143,071 (the public RPC read in ADAPTATION.md gives mainnet head 26,204,211 then): Composer.mainnetHeightBound() returns 26,280,635, 76,424 blocks (about 10.6 days of slots) above the recorded head. registerSpec of a T1 spec with toBlock 26,280,634 and fromBlock 26,273,435 returns id 10001, and a T5 spec on block 26,273,435 returns 10002; both windows lie entirely above mainnet's real head at that time. Expected under the rehearsal's purpose: a window mainnet has not mined is refused as on chain 1. Actual: accepted, fee pulled, questions about unmined blocks can be paid for.","severity":"info","title":"Off mainnet the window guard admits windows up to ~76,000 blocks past the real mainnet head"}],"hash":"461f04a2f71005fa4dbb6959a01dfe4b9a9cd564aa5f6d3b93d11930ecdccc74","nodeId":"777662e6-03a7-4cd3-9add-640c977b9faa","outcome":"completed","summary":"The findings file is excluded by the harness's own git exclude list, so it is read from disk as the brief intends. Everything is in place.\n\n**Outcome:** the revision is complete and the full suite passes with the verifier's seed.\n\n| Check | Result |\n| --- | --- |\n| `forge build` | passes |\n| `forge test` (seeded, offline) | 214 passed, 0 failed, 17 skipped (optional fork tests) across 23 suites |\n| Sepolia invariant campaign | 256 runs, 24,576 handler calls, 0 reverts |\n\n**What this round responded to.** The adapt step fixed the window finding I reported last round, plus a Curator-naming finding, in `src/Composer.sol`. Off mainnet the guard now bounds a window by a slot-clock mainnet height, and every catalog question names the mainnet Curator. My tests had never asserted the old behaviour, so none broke, but the notes were stale and the new code was untested through the real launch.\n\n**What changed in `test/`:**\n- `SepoliaCommunity.t.sol` (new, 9 tests through the exact-address launch fixture): the seven catalog questions carry the plane's recorded question hashes and name the mainnet Curator, never the Sepolia one; the game windows register at Sepolia height 1 and at the maximum height; the guard is exactly the bound at both edges, fuzzed over time and height; refused specs take no id and pull no fee; `validateSpec` ignores its height argument only off mainnet; spec fees land in the pool; a T3 spec is payable only through the shared-fact path.\n- `SepoliaCommunityOracle.t.sol` (new, 4 tests, signed with the test key in the Sepolia domain): a T5 community spec verifies cold under the stipend; a T1 spec misses on threshold, window, question hash and Sepolia evidence and then verifies; a T3 fact applies within its head; mainnet still refuses a window at its own height.\n- `SepoliaInvariant.t.sol`: two new handler operations, community registration (valid windows and windows at or past the bound at random Sepolia heights) and community requests, with ledger checks for dense ids, immutable specs and no unsigned credential, plus a second positive-control sequence.\n- `Sepolia.md`: updated to record the fix and the new coverage.\n\n**Finding reported** in `.imd-findings.json`, severity info: the slot-clock bound runs about 0.3% ahead of mainnet's real head, so on Sepolia a registrant can register and pay to ask about a window up to 76,424 blocks (about ten days) past the real head at the recorded timestamp. It is the documented design and has no effect on chain 1, so I did not assert it as correct in a test. No critical or high defect was found in the revised code.","treeHash":"eeb854250a970ab3689a4bc6ae4780a9dd21d169","usage":{"cachedInputTokens":2354782,"inputTokens":706,"model":"claude-fable-5-1","outputTokens":39237,"runtime":"claude","turns":46,"wallClockMs":953782}},{"artifacts":[],"attempt":1,"bundleHash":"0bef0bff598c6cfc1a156f5c09e987d8223201019ae890c673587a13adbd5918","device":"1731fbfe0c4574fb","findings":[],"hash":"48e27ab566edb4c4e571a2049481aea1e0f782e1dbeb06e570c81fc11df7b110","nodeId":"6e77fd88-1892-45b2-ad8e-bab63d12d86e","outcome":"completed","summary":"The existing launch.json is correct as it stands, and no change was required for this revision. The brief listed no findings to address, so I verified the accepted manifest against the source, the protected checks and the schema rather than rewriting it.\n\nWhat I verified:\n\n- **Contracts and order** match the brief and the accepted source: Renderer and Composer have no constructor, then Registry.\n- **Registry's eight constructor arguments** match the declaration order in `src/Registry.sol:188` (curator, idmd, imd, intake, attester, renderer, composer, burnExecutor), with the two helper references pointing backward to earlier entries and every static address nonzero.\n- **No owner roles** exist in any of the three contracts, so no argument uses $owner. This satisfies the protected owners check that forbids the factory or IMD as an owner.\n- **Schema shape** holds: only kind, contracts and notes, every argument a string, identifiers under 32 characters, and notes at 1,922 characters.\n- **Build and tests** pass under the verifier's fuzz seed. The only skipped tests are the Sepolia fork tests, which need an RPC this machine does not have.\n\n| Check | Result |\n|---|---|\n| forge build | ok |\n| forge test | 182 passed, 0 failed, 17 skipped (fork only) |\n| Working tree | clean, no file changed |\n\nAdapt step: no changes were made to src/ or any other file. The documented design decisions in the brief were left as they are and none of the checks disputed them.","treeHash":"d6a8c27a8da98593f3310219a55a7b02b030a566","usage":{"cachedInputTokens":258225,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":2921,"runtime":"claude","turns":8,"wallClockMs":103794}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e382bd4d2b3e471f","findings":[{"citation":"resolved","description":"Every question is about Ethereum mainnet (QUESTION_CHAIN_ID = 1) and a spec's fromBlock/toBlock are mainnet block numbers, but Composer.validateSpec (src/Composer.sol:276-281) rejects `s.toBlock >= blockNumber` (T1-T4) and `s.toBlock + 7200 > blockNumber` (T5) with `blockNumber` = the deployment chain's block.number. The two chains' heights are unrelated: on 2026-10-16 Sepolia is at block 11,926,383 while mainnet is at 26,204,085 and the Curator game ran at mainnet blocks 25,769,870 (B_DEPLOY) to 25,789,604 (B_END). On the Sepolia launch, registerSpec therefore reverts BadSpec(\"window\") for every spec whose mainnet window ends after block 11.9M, including every spec over the game the catalog itself pins (the catalog traits 701-1301 use the same window and are only accepted because they bypass validateSpec). The rehearsal cannot exercise registerSpec, upgrade for a community id, cardOf/tokenURI with community specs, or requestSharedFact/applySharedFact for a community T3 fact with any realistic input. The asymmetry runs the other way on a chain whose height exceeds mainnet's (Base, ~2s blocks): a mainnet toBlock that is not yet mined passes the guard, the 6.4 IMD spec can never be answered (the window has not happened), and each upgrade for it spends 0.5 IMD on a Missed. On mainnet itself the guard is correct. Documented as `toBlock < block.number` in CATALOG.md section 5 (line 160), which states the intent (window already mined), not the cross-chain reading.","line":633,"path":"src/Registry.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport {Registry} from \"src/Registry.sol\";\nimport {Renderer} from \"src/Renderer.sol\";\nimport {Composer} from \"src/Composer.sol\";\nimport {Spec} from \"src/Types.sol\";\n\ncontract WindowIMD is ERC20 {\n    constructor() ERC20(\"IMD\", \"IMD\") {}\n\n    function mint(address to, uint256 amount) external {\n        _mint(to, amount);\n    }\n}\n\ncontract WindowCurator {\n    function isSettled() external pure returns (bool) {\n        return true;\n    }\n\n    function firstHourOf(address) external pure returns (uint256, bool) {\n        return (0, false);\n    }\n}\n\ncontract WindowIDMD {\n    function balanceOf(address) external pure returns (uint256) {\n        return 0;\n    }\n}\n\ncontract WindowIntake {\n    address public imd;\n\n    constructor(address imd_) {\n        imd = imd_;\n    }\n\n    function priceOf(bytes32, address asset) external view returns (uint256) {\n        return asset == imd ? 0.5 ether : 0;\n    }\n}\n\n/// @notice `registerSpec` bounds a mainnet (chainId 1) window with the deployment chain's `block.number`.\n///         On Sepolia (height 11,926,383 on 2026-10-16) every spec about the Curator game\n///         (mainnet blocks 25,769,870 to 25,789,604) reverts `BadSpec(\"window\")`, so the rehearsal\n///         cannot register the specs the mainnet launch will take.\ncontract SepoliaSpecWindowTest is Test {\n    uint64 internal constant B_DEPLOY = 0x189378e; // 25,769,870 on mainnet\n    uint64 internal constant B_END = 0x18984a4; // 25,789,604 on mainnet\n    address internal constant SEPOLIA_CURATOR = 0x0919ba50b206C3F31D516De818b1fBc7dA21653D;\n\n    Registry internal registry;\n    WindowIMD internal imd;\n    address internal alice = address(0xA11CE);\n\n    function setUp() public {\n        vm.chainId(11155111);\n        vm.roll(11_926_383); // Sepolia height, 2026-10-16\n        vm.warp(1_792_000_000);\n        imd = new WindowIMD();\n        WindowCurator curator = new WindowCurator();\n        WindowIDMD idmd = new WindowIDMD();\n        WindowIntake intake = new WindowIntake(address(imd));\n        Renderer renderer = new Renderer();\n        Composer composer = new Composer();\n        registry = new Registry(\n            address(curator),\n            address(idmd),\n            address(imd),\n            address(intake),\n            address(0x5598Aa9146215Bc13eb26f2c692Ad1461Fd32982),\n            address(renderer),\n            address(composer),\n            address(0)\n        );\n        imd.mint(alice, 100 ether);\n        vm.prank(alice);\n        imd.approve(address(registry), type(uint256).max);\n    }\n\n    function gameSpec() internal pure returns (Spec memory s) {\n        s.kind = 1;\n        s.target = SEPOLIA_CURATOR;\n        s.item =\n            \"event Deposited(address indexed contributor, uint256 indexed hour, uint256 amount, uint256 creditedDelta, uint256 weightAdded, uint256 newWeight, uint256 txCount, uint256 hourTotal, uint256 earlyBps)\";\n        s.arg = \"contributor\";\n        s.threshold = 2;\n        s.fromBlock = B_DEPLOY;\n        s.toBlock = B_END;\n        s.name = \"Two deposits\";\n    }\n\n    /// @dev The whole Curator game window is mined on mainnet (height 26,204,085), so a T1 spec over it is a\n    ///      valid community spec and the mainnet launch accepts it. The Sepolia rehearsal must accept it too.\n    function test_sepoliaRehearsalRegistersAMainnetGameWindowSpec() public {\n        vm.prank(alice);\n        uint16 id = registry.registerSpec(gameSpec());\n        assertEq(id, 10001);\n        assertEq(registry.specOf(id).toBlock, B_END);\n    }\n\n    /// @dev The catalog's own T5 trait (1301) pins the Curator deploy block; a community T5 spec on the same\n    ///      block is the shape TEMPLATES.md documents, and it is likewise refused on Sepolia.\n    function test_sepoliaRehearsalRegistersAMainnetNonceSpec() public {\n        Spec memory s;\n        s.kind = 5;\n        s.threshold = 20;\n        s.fromBlock = B_DEPLOY;\n        s.toBlock = B_DEPLOY;\n        s.name = \"Pretrained twin\";\n        vm.prank(alice);\n        uint16 id = registry.registerSpec(s);\n        assertEq(id, 10001);\n    }\n}","reproduction":"State: Sepolia (chainId 11155111), block.number 11_926_383, registry deployed as the manifest describes. Call registerSpec({kind:1, target:0x0919ba50b206C3F31D516De818b1fBc7dA21653D, item:\"event Deposited(...)\" (the Composer's DEPOSITED text), arg:\"contributor\", threshold:2, fromBlock:0x189378e, toBlock:0x18984a4, name:\"Two deposits\"}) with 6.4 TestIMD approved. Expected: traitId 10001 is returned and the spec is stored (this exact call succeeds on mainnet at block 26,204,085). Actual: revert BadSpec(\"window\") because 25,789,604 >= 11,926,383. Same for a T5 spec {kind:5, threshold:20, fromBlock:toBlock:0x189378e, name:\"Pretrained twin\"}: 25,769,870 + 7200 > 11,926,383 reverts. The attached test (test/scratch/SepoliaSpecWindow.t.sol) deploys the registry at chainId 11155111 / block 11,926,383 with code-bearing stand-ins and fails on both calls with BadSpec(\"window\").","severity":"medium","snippet":"        composer.validateSpec(spec, block.number);","title":"registerSpec bounds a mainnet (chainId 1) window with the deployment chain's block.number; on Sepolia every spec about the Curator game is refused"},{"citation":"resolved","description":"The registry's only gate on pool money (claimSponsored, upgradeSponsored) is curator.firstHourOf(msg.sender).joined and idmd.ownerOf(idmdTokenId). On Sepolia the manifest points these at 0x0919ba50b206c3f31d516de818b1fbc7da21653d and 0x2c3013c90a1bb65573aae9a7c64fafb82697e4e4. Their runtime code dispatches the selectors of the repository's own test mocks (MockCurator.set 0x81eefb5a, MockIDMD.setOwner 0x7fd39247, MockIDMD.setBalance 0xe30443bc), neither exposes owner(), and an eth_call of set(...) and setOwner(...) from an arbitrary EOA (0x1111...1111) succeeds. Membership and IDMD ownership are therefore self-granted on the rehearsal chain: any wallet can spend the Sepolia pool (TestIMD sponsors, mint fees, spec fees) at 0.5 TestIMD per request, one per day per wallet up to nine, and can mark itself for the direct-read traits 101-601. No real value is at stake (TestIMD has an open mint) and the mainnet constructor arguments point at the settled WhitelistCurator and the real IDMD, so this is recorded as a trust gap of the rehearsal, not a code defect: the Sepolia run does not rehearse the membership gate, and any Sepolia pool balance should be treated as spendable by anyone.","line":714,"path":"src/Registry.sol","reproduction":"Sepolia, any EOA A with no Curator history. 1) A calls 0x0919ba50b206c3f31d516de818b1fbc7da21653d.set(A, 0, true, 10, 1e21, 100000) (simulated from 0x1111111111111111111111111111111111111111: returns 0x, no revert). 2) A calls Registry.claimSponsored(801) with pool() >= 0.5e18. Expected under the mainnet trust model: revert NotMember(A). Actual on Sepolia: the request is paid from the pool and PoolSpent(A, 801, id) is emitted; hasTrait(A, 101/202/303/404/503) all read true. Likewise setOwner(7, A) on 0x2c3013c90a1bb65573aae9a7c64fafb82697e4e4 then upgradeSponsored(7, [901]) passes the NotIdmdHolder check.","severity":"info","snippet":"        (, bool joined) = curator.firstHourOf(msg.sender);\n        if (!joined) revert NotMember(msg.sender);","title":"Sepolia stand-ins for Curator and IDMD have permissionless setters, so on this launch anyone can make themselves a member or an IDMD holder and draw sponsored pool requests"},{"citation":"resolved","description":"The assignment lists this as a design decision and asks that disputes be reported, not adapted. The oracle-consumer reference (the protocol's own guidance) says the intake, action id, asset/price and signer must each be constructor input AND owner-settable, never constants, and describes the signer's rotation story as pointing it at an OracleSignerRegistry that answers ERC-1271, which `SignatureChecker` handles for a signer with code. The registry (a) stores all of these with no setter and no owner, and (b) verifies with ECDSA.tryRecover against a bare address, so even a signer rotation to a contract that the reference consumer would accept is a reason-2 miss here. INTEGRATION.md lines 60-70 acknowledge the consequences (setPrice to 0 reverts every upgrade; a rotated attester misses every attestation). What the documentation does not state is that the sponsored path keeps spending: `_fromPool` does not know the answers can no longer verify, so after a key rotation every claimSponsored/upgradeSponsored still pulls 0.5 IMD of pool money per request for an answer that is guaranteed to Miss(2), until the pool is empty; mint fees and sponsor deposits already in the registry can never be used for anything else, and no party can recover them. Severity is kept low because the trigger is the oracle operator's own action and the brief accepts it; it is reported so the judge can weigh the brief against the protocol reference.","line":561,"path":"src/Registry.sol","reproduction":"State: registry deployed; pool() = 100 IMD; the plane rotates its attestation key from 0x5598aa9146215bc13eb26f2c692ad1461fd32982 to K2 (or to an OracleSignerRegistry contract). Member M calls claimSponsored(801): the Intake pulls 0.5 IMD from the registry (pool() = 99.5). The writer completes with an attestation signed by K2: onResult -> _check returns 2 (signer != attester) -> Missed(id, 801, 2); poolUsed[M][801] and lastPoolDay[M] stay consumed. Expected per the oracle-consumer reference: an owner-settable signer (or ERC-1271 acceptance) lets the deployment keep working. Actual: every later request from pool or claimant funds is paid for and can never verify; the remaining pool is unrecoverable. Second trigger: Intake owner calls setPrice(bytes32(\"oracle.request@oracle-1\"), IMD, 0): _price returns 0, requestWithFailure reverts ActionNotSold, so upgrade/requestSharedFact/claimSponsored/upgradeSponsored revert for ever and the pool balance is frozen.","severity":"low","snippet":"        if (err != ECDSA.RecoverError.NoError || signer == address(0) || signer != attester) return 2;","title":"Disputed decision: attester, Intake, action and token are fixed with no setter, and the attester is checked by ECDSA recovery only; a signer rotation or an Intake price/action change strands the pool "}],"hash":"67eb7ad12810f066150e89162139ec8415e0c7571fc2b083daf770be0eec9608","nodeId":"acad354d-9549-4663-88a3-f6fe4c1494d9","outcome":"completed","summary":"Review complete. The findings file is written and verified against the tree, and no source file was changed.\n\n**Outcome.** The permission model of `src/Registry.sol` holds against the Access Control, Trust Gap and Asymmetry checklists. The intake-only callbacks, the pending-id and question-hash binding, the claimant-only abandon rule, the paired request/fulfil and upgrade/requestSharedFact surfaces, and the no-ETH invariant all traced clean. The Sepolia constructor inputs were verified live: all five addresses have code, the Curator reports settled, the Intake prices the action at 0.5 TestIMD, and the V1 executor's preview reverts so the burn rule skips with code 1. The attester is an EOA matching the protocol reference.\n\n**Findings written to .imd-findings.json:**\n\n- **Medium, with a failing Foundry proof.** The spec window guard reads the deployment chain's block height for a window that lives on mainnet. Sepolia is at block 11.9M while the Curator game sits at mainnet 25.7M, so `registerSpec` reverts with `BadSpec(\"window\")` for every realistic spec on this launch. The rehearsal cannot exercise community specs at all. On a chain taller than mainnet the guard inverts and accepts unmined windows. Mainnet itself is unaffected. The proof in test/scratch/SepoliaSpecWindow.t.sol fails on the current code with that revert.\n- **Info.** The Sepolia Curator and IDMD stand-ins expose open setters, confirmed by simulating them from an arbitrary address. Anyone can self-grant membership or an IDMD token and draw from the Sepolia pool. TestIMD is free, so no value is at stake, but the membership gate is not rehearsed.\n- **Low, reported as a disputed design decision.** The fixed attester, Intake, action and token contradict the oracle-consumer reference, which requires each to be owner-settable, and the ECDSA-only check rejects the reference's ERC-1271 rotation path. A key rotation leaves the sponsored path spending pool IMD on answers that can never verify, with no recovery.\n\n**Coverage.** All 16 listed entry points have a row, plus two invariant rows. Thirteen entry points hold, `registerSpec` carries finding 1, and the two sponsored claim paths carry finding 2 for the Sepolia trust gap only.\n\n**Not changed.** Nothing in `src/` was adapted; no check failed in the existing suite, which passed 169 tests outside the fork and invariant sets. The adapt step made no changes.","treeHash":null,"usage":{"cachedInputTokens":2024146,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":43606,"runtime":"claude","turns":35,"wallClockMs":727227}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ee9fbaf2480d1034","findings":[{"citation":"resolved","description":"Every question is about Ethereum mainnet by design (QUESTION_CHAIN_ID = 1, body chainId 1), so a spec's fromBlock/toBlock are mainnet block numbers. Composer.validateSpec (src/Composer.sol:277 and :279) enforces `s.toBlock >= blockNumber -> BadSpec(\"window\")` (chain kinds) and `toBlock + 7200 > blockNumber` (T5) to make sure the window is already confirmed, but Registry passes the consumer chain's `block.number`. On the Sepolia rehearsal the consumer chain is at block 11,926,368 (publicnode, 2026-10-16) while mainnet is at 26,204,086. Every mainnet window ending after Sepolia's height, including the catalog's own window 0x189378e..0x18984a4 (25,786,254..25,789,604) and any window on the Curator, is rejected, so registerSpec is unusable for any realistic community spec in the rehearsal, which is what the launch is for. The same mismatch runs the other way on a chain whose height exceeds mainnet's: a not-yet-confirmed mainnet window would pass the check and the oracle would refuse the request with the price spent, defeating the guard's purpose. First-principles assumption broken: 'block.number is the height of the chain the window refers to' holds only when the consumer chain is chain 1. Minimal fix that keeps the design: apply the height comparison only when block.chainid == 1 (or compare against a mainnet height the caller cannot forge), keeping the 7200-block length and ordering checks everywhere.","line":633,"path":"src/Registry.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {Registry} from \"src/Registry.sol\";\nimport {Renderer} from \"src/Renderer.sol\";\nimport {Composer} from \"src/Composer.sol\";\nimport {Spec} from \"src/Types.sol\";\n\n/// Minimal coded dependencies so the constructor runs its non-floor checks.\ncontract SettledCurator {\n    function isSettled() external pure returns (bool) {\n        return true;\n    }\n\n    function firstHourOf(address) external pure returns (uint256, bool) {\n        return (0, false);\n    }\n\n    function txCountOf(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function contributedBy(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function pointsOf(address) external pure returns (uint256) {\n        return 0;\n    }\n}\n\ncontract CodedIdmd {\n    function balanceOf(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function ownerOf(uint256) external pure returns (address) {\n        return address(0);\n    }\n}\n\ncontract TinyToken {\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    function mint(address to, uint256 amount) external {\n        balanceOf[to] += amount;\n    }\n\n    function approve(address spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][spender] = amount;\n        return true;\n    }\n\n    function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n        require(allowance[from][msg.sender] >= amount, \"allowance\");\n        require(balanceOf[from] >= amount, \"balance\");\n        allowance[from][msg.sender] -= amount;\n        balanceOf[from] -= amount;\n        balanceOf[to] += amount;\n        return true;\n    }\n}\n\ncontract PricedIntake {\n    function priceOf(bytes32, address) external pure returns (uint256) {\n        return 0.5 ether;\n    }\n}\n\n/// @notice Sepolia rehearsal: `registerSpec` validates a mainnet block window against the deployment chain's\n///         `block.number`. Sepolia (11155111) is at block ~11.9M while the questions are about Ethereum mainnet\n///         (~26.2M), so the catalog's own confirmed mainnet window (0x189378e..0x18984a4) is refused with\n///         `BadSpec(\"window\")`. Fails on the current code; passes once the height check is tied to the\n///         question chain (chain 1) instead of the consumer chain.\ncontract WindowOnSepoliaTest is Test {\n    uint64 internal constant B_DEPLOY = 0x189378e; // 25,786,254 on mainnet\n    uint64 internal constant B_END = 0x18984a4; // 25,789,604 on mainnet\n    uint256 internal constant SEPOLIA_HEIGHT = 11_926_368; // read 2026-10-16\n\n    Registry internal registry;\n    TinyToken internal imd;\n    SettledCurator internal curator;\n\n    function setUp() public {\n        vm.chainId(11155111);\n        vm.roll(SEPOLIA_HEIGHT);\n        vm.warp(1_791_700_000);\n        curator = new SettledCurator();\n        CodedIdmd idmd = new CodedIdmd();\n        imd = new TinyToken();\n        PricedIntake intake = new PricedIntake();\n        Renderer renderer = new Renderer();\n        Composer composer = new Composer();\n        registry = new Registry(\n            address(curator),\n            address(idmd),\n            address(imd),\n            address(intake),\n            address(0x5598Aa9146215Bc13eb26f2c692Ad1461Fd32982),\n            address(renderer),\n            address(composer),\n            address(0)\n        );\n    }\n\n    function test_sepoliaRegistryAcceptsAConfirmedMainnetWindow() public {\n        Spec memory s;\n        s.kind = 1;\n        s.target = 0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91; // the mainnet Curator the question is about\n        s.item = registry.composer().DEPOSITED();\n        s.arg = \"contributor\";\n        s.threshold = 1;\n        s.fromBlock = B_DEPLOY;\n        s.toBlock = B_END; // 3,351 blocks below mainnet's head, confirmed on chain 1\n        s.name = \"Catalog window\";\n\n        address alice = address(0xA11CE);\n        imd.mint(alice, registry.SPEC_FEE());\n        vm.prank(alice);\n        imd.approve(address(registry), type(uint256).max);\n\n        // Expected: the spec registers (the window is confirmed on the question's chain, Ethereum mainnet).\n        // Actual on the current code: revert BadSpec(\"window\") because toBlock (25,789,604) >= Sepolia height.\n        vm.prank(alice);\n        uint16 id = registry.registerSpec(s);\n        assertEq(id, 10001, \"first community spec id\");\n        assertEq(registry.specOf(id).toBlock, B_END, \"window stored\");\n    }\n}","reproduction":"vm.chainId(11155111); vm.roll(11_926_368) (Sepolia's real height). Deploy Renderer, Composer, Registry with coded mocks (settled Curator, IDMD, token, Intake quoting 0.5e18). Alice holds and approves 6.4 IMD and calls registerSpec({kind:1, target:0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91, item:DEPOSITED, arg:'contributor', threshold:1, fromBlock:0x189378e, toBlock:0x18984a4, name:'Catalog window'}). Expected: id 10001 is registered (the window is 3,351 blocks below mainnet's head and 3,351 blocks long). Actual: revert BadSpec(\"window\") because toBlock 25,789,604 >= Sepolia block.number 11,926,368. Proof test test/scratch/WindowOnSepolia.t.sol fails with exactly that revert.","severity":"medium","snippet":"        composer.validateSpec(spec, block.number);","title":"registerSpec validates a mainnet block window against the deployment chain's block.number, so on Sepolia every realistic mainnet window is refused"},{"citation":"resolved","description":"specOf/composeBody build every catalog oracle question from Composer.catalogSpec(traitId, address(curator)), which sets `s.target = curator` (src/Composer.sol:72); the question text then reads 'count the `event Deposited(...)` events emitted by the contract <curator> ... on Ethereum mainnet'. On the Sepolia rehearsal `curator` is the Sepolia stand-in 0x0919ba50b206c3f31d516de818b1fbc7da21653d. eth_getCode for that address on chain 1 returns 0x (publicnode, 2026-10-16): it has never emitted a mainnet event. Consequences for every Sepolia claimant and pool request: traits 701, 801, 901, 1001, 1101..1105 are honest answers of 0, which `_decodeAndJudge` turns into Missed(reason 8) after the 0.5 IMD is spent and the pending pair is cleared; the shared fact 1201 asks for the top 32 keys of a contract with no logs, so the panel cannot agree (status 2, NoVerdict) or returns an empty list that `_decodeAndJudge` rejects with reason 9; trait 1301 asserts in its question that block 0x189378e is 'the block in which the WhitelistCurator contract 0x0919ba50... was deployed', which is false on mainnet. The paid and sponsored entry points (upgrade, claimSponsored, upgradeSponsored, requestSharedFact) therefore spend the price and can never reach `_mark`/SharedFactStored for any catalog id on Sepolia, so the rehearsal never exercises the onResult success path, the card's oracle metadata, or applySharedFact. Not covered by the stated design decisions: they fix the question chain to mainnet and the consumer chain to the deployment chain, but say nothing about which contract a mainnet question names. Minimal fix keeping the design: the mainnet question must name the mainnet Curator (0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91) as `target` regardless of the consumer chain, while direct-read traits keep reading the deployment chain's Curator; alternatively document that catalog oracle traits are dead on Sepolia and the rehearsal only covers community specs (which finding 1 currently also blocks). The normative template agrees: TEMPLATES.md line 105 writes the 1301 parenthesis as '... the block in which the WhitelistCurator contract 0xcb0b0531e86a9ac36fa865ca8e3dbccf047fda91 was deployed)', a fixed mainnet address, yet the Sepolia body composed by Composer.question() substitutes Strings.toHexString(curator) = 0x0919ba50..., so the Sepolia bodies for 1301 (and the target of every T1/T3 catalog body) deviate from the documented templates.","line":378,"path":"src/Registry.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {Registry} from \"src/Registry.sol\";\nimport {Renderer} from \"src/Renderer.sol\";\nimport {Composer} from \"src/Composer.sol\";\n\ncontract SettledCurator {\n    function isSettled() external pure returns (bool) {\n        return true;\n    }\n\n    function firstHourOf(address) external pure returns (uint256, bool) {\n        return (0, false);\n    }\n\n    function txCountOf(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function contributedBy(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function pointsOf(address) external pure returns (uint256) {\n        return 0;\n    }\n}\n\ncontract CodedIdmd {\n    function balanceOf(address) external pure returns (uint256) {\n        return 0;\n    }\n\n    function ownerOf(uint256) external pure returns (address) {\n        return address(0);\n    }\n}\n\ncontract CodedToken {\n    function balanceOf(address) external pure returns (uint256) {\n        return 0;\n    }\n}\n\ncontract PricedIntake {\n    function priceOf(bytes32, address) external pure returns (uint256) {\n        return 0.5 ether;\n    }\n}\n\n/// @notice Sepolia rehearsal: every catalog oracle question is \"about Ethereum mainnet\" but names the\n///         deployment chain's Curator (`catalogSpec(traitId, address(curator))`) as the mainnet contract whose\n///         events are counted. The Sepolia Curator 0x0919ba50... has no code on mainnet (eth_getCode on chain 1\n///         returns 0x, 2026-10-16), so on Sepolia every catalog chain trait is a guaranteed count of 0 and no\n///         claimant can ever verify 701..1105, nor can 1201 be stored. Fails on the current code; passes once\n///         the mainnet question names the mainnet Curator regardless of the consumer chain.\ncontract QuestionTargetOnSepoliaTest is Test {\n    address internal constant SEPOLIA_CURATOR = 0x0919ba50b206C3F31D516De818b1fBc7dA21653D;\n    address internal constant MAINNET_CURATOR = 0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91;\n\n    Registry internal registry;\n\n    function setUp() public {\n        vm.chainId(11155111);\n        vm.roll(11_926_368);\n        vm.warp(1_791_700_000);\n        SettledCurator impl = new SettledCurator();\n        vm.etch(SEPOLIA_CURATOR, address(impl).code);\n        CodedIdmd idmd = new CodedIdmd();\n        CodedToken imd = new CodedToken();\n        PricedIntake intake = new PricedIntake();\n        Renderer renderer = new Renderer();\n        Composer composer = new Composer();\n        registry = new Registry(\n            SEPOLIA_CURATOR,\n            address(idmd),\n            address(imd),\n            address(intake),\n            address(0x5598Aa9146215Bc13eb26f2c692Ad1461Fd32982),\n            address(renderer),\n            address(composer),\n            address(0)\n        );\n    }\n\n    function _contains(bytes memory haystack, bytes memory needle) internal pure returns (bool) {\n        if (needle.length > haystack.length) return false;\n        for (uint256 i; i + needle.length <= haystack.length; ++i) {\n            bool ok = true;\n            for (uint256 j; j < needle.length; ++j) {\n                if (haystack[i + j] != needle[j]) {\n                    ok = false;\n                    break;\n                }\n            }\n            if (ok) return true;\n        }\n        return false;\n    }\n\n    function test_catalogQuestionOnSepoliaNamesAMainnetContract() public view {\n        (bytes memory body,) = registry.composeBody(701, address(0xA11CE));\n        // The question is explicitly about Ethereum mainnet...\n        assertTrue(_contains(body, bytes(\"on Ethereum mainnet\")), \"question chain is mainnet\");\n        assertTrue(_contains(body, bytes('\"chainId\": 1,')), \"body chainId is 1\");\n        // ...so the contract it names must exist on mainnet: the mainnet Curator, not the Sepolia stub,\n        // which has no code on chain 1 and therefore never emitted a Deposited event there.\n        assertFalse(\n            _contains(body, bytes(\"0x0919ba50b206c3f31d516de818b1fbc7da21653d\")),\n            \"mainnet question names the Sepolia Curator, a contract with no code on mainnet\"\n        );\n        assertTrue(\n            _contains(body, bytes(\"0xcb0b0531e86a9ac36fa865ca8e3dbccf047fda91\")),\n            \"mainnet question should name the mainnet Curator\"\n        );\n        // The stored evidence target agrees with the question.\n        assertEq(registry.specOf(701).target, MAINNET_CURATOR, \"catalog spec target\");\n    }\n}","reproduction":"vm.chainId(11155111); etch a settled Curator mock at 0x0919ba50b206C3F31D516De818b1fBc7dA21653D; deploy Registry with it as `curator`. Call registry.composeBody(701, 0xA11CE). Actual body (excerpt): '\"chainId\": 1, ... count the `event Deposited(...)` events emitted by the contract 0x0919ba50b206c3f31d516de818b1fbc7da21653d whose indexed contributor argument equals 0x...a11ce ... on Ethereum mainnet'. registry.specOf(701).target == 0x0919ba50.... Expected for a mainnet question: the mainnet Curator 0xcb0b0531e86a9ac36fa865ca8e3dbccf047fda91. Live check: `cast code 0x0919ba50b206c3f31d516de818b1fbc7da21653d --rpc-url https://ethereum-rpc.publicnode.com` returns 0x. Proof test test/scratch/QuestionTargetOnSepolia.t.sol fails on the assertion that the body does not name the Sepolia Curator.","severity":"medium","snippet":"        return composer.catalogSpec(traitId, address(curator));","title":"Catalog oracle questions name the deployment chain's Curator as the mainnet contract, so on Sepolia no catalog trait can ever verify and Top Weights can never be stored"},{"citation":"resolved","description":"Read on 2026-10-16 over https://ethereum-sepolia-rpc.publicnode.com: Intake 0xa43e6f75ee006411f79ac1c84120606c2330de82 on chain 11155111 returns callbackGas() = 1000000, priceOf(ACTION, 0x44a1cd38...) = 500000000000000000, writer 0x3d3C0Df7C1a17d384545e9D7C8228897bD9625CB, signer 0x169B08ea234d7819EeAbb246E34d8Cd81E32279F. The registry's onResult was sized for the 200,000-gas mainnet stipend (measured 133k-170k). A rehearsal on Sepolia therefore cannot detect a callback that would run out of gas on mainnet; the stipend is owner-settable on the Intake and the registry has no setter, which the documentation already records as an accepted way the registry can stop working. No code change; the Sepolia row of the documentation is stale and the rehearsal's gas evidence should come from the unit tests' 200,000-gas mock, not from Sepolia deliveries.","line":30,"path":"INTEGRATION.md","reproduction":"cast call 0xa43e6f75ee006411f79ac1c84120606c2330de82 'callbackGas()(uint64)' --rpc-url https://ethereum-sepolia-rpc.publicnode.com -> 1000000. INTEGRATION.md line 30 states 200,000 for both addresses.","severity":"info","snippet":"addresses return `priceOf` 0.5 IMD, `callbackGas` 200,000 and the same writer (read 2026-10-12 00:30 UTC).","title":"Sepolia Intake v2 gives callbacks 1,000,000 gas, not the 200,000 the documentation and the mainnet budget assume"}],"hash":"6d6de780d1ed8da7dbfbb19ee28d5fb475492fc8e216e8cfefa012fbb5be9e2c","nodeId":"eea47b54-d0df-4052-8df5-0cf64411fdbc","outcome":"completed","summary":"The review is complete. `.imd-findings.json` holds three findings and a 19-row coverage record, and no file under `src/`, `script/` or the configuration was changed. The two proof tests live in `test/scratch/`, which git excludes.\n\n**What I found**\n\n1. **Medium: `registerSpec` checks a mainnet window against Sepolia's block height.** Every question is about Ethereum mainnet, so a spec's window is in mainnet block numbers, but `Registry.registerSpec` passes the deployment chain's `block.number` to the window validator. Sepolia is at block 11.9M while mainnet is at 26.2M, so the catalog's own window and any window on the Curator are refused with `BadSpec(\"window\")`. The rehearsal cannot register any realistic community spec. Proof test `test/scratch/WindowOnSepolia.t.sol` fails on the current code with that revert.\n\n2. **Medium: catalog oracle questions on Sepolia name a contract that does not exist on mainnet.** `specOf` builds every catalog question from `catalogSpec(traitId, address(curator))`, so on Sepolia the question asks for events \"emitted by the contract 0x0919ba50… on Ethereum mainnet\". I confirmed with a live mainnet read that this address has no code there. Every catalog chain trait is therefore an honest answer of 0 and a `Missed(8)`, Top Weights can never be stored, and the 1301 question deviates from the fixed mainnet address TEMPLATES.md pins. The rehearsal never exercises the success path of `onResult`. Proof test `test/scratch/QuestionTargetOnSepolia.t.sol` fails on the current code.\n\n3. **Info: the Sepolia Intake gives callbacks 1,000,000 gas**, not the 200,000 the documentation states, so Sepolia deliveries cannot stand in for mainnet gas evidence.\n\n**What held**\n\nLive reads against Sepolia show the constructor will pass on the brief's arguments: all four dependencies have code, the Curator is settled and exposes every view the registry reads, the Intake quotes 0.5 IMD for the test token and has `requestWithFailure`, the executor has code and its `previewBridge()` reverts as the brief expects. The callback ordering, pending-pair lifecycle, abandon rules, pool accounting, shared-fact hashing, refund path and ERC-721 surface all traced as intended. None of the stated design decisions is disputed.\n\n**Not reached**\n\nThe Renderer's image bytes were not re-verified against the goldens, and the full test suite was not rerun in this budget.","treeHash":null,"usage":{"cachedInputTokens":1837481,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":46223,"runtime":"claude","turns":44,"wallClockMs":708939}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e67cc6ec4009b226","findings":[{"citation":"resolved","description":"Flow gap (execution x first principles). By decision every question is about Ethereum mainnet (chainId 1 is hard-wired into the body and the canonical question document), but `Registry.registerSpec` validates the spec's block window with `composer.validateSpec(spec, block.number)` (src/Registry.sol:633), i.e. against the DEPLOYMENT chain's height. The check `s.toBlock >= blockNumber` (and `toBlock + 7200 > blockNumber` for T5 at line 277) exists to keep windows in the question chain's past. On mainnet both heights coincide and the rule is right. On the Sepolia rehearsal the head is about 11,926,371 (read over RPC on 2026-10-16) while the catalog windows and any realistic mainnet window are above 25,800,000, so every spec whose window is where the Curator game actually happened is refused as 'in the future'. The highest mainnet toBlock a Sepolia spec can carry is 11,926,370 (mainnet, February 2021). Consequences for the rehearsal: `registerSpec` cannot be exercised with the data the mainnet launch will see, and the T5 nonce template (fromBlock == toBlock, must be >= 7200 blocks old) can only be rehearsed against mainnet blocks from 2021. No funds are lost and the mainnet launch is unaffected, which is why this is low; it is reported because the Sepolia deployment is explicitly a rehearsal of mainnet and this entry point cannot be rehearsed as specified. A fix would carry the question chain's height explicitly (for example, a conservative `questionChainHeightFloor` constant, or validating the window against a caller-supplied mainnet height anchored by a known block), but any fix touches the frozen spec rules in CATALOG.md section 5 and so needs a scope decision; the code was left unchanged.","line":279,"path":"src/Composer.sol","reproduction":"State: chainId 11155111, block.number 11,926,371 (Sepolia head), Registry deployed per the launch order. Call registerSpec with kind 1, target 0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91, item 'event Deposited(address indexed contributor, uint256 amount, uint256 hour)', arg 'contributor', threshold 1, fromBlock 0x189378e, toBlock 0x18984a4 (the catalog's W_LIFE window), name 'Catalog window spec'. Expected (rehearsal of mainnet): a SpecRegistered event and id 10001, exactly as the same call at mainnet height 26,200,000 produces (composer.validateSpec(s, 26_200_000) passes). Actual: revert BadSpec(\"window\") because 0x18984a4 (25,920,676) >= 11,926,371. The same spec with fromBlock 11,919,171 and toBlock 11,926,370 is accepted, i.e. only windows ending in mainnet's February 2021 can be registered on Sepolia. Scratch test test/scratch/SepoliaSpecWindow.t.sol (2 tests, pass) pins both behaviours.","severity":"low","snippet":"            if (s.toBlock < s.fromBlock || uint256(s.toBlock) - s.fromBlock + 1 < 7200 || s.toBlock >= blockNumber) {\n                revert BadSpec(\"window\");\n            }","title":"Spec window validity is judged against the deployment chain's block height, so on Sepolia no community spec can name a current mainnet window (registerSpec with the catalog's own window reverts)"},{"citation":"resolved","description":"Economic Security guide: 'find the cheapest griefing vector'. `_fromPool` accepts any of the nine catalog chain ids for the caller. Ids 1101 to 1104 (PID #1, #1000, #10000, #19522) are each true for exactly one wallet by construction (CATALOG.md section 3: 'each id is a different wallet'), so for every other member a sponsored request for them is a guaranteed miss that still forwards 0.5 IMD of pool money to the Intake's payTo. A member who wants to waste the pool can do so at gas cost only: 4 certain misses plus up to 5 more speculative ones, 0.5 IMD each, one per UTC day, 4.5 IMD per wallet lifetime; with M members the pool can lose up to 4.5 x M IMD this way. This is the documented design (CONCEPT.md section 4 and DISCLOSURE.md: 'Each accepted request spends its allowance regardless of the oracle outcome'; the pool is an irrevocable donation) and the registry cannot know a trait's truth before asking, so this is recorded as a quantified trust assumption for donors rather than a defect, and no change is proposed.","line":722,"path":"src/Registry.sol","reproduction":"State: mainnet-shaped deployment, pool() = 10 IMD, Alice is a Curator member (firstHourOf(alice).hasJoined == true) and is not the PID #1 wallet. Day d: alice.claimSponsored(1101) -> PoolSpent, pool() = 9.5 IMD; the oracle answers 0 -> Missed(reason 8); nothing stored. Days d+1..d+3: 1102, 1103, 1104 likewise. After four days the pool is 8 IMD, Alice has gained nothing, no donor can recover the 2 IMD. Expected per the design: exactly this; the note quantifies the exposure (0.5 IMD per member per day, 4.5 IMD per member lifetime).","severity":"info","snippet":"        if (!_isCatalogChain(traitId)) revert NotACatalogChainTrait(traitId);\n        if (poolUsed[msg.sender][traitId]) revert PoolAlreadyUsed(msg.sender, traitId);","title":"Pool money can be spent by any member on catalog traits that are provably false for them (4 of the 9 eligible ids are single-wallet ordinals), 0.5 IMD per request with no economic cost to the member"}],"hash":"75211fa3d4b9e2589e7f6fd482d7feea6f381eeefc961151e761eb3367b65559","nodeId":"549f3620-70d1-4ea3-a98e-133a227b124f","outcome":"completed","summary":"Review complete. The findings file is written and validated, no source files were changed, and the scratch test lives only under `test/scratch/`.\n\n**Outcome**\n\nThe economics of the Sworn registry hold as designed. I traced every one of the 16 state-changing entry points for the Economic Security, Invariant and Flow Gap failure modes, confirmed the live Sepolia constructor inputs over RPC, and ran the full local suite (174 tests pass). Two findings are recorded in `.imd-findings.json`, neither critical or high, so no proof file was attached.\n\n**Finding 1, low.** Spec windows are validated against the deployment chain's block height, at `src/Composer.sol:279`, while every question is fixed to mainnet. Sepolia's head is about 11.9M blocks and the catalog windows sit above 25.8M, so on Sepolia `registerSpec` with any current mainnet window reverts with BadSpec(\"window\"). The highest window a Sepolia spec can carry corresponds to mainnet February 2021. Mainnet is unaffected; the rehearsal simply cannot exercise spec registration as specified. A scratch test pins both the Sepolia revert and the mainnet acceptance. Fixing it touches the frozen spec rules, so I left the code alone and flagged it for a scope decision.\n\n**Finding 2, info.** Any Curator member can spend pool money on catalog traits that are provably false for them. Four of the nine eligible ids are single-wallet ordinals, so a member can waste 0.5 IMD per day and 4.5 IMD lifetime at gas cost only. This is the documented design, recorded as a quantified donor trust assumption, not a defect.\n\n**Verified on Sepolia (live reads).** The Curator reports settled, the Intake sells the action in TestIMD at 0.5, the IDMD and executor have code, and the executor's preview reverts, giving the BurnSkipped(1) path the brief describes. Two rehearsal notes went into the coverage rows: the Sepolia IDMD has no minted tokens, so `upgradeSponsored` cannot be exercised there until one exists, and the Sepolia Intake grants a 1,000,000 gas callback stipend rather than 200,000, which is harmless.\n\n**Invariants checked and holding.** Registry IMD balance changes only through mint, spec, sponsor inflows and pool outflows. Paid paths pull exactly what they forward. The registry keeps no ETH on any burn or refund branch. No third party can lock another wallet's pending pair.\n\n**Not reached.** Fork tests against the mainnet BurnExecutor V2 were not run, since no archive RPC is configured here, and Renderer internals are outside this area.","treeHash":null,"usage":{"cachedInputTokens":1509109,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":33613,"runtime":"claude","turns":40,"wallClockMs":575765}},{"artifacts":[],"attempt":1,"bundleHash":"bf655b8d90f39ffdb867919a50cc0734cc0f0528bc55b8ec0b107bfde911880c","device":"bd7adba3a8045853","findings":[],"hash":"8cdef01d4333da0da0060683bd7f1e68253210a29e65e7f60cfe5a9f545f2441","nodeId":"d2b457f9-8438-49da-b5e0-ae1b180306d5","outcome":"completed","summary":"Both reopened findings reproduced on the accepted tree and are fixed; the four advisory findings are answered without code changes except one documentation correction.\n\n**What reproduced and what changed**\n\n- **Window guard (9a97dce5, medium) and audit 91cf6828.** The reviewer's proof failed on the starting tree with `BadSpec(\"window\")` for both the game window and the T5 deploy-block spec on Sepolia. `Composer.validateSpec` compared mainnet block heights against the consumer chain's height. It now bounds the window by the mainnet height: the registry's `block.number` on chain 1, unchanged, and elsewhere `Composer.mainnetHeightBound()`, one block per 12-second slot since the merge. That bound is never below the real height and about 0.3% above it, which I checked against five recorded mainnet heights read live. It also closes the Base inversion the finding mentioned.\n- **Question target (206a260d, medium) and audit 25e1b004.** The proof failed: catalog questions on Sepolia named the Sepolia Curator as a mainnet contract. `catalogSpec` and the 1301 parenthesis now use a `MAINNET_CURATOR` constant, as TEMPLATES.md already wrote it. The registry's `curator` argument serves direct reads only. Sepolia bodies now equal the mainnet fixtures with only the consumer chain id changed and carry the plane's recorded question hashes.\n- **Registry untouched.** Both fixes live in `src/Composer.sol`; the Composer's two address parameters stay in the ABI, unnamed. Registry runtime is byte-equal at 24,561 bytes. Composer is 23,655 bytes with 921 of headroom.\n\n**Advisory findings**\n\n- 7e76e9b8 (callback gas): reproduced live, Sepolia 1,000,000 vs mainnet 200,000. INTEGRATION.md and README corrected.\n- 1a09ea86 (fixed attester, no setter): disputed per the brief's explicit decision, code unchanged. The pool-drain consequence is added to INTEGRATION.md's \"What can kill the registry\".\n- d543592d and ada37f2e: rehearsal trust gap of the stand-ins and documented pool design, recorded in ADAPTATION.md, no change.\n\n**Verification**\n\n| Check | Result |\n|---|---|\n| Reviewer proofs on starting tree / now | 0 of 3 pass / 3 of 3 pass |\n| Full seeded `forge test` (proofs included) | 185 passed, 0 failed, 17 fork skips |\n| New `test/SepoliaRehearsal.t.sol` | 8 tests |\n| `gen_template.py --check`, tools unittest | 28 artifacts match, 18 passed |\n\nThe opt-in burn fork suite could not run this round: the public RPC no longer serves state at its pinned block. The burn rule is untouched. All eleven finding ids are answered in `.imd-responses.json`, and ADAPTATION.md lists every file changed and why.","treeHash":"30a5d99c7413e13673ba57b6db9e8b7a3bbe9589","usage":{"cachedInputTokens":2625655,"inputTokens":706,"model":"claude-fable-5-1","outputTokens":45143,"runtime":"claude","turns":57,"wallClockMs":785941}},{"artifacts":[],"attempt":1,"bundleHash":"345add74ff346288786459a757f4fde06b42368a0907dde9231bb3fb0abb4d53","device":"ba7dd2832066bc23","findings":[{"description":"Registry.registerSpec passes the consumer chain block.number to Composer.validateSpec even though every community question concerns Ethereum mainnet. At the recorded Sepolia rehearsal height, already-final mainnet evidence windows around block 25.7 million fail the local-height check. This prevents registering community versions of the game-window traits and nonce predicates; built-in catalog traits bypass registration. This is the existing limitation documented in ADAPTATION.md, independently reproduced here, not a newly introduced regression. No production change was made, and no passing test asserts this cross-chain rejection to be correct.","line":633,"path":"src/Registry.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {Registry} from \"src/Registry.sol\";\nimport {Renderer} from \"src/Renderer.sol\";\nimport {Composer} from \"src/Composer.sol\";\nimport {Spec} from \"src/Types.sol\";\n\ncontract WindowCurator {\n    function isSettled() external pure returns (bool) { return true; }\n}\ncontract WindowIdmd {\n    function balanceOf(address) external pure returns (uint256) { return 0; }\n}\ncontract WindowToken {\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n    function mint(address to, uint256 amount) external { balanceOf[to] += amount; }\n    function approve(address spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][spender] = amount;\n        return true;\n    }\n    function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n        allowance[from][msg.sender] -= amount;\n        balanceOf[from] -= amount;\n        balanceOf[to] += amount;\n        return true;\n    }\n}\ncontract WindowIntake {\n    function priceOf(bytes32, address) external pure returns (uint256) { return 0.5 ether; }\n}\ncontract WindowExecutor {\n    function version() external pure returns (uint256) { return 1; }\n}\n\n/// @notice Expected: already-final Ethereum-mainnet evidence is usable from a Sepolia consumer.\n/// Actual: Registry passes the Sepolia block.number to the mainnet-window validation.\ncontract MainnetWindowFindingTest is Test {\n    Registry internal registry;\n    WindowToken internal token;\n\n    function setUp() public {\n        vm.chainId(11155111);\n        vm.roll(11_926_289);\n        vm.warp(1_791_700_000);\n        address curator = 0x0919ba50b206C3F31D516De818b1fBc7dA21653D;\n        address idmd = 0x2C3013c90a1Bb65573aae9a7C64fafB82697E4e4;\n        address imd = 0x44a1Cd38474FB1748400E7DEb5F8D786ccE3F89A;\n        address intake = 0xa43e6F75ee006411F79Ac1C84120606C2330DE82;\n        address executor = 0x097A19e0f021BBA5072701132625ad2401043A2E;\n        vm.etch(curator, address(new WindowCurator()).code);\n        vm.etch(idmd, address(new WindowIdmd()).code);\n        vm.etch(imd, address(new WindowToken()).code);\n        vm.etch(intake, address(new WindowIntake()).code);\n        vm.etch(executor, address(new WindowExecutor()).code);\n        registry = new Registry(\n            curator, idmd, imd, intake,\n            0x5598Aa9146215Bc13eb26f2c692Ad1461Fd32982,\n            address(new Renderer()), address(new Composer()), executor\n        );\n        token = WindowToken(imd);\n        token.mint(address(this), 6.4 ether);\n        token.approve(address(registry), 6.4 ether);\n    }\n\n    function _spec() internal pure returns (Spec memory s) {\n        s.kind = 1;\n        s.target = 0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91;\n        s.item = \"event Deposited(address indexed contributor, uint256 amount)\";\n        s.arg = \"contributor\";\n        s.threshold = 1;\n        s.fromBlock = 25_769_870;\n        s.toBlock = 25_789_604;\n        s.name = \"Mainnet historical evidence\";\n    }\n\n    function test_finalMainnetWindowCanBeRegisteredFromSepolia() public {\n        uint16 id = registry.registerSpec(_spec());\n        assertEq(id, 10001, \"mainnet finality is independent of the consumer block height\");\n        assertEq(registry.pool(), 6.4 ether);\n    }\n\n    function test_finalMainnetNonceWindowCanBeRegisteredFromSepolia() public {\n        Spec memory s;\n        s.kind = 5;\n        s.threshold = 20;\n        s.fromBlock = 25_769_870;\n        s.toBlock = 25_769_870;\n        s.name = \"Mainnet historical nonce\";\n        assertEq(registry.registerSpec(s), 10001);\n    }\n\n    function test_controlSameLogSpecIsValidAtTheRecordedMainnetHeight() public {\n        vm.chainId(1);\n        vm.roll(26_203_948);\n        assertEq(registry.registerSpec(_spec()), 10001);\n        assertEq(registry.pool(), 6.4 ether);\n    }\n}","reproduction":"Run the supplied proof as test/MainnetWindowFinding.t.sol with forge test --match-path test/MainnetWindowFinding.t.sol. It uses local mocks at the exact launch dependency addresses and no RPC. On chainId 11155111 at block 11926289, register a kind-1 spec with fromBlock=25769870, toBlock=25789604, threshold=1, arg=contributor, a valid event item and a 6.4 IMD allowance/balance; or a kind-5 spec with fromBlock=toBlock=25769870 and threshold=20. Expected: those historical Ethereum-mainnet windows can be registered, returning id 10001. Actual: both calls revert BadSpec(\"window\") before collecting fees. The positive control changes to chainId 1 / block 26203948 and registers the identical kind-1 spec successfully. Local execution: positive control passed, both Sepolia assertions failed with BadSpec(\"window\").","severity":"low","title":"Community mainnet evidence windows are validated against the Sepolia block height"}],"hash":"a007f32be491ec98708fa092b1717a3412725675e29b1725008bd7ac3c58757a","nodeId":"777662e6-03a7-4cd3-9add-640c977b9faa","outcome":"completed","summary":"Added Sepolia deployment, failure-path, oracle, and accounting invariant tests.\n\n`forge build` and seeded `forge test` pass: **192 passed, 17 optional fork tests skipped**. New invariants exercised **24,576 calls**.\n\nReported one low-severity mainnet-window validation defect with a runnable proof in [.imd-findings.json](/home/seat/.identitymd/work/9bb313a3-dfc5-4fcc-8cff-7dbe4cb2dfff/777662e6-03a7-4cd3-9add-640c977b9faa/.imd-findings.json).\n\nNo production code or configuration changed.","treeHash":"250b72a050b734cc42669a58783e23d00cc8b6a9","usage":{"cachedInputTokens":3156992,"inputTokens":157378,"model":"gpt-6-astra","outputTokens":28167,"runtime":"codex","turns":7,"wallClockMs":846936}},{"artifacts":[],"attempt":1,"bundleHash":"89526a953e724b93b3a19e853a77980bf0c7e3e03cbcfa01732b34c507b29bcb","device":"7f1dec5ffcbde1d8","findings":[],"hash":"b2d2b38cba4e83043cfd994e05e160d6fc4624b86eb189ffb2e7aaab943c146d","nodeId":"6e77fd88-1892-45b2-ad8e-bab63d12d86e","outcome":"completed","summary":"launch.json is written and verified. Only that file changed in the tree.\n\n**What the manifest declares**\n\n- **Renderer**, no constructor arguments.\n- **Composer**, no constructor arguments.\n- **Registry** with the eight address arguments in ABI order: curator, idmd, imd (Sepolia TestIMD), intake (Intake v2), attester (IMD oracle signer), then `$contract:Renderer`, `$contract:Composer`, and the BurnExecutor V1 stand-in. No argument uses `$owner`, since the contracts have no owner or admin role.\n\nThe notes field explains the Sepolia rehearsal, the V1 executor behaviour (BurnSkipped(1) and refund), and restates the documented design decisions as decisions rather than defects. It is well under the 4,000 character limit.\n\n**Checks run**\n\n- A schema check confirmed exactly the keys kind, contracts and notes, unique identifiers under 32 characters, backward-only contract references, and no zero address.\n- A scratch test in test/scratch mirrored the protected probe: all three contracts deployed in one CREATE2 call on an empty chain with chain id 11155111, the predicted helper addresses matched, every stored Registry argument equalled the manifest value, the name and symbol are Sworn and SWORN, every runtime stays under the EIP-170 limit with no DELEGATECALL, CALLCODE or SELFDESTRUCT, and no contract answers owner() or admin().\n- The full suite with the verifier's fuzz seed passed: 175 tests, 0 failures, 17 skipped. The skipped tests are the fork tests, which skip when no RPC URL is set.\n\n**Adapt step**: no change to src/ was needed. The prior adaptation record already states the same three-contract order and argument set, and no check failed, so nothing was modified beyond adding launch.json.","treeHash":"eb24f7a24be86dd592e497a0070ed193eb9be271","usage":{"cachedInputTokens":305646,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":7202,"runtime":"claude","turns":15,"wallClockMs":129272}},{"artifacts":[],"attempt":1,"bundleHash":"ca77bf4dff26feca3c21acd22305b6ece550ea852321845837160e949ecf9064","device":"edf1925726a58c54","findings":[],"hash":"db6b20183be11177ef271c57646aca70cb60134e8a4c4cc987a43b6d5376e8f0","nodeId":"d2b457f9-8438-49da-b5e0-ae1b180306d5","outcome":"completed","summary":"Added [ADAPTATION.md](/home/seat/.identitymd/work/9bb313a3-dfc5-4fcc-8cff-7dbe4cb2dfff/d2b457f9-8438-49da-b5e0-ae1b180306d5/ADAPTATION.md), the only submitted change. No contract changes were needed.\n\n`forge build` passed. Seeded `forge test`: **174 passed, 0 failed, 17 skipped**.\n\nThe document records all audit dispositions, Sepolia limitations and successful fork checks. The older mainnet fork could not load its pinned block because the RPC reported pruned history. No deployment was broadcast.","treeHash":"f2e34495b0d09a2ccccc6119db2cf6fe48f782f7","usage":{"cachedInputTokens":3834880,"inputTokens":137669,"model":"gpt-6-astra","outputTokens":22072,"runtime":"codex","turns":8,"wallClockMs":742178}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dc176559ff153c37","findings":[{"citation":"resolved","description":"Settled from the previous round (id 1a09ea86...). The author answered 'disputed' and left the code, which is what the brief requires ('if the audit disputes a decision above, report it as a finding and leave the code'). The behaviour still reproduces on this tree because src/Registry.sol is byte-identical to the previous round: attester, intake, imd and ACTION have no setter (the ABI has none), _check verifies with ECDSA.tryRecover against the bare address, so a rotated plane key or an ERC-1271 signer registry makes every later attestation Missed(2), and _fromPool keeps forwarding 0.5 IMD of pool money per sponsored request for answers that can no longer verify until the pool is empty; a zero Intake price makes _price revert ActionNotSold for ever and freezes the balance. The oracle-consumer reference says the intake, action id, asset/price and signer must be constructor input AND owner-settable. The one consequence the previous round found undocumented (sponsored requests keep drawing pool money after a rotation) is now written into INTEGRATION.md 'What can kill the registry'. No code change is proposed; this is the report of the disputed decision for the judge to weigh against the protocol reference. Severity low: the trigger is the oracle operator's own action and the brief accepts it.","line":561,"path":"src/Registry.sol","reproduction":"State: Sepolia fixture (test/helpers/SepoliaFixture.sol) with the repository's MockIntake; donor sponsors 100 IMD (pool() == 100e18); Alice is a member. Alice calls claimSponsored(801): pool() == 99.5e18, id = pendingOf(alice, 801). An attestation for that request (chainId 1, questionHash = the pending hash, answerType 3, answer abi.encode(1), window 0x189378e..0x18984a4, panel 5/3/5, fresh issuedAt/expiresAt) is signed over registry.attestationDigest(a) by a key K2 != attester. intake.complete(id, 0, abi.encode(id, a, sig)) emits Missed(id, 801, 2); hasTrait(alice, 801) == false; pool() stays 99.5e18; poolUsed[alice][801] == true and the next day's sponsored request pays again. Expected per the oracle-consumer reference: a settable signer (or ERC-1271 acceptance) lets the deployment keep working. Actual: no setter exists, every later request is paid and can never verify, the remaining pool is unrecoverable. Second trigger: Intake owner sets the price to 0: _price reverts ActionNotSold, upgrade/requestSharedFact/claimSponsored/upgradeSponsored revert for ever.","severity":"low","snippet":"        if (err != ECDSA.RecoverError.NoError || signer == address(0) || signer != attester) return 2;","title":"Disputed design decision (unchanged, as the brief instructs): attester, Intake, action and token are fixed with no setter and the attester is checked by bare ECDSA recovery, so a signer rotation or an"},{"citation":"resolved","description":"Settled from the previous round (id d543592d...). The author answered that this is not a defect of Sworn's code, and that is right: the registry's gates (_requireMember via curator.firstHourOf, idmd.ownerOf in upgradeSponsored) are correct against their interfaces and the NotMember / NotIdmdHolder tests pass. The gap is in the brief's Sepolia arguments: 0x0919ba50b206c3f31d516de818b1fbc7da21653d and 0x2c3013c90a1bb65573aae9a7c64fafb82697e4e4 dispatch the repository mocks' set(address,uint256,bool,uint256,uint256,uint256) and setOwner(uint256,address) with no owner check (eth_call from an arbitrary EOA returns 0x without reverting, read 2026-10-16 over https://ethereum-sepolia-rpc.publicnode.com). It is now recorded in ADAPTATION.md and README as a rehearsal limitation: the Sepolia run does not rehearse the membership gate and any Sepolia pool balance is spendable by anyone at 0.5 TestIMD per request (one per UTC day, nine lifetime per wallet). Kept for the record so the rehearsal plan treats the Sepolia pool accordingly; no code change.","line":714,"path":"src/Registry.sol","reproduction":"Sepolia, any EOA A with no Curator history. 1) A sends 0x0919ba50b206c3f31d516de818b1fbc7da21653d.set(A, 0, true, 10, 1e21, 100000) (simulated with cast call --from A: 0x, no revert). 2) A calls Registry.claimSponsored(801) with pool() >= 0.5e18. Expected under the mainnet trust model: revert NotMember(A). Actual on Sepolia: the request is paid from the pool and PoolSpent(A, 801, id) is emitted; hasTrait(A, 101/202/303/404/503) read true. Likewise setOwner(7, A) on 0x2c3013c90a1bb65573aae9a7c64fafb82697e4e4 then upgradeSponsored(7, [901]) passes the NotIdmdHolder check. Offline the same sequence runs against MockCurator/MockIDMD in test/helpers/SepoliaFixture.sol, whose selectors the live stand-ins dispatch.","severity":"info","snippet":"        (, bool joined) = curator.firstHourOf(msg.sender);","title":"Rehearsal trust gap, not a code defect: the Sepolia stand-ins for Curator and IDMD have permissionless setters, so on this launch anyone can self-grant membership or IDMD ownership and draw sponsored "},{"citation":"resolved","description":"New code from the fix of the previous round's window finding, reported by write_foundry_tests (id 779e36cc...) and reproduced here. validateSpec (src/Composer.sol:251 `if (block.chainid != 1) blockNumber = mainnetHeightBound();`) bounds a community spec's mainnet window, on any chain but 1, by the number of 12-second slots since the merge. Mainnet misses slots, so the bound is never below the real height (which is what the guard needs) but is above it by about 0.3%. On Sepolia a registrant can therefore pay 6.4 IMD for a T1-T4 window, or a T5 block, that lies entirely above mainnet's real head, and each upgrade on it before those blocks exist spends 0.5 IMD on a question the panel cannot answer yet (refused via onFailure, nothing refunded by design); once mainnet reaches the window the spec becomes answerable, so nothing is permanently stranded. On chain 1 the guard is block.number exactly as before (mainnet tests pin the boundary). This is the documented behaviour (CATALOG.md section 5, README, ADAPTATION.md: 'an upper bound the caller cannot forge, about 0.3% above') and a tighter bound would need an evidence-height input the design decisions exclude, so it is recorded as a quantified rehearsal limitation, not a defect to adapt.","line":315,"path":"src/Composer.sol","reproduction":"Scratch test test/scratch/BoundSlack.t.sol (run by me, 1 passed): deploy Composer; vm.chainId(11155111); vm.warp(1_792_143_071) (the timestamp at which ADAPTATION.md records mainnet head 26,204,211). composer.mainnetHeightBound() returns 26,280,635, 76,424 blocks above the recorded head. Spec {kind:1, target:0xcB0b0531e86A9aC36Fa865cA8e3dbccF047FDA91, item:'event Deposited(address indexed contributor, uint256 amount, uint256 hour)', arg:'contributor', threshold:1, fromBlock:26_273_435, toBlock:26_280_634, name:'Future'}: composer.validateSpec(s, 11_926_383) returns (so registerSpec would pull 6.4 IMD and store it as 10001). Same spec with vm.chainId(1): composer.validateSpec(s, 26_204_211) reverts BadSpec(\"window\"). Expected under the rehearsal's purpose: the unmined window refused on Sepolia as on chain 1; actual: accepted on Sepolia.","severity":"info","snippet":"        return MERGE_BLOCK + (block.timestamp - MERGE_TIME) / SLOT_SECONDS;","title":"Off mainnet the new slot-clock window bound runs about 0.3% (~76,000 blocks, ~10.6 days) ahead of the real mainnet head, so on Sepolia a spec whose window mainnet has not mined yet can be registered a"}],"hash":"f238d4275e6ff647fe5976f8f3b4c313f8fe7a74df3e222d4da41686b4d35465","nodeId":"4db63024-82f4-471b-984c-d73e17b67faf","outcome":"completed","summary":"Review complete. The findings file is written and validated; nothing in `src/` was changed.\n\n**Settled from the previous round**\n\n- **Window guard (medium, fixed).** Composer.validateSpec now bounds a spec's mainnet window by block.number on chain 1 and by a slot-clock upper bound elsewhere. All three attached window proofs pass on the revised code, and Registry bytecode is unchanged.\n- **Catalog question target (medium, fixed).** catalogSpec and the 1301 parenthesis now name the mainnet Curator on every chain, while direct-read traits still read the deployment chain's Curator. Both attached proofs pass; Templates.t.sol confirms mainnet bodies stay byte-exact.\n- **Sepolia callback gas (info, fixed).** INTEGRATION.md now records the 1,000,000-gas Sepolia stipend beside mainnet's 200,000. Dropped.\n- **Ordinal griefing (info).** Documented design, now recorded in ADAPTATION.md with the 4.5 IMD per member figure. Dropped as not a defect.\n\n**Kept in the report**\n\n1. **Low, disputed decision, code unchanged.** Fixed attester, Intake, action and token with bare ECDSA checking. The brief requires it be reported and left; the pool-drain consequence is now documented. For the judge to weigh.\n2. **Info, rehearsal trust gap.** The Sepolia Curator and IDMD stand-ins have permissionless setters, so the Sepolia pool is spendable by anyone. Not Sworn's code; recorded in ADAPTATION.md.\n3. **Info, new from the fix.** The slot-clock bound runs about 76,000 blocks ahead of the real mainnet head off chain 1, so Sepolia can register and pay for a window mainnet has not mined yet. Reproduced with a scratch test; documented as the accepted tolerance.\n\n**Verification run**\n\n| Check | Result |\n| --- | --- |\n| Attached proofs (5 files) | 7 passed, 0 failed |\n| Full suite excluding scratch | 214 passed, 17 skipped (fork tests) |\n| Registry runtime size | 24,561 B, under the 24,576 limit |\n\nCoverage answers all 16 entry points as holds, plus rows for the manifest and the fix's diff. No blocking finding remains outstanding.","treeHash":null,"usage":{"cachedInputTokens":1090496,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":14451,"runtime":"claude","turns":17,"wallClockMs":390969}}],"verification":[{"checks":[{"durationMs":33866,"exitCode":0,"name":"build","output":"Compiling 89 files with Solc 0.8.24\nSolc 0.8.24 finished in 32.99s\nCompiler run successful with warnings:\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/mocks/MockBurnExecutor.sol:10:9:\n   |\n10 |         selfdestruct(payable(to));\n   |         ^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n  --> test/Goldens.t.sol:67:5:\n   |\n67 |     function _widthCard() internal view returns (Card memory c) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/Goldens.t.sol:345:5:\n    |\n345 |     function _card(\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":53566,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 6 tests for test/fork/BurnRule.fork.t.sol:BurnRuleForkTest\n[SKIP] test_fork_coldFreeClaimExactFeeFromNonpayableContractClaimant() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithSurplusBurnsAndExecutorReturnsTheSurplus() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithoutTheFeeReverts() (gas: 0)\n[SKIP] test_fork_executorConfigurationAndPinnedQuote() (gas: 0)\n[SKIP] test_fork_realExecutorAndOFTForceRefundSurplusToNonpayableRecipient() (gas: 0)\n[SKIP] test_fork_realExecutorExactFeeForNonpayableRecipient() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 6 skipped; finished in 675.25µs (130.45µs CPU time)\n\nRan 11 tests for test/fork/Mainnet.fork.t.sol:MainnetForkTest\n[SKIP] test_fork_attestationSignedForAnotherConsumerMissesOnTheRealIntake() (gas: 0)\n[SKIP] test_fork_curatorIsSettledWithTheBriefsConstants() (gas: 0)\n[SKIP] test_fork_firstContributorIsAnHourZeroEarlyBird() (gas: 0)\n[SKIP] test_fork_intakeV2SellsTheActionAsTheBriefRecords() (gas: 0)\n[SKIP] test_fork_lastContributorIsNoEarlyBird() (gas: 0)\n[SKIP] test_fork_memberMintsAndRendersAgainstTheRealCurator() (gas: 0)\n[SKIP] test_fork_nonMemberReadsZeroFalseAndHasNoCuratorTrait() (gas: 0)\n[SKIP] test_fork_operatorTraitReadsTheRealCollectionAndGuardsZero() (gas: 0)\n[SKIP] test_fork_pinnedBlockIsTheOneRecorded() (gas: 0)\n[SKIP] test_fork_thousandthContributorJoinedInsideTheFirstThousandWindow() (gas: 0)\n[SKIP] test_fork_upgradeThroughTheRealIntakeThenCompleteFromTheWriter() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 11 skipped; finished in 9.49ms (512.78µs CPU time)\n\nRan 4 tests for test/SepoliaCommunityOracle.t.sol:SepoliaCommunityOracleTest\n[PASS] test_communityLogCountSpecMissesBelowThresholdOnWrongWindowAndOnWrongQuestion() (gas: 8923054)\n[PASS] test_communityNonceSpecVerifiesInTheSepoliaDomainUnderTheStipend() (gas: 2768522)\n[PASS] test_communitySharedFactVerifiesOnSepoliaAndAppliesWithinItsHead() (gas: 2655885)\n[PASS] test_sepoliaRegistrationNeverChangesTheMainnetRegistrysBehaviour() (gas: 763652)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 13.27ms (14.36ms CPU time)\n\nRan 3 tests for test/Attestations.t.sol:AttestationsTest\n[PASS] test_allFiveRecoverTheAttesterUnderTheirOwnDomainOnly() (gas: 5269883)\n[PASS] test_loaderRejectsUnknownAnswerTypeNames() (gas: 4845)\n[PASS] test_protocolVectorDigestAndSelector() (gas: 2162970)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 13.92ms (13.10ms CPU time)\n\nRan 6 tests for test/SepoliaOracle.t.sol:SepoliaOracleTest\n[PASS] test_anotherConsumerDomainSignatureCannotAuthorizeTheRegistry() (gas: 2099222)\n[PASS] test_mainnetDomainSignatureIsRejectedThenSepoliaRetrySucceeds() (gas: 4102427)\n[PASS] test_mainnetEvidenceVerifiesInSepoliaDomainUnderColdCallbackBudget() (gas: 4026217)\n[PASS] test_maximumSharedFactVerifiesOnSepoliaAndOnlyItsHeadCanApply() (gas: 1934188)\n[PASS] test_noAnswerIsSettledWithoutIssuingACredentialOrRefundingTheSpentPrice() (gas: 4000969)\n[PASS] test_sepoliaEvidenceChainIsRejectedEvenWithAValidSepoliaSignature() (gas: 2080916)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 23.60ms (20.37ms CPU time)\n\nRan 8 tests for test/Rename.t.sol:RenameTest\n[PASS] test_catalogSpecNamesMatchTheTable() (gas: 496540)\n[PASS] test_collectionNameAndSymbol() (gas: 25005)\n[PASS] test_composerStaysUnderTheSizeLimitWithHeadroom() (gas: 13473)\n[PASS] test_metadataCarriesTheFinalFamilyNames() (gas: 3753529)\n[PASS] test_nameTableIsTheFinalTable() (gas: 609580)\n[PASS] test_noWorkingNameSurvivesInTheNameTable() (gas: 1060323)\n[PASS] test_unknownIdHasNoName() (gas: 25179)\n[PASS] test_upgradeRefusesTopWeightsAsASharedFact() (gas: 1641444)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 54.52ms (60.57ms CPU time)\n\nRan 7 tests for test/Templates.t.sol:TemplatesTest\n[PASS] test_allTenBodiesAreByteExact() (gas: 1457597)\n[PASS] test_allTenQuestionHashesEqualThePlanes() (gas: 2185841)\n[PASS] test_bodyIsDeterministicInClaimantAndDiffersAcrossClaimants() (gas: 464392)\n[PASS] test_directAndUnknownIdsHaveNoBody() (gas: 60713)\n[PASS] test_hexMinAndCatalogWindows() (gas: 147416)\n[PASS] test_sepoliaChangesOnlyConsumerChainAcrossAllTenBodies() (gas: 3075316)\n[PASS] test_traitNamesAndClasses() (gas: 112489)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 56.44ms (40.48ms CPU time)\n\nRan 8 tests for test/Artifacts.t.sol:ArtifactsTest\n[PASS] test_constructorAcceptsUnavailableCuratorOnEmptyFloor() (gas: 16156)\n[PASS] test_constructorRejectsUnsettledOrUnavailableCurator() (gas: 262986)\n[PASS] test_constructorRejectsZeroAddressesAndStoresTheRest() (gas: 8024)\n[PASS] test_deployScriptUsesMainnetConstantsOnEveryOtherChain() (gas: 60662450)\n[PASS] test_deployScriptUsesSepoliaConstantsAndNonzeroExecutor() (gas: 31208855)\n[PASS] test_noForbiddenOpcodesInRuntime() (gas: 56309448)\n[PASS] test_noImmutableReferencesInAnyArtifact() (gas: 92960456)\n[PASS] test_twoDeploymentsHaveIdenticalRuntimeCode() (gas: 3577724)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 647.58ms (622.02ms CPU time)\n\nRan 17 tests for test/RegistryRules.t.sol:RegistryRulesTest\n[PASS] test_constructorPriceCheckIsPassiveAndAcceptsAnyNonzeroPrice() (gas: 147502)\n[PASS] test_constructorRejectsEachSingleMistypedDependency() (gas: 19912)\n[PASS] test_constructorRejectsPartiallyCodedDependencyFloor() (gas: 19824)\n[PASS] test_constructorRejectsUnavailableIntake() (gas: 26489)\n[PASS] test_constructorRejectsWrongAsset() (gas: 548859)\n[PASS] test_constructorRejectsZeroIntakePrice() (gas: 42182)\n[PASS] test_fuzz_bothPoolPathsShareOneAllowancePerUtcDay(bool,bool,uint32) (runs: 256, μ: 3245877, ~: 3226887)\nLogs:\n  Bound result 71568\n\n[PASS] test_idmdCounterFollowsTransfersAndStopsAtNine() (gas: 15434120)\n[PASS] test_idmdHolderMustAlsoBeAListMember() (gas: 1763951)\n[PASS] test_memberClaimsOnDeploymentDayWithoutCardOrIdmd() (gas: 1675022)\n[PASS] test_noVerdictConsumesTheDayAndLifetimePair() (gas: 3269502)\n[PASS] test_paidUpgradeAndSharedFactDoNotUseOrObeyPoolDailyLimit() (gas: 8189294)\n[PASS] test_revertingIntakeDoesNotConsumePoolAllowances() (gas: 2028592)\n[PASS] test_specAndFirstClaimCostSixPointNineIMD() (gas: 1880817)\n[PASS] test_specRequiresFullFeeAndAllowance() (gas: 798883)\n[PASS] test_sponsoredUpgradeRequiresExactlyOneTrait() (gas: 1780326)\n[PASS] test_switchingIdmdDoesNotBypassDailyLimit() (gas: 3192030)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 659.23ms (704.83ms CPU time)\n\nRan 2 tests for test/Floor.t.sol:FloorTest\n[PASS] test_mainnetEmptyChainFloor() (gas: 72788567)\n[PASS] test_sepoliaEmptyChainFloor() (gas: 72788535)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 665.09ms (570.92ms CPU time)\n\nRan 10 tests for test/SepoliaLaunch.t.sol:SepoliaLaunchTest\n[PASS] testFuzz_badLiveDependencyRollsBackTheWholeLaunch(uint8) (runs: 256, μ: 11006447, ~: 11004429)\n[PASS] testFuzz_v1MissingPreviewRefundsTheWholeAttachment(bool,uint96) (runs: 512, μ: 1759404, ~: 1744629)\nLogs:\n  Bound result 16414960\n\n[PASS] test_fixedAttesterAndIntakeCannotBeBypassedOrReconfigured() (gas: 2300833)\n[PASS] test_launchUsesExactArgumentsAndCreatesOnlyThreeApplications() (gas: 160354)\n[PASS] test_livePriceChangesAreRespectedAndDisabledSaleIsAtomic() (gas: 3310393)\n[PASS] test_personalAndSharedAbandonmentAtTheExactDeadline() (gas: 6645536)\n[PASS] test_rejectedV1RefundRollsBackPaymentRequestAndAllowances() (gas: 4854791)\n[PASS] test_unsettledCuratorZeroPriceAndMissingExecutorEachRollBackLaunch() (gas: 33420102)\n[PASS] test_v1MissingPreviewWorksAtZeroAndOneWeiForBothEntryPoints() (gas: 6124596)\n[PASS] test_v1RefundCannotReenterTheOtherSponsoredPath() (gas: 2207149)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 728.46ms (908.96ms CPU time)\n\nRan 9 tests for test/SepoliaCommunity.t.sol:SepoliaCommunityLaunchTest\n[PASS] testFuzz_sepoliaGuardFollowsTimeNotHeight(uint64,uint64,bool) (runs: 512, μ: 615051, ~: 811597)\nLogs:\n  Bound result 771375181485\n\n[PASS] test_aWindowRefusedTodayRegistersOnceTheSlotClockReachesIt() (gas: 902488)\n[PASS] test_catalogQuestionHashIsTheSameOnBothChainsAndBoundToThePendingRequest() (gas: 2612927)\n[PASS] test_communitySharedFactOnSepoliaIsPaidOnlyThroughRequestSharedFact() (gas: 3036698)\n[PASS] test_communitySpecRequestOnSepoliaAsksAboutMainnetAndSettlesWithoutASignature() (gas: 2768736)\n[PASS] test_gameWindowsRegisterThroughTheLaunchWhateverSepoliasHeightIs() (gas: 2623917)\n[PASS] test_launchedRegistryAsksThePlanesMainnetQuestionsFromSepolia() (gas: 4288558)\n[PASS] test_sepoliaGuardIsExactlyTheSlotClockBound() (gas: 1406115)\n[PASS] test_validateSpecIgnoresTheHeightArgumentOffMainnetOnly() (gas: 495911)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 822.14ms (869.16ms CPU time)\n\nRan 29 tests for test/Registry.t.sol:RegistryTest\n[PASS] test_abandonOnlyAfterFourteenDaysAndStaleCallbackLeavesSuccessor() (gas: 3333466)\n[PASS] test_anyoneReadsAnyWalletAndNothingUsesTxOrigin() (gas: 1943257)\n[PASS] test_attestationForAnotherConsumerOrChainIsNeverAccepted() (gas: 3213846)\n[PASS] test_callbacksRejectEveryoneButTheIntake() (gas: 1630434)\n[PASS] test_claimSponsoredRules() (gas: 5264004)\n[PASS] test_directTraitsAreLiveAndNeedNoCard() (gas: 605974)\n[PASS] test_fuzz_tiersAreMonotone(uint8,bool,uint32,uint128,uint32,uint8) (runs: 256, μ: 705579, ~: 695463)\n[PASS] test_mainnetQuestionAcceptedUnderSepoliaConsumerDomain() (gas: 1726675)\n[PASS] test_mainnetSignatureCannotAnswerSepoliaConsumer() (gas: 1667544)\n[PASS] test_malformedEnvelopeIsNotDeliveredAndStaysPending() (gas: 1561112)\n[PASS] test_mintOncePerWalletAndTransfersKeepClaimant() (gas: 956472)\n[PASS] test_mintWithoutFeeReverts() (gas: 47096)\n[PASS] test_missReasons() (gas: 29440347)\n[PASS] test_noReceiveOrFallback() (gas: 57774)\n[PASS] test_nonMemberIsNeverAnEarlyBird() (gas: 232419)\n[PASS] test_onFailureClearsAndAllowsRetry() (gas: 3006144)\n[PASS] test_onResultGasWorstCase() (gas: 2334293)\nLogs:\n  onResult worst-case gas: 164955\n\n[PASS] test_poolIsTheBalanceAndOnlyLeavesThroughSponsoredRequests() (gas: 5657704)\n[PASS] test_reentrantTokenCannotReenterMint() (gas: 2358744)\n[PASS] test_registerSpecAssignsSequentialIdsAndIsImmutable() (gas: 1231919)\n[PASS] test_sepoliaQuestionMissesWithReasonThreeUnderSepoliaDomain() (gas: 1654372)\n[PASS] test_sharedFactBadEnvelopeIsAMissAndCanBeRequestedAgain() (gas: 6925553)\n[PASS] test_sharedFactFlow() (gas: 2478075)\n[PASS] test_specGuards() (gas: 1337374)\n[PASS] test_strangerCannotDiscardLateValidAnswer() (gas: 1727693)\n[PASS] test_supportsERC4906AndERC721() (gas: 25952)\n[PASS] test_upgradeGuards() (gas: 6034862)\n[PASS] test_upgradeHappyPathMarksTraitAndRefreshesCard() (gas: 2537520)\n[PASS] test_upgradeWithoutCardAttachesToClaimant() (gas: 1895253)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 889.89ms (222.36ms CPU time)\n\nRan 10 tests for test/ReReview.t.sol:ReReviewTest\n[PASS] test_coldGas_firstCommunityVerificationWithACard() (gas: 2415584)\nLogs:\n  cold onResult gas, first community verification with a card: 133357\n\n[PASS] test_coldGas_sharedFact64Catalog() (gas: 1740251)\nLogs:\n  cold onResult gas, 64-address shared fact (catalog 1201): 164088\n\n[PASS] test_coldGas_sharedFact64Community() (gas: 2108985)\nLogs:\n  cold onResult gas, 64-address shared fact (community T3): 170446\n\n[PASS] test_communityAttributesAppearOnlyForVerifiedSpecs() (gas: 4751043)\n[PASS] test_constructorReadsIsSettledWithoutWriting() (gas: 137310)\n[PASS] test_hugeSignatureOnCommunitySharedFactAndCardRequestClearsUnderStipend() (gas: 12243108)\n[PASS] test_lowerOrdinalAcquiredLaterReplacesTheHigherOne() (gas: 8479122)\n[PASS] test_sameSignedEvidenceSatisfiesAnotherRequestWithTheSameQuestion() (gas: 3262910)\n[PASS] test_specIdsEndAt65534() (gas: 909597)\n[PASS] test_unusedFixedValIsRefusedAndAnEmptyFilterIsNotSerialised() (gas: 1334489)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 961.13ms (112.28ms CPU time)\n\nRan 24 tests for test/BurnRule.t.sol:BurnRuleTest\n[PASS] testFuzz_belowThresholdRefundsWithoutFee(bool,uint96,uint96) (runs: 256, μ: 1562715, ~: 1572851)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueForwardsWholeValueAndExecutorForceRefunds(bool,uint96,uint96) (runs: 256, μ: 1831826, ~: 1843951)\nLogs:\n  Bound result 79228162445286906181185491772\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueWithoutEnoughFeeRevertsAtomically(bool,uint96,uint96) (runs: 256, μ: 3243460, ~: 3270770)\nLogs:\n  Bound result 79228162514264337593543950335\n  Bound result 337593543950335\n\n[PASS] testFuzz_failedPreviewOrBridgeSkipsAndRefunds(bool,uint8,uint96) (runs: 256, μ: 1833862, ~: 1606164)\nLogs:\n  Bound result 3\n  Bound result 264337514315787821\n\n[PASS] testFuzz_nonpayableContractWorksWithNoValueExactFeeAndSurplus(bool,uint8) (runs: 256, μ: 1938741, ~: 1976404)\nLogs:\n  Bound result 2\n\n[PASS] testFuzz_previewExceedingTheBudgetSkipsWithCodeOneAndRefunds(bool,uint96) (runs: 256, μ: 2165142, ~: 2150697)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] testFuzz_quoteAboveCapSkipsWithCodeThree(bool,uint96,uint96) (runs: 256, μ: 1566641, ~: 1581381)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_unsetExecutorDisablesBurnAndRefunds(bool,uint96) (runs: 256, μ: 1581615, ~: 1567436)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] test_constantsAndStorage() (gas: 29216)\n[PASS] test_constructorRejectsNonzeroExecutorWithoutCodeAndAcceptsZeroOrCode() (gas: 22214)\n[PASS] test_exactFeeAndCapAreInclusive() (gas: 1708610)\n[PASS] test_executorReentryIsGuarded() (gas: 1770521)\n[PASS] test_executorSurplusCallReentryIsGuarded() (gas: 2351890)\n[PASS] test_executorSurplusIsForcedOnARejectingRecipient() (gas: 1984962)\n[PASS] test_existingChecksAndIntakeFailurePrecedeBurnFeeCheck() (gas: 579753)\n[PASS] test_gasArgumentsIncludeOnlyTheValueStipend() (gas: 1694399)\n[PASS] test_noFeeAtExactThresholdReverts() (gas: 1537275)\n[PASS] test_nonpayableContractAcceptsZeroRefundOnPreviewFailure() (gas: 1791339)\n[PASS] test_paidFunctionsRejectOneWeiWhereZeroValueSucceeds() (gas: 3763404)\n[PASS] test_previewUsingMostOfTheBudgetIsQuotedAndBurns() (gas: 2236765)\n[PASS] test_registryRefundReentryIsGuarded() (gas: 2174439)\n[PASS] test_rejectedNonzeroRegistryRefundRevertsAllEffects() (gas: 1949413)\n[PASS] test_zeroQuoteStillTriggersWhenDue() (gas: 1643756)\n[PASS] test_zeroValueHasNoStipend() (gas: 1564856)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 961.11ms (2.67s CPU time)\n\nRan 8 tests for test/SepoliaRehearsal.t.sol:SepoliaRehearsalTest\n[PASS] test_fuzz_mainnetHeightBoundIsMonotoneInTime(uint64,uint64) (runs: 256, μ: 20319, ~: 20374)\n[PASS] test_mainnetGuardStillUsesTheMainnetBlockNumber() (gas: 1225649)\n[PASS] test_mainnetHeightBoundIsNeverBelowARecordedHeight() (gas: 63592)\n[PASS] test_sepoliaCatalogQuestionsNameTheMainnetCurator() (gas: 6217461)\n[PASS] test_sepoliaClaimantVerifiesACatalogChainTrait() (gas: 1829820)\n[PASS] test_sepoliaDirectReadsStillUseTheDeploymentCurator() (gas: 310614)\n[PASS] test_sepoliaRegistersTheCuratorGameWindow() (gas: 1022635)\n[PASS] test_sepoliaStillRefusesAWindowMainnetCannotHaveMined() (gas: 1602784)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 961.11ms (66.00ms CPU time)\n\nRan 19 tests for test/Goldens.t.sol:GoldensTest\n[PASS] test_escapeJsonNeutralisesMarkup() (gas: 42645)\n[PASS] test_goldenSyntheticCollector() (gas: 20831323)\n[PASS] test_goldenSyntheticDirect() (gas: 5078827)\n[PASS] test_goldenSyntheticFullhouse() (gas: 21514473)\n[PASS] test_goldenSyntheticHoney() (gas: 23746288)\n[PASS] test_goldenSyntheticNewcomer() (gas: 3219081)\n[PASS] test_goldenSyntheticOracle() (gas: 8915956)\n[PASS] test_goldenSyntheticOutsider() (gas: 5211326)\n[PASS] test_goldenSyntheticWidthThroughTheRenderer() (gas: 24718798)\n[PASS] test_imageCommunityPathFollowsTheStepTable() (gas: 13547491)\n[PASS] test_imageIdsOutsideTheCatalogRenderWithoutReverting() (gas: 763825)\n[PASS] test_imageIsPureAndDeterministic() (gas: 16076101)\n[PASS] test_imageOverflowPathAbsentAtOrBelow39AndNeverOverflows() (gas: 13459611)\n[PASS] test_imageRareDotOnlyAtATopTierRareId() (gas: 17170837)\n[PASS] test_imageRingsByCommunityCount() (gas: 5559349)\n[PASS] test_imageStepsUseExponentiationNotXor() (gas: 6674005)\n[PASS] test_reportRendererRuntimeSize() (gas: 129606)\nLogs:\n  Renderer runtime bytes: 21570\n\n[PASS] test_reportTokenURIGas() (gas: 29841499)\nLogs:\n  tokenURI gas synthetic_width: 10810085\n  tokenURI gas synthetic_fullhouse: 9147472\n  tokenURI gas synthetic_honey: 9589924\n\n[PASS] test_templateArtifactsMatchTheCompiledConstants() (gas: 297819)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 961.10ms (1.09s CPU time)\n\nRan 10 tests for test/ReviewChanges.t.sol:ReviewChangesTest\n[PASS] test_fuzz_emptyFixedArgRequiresZeroValueForT1AndT2(uint256) (runs: 256, μ: 3039015, ~: 3038797)\nLogs:\n  Bound result 507993366093923789062821\n\n[PASS] test_fuzz_ordinalShowsLowestVerifiedId(uint8) (runs: 256, μ: 4593287, ~: 4866125)\nLogs:\n  Bound result 1\n\n[PASS] test_hugeAnswerClearsUintBoolAndSharedRequestsUnderStipend() (gas: 26379788)\n[PASS] test_hugeSignatureClearsPendingAndAllowsImmediateRetry() (gas: 6838211)\n[PASS] test_metadataReportsMinimaEvenWhenSignedPanelIsLarger() (gas: 6306433)\n[PASS] test_scalarAnswerLengthPrecedesChainSignerAndClaimedType() (gas: 17767584)\n[PASS] test_sharedAnswerUpperBoundPrecedesChainAndSigner() (gas: 4503532)\n[PASS] test_signatureLengthPrecedesAnswerLengthAndChain() (gas: 37652039)\n[PASS] test_unknownRequestStillPrecedesDynamicSizeChecks() (gas: 12871822)\n[PASS] test_validationPrecedenceAfterSizes() (gas: 18086010)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 961.17ms (1.58s CPU time)\n\nRan 32 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_abandonedSharedFactCanBeRequestedAgainAndTheLateAnswerIsIgnored() (gas: 3063452)\n[PASS] test_attestationForAnotherClaimantIsAMissForThisRequest() (gas: 3244206)\n[PASS] test_attestationForAnotherTraitWithTheSameWindowIsAMiss() (gas: 3247257)\n[PASS] test_callbackStarvedOfGasIsNotDeliveredAndStaysPending() (gas: 1692953)\n[PASS] test_cardShowsAtMostThirtyTwoCommunityIdsAndCountsThemAll() (gas: 86215566)\n[PASS] test_claimSponsoredWhilePendingOrVerifiedReverts() (gas: 2104530)\n[PASS] test_communityT3SpecIsASharedFactWithItsOwnHead() (gas: 2423017)\n[PASS] test_everyTemplateVerifiesUnderTheStipendWithACard() (gas: 11730795)\n[PASS] test_expiryAtTheExactSecondStillPassesAndOneLaterDoesNot() (gas: 3241538)\n[PASS] test_fuzz_abandonedPoolRequestKeepsPoolUsedAndLateCallbackIsIgnored(bool) (runs: 256, μ: 1907761, ~: 1907761)\n[PASS] test_fuzz_anyFieldAlteredAfterSigningIsASignatureMiss(uint8,uint256) (runs: 512, μ: 1653013, ~: 1654228)\nLogs:\n  Bound result 13\n\n[PASS] test_fuzz_applySharedFactOnlyWithinTheHead(uint8,uint8) (runs: 256, μ: 1778140, ~: 1763312)\nLogs:\n  Bound result 2\n  Bound result 0\n\n[PASS] test_fuzz_boolAnswerMustBeExactlyZeroOrOne(uint256) (runs: 512, μ: 2076162, ~: 2075770)\n[PASS] test_fuzz_countAnswerAgainstTheThreshold(uint256,bytes1,bool) (runs: 512, μ: 1654363, ~: 1626024)\n[PASS] test_fuzz_expiryAndClockSkewBoundaries(uint64,uint64) (runs: 512, μ: 1650734, ~: 1641459)\n[PASS] test_fuzz_hasTraitAndTraitsOfNeverRevert(address,uint16,uint8,bool,uint8) (runs: 512, μ: 322661, ~: 333467)\n[PASS] test_fuzz_maximalSpecRegistersComposesAndFitsTheBody(uint8,uint256,uint256) (runs: 64, μ: 2468858, ~: 2708965)\nLogs:\n  Bound result 1\n  Bound result 21803\n\n[PASS] test_fuzz_panelAndQuorumBoundaries(uint16,uint16,uint16) (runs: 512, μ: 1656009, ~: 1640592)\n[PASS] test_fuzz_panelTraitNeedsElevenAndSeven(uint16,uint16,uint16) (runs: 512, μ: 2084189, ~: 2069577)\n[PASS] test_fuzz_specBodyIsDeterministicAndClaimantBound(address,address) (runs: 256, μ: 864577, ~: 864577)\n[PASS] test_fuzz_upgradeChargesExactlyKTimesPriceAndLeavesThePoolAlone(uint8,uint256) (runs: 256, μ: 5091135, ~: 4217863)\nLogs:\n  Bound result 5\n  Bound result 281474976710655\n\n[PASS] test_fuzz_upgradeRejectsEveryIdThatIsNotAnOracleTrait(uint16) (runs: 256, μ: 209814, ~: 209272)\n[PASS] test_fuzz_windowMustEqualTheCanonicalOne(uint64,uint64) (runs: 512, μ: 1641001, ~: 1640990)\n[PASS] test_onFailureRecordsWhatItIsToldAndStoresNothing() (gas: 3064198)\n[PASS] test_questionHashIsBoundToTheClaimantAndTheTrait() (gas: 690361)\n[PASS] test_reentrantTokenCannotReenterAnyIMDMovingFunction() (gas: 7517031)\n[PASS] test_sharedFactWorstCaseEnvelopeUnderTheStipend() (gas: 3983876)\n[PASS] test_signatureShapesThatDoNotRecover() (gas: 9338096)\n[PASS] test_tokenURIDependsOnlyOnTheClaimantsFacts() (gas: 14700480)\n[PASS] test_traitClassForEveryCatalogIdAndRevertsForUnknown() (gas: 703103)\n[PASS] test_upgradeSponsoredDrawsAllNineOverNineDaysAndRefusesDuplicates() (gas: 12560682)\n[PASS] test_verifiedWindowIsTheCanonicalWindowForEveryOracleId() (gas: 16465073)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 961.41ms (7.22s CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariant_oneCardPerClaimantWithImmutableClaimant\n[PASS] invariant_poolOnlyLeavesThroughSponsoredRequests\n InvariantsTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claimSponsored    | 3168  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | mintCard          | 3273  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | sponsor           | 3362  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | transfer          | 3278  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | upgradeAndDeliver | 3303  | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1056223011367066673\n  Bound result 752987475861199155\n  Bound result 11475790507065521\n  Bound result 21317\n  Bound result 400129513700922024\n  Bound result 2271\n  Bound result 1400000000000030868\n  Bound result 1063066898508820102\n  Bound result 12858\n  Bound result 1054573457987214066\n  Bound result 9203\n  Bound result 3297616802100892\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.03s (7.02s CPU time)\n\nRan 1 test for test/BurnInvariant.t.sol:BurnInvariantTest\n[PASS] invariant_registryRetainsNoClaimETHAndPoolOnlyFundsOracleRequests() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| BurnHandler | claim    | 16384 | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 111685795089766338482\n  Bound result 43\n  Bound result 84265\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1880942921\n  Bound result 74264337592978034889\n  Bound result 29472\n  Bound result 7769\n  Bound result 14446206397732\n  Bound result 1744\n  Bound result 821\n  Bound result 73686426\n  Bound result 20839938009\n  Bound result 31530\n  Bound result 3847111\n  Bound result 3490697260845\n  Bound result 17483265397356312\n  Bound result 5164\n  Bound result 4329670727698909\n  Bound result 6746\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2194\n  Bound result 74264337592978034889\n  Bound result 4960\n  Bound result 1948284776\n  Bound result 1026170\n  Bound result 187383584233\n  Bound result 18980794936170296\n  Bound result 74264337592978034889\n  Bound result 250280496601436\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 5\n  Bound result 3820046261089565\n  Bound result 5175893019725063\n  Bound result 30\n  Bound result 4329670727698909\n  Bound result 542659680210\n  Bound result 15\n  Bound result 133316654177\n  Bound result 65\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7199\n  Bound result 74264337592978034889\n  Bound result 16432\n  Bound result 7124044119686217\n  Bound result 1153\n  Bound result 5666\n  Bound result 6392190220459758\n  Bound result 97201480810262094948\n  Bound result 1827\n  Bound result 6204\n  Bound result 74264337592978034889\n  Bound result 16569\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 24074\n  Bound result 1859\n  Bound result 4329670727698909\n  Bound result 692\n  Bound result 2792\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 6182\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3137\n  Bound result 4329670727698909\n  Bound result 11361106585804713\n  Bound result 21804\n  Bound result 1808\n  Bound result 19999999999999776\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 1686\n  Bound result 9999999999990001\n  Bound result 4333632135824622\n  Bound result 2952712416\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1049257880424022\n  Bound result 23748\n  Bound result 4329670727698909\n  Bound result 3041954472\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2220\n  Bound result 22761\n  Bound result 9197977283572037\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 7016\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7311\n  Bound result 9302\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 116\n  Bound result 5117022895701379\n  Bound result 4333632135824622\n  Bound result 113261144333\n  Bound result 8\n  Bound result 115\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 15648\n  Bound result 2305\n  Bound result 4329670727698909\n  Bound result 6840\n  Bound result 317\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 19602\n  Bound result 4333632135824622\n  Bound result 105549399\n  Bound result 4329670727698909\n  Bound result 8489460231747295\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 91367124398043712191\n  Bound result 1017569300830\n  Bound result 7085897216441890\n  Bound result 74264337592978034889\n  Bound result 9999999999900352\n  Bound result 4333632135824622\n  Bound result 3365\n  Bound result 4329670727698909\n  Bound result 19999999999950502\n  Bound result 74264337592978034889\n  Bound result 5165\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 24480\n  Bound result 11244\n  Bound result 52806580125533239\n  Bound result 3165560241530197\n  Bound result 11420499685075676\n  Bound result 74264337592978034889\n  Bound result 193\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4202047189\n  Bound result 82718949488418772971\n  Bound result 4061674789252195\n  Bound result 36345705\n  Bound result 74264337592978034889\n  Bound result 21299\n  Bound result 18640\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 15523\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 2558\n  Bound result 13006\n  Bound result 14907\n  Bound result 14494\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 13128\n  Bound result 9625401639367078\n  Bound result 1017569300831\n  Bound result 74264337592978034889\n  Bound result 8955842611469327\n  Bound result 4333632135824622\n  Bound result 3276318195313711\n  Bound result 153645\n  Bound result 3\n  Bound result 74264337592978034889\n  Bound result 5230390180702466\n  Bound result 14411366952071964\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 14.81s (14.80s CPU time)\n\nRan 3 tests for test/InvariantsExtended.t.sol:InvariantsExtendedTest\n[PASS]\nInvariantsExtendedTest invariants:\n[PASS] invariant_markedExactlyWhenAPassingAttestationWasDelivered\n[PASS] invariant_oneCardPerClaimant\n[PASS] invariant_poolDailyAndLifetimeLimits\n[PASS] invariant_poolIsFeesPlusDonationsMinusSponsoredRequests\n[PASS] invariant_sharedFactsAreHashesStoredOnlyOnDelivery\n[PASS] invariant_specsAreImmutable\n InvariantsExtendedTest invariants (runs: 96, calls: 4608, reverts: 0)\n\n╭-------------+-------------------+-------+---------+----------╮\n| Contract    | Selector          | Calls | Reverts | Discards |\n+==============================================================+\n| FullHandler | abandonLate       | 301   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | advanceTime       | 241   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | applyShared       | 267   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | claimSponsored    | 250   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverFalse      | 273   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTampered   | 293   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTrue       | 253   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | donate            | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | failRequest       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | mintCard          | 263   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | registerSpec      | 284   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | replayConsumed    | 282   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | requestSharedFact | 287   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | sponsor           | 288   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | transfer          | 280   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradePaid       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradeSponsored  | 251   | 0       | 0        |\n╰-------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 128804\n  Bound result 1\n  Bound result 21\n  Bound result 0\n  Bound result 17056\n  Bound result 1\n  Bound result 15926\n  Bound result 15839\n  Bound result 1405979900843914967\n  Bound result 5\n  Bound result 1\n  Bound result 200000000000905761\n  Bound result 4061\n  Bound result 1\n  Bound result 895\n  Bound result 2\n  Bound result 1\n  Bound result 1\n\n[PASS] test_handlerReplayOfAConsumedIdChangesNothing() (gas: 1920763)\n[PASS] test_handlerSponsoredSelectionAcceptsMaxSeed() (gas: 1764003)\nLogs:\n  Bound result 3000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 17.52s (17.51s CPU time)\n\nRan 3 tests for test/SepoliaInvariant.t.sol:SepoliaInvariantTest\n[PASS]\nSepoliaInvariantTest invariants:\n[PASS] invariant_claimantsAndLaunchConfigurationNeverChange\n[PASS] invariant_pendingRequestsAndDailyLimitsMatchTheModel\n[PASS] invariant_tokenAndEtherConservation\n SepoliaInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭--------------------------+--------------+-------+---------+----------╮\n| Contract                 | Selector     | Calls | Reverts | Discards |\n+======================================================================+\n| SepoliaAccountingHandler | abandon      | 2086  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | advanceTime  | 2122  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | askCommunity | 2094  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | askPaid      | 2068  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | changePrice  | 1999  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | claim        | 2005  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | complete     | 2013  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | deposit      | 2022  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | mint         | 2081  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | registerSpec | 2002  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | replay       | 1969  | 0       | 0        |\n|--------------------------+--------------+-------+---------+----------|\n| SepoliaAccountingHandler | transfer     | 2115  | 0       | 0        |\n╰--------------------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 8469\n  Bound result 20179\n  Bound result 4329670727698909\n  Bound result 395525182979\n  Bound result 22046\n  Bound result 264337553929869078\n  Bound result 264337553929869078\n  Bound result 4329670727698909\n  Bound result 4329670727698909\n  Bound result 10561\n  Bound result 85928784333915\n  Bound result 183421\n  Bound result 21317\n  Bound result 18273\n  Bound result 1976\n  Bound result 1301\n  Bound result 26066200\n  Bound result 3814595531572491200\n  Bound result 26061227\n  Bound result 4329670727698909\n  Bound result 26061244\n  Bound result 9829\n  Bound result 4329670727698909\n  Bound result 264337553929869078\n  Bound result 15750\n  Bound result 0\n  Bound result 1268419\n  Bound result 264337553929869078\n  Bound result 281331\n  Bound result 1\n  Bound result 1167465\n  Bound result 1793625707246087185\n  Bound result 302\n  Bound result 4329670727698908\n  Bound result 10002\n  Bound result 4264337577698317833\n  Bound result 890\n  Bound result 4264337577698317833\n  Bound result 4329670727698909\n  Bound result 2518525199125183686\n  Bound result 2183447190201232\n\n[PASS] test_handlerExercisesChangingPricesRefundsFailuresAndRetries() (gas: 11852699)\nLogs:\n  Bound result 5000000000000000000\n  Bound result 1\n  Bound result 1\n  Bound result 2000000000000000000\n  Bound result 10000000000000000\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 1209600\n  Bound result 500000000000000000\n  Bound result 1\n  Bound result 1\n\n[PASS] test_handlerRegistersAndAsksCommunitySpecsOnSepolia() (gas: 11371620)\nLogs:\n  Bound result 25789604\n  Bound result 26028911\n  Bound result 25769870\n  Bound result 26243712\n  Bound result 26236513\n  Bound result 1209600\n  Bound result 25815615\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 53.06s (53.08s CPU time)\n\nRan 23 test suites in 53.07s (102.77s CPU time): 214 tests passed, 0 failed, 17 skipped (231 total tests)\n","passed":true},{"durationMs":529,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Registry.abandon(bytes32)\",\"Registry.applySharedFact(uint16,address[])\",\"Registry.approve(address,uint256)\",\"Registry.claimSponsored(uint16)\",\"Registry.mintCard()\",\"Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Registry.onResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Registry.registerSpec((uint8,address,string,string,string,uint256,string,uint8,uint256,uint64,uint64,string))\",\"Registry.requestSharedFact(uint16,uint256)\",\"Registry.safeTransferFrom(address,address,uint256)\",\"Registry.safeTransferFrom(address,address,uint256,bytes)\",\"Registry.setApprovalForAll(address,bool)\",\"Registry.sponsor(uint256)\",\"Registry.transferFrom(address,address,uint256)\",\"Registry.upgrade(uint16[],uint256)\",\"Registry.upgradeSponsored(uint256,uint16[])\"],\"files\":{\".gitignore\":8,\".gitmodules\":6,\"ADAPTATION.md\":234,\"CATALOG.md\":268,\"CONCEPT.md\":262,\"DISCLOSURE.md\":58,\"INTEGRATION.md\":450,\"LICENSE\":21,\"README.md\":431,\"TEMPLATES.md\":158,\"foundry.toml\":44,\"reference/Intake.sol\":5175,\"reference/IntakeV2.sol\":5240,\"reference/PROVENANCE.md\":44,\"reference/abi/IMD.json\":1684,\"reference/abi/IdentityMD.json\":894,\"reference/abi/Intake.json\":955,\"reference/abi/IntakeV2.json\":1070,\"reference/abi/WhitelistCurator.json\":794,\"reference/anchors/headers.json\":61,\"reference/attestations/2026-10-10-link-pilot.json\":92,\"reference/attestations/2026-10-10-meatbag-consumer.json\":104,\"reference/attestations/2026-10-11-feed-consumer-v2.json\":105,\"reference/attestations/2026-10-11-nonce-false.json\":92,\"reference/attestations/2026-10-11-nonce-true.json\":92,\"reference/attestations/README.md\":29,\"reference/burn/BurnExecutorV2.sol.txt\":314,\"reference/burn/abi.json\":1001,\"reference/burn/provenance.json\":17,\"reference/intake/completions.json\":147,\"reference/list-record/src/ListRecord.sol\":169,\"reference/list-record/src/ListRecordRenderer.sol\":126,\"reference/list-record/src/interfaces/IListRecordRenderer.sol\":29,\"reference/list-record/src/lib/SSTORE2.sol\":39,\"reference/list-record/src/lib/Str.sol\":54,\"reference/list-record/test/Renderer.t.sol\":165,\"reference/list-record/test/RendererMechanism.t.sol\":203,\"reference/list-record/test/Template.t.sol\":293,\"reference/list-record/test/fixtures/golden_synthetic_held_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_held_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_uri.txt\":1,\"reference/plane/checks/1001-hour-savior.json\":81,\"reference/plane/checks/1102-ordinal-1000.json\":81,\"reference/plane/checks/1105-first-thousand.json\":81,\"reference/plane/checks/1201-top-32.json\":82,\"reference/plane/checks/1301-not-born-yesterday.json\":86,\"reference/plane/checks/701-still-here.json\":81,\"reference/plane/checks/801-last-stand.json\":81,\"reference/plane/checks/T2-log-sum-composed.json\":81,\"reference/plane/checks/T4-call-compare-reference.json\":81,\"reference/plane/checks/T5-community-composed.json\":86,\"reference/plane/questionHashes.json\":92,\"reference/plane/quotes/1001-hour-savior.json\":20,\"reference/plane/quotes/1102-ordinal-1000.json\":20,\"reference/plane/quotes/1105-first-thousand.json\":20,\"reference/plane/quotes/1201-top-32.json\":20,\"reference/plane/quotes/1301-not-born-yesterday.json\":20,\"reference/plane/quotes/701-still-here.json\":20,\"reference/plane/quotes/801-last-stand.json\":20,\"reference/plane/quotes/T2-log-sum-composed.json\":20,\"reference/plane/quotes/T4-call-compare-reference.json\":20,\"reference/plane/quotes/T5-community-composed.json\":20,\"remappings.txt\":2,\"script/Deploy.s.sol\":48,\"src/Composer.sol\":652,\"src/HiveData.sol\":75,\"src/Registry.sol\":761,\"src/Renderer.sol\":427,\"src/TemplateData.sol\":16,\"src/Types.sol\":41,\"src/interfaces/IBurnExecutor.sol\":12,\"src/interfaces/IIDMD.sol\":8,\"src/interfaces/IIntake.sol\":29,\"src/interfaces/IOracleConsumer.sol\":38,\"src/interfaces/IWhitelistCurator.sol\":53,\"template/blob.hex\":1,\"template/offsets.txt\":1,\"templates/fixtures/1001-hour-savior.json\":22,\"templates/fixtures/1102-ordinal-1000.json\":22,\"templates/fixtures/1105-first-thousand.json\":22,\"templates/fixtures/1201-top-32.json\":22,\"templates/fixtures/1301-not-born-yesterday.json\":24,\"templates/fixtures/701-still-here.json\":22,\"templates/fixtures/801-last-stand.json\":22,\"templates/fixtures/T2-log-sum-composed.json\":23,\"templates/fixtures/T4-call-compare-reference.json\":21,\"templates/fixtures/T5-community-composed.json\":24,\"test/.gitkeep\":0,\"test/Adversarial.t.sol\":832,\"test/Artifacts.t.sol\":209,\"test/Attestations.t.sol\":196,\"test/Base.t.sol\":158,\"test/BurnInvariant.t.sol\":120,\"test/BurnRule.t.sol\":405,\"test/Floor.t.sol\":135,\"test/Goldens.t.sol\":444,\"test/Invariants.t.sol\":124,\"test/InvariantsExtended.t.sol\":520,\"test/NOTES.md\":520,\"test/ReReview.t.sol\":263,\"test/Registry.t.sol\":822,\"test/RegistryRules.t.sol\":335,\"test/Rename.t.sol\":224,\"test/ReviewChanges.t.sol\":215,\"test/Sepolia.md\":55,\"test/SepoliaCommunity.t.sol\":294,\"test/SepoliaCommunityOracle.t.sol\":161,\"test/SepoliaInvariant.t.sol\":516,\"test/SepoliaLaunch.t.sol\":275,\"test/SepoliaOracle.t.sol\":129,\"test/SepoliaRehearsal.t.sol\":264,\"test/Templates.t.sol\":171,\"test/fixtures/golden_synthetic_collector_preimage.txt\":1,\"test/fixtures/golden_synthetic_collector_svg.txt\":1,\"test/fixtures/golden_synthetic_collector_uri.txt\":1,\"test/fixtures/golden_synthetic_direct_preimage.txt\":1,\"test/fixtures/golden_synthetic_direct_svg.txt\":1,\"test/fixtures/golden_synthetic_direct_uri.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_preimage.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_svg.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_uri.txt\":1,\"test/fixtures/golden_synthetic_honey_preimage.txt\":1,\"test/fixtures/golden_synthetic_honey_svg.txt\":1,\"test/fixtures/golden_synthetic_honey_uri.txt\":1,\"test/fixtures/golden_synthetic_newcomer_preimage.txt\":1,\"test/fixtures/golden_synthetic_newcomer_svg.txt\":1,\"test/fixtures/golden_synthetic_newcomer_uri.txt\":1,\"test/fixtures/golden_synthetic_oracle_preimage.txt\":1,\"test/fixtures/golden_synthetic_oracle_svg.txt\":1,\"test/fixtures/golden_synthetic_oracle_uri.txt\":1,\"test/fixtures/golden_synthetic_outsider_preimage.txt\":1,\"test/fixtures/golden_synthetic_outsider_svg.txt\":1,\"test/fixtures/golden_synthetic_outsider_uri.txt\":1,\"test/fixtures/golden_synthetic_width_preimage.txt\":1,\"test/fixtures/golden_synthetic_width_svg.txt\":1,\"test/fixtures/golden_synthetic_width_uri.txt\":1,\"test/fork/BurnRule.fork.t.sol\":193,\"test/fork/Mainnet.fork.t.sol\":338,\"test/helpers/SepoliaFixture.sol\":125,\"test/mocks/MockBurnExecutor.sol\":157,\"test/mocks/Mocks.sol\":231,\"tools/gen_template.py\":898,\"tools/test_gen_template.py\":334},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"461f04a2f71005fa4dbb6959a01dfe4b9a9cd564aa5f6d3b93d11930ecdccc74","verifiedTreeHash":"eeb854250a970ab3689a4bc6ae4780a9dd21d169","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":16402,"exitCode":0,"name":"build","output":"Compiling 83 files with Solc 0.8.24\nSolc 0.8.24 finished in 15.96s\nCompiler run successful with warnings:\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/mocks/MockBurnExecutor.sol:10:9:\n   |\n10 |         selfdestruct(payable(to));\n   |         ^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n  --> test/Goldens.t.sol:67:5:\n   |\n67 |     function _widthCard() internal view returns (Card memory c) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/Goldens.t.sol:345:5:\n    |\n345 |     function _card(\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":14358,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 6 tests for test/fork/BurnRule.fork.t.sol:BurnRuleForkTest\n[SKIP] test_fork_coldFreeClaimExactFeeFromNonpayableContractClaimant() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithSurplusBurnsAndExecutorReturnsTheSurplus() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithoutTheFeeReverts() (gas: 0)\n[SKIP] test_fork_executorConfigurationAndPinnedQuote() (gas: 0)\n[SKIP] test_fork_realExecutorAndOFTForceRefundSurplusToNonpayableRecipient() (gas: 0)\n[SKIP] test_fork_realExecutorExactFeeForNonpayableRecipient() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 6 skipped; finished in 506.66µs (432.87µs CPU time)\n\nRan 11 tests for test/fork/Mainnet.fork.t.sol:MainnetForkTest\n[SKIP] test_fork_attestationSignedForAnotherConsumerMissesOnTheRealIntake() (gas: 0)\n[SKIP] test_fork_curatorIsSettledWithTheBriefsConstants() (gas: 0)\n[SKIP] test_fork_firstContributorIsAnHourZeroEarlyBird() (gas: 0)\n[SKIP] test_fork_intakeV2SellsTheActionAsTheBriefRecords() (gas: 0)\n[SKIP] test_fork_lastContributorIsNoEarlyBird() (gas: 0)\n[SKIP] test_fork_memberMintsAndRendersAgainstTheRealCurator() (gas: 0)\n[SKIP] test_fork_nonMemberReadsZeroFalseAndHasNoCuratorTrait() (gas: 0)\n[SKIP] test_fork_operatorTraitReadsTheRealCollectionAndGuardsZero() (gas: 0)\n[SKIP] test_fork_pinnedBlockIsTheOneRecorded() (gas: 0)\n[SKIP] test_fork_thousandthContributorJoinedInsideTheFirstThousandWindow() (gas: 0)\n[SKIP] test_fork_upgradeThroughTheRealIntakeThenCompleteFromTheWriter() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 11 skipped; finished in 463.23µs (497.41µs CPU time)\n\nRan 7 tests for test/Templates.t.sol:TemplatesTest\n[PASS] test_allTenBodiesAreByteExact() (gas: 1457597)\n[PASS] test_allTenQuestionHashesEqualThePlanes() (gas: 2185841)\n[PASS] test_bodyIsDeterministicInClaimantAndDiffersAcrossClaimants() (gas: 464392)\n[PASS] test_directAndUnknownIdsHaveNoBody() (gas: 60713)\n[PASS] test_hexMinAndCatalogWindows() (gas: 147416)\n[PASS] test_sepoliaChangesOnlyConsumerChainAcrossAllTenBodies() (gas: 3075316)\n[PASS] test_traitNamesAndClasses() (gas: 112489)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 22.48ms (31.50ms CPU time)\n\nRan 10 tests for test/ReReview.t.sol:ReReviewTest\n[PASS] test_coldGas_firstCommunityVerificationWithACard() (gas: 2415584)\nLogs:\n  cold onResult gas, first community verification with a card: 133357\n\n[PASS] test_coldGas_sharedFact64Catalog() (gas: 1740251)\nLogs:\n  cold onResult gas, 64-address shared fact (catalog 1201): 164088\n\n[PASS] test_coldGas_sharedFact64Community() (gas: 2108985)\nLogs:\n  cold onResult gas, 64-address shared fact (community T3): 170446\n\n[PASS] test_communityAttributesAppearOnlyForVerifiedSpecs() (gas: 4751043)\n[PASS] test_constructorReadsIsSettledWithoutWriting() (gas: 137310)\n[PASS] test_hugeSignatureOnCommunitySharedFactAndCardRequestClearsUnderStipend() (gas: 12243108)\n[PASS] test_lowerOrdinalAcquiredLaterReplacesTheHigherOne() (gas: 8479122)\n[PASS] test_sameSignedEvidenceSatisfiesAnotherRequestWithTheSameQuestion() (gas: 3262910)\n[PASS] test_specIdsEndAt65534() (gas: 909597)\n[PASS] test_unusedFixedValIsRefusedAndAnEmptyFilterIsNotSerialised() (gas: 1334489)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 23.97ms (32.81ms CPU time)\n\nRan 2 tests for test/Floor.t.sol:FloorTest\n[PASS] test_mainnetEmptyChainFloor() (gas: 72650521)\n[PASS] test_sepoliaEmptyChainFloor() (gas: 72650489)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 137.46ms (242.77ms CPU time)\n\nRan 17 tests for test/RegistryRules.t.sol:RegistryRulesTest\n[PASS] test_constructorPriceCheckIsPassiveAndAcceptsAnyNonzeroPrice() (gas: 147502)\n[PASS] test_constructorRejectsEachSingleMistypedDependency() (gas: 19912)\n[PASS] test_constructorRejectsPartiallyCodedDependencyFloor() (gas: 19824)\n[PASS] test_constructorRejectsUnavailableIntake() (gas: 26489)\n[PASS] test_constructorRejectsWrongAsset() (gas: 548859)\n[PASS] test_constructorRejectsZeroIntakePrice() (gas: 42182)\n[PASS] test_fuzz_bothPoolPathsShareOneAllowancePerUtcDay(bool,bool,uint32) (runs: 256, μ: 3245874, ~: 3226887)\nLogs:\n  Bound result 3675\n\n[PASS] test_idmdCounterFollowsTransfersAndStopsAtNine() (gas: 15434120)\n[PASS] test_idmdHolderMustAlsoBeAListMember() (gas: 1763951)\n[PASS] test_memberClaimsOnDeploymentDayWithoutCardOrIdmd() (gas: 1675022)\n[PASS] test_noVerdictConsumesTheDayAndLifetimePair() (gas: 3269502)\n[PASS] test_paidUpgradeAndSharedFactDoNotUseOrObeyPoolDailyLimit() (gas: 8189294)\n[PASS] test_revertingIntakeDoesNotConsumePoolAllowances() (gas: 2028592)\n[PASS] test_specAndFirstClaimCostSixPointNineIMD() (gas: 1880817)\n[PASS] test_specRequiresFullFeeAndAllowance() (gas: 798883)\n[PASS] test_sponsoredUpgradeRequiresExactlyOneTrait() (gas: 1780326)\n[PASS] test_switchingIdmdDoesNotBypassDailyLimit() (gas: 3192030)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 297.59ms (323.05ms CPU time)\n\nRan 29 tests for test/Registry.t.sol:RegistryTest\n[PASS] test_abandonOnlyAfterFourteenDaysAndStaleCallbackLeavesSuccessor() (gas: 3333466)\n[PASS] test_anyoneReadsAnyWalletAndNothingUsesTxOrigin() (gas: 1943257)\n[PASS] test_attestationForAnotherConsumerOrChainIsNeverAccepted() (gas: 3213846)\n[PASS] test_callbacksRejectEveryoneButTheIntake() (gas: 1630434)\n[PASS] test_claimSponsoredRules() (gas: 5264004)\n[PASS] test_directTraitsAreLiveAndNeedNoCard() (gas: 605974)\n[PASS] test_fuzz_tiersAreMonotone(uint8,bool,uint32,uint128,uint32,uint8) (runs: 256, μ: 704763, ~: 695451)\n[PASS] test_mainnetQuestionAcceptedUnderSepoliaConsumerDomain() (gas: 1726675)\n[PASS] test_mainnetSignatureCannotAnswerSepoliaConsumer() (gas: 1667544)\n[PASS] test_malformedEnvelopeIsNotDeliveredAndStaysPending() (gas: 1561112)\n[PASS] test_mintOncePerWalletAndTransfersKeepClaimant() (gas: 956472)\n[PASS] test_mintWithoutFeeReverts() (gas: 47096)\n[PASS] test_missReasons() (gas: 29440347)\n[PASS] test_noReceiveOrFallback() (gas: 57774)\n[PASS] test_nonMemberIsNeverAnEarlyBird() (gas: 232419)\n[PASS] test_onFailureClearsAndAllowsRetry() (gas: 3006144)\n[PASS] test_onResultGasWorstCase() (gas: 2334293)\nLogs:\n  onResult worst-case gas: 164955\n\n[PASS] test_poolIsTheBalanceAndOnlyLeavesThroughSponsoredRequests() (gas: 5657704)\n[PASS] test_reentrantTokenCannotReenterMint() (gas: 2358744)\n[PASS] test_registerSpecAssignsSequentialIdsAndIsImmutable() (gas: 1231919)\n[PASS] test_sepoliaQuestionMissesWithReasonThreeUnderSepoliaDomain() (gas: 1654372)\n[PASS] test_sharedFactBadEnvelopeIsAMissAndCanBeRequestedAgain() (gas: 6925553)\n[PASS] test_sharedFactFlow() (gas: 2478075)\n[PASS] test_specGuards() (gas: 1337374)\n[PASS] test_strangerCannotDiscardLateValidAnswer() (gas: 1727693)\n[PASS] test_supportsERC4906AndERC721() (gas: 25952)\n[PASS] test_upgradeGuards() (gas: 6034862)\n[PASS] test_upgradeHappyPathMarksTraitAndRefreshesCard() (gas: 2537520)\n[PASS] test_upgradeWithoutCardAttachesToClaimant() (gas: 1895253)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 326.90ms (366.82ms CPU time)\n\nRan 8 tests for test/SepoliaRehearsal.t.sol:SepoliaRehearsalTest\n[PASS] test_fuzz_mainnetHeightBoundIsMonotoneInTime(uint64,uint64) (runs: 256, μ: 20315, ~: 20374)\n[PASS] test_mainnetGuardStillUsesTheMainnetBlockNumber() (gas: 1225649)\n[PASS] test_mainnetHeightBoundIsNeverBelowARecordedHeight() (gas: 63592)\n[PASS] test_sepoliaCatalogQuestionsNameTheMainnetCurator() (gas: 6217461)\n[PASS] test_sepoliaClaimantVerifiesACatalogChainTrait() (gas: 1829820)\n[PASS] test_sepoliaDirectReadsStillUseTheDeploymentCurator() (gas: 310614)\n[PASS] test_sepoliaRegistersTheCuratorGameWindow() (gas: 1022635)\n[PASS] test_sepoliaStillRefusesAWindowMainnetCannotHaveMined() (gas: 1602784)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 410.41ms (25.36ms CPU time)\n\nRan 3 tests for test/Attestations.t.sol:AttestationsTest\n[PASS] test_allFiveRecoverTheAttesterUnderTheirOwnDomainOnly() (gas: 5269883)\n[PASS] test_loaderRejectsUnknownAnswerTypeNames() (gas: 4845)\n[PASS] test_protocolVectorDigestAndSelector() (gas: 2162970)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 410.60ms (16.36ms CPU time)\n\nRan 24 tests for test/BurnRule.t.sol:BurnRuleTest\n[PASS] testFuzz_belowThresholdRefundsWithoutFee(bool,uint96,uint96) (runs: 256, μ: 1562715, ~: 1572851)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueForwardsWholeValueAndExecutorForceRefunds(bool,uint96,uint96) (runs: 256, μ: 1831826, ~: 1843951)\nLogs:\n  Bound result 79228162445286906181185491772\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueWithoutEnoughFeeRevertsAtomically(bool,uint96,uint96) (runs: 256, μ: 3243460, ~: 3270770)\nLogs:\n  Bound result 79228162445264337594393674477\n  Bound result 337593543950335\n\n[PASS] testFuzz_failedPreviewOrBridgeSkipsAndRefunds(bool,uint8,uint96) (runs: 256, μ: 1833862, ~: 1606164)\nLogs:\n  Bound result 4\n  Bound result 562719717216947147\n\n[PASS] testFuzz_nonpayableContractWorksWithNoValueExactFeeAndSurplus(bool,uint8) (runs: 256, μ: 1938741, ~: 1976404)\nLogs:\n  Bound result 2\n\n[PASS] testFuzz_previewExceedingTheBudgetSkipsWithCodeOneAndRefunds(bool,uint96) (runs: 256, μ: 2165142, ~: 2150697)\nLogs:\n  Bound result 4587101932804\n\n[PASS] testFuzz_quoteAboveCapSkipsWithCodeThree(bool,uint96,uint96) (runs: 256, μ: 1566641, ~: 1581381)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_unsetExecutorDisablesBurnAndRefunds(bool,uint96) (runs: 256, μ: 1581615, ~: 1567436)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] test_constantsAndStorage() (gas: 29216)\n[PASS] test_constructorRejectsNonzeroExecutorWithoutCodeAndAcceptsZeroOrCode() (gas: 22214)\n[PASS] test_exactFeeAndCapAreInclusive() (gas: 1708610)\n[PASS] test_executorReentryIsGuarded() (gas: 1770521)\n[PASS] test_executorSurplusCallReentryIsGuarded() (gas: 2351890)\n[PASS] test_executorSurplusIsForcedOnARejectingRecipient() (gas: 1984962)\n[PASS] test_existingChecksAndIntakeFailurePrecedeBurnFeeCheck() (gas: 579753)\n[PASS] test_gasArgumentsIncludeOnlyTheValueStipend() (gas: 1694399)\n[PASS] test_noFeeAtExactThresholdReverts() (gas: 1537275)\n[PASS] test_nonpayableContractAcceptsZeroRefundOnPreviewFailure() (gas: 1791339)\n[PASS] test_paidFunctionsRejectOneWeiWhereZeroValueSucceeds() (gas: 3763404)\n[PASS] test_previewUsingMostOfTheBudgetIsQuotedAndBurns() (gas: 2236765)\n[PASS] test_registryRefundReentryIsGuarded() (gas: 2174439)\n[PASS] test_rejectedNonzeroRegistryRefundRevertsAllEffects() (gas: 1949413)\n[PASS] test_zeroQuoteStillTriggersWhenDue() (gas: 1643756)\n[PASS] test_zeroValueHasNoStipend() (gas: 1564856)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 410.57ms (1.54s CPU time)\n\nRan 19 tests for test/Goldens.t.sol:GoldensTest\n[PASS] test_escapeJsonNeutralisesMarkup() (gas: 42645)\n[PASS] test_goldenSyntheticCollector() (gas: 20831323)\n[PASS] test_goldenSyntheticDirect() (gas: 5078827)\n[PASS] test_goldenSyntheticFullhouse() (gas: 21514473)\n[PASS] test_goldenSyntheticHoney() (gas: 23746288)\n[PASS] test_goldenSyntheticNewcomer() (gas: 3219081)\n[PASS] test_goldenSyntheticOracle() (gas: 8915956)\n[PASS] test_goldenSyntheticOutsider() (gas: 5211326)\n[PASS] test_goldenSyntheticWidthThroughTheRenderer() (gas: 24718798)\n[PASS] test_imageCommunityPathFollowsTheStepTable() (gas: 13547491)\n[PASS] test_imageIdsOutsideTheCatalogRenderWithoutReverting() (gas: 763825)\n[PASS] test_imageIsPureAndDeterministic() (gas: 16076101)\n[PASS] test_imageOverflowPathAbsentAtOrBelow39AndNeverOverflows() (gas: 13459611)\n[PASS] test_imageRareDotOnlyAtATopTierRareId() (gas: 17170837)\n[PASS] test_imageRingsByCommunityCount() (gas: 5559349)\n[PASS] test_imageStepsUseExponentiationNotXor() (gas: 6674005)\n[PASS] test_reportRendererRuntimeSize() (gas: 129606)\nLogs:\n  Renderer runtime bytes: 21570\n\n[PASS] test_reportTokenURIGas() (gas: 29841499)\nLogs:\n  tokenURI gas synthetic_width: 10810085\n  tokenURI gas synthetic_fullhouse: 9147472\n  tokenURI gas synthetic_honey: 9589924\n\n[PASS] test_templateArtifactsMatchTheCompiledConstants() (gas: 297819)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 458.92ms (504.59ms CPU time)\n\nRan 10 tests for test/ReviewChanges.t.sol:ReviewChangesTest\n[PASS] test_fuzz_emptyFixedArgRequiresZeroValueForT1AndT2(uint256) (runs: 256, μ: 3039007, ~: 3038797)\nLogs:\n  Bound result 507993366093923789062821\n\n[PASS] test_fuzz_ordinalShowsLowestVerifiedId(uint8) (runs: 256, μ: 4593287, ~: 4866125)\nLogs:\n  Bound result 0\n\n[PASS] test_hugeAnswerClearsUintBoolAndSharedRequestsUnderStipend() (gas: 26379788)\n[PASS] test_hugeSignatureClearsPendingAndAllowsImmediateRetry() (gas: 6838211)\n[PASS] test_metadataReportsMinimaEvenWhenSignedPanelIsLarger() (gas: 6306433)\n[PASS] test_scalarAnswerLengthPrecedesChainSignerAndClaimedType() (gas: 17767584)\n[PASS] test_sharedAnswerUpperBoundPrecedesChainAndSigner() (gas: 4503532)\n[PASS] test_signatureLengthPrecedesAnswerLengthAndChain() (gas: 37652039)\n[PASS] test_unknownRequestStillPrecedesDynamicSizeChecks() (gas: 12871822)\n[PASS] test_validationPrecedenceAfterSizes() (gas: 18086010)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 474.67ms (966.32ms CPU time)\n\nRan 8 tests for test/Rename.t.sol:RenameTest\n[PASS] test_catalogSpecNamesMatchTheTable() (gas: 496540)\n[PASS] test_collectionNameAndSymbol() (gas: 25005)\n[PASS] test_composerStaysUnderTheSizeLimitWithHeadroom() (gas: 13473)\n[PASS] test_metadataCarriesTheFinalFamilyNames() (gas: 3753529)\n[PASS] test_nameTableIsTheFinalTable() (gas: 609580)\n[PASS] test_noWorkingNameSurvivesInTheNameTable() (gas: 1060323)\n[PASS] test_unknownIdHasNoName() (gas: 25179)\n[PASS] test_upgradeRefusesTopWeightsAsASharedFact() (gas: 1641444)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 474.69ms (23.77ms CPU time)\n\nRan 8 tests for test/Artifacts.t.sol:ArtifactsTest\n[PASS] test_constructorAcceptsUnavailableCuratorOnEmptyFloor() (gas: 16156)\n[PASS] test_constructorRejectsUnsettledOrUnavailableCurator() (gas: 262986)\n[PASS] test_constructorRejectsZeroAddressesAndStoresTheRest() (gas: 8024)\n[PASS] test_deployScriptUsesMainnetConstantsOnEveryOtherChain() (gas: 60662450)\n[PASS] test_deployScriptUsesSepoliaConstantsAndNonzeroExecutor() (gas: 31208855)\n[PASS] test_noForbiddenOpcodesInRuntime() (gas: 56309448)\n[PASS] test_noImmutableReferencesInAnyArtifact() (gas: 92960456)\n[PASS] test_twoDeploymentsHaveIdenticalRuntimeCode() (gas: 3577724)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 474.81ms (159.39ms CPU time)\n\nRan 32 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_abandonedSharedFactCanBeRequestedAgainAndTheLateAnswerIsIgnored() (gas: 3063452)\n[PASS] test_attestationForAnotherClaimantIsAMissForThisRequest() (gas: 3244206)\n[PASS] test_attestationForAnotherTraitWithTheSameWindowIsAMiss() (gas: 3247257)\n[PASS] test_callbackStarvedOfGasIsNotDeliveredAndStaysPending() (gas: 1692953)\n[PASS] test_cardShowsAtMostThirtyTwoCommunityIdsAndCountsThemAll() (gas: 86215566)\n[PASS] test_claimSponsoredWhilePendingOrVerifiedReverts() (gas: 2104530)\n[PASS] test_communityT3SpecIsASharedFactWithItsOwnHead() (gas: 2423017)\n[PASS] test_everyTemplateVerifiesUnderTheStipendWithACard() (gas: 11730795)\n[PASS] test_expiryAtTheExactSecondStillPassesAndOneLaterDoesNot() (gas: 3241538)\n[PASS] test_fuzz_abandonedPoolRequestKeepsPoolUsedAndLateCallbackIsIgnored(bool) (runs: 256, μ: 1907761, ~: 1907761)\n[PASS] test_fuzz_anyFieldAlteredAfterSigningIsASignatureMiss(uint8,uint256) (runs: 512, μ: 1653012, ~: 1654214)\nLogs:\n  Bound result 6\n\n[PASS] test_fuzz_applySharedFactOnlyWithinTheHead(uint8,uint8) (runs: 256, μ: 1778140, ~: 1763312)\nLogs:\n  Bound result 2\n  Bound result 0\n\n[PASS] test_fuzz_boolAnswerMustBeExactlyZeroOrOne(uint256) (runs: 512, μ: 2076161, ~: 2075770)\n[PASS] test_fuzz_countAnswerAgainstTheThreshold(uint256,bytes1,bool) (runs: 512, μ: 1654364, ~: 1626024)\n[PASS] test_fuzz_expiryAndClockSkewBoundaries(uint64,uint64) (runs: 512, μ: 1650733, ~: 1641459)\n[PASS] test_fuzz_hasTraitAndTraitsOfNeverRevert(address,uint16,uint8,bool,uint8) (runs: 512, μ: 322607, ~: 333439)\n[PASS] test_fuzz_maximalSpecRegistersComposesAndFitsTheBody(uint8,uint256,uint256) (runs: 64, μ: 2467105, ~: 2709104)\nLogs:\n  Bound result 1\n  Bound result 21803\n\n[PASS] test_fuzz_panelAndQuorumBoundaries(uint16,uint16,uint16) (runs: 512, μ: 1655573, ~: 1640592)\n[PASS] test_fuzz_panelTraitNeedsElevenAndSeven(uint16,uint16,uint16) (runs: 512, μ: 2084091, ~: 2069577)\n[PASS] test_fuzz_specBodyIsDeterministicAndClaimantBound(address,address) (runs: 256, μ: 864577, ~: 864577)\n[PASS] test_fuzz_upgradeChargesExactlyKTimesPriceAndLeavesThePoolAlone(uint8,uint256) (runs: 256, μ: 5091133, ~: 4217881)\nLogs:\n  Bound result 9\n  Bound result 688426798719\n\n[PASS] test_fuzz_upgradeRejectsEveryIdThatIsNotAnOracleTrait(uint16) (runs: 256, μ: 209803, ~: 209262)\n[PASS] test_fuzz_windowMustEqualTheCanonicalOne(uint64,uint64) (runs: 512, μ: 1641001, ~: 1640990)\n[PASS] test_onFailureRecordsWhatItIsToldAndStoresNothing() (gas: 3064198)\n[PASS] test_questionHashIsBoundToTheClaimantAndTheTrait() (gas: 690361)\n[PASS] test_reentrantTokenCannotReenterAnyIMDMovingFunction() (gas: 7517031)\n[PASS] test_sharedFactWorstCaseEnvelopeUnderTheStipend() (gas: 3983876)\n[PASS] test_signatureShapesThatDoNotRecover() (gas: 9338096)\n[PASS] test_tokenURIDependsOnlyOnTheClaimantsFacts() (gas: 14700480)\n[PASS] test_traitClassForEveryCatalogIdAndRevertsForUnknown() (gas: 703103)\n[PASS] test_upgradeSponsoredDrawsAllNineOverNineDaysAndRefusesDuplicates() (gas: 12560682)\n[PASS] test_verifiedWindowIsTheCanonicalWindowForEveryOracleId() (gas: 16465073)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 474.83ms (3.64s CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariant_oneCardPerClaimantWithImmutableClaimant\n[PASS] invariant_poolOnlyLeavesThroughSponsoredRequests\n InvariantsTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claimSponsored    | 3168  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | mintCard          | 3273  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | sponsor           | 3362  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | transfer          | 3278  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | upgradeAndDeliver | 3303  | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1020857329728370586\n  Bound result 752987475861199155\n  Bound result 18768\n  Bound result 21173\n  Bound result 400000001800054317\n  Bound result 2271\n  Bound result 1857651867599879266\n  Bound result 653397997628068446\n  Bound result 3666\n  Bound result 183757568052052382\n  Bound result 10037\n  Bound result 3297616802100892\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.55s (5.55s CPU time)\n\nRan 1 test for test/BurnInvariant.t.sol:BurnInvariantTest\n[PASS] invariant_registryRetainsNoClaimETHAndPoolOnlyFundsOracleRequests() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| BurnHandler | claim    | 16384 | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 111685795089766338482\n  Bound result 43\n  Bound result 84265\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1880942921\n  Bound result 74264337592978034889\n  Bound result 29472\n  Bound result 7769\n  Bound result 14446206397732\n  Bound result 1744\n  Bound result 821\n  Bound result 73686426\n  Bound result 20839938009\n  Bound result 31530\n  Bound result 3847111\n  Bound result 3490697260845\n  Bound result 17483265397356312\n  Bound result 5164\n  Bound result 4329670727698909\n  Bound result 6746\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2194\n  Bound result 74264337592978034889\n  Bound result 4960\n  Bound result 1948284776\n  Bound result 1026170\n  Bound result 187383584233\n  Bound result 18980794936170296\n  Bound result 74264337592978034889\n  Bound result 9999999999999751\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 5\n  Bound result 3820046261089565\n  Bound result 5175893019725063\n  Bound result 30\n  Bound result 4329670727698909\n  Bound result 542659680210\n  Bound result 15\n  Bound result 133316654177\n  Bound result 65\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7199\n  Bound result 74264337592978034889\n  Bound result 16432\n  Bound result 7859249250170205\n  Bound result 1153\n  Bound result 5666\n  Bound result 6392190220459772\n  Bound result 97201480810262094948\n  Bound result 1827\n  Bound result 6204\n  Bound result 74264337592978034889\n  Bound result 16569\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 24074\n  Bound result 1859\n  Bound result 4329670727698909\n  Bound result 692\n  Bound result 2792\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 6182\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3137\n  Bound result 4329670727698909\n  Bound result 1048578\n  Bound result 21804\n  Bound result 1808\n  Bound result 13287430266606579\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 1686\n  Bound result 9999999999990001\n  Bound result 4333632135824622\n  Bound result 2952712416\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1049257880424034\n  Bound result 23748\n  Bound result 4329670727698909\n  Bound result 3041954472\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2220\n  Bound result 22761\n  Bound result 9197977283572036\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 7016\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7311\n  Bound result 9302\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 116\n  Bound result 5117022895701379\n  Bound result 4333632135824622\n  Bound result 113261144333\n  Bound result 8\n  Bound result 115\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 15648\n  Bound result 2305\n  Bound result 4329670727698909\n  Bound result 6840\n  Bound result 317\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 19602\n  Bound result 4333632135824622\n  Bound result 105549399\n  Bound result 4329670727698909\n  Bound result 13624172264603422\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 91367124398043712191\n  Bound result 1017569300830\n  Bound result 7085897216441890\n  Bound result 74264337592978034889\n  Bound result 1048585\n  Bound result 4333632135824622\n  Bound result 3366\n  Bound result 4329670727698909\n  Bound result 9155553862034430\n  Bound result 74264337592978034889\n  Bound result 2670744397685928\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 24481\n  Bound result 19797\n  Bound result 52806580125533239\n  Bound result 3165560241530197\n  Bound result 11420499685075676\n  Bound result 74264337592978034889\n  Bound result 191\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4202047187\n  Bound result 82718949488418772971\n  Bound result 4061674789252195\n  Bound result 36345705\n  Bound result 74264337592978034889\n  Bound result 21299\n  Bound result 18640\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 15468\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 2363\n  Bound result 12946\n  Bound result 14543\n  Bound result 14309\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 13091\n  Bound result 2226872047717538\n  Bound result 19999999999951002\n  Bound result 74264337592978034889\n  Bound result 1728161999584448\n  Bound result 4333632135824622\n  Bound result 3276318195313711\n  Bound result 153645\n  Bound result 3\n  Bound result 74264337592978034889\n  Bound result 9999999999900650\n  Bound result 11883789608241916\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.64s (11.63s CPU time)\n\nRan 3 tests for test/InvariantsExtended.t.sol:InvariantsExtendedTest\n[PASS]\nInvariantsExtendedTest invariants:\n[PASS] invariant_markedExactlyWhenAPassingAttestationWasDelivered\n[PASS] invariant_oneCardPerClaimant\n[PASS] invariant_poolDailyAndLifetimeLimits\n[PASS] invariant_poolIsFeesPlusDonationsMinusSponsoredRequests\n[PASS] invariant_sharedFactsAreHashesStoredOnlyOnDelivery\n[PASS] invariant_specsAreImmutable\n InvariantsExtendedTest invariants (runs: 96, calls: 4608, reverts: 0)\n\n╭-------------+-------------------+-------+---------+----------╮\n| Contract    | Selector          | Calls | Reverts | Discards |\n+==============================================================+\n| FullHandler | abandonLate       | 301   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | advanceTime       | 241   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | applyShared       | 267   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | claimSponsored    | 250   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverFalse      | 273   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTampered   | 293   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTrue       | 253   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | donate            | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | failRequest       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | mintCard          | 263   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | registerSpec      | 284   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | replayConsumed    | 282   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | requestSharedFact | 287   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | sponsor           | 288   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | transfer          | 280   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradePaid       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradeSponsored  | 251   | 0       | 0        |\n╰-------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 116245\n  Bound result 1\n  Bound result 21\n  Bound result 0\n  Bound result 17056\n  Bound result 1\n  Bound result 15926\n  Bound result 15839\n  Bound result 144657191412220990\n  Bound result 5\n  Bound result 2\n  Bound result 720635105881425832\n  Bound result 4059\n  Bound result 1\n  Bound result 895\n  Bound result 2\n  Bound result 1\n  Bound result 1\n\n[PASS] test_handlerReplayOfAConsumedIdChangesNothing() (gas: 1920763)\n[PASS] test_handlerSponsoredSelectionAcceptsMaxSeed() (gas: 1764003)\nLogs:\n  Bound result 3000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 14.09s (14.09s CPU time)\n\nRan 18 test suites in 14.10s (35.68s CPU time): 182 tests passed, 0 failed, 17 skipped (199 total tests)\n","passed":true},{"durationMs":274,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Registry.abandon(bytes32)\",\"Registry.applySharedFact(uint16,address[])\",\"Registry.approve(address,uint256)\",\"Registry.claimSponsored(uint16)\",\"Registry.mintCard()\",\"Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Registry.onResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Registry.registerSpec((uint8,address,string,string,string,uint256,string,uint8,uint256,uint64,uint64,string))\",\"Registry.requestSharedFact(uint16,uint256)\",\"Registry.safeTransferFrom(address,address,uint256)\",\"Registry.safeTransferFrom(address,address,uint256,bytes)\",\"Registry.setApprovalForAll(address,bool)\",\"Registry.sponsor(uint256)\",\"Registry.transferFrom(address,address,uint256)\",\"Registry.upgrade(uint16[],uint256)\",\"Registry.upgradeSponsored(uint256,uint16[])\"],\"files\":{\".gitignore\":8,\".gitmodules\":6,\"ADAPTATION.md\":234,\"CATALOG.md\":268,\"CONCEPT.md\":262,\"DISCLOSURE.md\":58,\"INTEGRATION.md\":450,\"LICENSE\":21,\"README.md\":431,\"TEMPLATES.md\":158,\"foundry.toml\":44,\"launch.json\":27,\"reference/Intake.sol\":5175,\"reference/IntakeV2.sol\":5240,\"reference/PROVENANCE.md\":44,\"reference/abi/IMD.json\":1684,\"reference/abi/IdentityMD.json\":894,\"reference/abi/Intake.json\":955,\"reference/abi/IntakeV2.json\":1070,\"reference/abi/WhitelistCurator.json\":794,\"reference/anchors/headers.json\":61,\"reference/attestations/2026-10-10-link-pilot.json\":92,\"reference/attestations/2026-10-10-meatbag-consumer.json\":104,\"reference/attestations/2026-10-11-feed-consumer-v2.json\":105,\"reference/attestations/2026-10-11-nonce-false.json\":92,\"reference/attestations/2026-10-11-nonce-true.json\":92,\"reference/attestations/README.md\":29,\"reference/burn/BurnExecutorV2.sol.txt\":314,\"reference/burn/abi.json\":1001,\"reference/burn/provenance.json\":17,\"reference/intake/completions.json\":147,\"reference/list-record/src/ListRecord.sol\":169,\"reference/list-record/src/ListRecordRenderer.sol\":126,\"reference/list-record/src/interfaces/IListRecordRenderer.sol\":29,\"reference/list-record/src/lib/SSTORE2.sol\":39,\"reference/list-record/src/lib/Str.sol\":54,\"reference/list-record/test/Renderer.t.sol\":165,\"reference/list-record/test/RendererMechanism.t.sol\":203,\"reference/list-record/test/Template.t.sol\":293,\"reference/list-record/test/fixtures/golden_synthetic_held_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_held_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_uri.txt\":1,\"reference/plane/checks/1001-hour-savior.json\":81,\"reference/plane/checks/1102-ordinal-1000.json\":81,\"reference/plane/checks/1105-first-thousand.json\":81,\"reference/plane/checks/1201-top-32.json\":82,\"reference/plane/checks/1301-not-born-yesterday.json\":86,\"reference/plane/checks/701-still-here.json\":81,\"reference/plane/checks/801-last-stand.json\":81,\"reference/plane/checks/T2-log-sum-composed.json\":81,\"reference/plane/checks/T4-call-compare-reference.json\":81,\"reference/plane/checks/T5-community-composed.json\":86,\"reference/plane/questionHashes.json\":92,\"reference/plane/quotes/1001-hour-savior.json\":20,\"reference/plane/quotes/1102-ordinal-1000.json\":20,\"reference/plane/quotes/1105-first-thousand.json\":20,\"reference/plane/quotes/1201-top-32.json\":20,\"reference/plane/quotes/1301-not-born-yesterday.json\":20,\"reference/plane/quotes/701-still-here.json\":20,\"reference/plane/quotes/801-last-stand.json\":20,\"reference/plane/quotes/T2-log-sum-composed.json\":20,\"reference/plane/quotes/T4-call-compare-reference.json\":20,\"reference/plane/quotes/T5-community-composed.json\":20,\"remappings.txt\":2,\"script/Deploy.s.sol\":48,\"src/Composer.sol\":652,\"src/HiveData.sol\":75,\"src/Registry.sol\":761,\"src/Renderer.sol\":427,\"src/TemplateData.sol\":16,\"src/Types.sol\":41,\"src/interfaces/IBurnExecutor.sol\":12,\"src/interfaces/IIDMD.sol\":8,\"src/interfaces/IIntake.sol\":29,\"src/interfaces/IOracleConsumer.sol\":38,\"src/interfaces/IWhitelistCurator.sol\":53,\"template/blob.hex\":1,\"template/offsets.txt\":1,\"templates/fixtures/1001-hour-savior.json\":22,\"templates/fixtures/1102-ordinal-1000.json\":22,\"templates/fixtures/1105-first-thousand.json\":22,\"templates/fixtures/1201-top-32.json\":22,\"templates/fixtures/1301-not-born-yesterday.json\":24,\"templates/fixtures/701-still-here.json\":22,\"templates/fixtures/801-last-stand.json\":22,\"templates/fixtures/T2-log-sum-composed.json\":23,\"templates/fixtures/T4-call-compare-reference.json\":21,\"templates/fixtures/T5-community-composed.json\":24,\"test/.gitkeep\":0,\"test/Adversarial.t.sol\":832,\"test/Artifacts.t.sol\":209,\"test/Attestations.t.sol\":196,\"test/Base.t.sol\":158,\"test/BurnInvariant.t.sol\":120,\"test/BurnRule.t.sol\":405,\"test/Floor.t.sol\":109,\"test/Goldens.t.sol\":444,\"test/Invariants.t.sol\":124,\"test/InvariantsExtended.t.sol\":520,\"test/NOTES.md\":520,\"test/ReReview.t.sol\":263,\"test/Registry.t.sol\":822,\"test/RegistryRules.t.sol\":335,\"test/Rename.t.sol\":224,\"test/ReviewChanges.t.sol\":215,\"test/SepoliaRehearsal.t.sol\":264,\"test/Templates.t.sol\":171,\"test/fixtures/golden_synthetic_collector_preimage.txt\":1,\"test/fixtures/golden_synthetic_collector_svg.txt\":1,\"test/fixtures/golden_synthetic_collector_uri.txt\":1,\"test/fixtures/golden_synthetic_direct_preimage.txt\":1,\"test/fixtures/golden_synthetic_direct_svg.txt\":1,\"test/fixtures/golden_synthetic_direct_uri.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_preimage.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_svg.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_uri.txt\":1,\"test/fixtures/golden_synthetic_honey_preimage.txt\":1,\"test/fixtures/golden_synthetic_honey_svg.txt\":1,\"test/fixtures/golden_synthetic_honey_uri.txt\":1,\"test/fixtures/golden_synthetic_newcomer_preimage.txt\":1,\"test/fixtures/golden_synthetic_newcomer_svg.txt\":1,\"test/fixtures/golden_synthetic_newcomer_uri.txt\":1,\"test/fixtures/golden_synthetic_oracle_preimage.txt\":1,\"test/fixtures/golden_synthetic_oracle_svg.txt\":1,\"test/fixtures/golden_synthetic_oracle_uri.txt\":1,\"test/fixtures/golden_synthetic_outsider_preimage.txt\":1,\"test/fixtures/golden_synthetic_outsider_svg.txt\":1,\"test/fixtures/golden_synthetic_outsider_uri.txt\":1,\"test/fixtures/golden_synthetic_width_preimage.txt\":1,\"test/fixtures/golden_synthetic_width_svg.txt\":1,\"test/fixtures/golden_synthetic_width_uri.txt\":1,\"test/fork/BurnRule.fork.t.sol\":193,\"test/fork/Mainnet.fork.t.sol\":338,\"test/mocks/MockBurnExecutor.sol\":157,\"test/mocks/Mocks.sol\":231,\"tools/gen_template.py\":898,\"tools/test_gen_template.py\":334},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"48e27ab566edb4c4e571a2049481aea1e0f782e1dbeb06e570c81fc11df7b110","verifiedTreeHash":"d6a8c27a8da98593f3310219a55a7b02b030a566","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":15806,"exitCode":0,"name":"build","output":"Compiling 83 files with Solc 0.8.24\nSolc 0.8.24 finished in 15.41s\nCompiler run successful with warnings:\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/mocks/MockBurnExecutor.sol:10:9:\n   |\n10 |         selfdestruct(payable(to));\n   |         ^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n  --> test/Goldens.t.sol:67:5:\n   |\n67 |     function _widthCard() internal view returns (Card memory c) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/Goldens.t.sol:345:5:\n    |\n345 |     function _card(\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":13864,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/fork/Mainnet.fork.t.sol:MainnetForkTest\n[SKIP] test_fork_attestationSignedForAnotherConsumerMissesOnTheRealIntake() (gas: 0)\n[SKIP] test_fork_curatorIsSettledWithTheBriefsConstants() (gas: 0)\n[SKIP] test_fork_firstContributorIsAnHourZeroEarlyBird() (gas: 0)\n[SKIP] test_fork_intakeV2SellsTheActionAsTheBriefRecords() (gas: 0)\n[SKIP] test_fork_lastContributorIsNoEarlyBird() (gas: 0)\n[SKIP] test_fork_memberMintsAndRendersAgainstTheRealCurator() (gas: 0)\n[SKIP] test_fork_nonMemberReadsZeroFalseAndHasNoCuratorTrait() (gas: 0)\n[SKIP] test_fork_operatorTraitReadsTheRealCollectionAndGuardsZero() (gas: 0)\n[SKIP] test_fork_pinnedBlockIsTheOneRecorded() (gas: 0)\n[SKIP] test_fork_thousandthContributorJoinedInsideTheFirstThousandWindow() (gas: 0)\n[SKIP] test_fork_upgradeThroughTheRealIntakeThenCompleteFromTheWriter() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 11 skipped; finished in 436.96µs (615.51µs CPU time)\n\nRan 6 tests for test/fork/BurnRule.fork.t.sol:BurnRuleForkTest\n[SKIP] test_fork_coldFreeClaimExactFeeFromNonpayableContractClaimant() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithSurplusBurnsAndExecutorReturnsTheSurplus() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithoutTheFeeReverts() (gas: 0)\n[SKIP] test_fork_executorConfigurationAndPinnedQuote() (gas: 0)\n[SKIP] test_fork_realExecutorAndOFTForceRefundSurplusToNonpayableRecipient() (gas: 0)\n[SKIP] test_fork_realExecutorExactFeeForNonpayableRecipient() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 6 skipped; finished in 530.00µs (333.63µs CPU time)\n\nRan 3 tests for test/Attestations.t.sol:AttestationsTest\n[PASS] test_allFiveRecoverTheAttesterUnderTheirOwnDomainOnly() (gas: 5269883)\n[PASS] test_loaderRejectsUnknownAnswerTypeNames() (gas: 4845)\n[PASS] test_protocolVectorDigestAndSelector() (gas: 2162970)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 15.12ms (18.09ms CPU time)\n\nRan 7 tests for test/Templates.t.sol:TemplatesTest\n[PASS] test_allTenBodiesAreByteExact() (gas: 1457597)\n[PASS] test_allTenQuestionHashesEqualThePlanes() (gas: 2185841)\n[PASS] test_bodyIsDeterministicInClaimantAndDiffersAcrossClaimants() (gas: 464392)\n[PASS] test_directAndUnknownIdsHaveNoBody() (gas: 60713)\n[PASS] test_hexMinAndCatalogWindows() (gas: 147416)\n[PASS] test_sepoliaChangesOnlyConsumerChainAcrossAllTenBodies() (gas: 3075316)\n[PASS] test_traitNamesAndClasses() (gas: 112489)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 18.76ms (23.53ms CPU time)\n\nRan 8 tests for test/SepoliaRehearsal.t.sol:SepoliaRehearsalTest\n[PASS] test_fuzz_mainnetHeightBoundIsMonotoneInTime(uint64,uint64) (runs: 256, μ: 20315, ~: 20374)\n[PASS] test_mainnetGuardStillUsesTheMainnetBlockNumber() (gas: 1225649)\n[PASS] test_mainnetHeightBoundIsNeverBelowARecordedHeight() (gas: 63592)\n[PASS] test_sepoliaCatalogQuestionsNameTheMainnetCurator() (gas: 6217461)\n[PASS] test_sepoliaClaimantVerifiesACatalogChainTrait() (gas: 1829820)\n[PASS] test_sepoliaDirectReadsStillUseTheDeploymentCurator() (gas: 310614)\n[PASS] test_sepoliaRegistersTheCuratorGameWindow() (gas: 1022635)\n[PASS] test_sepoliaStillRefusesAWindowMainnetCannotHaveMined() (gas: 1602784)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 33.24ms (33.56ms CPU time)\n\nRan 8 tests for test/Rename.t.sol:RenameTest\n[PASS] test_catalogSpecNamesMatchTheTable() (gas: 496540)\n[PASS] test_collectionNameAndSymbol() (gas: 25005)\n[PASS] test_composerStaysUnderTheSizeLimitWithHeadroom() (gas: 13473)\n[PASS] test_metadataCarriesTheFinalFamilyNames() (gas: 3753529)\n[PASS] test_nameTableIsTheFinalTable() (gas: 609580)\n[PASS] test_noWorkingNameSurvivesInTheNameTable() (gas: 1060323)\n[PASS] test_unknownIdHasNoName() (gas: 25179)\n[PASS] test_upgradeRefusesTopWeightsAsASharedFact() (gas: 1641444)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 129.61ms (23.59ms CPU time)\n\nRan 2 tests for test/Floor.t.sol:FloorTest\n[PASS] test_mainnetEmptyChainFloor() (gas: 72650521)\n[PASS] test_sepoliaEmptyChainFloor() (gas: 72650489)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 140.73ms (237.83ms CPU time)\n\nRan 10 tests for test/ReReview.t.sol:ReReviewTest\n[PASS] test_coldGas_firstCommunityVerificationWithACard() (gas: 2415584)\nLogs:\n  cold onResult gas, first community verification with a card: 133357\n\n[PASS] test_coldGas_sharedFact64Catalog() (gas: 1740251)\nLogs:\n  cold onResult gas, 64-address shared fact (catalog 1201): 164088\n\n[PASS] test_coldGas_sharedFact64Community() (gas: 2108985)\nLogs:\n  cold onResult gas, 64-address shared fact (community T3): 170446\n\n[PASS] test_communityAttributesAppearOnlyForVerifiedSpecs() (gas: 4751043)\n[PASS] test_constructorReadsIsSettledWithoutWriting() (gas: 137310)\n[PASS] test_hugeSignatureOnCommunitySharedFactAndCardRequestClearsUnderStipend() (gas: 12243108)\n[PASS] test_lowerOrdinalAcquiredLaterReplacesTheHigherOne() (gas: 8479122)\n[PASS] test_sameSignedEvidenceSatisfiesAnotherRequestWithTheSameQuestion() (gas: 3262910)\n[PASS] test_specIdsEndAt65534() (gas: 909597)\n[PASS] test_unusedFixedValIsRefusedAndAnEmptyFilterIsNotSerialised() (gas: 1334489)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 173.10ms (38.41ms CPU time)\n\nRan 29 tests for test/Registry.t.sol:RegistryTest\n[PASS] test_abandonOnlyAfterFourteenDaysAndStaleCallbackLeavesSuccessor() (gas: 3333466)\n[PASS] test_anyoneReadsAnyWalletAndNothingUsesTxOrigin() (gas: 1943257)\n[PASS] test_attestationForAnotherConsumerOrChainIsNeverAccepted() (gas: 3213846)\n[PASS] test_callbacksRejectEveryoneButTheIntake() (gas: 1630434)\n[PASS] test_claimSponsoredRules() (gas: 5264004)\n[PASS] test_directTraitsAreLiveAndNeedNoCard() (gas: 605974)\n[PASS] test_fuzz_tiersAreMonotone(uint8,bool,uint32,uint128,uint32,uint8) (runs: 256, μ: 704763, ~: 695451)\n[PASS] test_mainnetQuestionAcceptedUnderSepoliaConsumerDomain() (gas: 1726675)\n[PASS] test_mainnetSignatureCannotAnswerSepoliaConsumer() (gas: 1667544)\n[PASS] test_malformedEnvelopeIsNotDeliveredAndStaysPending() (gas: 1561112)\n[PASS] test_mintOncePerWalletAndTransfersKeepClaimant() (gas: 956472)\n[PASS] test_mintWithoutFeeReverts() (gas: 47096)\n[PASS] test_missReasons() (gas: 29440347)\n[PASS] test_noReceiveOrFallback() (gas: 57774)\n[PASS] test_nonMemberIsNeverAnEarlyBird() (gas: 232419)\n[PASS] test_onFailureClearsAndAllowsRetry() (gas: 3006144)\n[PASS] test_onResultGasWorstCase() (gas: 2334293)\nLogs:\n  onResult worst-case gas: 164955\n\n[PASS] test_poolIsTheBalanceAndOnlyLeavesThroughSponsoredRequests() (gas: 5657704)\n[PASS] test_reentrantTokenCannotReenterMint() (gas: 2358744)\n[PASS] test_registerSpecAssignsSequentialIdsAndIsImmutable() (gas: 1231919)\n[PASS] test_sepoliaQuestionMissesWithReasonThreeUnderSepoliaDomain() (gas: 1654372)\n[PASS] test_sharedFactBadEnvelopeIsAMissAndCanBeRequestedAgain() (gas: 6925553)\n[PASS] test_sharedFactFlow() (gas: 2478075)\n[PASS] test_specGuards() (gas: 1337374)\n[PASS] test_strangerCannotDiscardLateValidAnswer() (gas: 1727693)\n[PASS] test_supportsERC4906AndERC721() (gas: 25952)\n[PASS] test_upgradeGuards() (gas: 6034862)\n[PASS] test_upgradeHappyPathMarksTraitAndRefreshesCard() (gas: 2537520)\n[PASS] test_upgradeWithoutCardAttachesToClaimant() (gas: 1895253)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 221.16ms (249.18ms CPU time)\n\nRan 8 tests for test/Artifacts.t.sol:ArtifactsTest\n[PASS] test_constructorAcceptsUnavailableCuratorOnEmptyFloor() (gas: 16156)\n[PASS] test_constructorRejectsUnsettledOrUnavailableCurator() (gas: 262986)\n[PASS] test_constructorRejectsZeroAddressesAndStoresTheRest() (gas: 8024)\n[PASS] test_deployScriptUsesMainnetConstantsOnEveryOtherChain() (gas: 60662450)\n[PASS] test_deployScriptUsesSepoliaConstantsAndNonzeroExecutor() (gas: 31208855)\n[PASS] test_noForbiddenOpcodesInRuntime() (gas: 56309448)\n[PASS] test_noImmutableReferencesInAnyArtifact() (gas: 92960456)\n[PASS] test_twoDeploymentsHaveIdenticalRuntimeCode() (gas: 3577724)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 340.02ms (150.63ms CPU time)\n\nRan 10 tests for test/ReviewChanges.t.sol:ReviewChangesTest\n[PASS] test_fuzz_emptyFixedArgRequiresZeroValueForT1AndT2(uint256) (runs: 256, μ: 3039007, ~: 3038797)\nLogs:\n  Bound result 507993366093923789062821\n\n[PASS] test_fuzz_ordinalShowsLowestVerifiedId(uint8) (runs: 256, μ: 4593287, ~: 4866125)\nLogs:\n  Bound result 1\n\n[PASS] test_hugeAnswerClearsUintBoolAndSharedRequestsUnderStipend() (gas: 26379788)\n[PASS] test_hugeSignatureClearsPendingAndAllowsImmediateRetry() (gas: 6838211)\n[PASS] test_metadataReportsMinimaEvenWhenSignedPanelIsLarger() (gas: 6306433)\n[PASS] test_scalarAnswerLengthPrecedesChainSignerAndClaimedType() (gas: 17767584)\n[PASS] test_sharedAnswerUpperBoundPrecedesChainAndSigner() (gas: 4503532)\n[PASS] test_signatureLengthPrecedesAnswerLengthAndChain() (gas: 37652039)\n[PASS] test_unknownRequestStillPrecedesDynamicSizeChecks() (gas: 12871822)\n[PASS] test_validationPrecedenceAfterSizes() (gas: 18086010)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 344.64ms (771.47ms CPU time)\n\nRan 19 tests for test/Goldens.t.sol:GoldensTest\n[PASS] test_escapeJsonNeutralisesMarkup() (gas: 42645)\n[PASS] test_goldenSyntheticCollector() (gas: 20831323)\n[PASS] test_goldenSyntheticDirect() (gas: 5078827)\n[PASS] test_goldenSyntheticFullhouse() (gas: 21514473)\n[PASS] test_goldenSyntheticHoney() (gas: 23746288)\n[PASS] test_goldenSyntheticNewcomer() (gas: 3219081)\n[PASS] test_goldenSyntheticOracle() (gas: 8915956)\n[PASS] test_goldenSyntheticOutsider() (gas: 5211326)\n[PASS] test_goldenSyntheticWidthThroughTheRenderer() (gas: 24718798)\n[PASS] test_imageCommunityPathFollowsTheStepTable() (gas: 13547491)\n[PASS] test_imageIdsOutsideTheCatalogRenderWithoutReverting() (gas: 763825)\n[PASS] test_imageIsPureAndDeterministic() (gas: 16076101)\n[PASS] test_imageOverflowPathAbsentAtOrBelow39AndNeverOverflows() (gas: 13459611)\n[PASS] test_imageRareDotOnlyAtATopTierRareId() (gas: 17170837)\n[PASS] test_imageRingsByCommunityCount() (gas: 5559349)\n[PASS] test_imageStepsUseExponentiationNotXor() (gas: 6674005)\n[PASS] test_reportRendererRuntimeSize() (gas: 129606)\nLogs:\n  Renderer runtime bytes: 21570\n\n[PASS] test_reportTokenURIGas() (gas: 29841499)\nLogs:\n  tokenURI gas synthetic_width: 10810085\n  tokenURI gas synthetic_fullhouse: 9147472\n  tokenURI gas synthetic_honey: 9589924\n\n[PASS] test_templateArtifactsMatchTheCompiledConstants() (gas: 297819)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 348.05ms (532.41ms CPU time)\n\nRan 24 tests for test/BurnRule.t.sol:BurnRuleTest\n[PASS] testFuzz_belowThresholdRefundsWithoutFee(bool,uint96,uint96) (runs: 256, μ: 1562715, ~: 1572851)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueForwardsWholeValueAndExecutorForceRefunds(bool,uint96,uint96) (runs: 256, μ: 1831826, ~: 1843951)\nLogs:\n  Bound result 79228162514264337593543950335\n  Bound result 264337514315787821\n\n[PASS] testFuzz_dueWithoutEnoughFeeRevertsAtomically(bool,uint96,uint96) (runs: 256, μ: 3243460, ~: 3270770)\nLogs:\n  Bound result 79228162445264337594393674477\n  Bound result 337593543950335\n\n[PASS] testFuzz_failedPreviewOrBridgeSkipsAndRefunds(bool,uint8,uint96) (runs: 256, μ: 1833862, ~: 1606164)\nLogs:\n  Bound result 4\n  Bound result 562719717216947147\n\n[PASS] testFuzz_nonpayableContractWorksWithNoValueExactFeeAndSurplus(bool,uint8) (runs: 256, μ: 1938741, ~: 1976404)\nLogs:\n  Bound result 2\n\n[PASS] testFuzz_previewExceedingTheBudgetSkipsWithCodeOneAndRefunds(bool,uint96) (runs: 256, μ: 2165142, ~: 2150697)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] testFuzz_quoteAboveCapSkipsWithCodeThree(bool,uint96,uint96) (runs: 256, μ: 1566641, ~: 1581381)\nLogs:\n  Bound result 79228162514259337594393674476\n  Bound result 264337514315787821\n\n[PASS] testFuzz_unsetExecutorDisablesBurnAndRefunds(bool,uint96) (runs: 256, μ: 1581615, ~: 1567436)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] test_constantsAndStorage() (gas: 29216)\n[PASS] test_constructorRejectsNonzeroExecutorWithoutCodeAndAcceptsZeroOrCode() (gas: 22214)\n[PASS] test_exactFeeAndCapAreInclusive() (gas: 1708610)\n[PASS] test_executorReentryIsGuarded() (gas: 1770521)\n[PASS] test_executorSurplusCallReentryIsGuarded() (gas: 2351890)\n[PASS] test_executorSurplusIsForcedOnARejectingRecipient() (gas: 1984962)\n[PASS] test_existingChecksAndIntakeFailurePrecedeBurnFeeCheck() (gas: 579753)\n[PASS] test_gasArgumentsIncludeOnlyTheValueStipend() (gas: 1694399)\n[PASS] test_noFeeAtExactThresholdReverts() (gas: 1537275)\n[PASS] test_nonpayableContractAcceptsZeroRefundOnPreviewFailure() (gas: 1791339)\n[PASS] test_paidFunctionsRejectOneWeiWhereZeroValueSucceeds() (gas: 3763404)\n[PASS] test_previewUsingMostOfTheBudgetIsQuotedAndBurns() (gas: 2236765)\n[PASS] test_registryRefundReentryIsGuarded() (gas: 2174439)\n[PASS] test_rejectedNonzeroRegistryRefundRevertsAllEffects() (gas: 1949413)\n[PASS] test_zeroQuoteStillTriggersWhenDue() (gas: 1643756)\n[PASS] test_zeroValueHasNoStipend() (gas: 1564856)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 348.13ms (1.59s CPU time)\n\nRan 17 tests for test/RegistryRules.t.sol:RegistryRulesTest\n[PASS] test_constructorPriceCheckIsPassiveAndAcceptsAnyNonzeroPrice() (gas: 147502)\n[PASS] test_constructorRejectsEachSingleMistypedDependency() (gas: 19912)\n[PASS] test_constructorRejectsPartiallyCodedDependencyFloor() (gas: 19824)\n[PASS] test_constructorRejectsUnavailableIntake() (gas: 26489)\n[PASS] test_constructorRejectsWrongAsset() (gas: 548859)\n[PASS] test_constructorRejectsZeroIntakePrice() (gas: 42182)\n[PASS] test_fuzz_bothPoolPathsShareOneAllowancePerUtcDay(bool,bool,uint32) (runs: 256, μ: 3245874, ~: 3226887)\nLogs:\n  Bound result 3675\n\n[PASS] test_idmdCounterFollowsTransfersAndStopsAtNine() (gas: 15434120)\n[PASS] test_idmdHolderMustAlsoBeAListMember() (gas: 1763951)\n[PASS] test_memberClaimsOnDeploymentDayWithoutCardOrIdmd() (gas: 1675022)\n[PASS] test_noVerdictConsumesTheDayAndLifetimePair() (gas: 3269502)\n[PASS] test_paidUpgradeAndSharedFactDoNotUseOrObeyPoolDailyLimit() (gas: 8189294)\n[PASS] test_revertingIntakeDoesNotConsumePoolAllowances() (gas: 2028592)\n[PASS] test_specAndFirstClaimCostSixPointNineIMD() (gas: 1880817)\n[PASS] test_specRequiresFullFeeAndAllowance() (gas: 798883)\n[PASS] test_sponsoredUpgradeRequiresExactlyOneTrait() (gas: 1780326)\n[PASS] test_switchingIdmdDoesNotBypassDailyLimit() (gas: 3192030)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 407.77ms (217.65ms CPU time)\n\nRan 32 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_abandonedSharedFactCanBeRequestedAgainAndTheLateAnswerIsIgnored() (gas: 3063452)\n[PASS] test_attestationForAnotherClaimantIsAMissForThisRequest() (gas: 3244206)\n[PASS] test_attestationForAnotherTraitWithTheSameWindowIsAMiss() (gas: 3247257)\n[PASS] test_callbackStarvedOfGasIsNotDeliveredAndStaysPending() (gas: 1692953)\n[PASS] test_cardShowsAtMostThirtyTwoCommunityIdsAndCountsThemAll() (gas: 86215566)\n[PASS] test_claimSponsoredWhilePendingOrVerifiedReverts() (gas: 2104530)\n[PASS] test_communityT3SpecIsASharedFactWithItsOwnHead() (gas: 2423017)\n[PASS] test_everyTemplateVerifiesUnderTheStipendWithACard() (gas: 11730795)\n[PASS] test_expiryAtTheExactSecondStillPassesAndOneLaterDoesNot() (gas: 3241538)\n[PASS] test_fuzz_abandonedPoolRequestKeepsPoolUsedAndLateCallbackIsIgnored(bool) (runs: 256, μ: 1907761, ~: 1907761)\n[PASS] test_fuzz_anyFieldAlteredAfterSigningIsASignatureMiss(uint8,uint256) (runs: 512, μ: 1653012, ~: 1654214)\nLogs:\n  Bound result 0\n\n[PASS] test_fuzz_applySharedFactOnlyWithinTheHead(uint8,uint8) (runs: 256, μ: 1778140, ~: 1763312)\nLogs:\n  Bound result 2\n  Bound result 0\n\n[PASS] test_fuzz_boolAnswerMustBeExactlyZeroOrOne(uint256) (runs: 512, μ: 2076161, ~: 2075770)\n[PASS] test_fuzz_countAnswerAgainstTheThreshold(uint256,bytes1,bool) (runs: 512, μ: 1654364, ~: 1626024)\n[PASS] test_fuzz_expiryAndClockSkewBoundaries(uint64,uint64) (runs: 512, μ: 1650733, ~: 1641459)\n[PASS] test_fuzz_hasTraitAndTraitsOfNeverRevert(address,uint16,uint8,bool,uint8) (runs: 512, μ: 322607, ~: 333439)\n[PASS] test_fuzz_maximalSpecRegistersComposesAndFitsTheBody(uint8,uint256,uint256) (runs: 64, μ: 2467105, ~: 2709104)\nLogs:\n  Bound result 1\n  Bound result 21803\n\n[PASS] test_fuzz_panelAndQuorumBoundaries(uint16,uint16,uint16) (runs: 512, μ: 1655573, ~: 1640592)\n[PASS] test_fuzz_panelTraitNeedsElevenAndSeven(uint16,uint16,uint16) (runs: 512, μ: 2084091, ~: 2069577)\n[PASS] test_fuzz_specBodyIsDeterministicAndClaimantBound(address,address) (runs: 256, μ: 864577, ~: 864577)\n[PASS] test_fuzz_upgradeChargesExactlyKTimesPriceAndLeavesThePoolAlone(uint8,uint256) (runs: 256, μ: 5091133, ~: 4217881)\nLogs:\n  Bound result 5\n  Bound result 6900000000000000000\n\n[PASS] test_fuzz_upgradeRejectsEveryIdThatIsNotAnOracleTrait(uint16) (runs: 256, μ: 209803, ~: 209262)\n[PASS] test_fuzz_windowMustEqualTheCanonicalOne(uint64,uint64) (runs: 512, μ: 1641001, ~: 1640990)\n[PASS] test_onFailureRecordsWhatItIsToldAndStoresNothing() (gas: 3064198)\n[PASS] test_questionHashIsBoundToTheClaimantAndTheTrait() (gas: 690361)\n[PASS] test_reentrantTokenCannotReenterAnyIMDMovingFunction() (gas: 7517031)\n[PASS] test_sharedFactWorstCaseEnvelopeUnderTheStipend() (gas: 3983876)\n[PASS] test_signatureShapesThatDoNotRecover() (gas: 9338096)\n[PASS] test_tokenURIDependsOnlyOnTheClaimantsFacts() (gas: 14700480)\n[PASS] test_traitClassForEveryCatalogIdAndRevertsForUnknown() (gas: 703103)\n[PASS] test_upgradeSponsoredDrawsAllNineOverNineDaysAndRefusesDuplicates() (gas: 12560682)\n[PASS] test_verifiedWindowIsTheCanonicalWindowForEveryOracleId() (gas: 16465073)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 406.47ms (2.75s CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariant_oneCardPerClaimantWithImmutableClaimant\n[PASS] invariant_poolOnlyLeavesThroughSponsoredRequests\n InvariantsTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claimSponsored    | 3168  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | mintCard          | 3273  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | sponsor           | 3362  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | transfer          | 3278  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | upgradeAndDeliver | 3303  | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1665966098282596516\n  Bound result 1753285599678589602\n  Bound result 556910385464765070\n  Bound result 21172\n  Bound result 500000004956284797\n  Bound result 2271\n  Bound result 1807372217379960487\n  Bound result 1670051435191597916\n  Bound result 3645\n  Bound result 30070628031449\n  Bound result 9893\n  Bound result 3297616802100892\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.22s (5.22s CPU time)\n\nRan 1 test for test/BurnInvariant.t.sol:BurnInvariantTest\n[PASS] invariant_registryRetainsNoClaimETHAndPoolOnlyFundsOracleRequests() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| BurnHandler | claim    | 16384 | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 111685795089766338482\n  Bound result 43\n  Bound result 84265\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1880942921\n  Bound result 74264337592978034889\n  Bound result 29472\n  Bound result 7769\n  Bound result 14446206397732\n  Bound result 1744\n  Bound result 821\n  Bound result 73686426\n  Bound result 20839938009\n  Bound result 31530\n  Bound result 3847111\n  Bound result 3490697260845\n  Bound result 17483265397356312\n  Bound result 5164\n  Bound result 4329670727698909\n  Bound result 6746\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2194\n  Bound result 74264337592978034889\n  Bound result 4960\n  Bound result 1948284776\n  Bound result 1026170\n  Bound result 187383584233\n  Bound result 18980794936170296\n  Bound result 74264337592978034889\n  Bound result 9999999999900250\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 5\n  Bound result 3820046261089565\n  Bound result 5175893019725063\n  Bound result 30\n  Bound result 4329670727698909\n  Bound result 542659680210\n  Bound result 15\n  Bound result 133316654177\n  Bound result 65\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7199\n  Bound result 74264337592978034889\n  Bound result 16432\n  Bound result 19314606483330280\n  Bound result 1153\n  Bound result 5666\n  Bound result 14234944980203488\n  Bound result 97201480810262094948\n  Bound result 1827\n  Bound result 6204\n  Bound result 74264337592978034889\n  Bound result 16569\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 24074\n  Bound result 1859\n  Bound result 4329670727698909\n  Bound result 692\n  Bound result 2792\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 6182\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3137\n  Bound result 4329670727698909\n  Bound result 1048578\n  Bound result 21804\n  Bound result 1808\n  Bound result 18709118384163692\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 1686\n  Bound result 9999999999990001\n  Bound result 4333632135824622\n  Bound result 2952712416\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 19087867150709838\n  Bound result 23773\n  Bound result 4329670727698909\n  Bound result 470\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2439\n  Bound result 23014\n  Bound result 1047234902803704\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 7454\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7606\n  Bound result 9288\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 494\n  Bound result 1478721918647272\n  Bound result 4333632135824622\n  Bound result 113261144333\n  Bound result 8\n  Bound result 115\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 16002\n  Bound result 16056\n  Bound result 4329670727698909\n  Bound result 7111\n  Bound result 414\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 5014\n  Bound result 4333632135824622\n  Bound result 102366482869645213663\n  Bound result 4329670727698909\n  Bound result 7027630987625673\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 91367124398043712191\n  Bound result 1017569300830\n  Bound result 7085897216441890\n  Bound result 74264337592978034889\n  Bound result 1487264720600082\n  Bound result 4333632135824622\n  Bound result 3443\n  Bound result 4329670727698909\n  Bound result 4858084361544526\n  Bound result 74264337592978034889\n  Bound result 8843781773092486\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 3756326418473844\n  Bound result 11604\n  Bound result 52806580125533239\n  Bound result 3165560241530197\n  Bound result 11420499685075676\n  Bound result 74264337592978034889\n  Bound result 1400596229208459\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 392\n  Bound result 82718949488418772971\n  Bound result 4061674789252195\n  Bound result 36345705\n  Bound result 74264337592978034889\n  Bound result 21298\n  Bound result 17788\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 15583\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 1651467385\n  Bound result 12964\n  Bound result 14648\n  Bound result 1000\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 13103\n  Bound result 6981365948995230\n  Bound result 3173737282378038\n  Bound result 74264337592978034889\n  Bound result 4102515885213608\n  Bound result 4333632135824622\n  Bound result 3276318195313711\n  Bound result 153645\n  Bound result 3\n  Bound result 74264337592978034889\n  Bound result 2615877716628276\n  Bound result 11883789608241943\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.75s (11.75s CPU time)\n\nRan 3 tests for test/InvariantsExtended.t.sol:InvariantsExtendedTest\n[PASS]\nInvariantsExtendedTest invariants:\n[PASS] invariant_markedExactlyWhenAPassingAttestationWasDelivered\n[PASS] invariant_oneCardPerClaimant\n[PASS] invariant_poolDailyAndLifetimeLimits\n[PASS] invariant_poolIsFeesPlusDonationsMinusSponsoredRequests\n[PASS] invariant_sharedFactsAreHashesStoredOnlyOnDelivery\n[PASS] invariant_specsAreImmutable\n InvariantsExtendedTest invariants (runs: 96, calls: 4608, reverts: 0)\n\n╭-------------+-------------------+-------+---------+----------╮\n| Contract    | Selector          | Calls | Reverts | Discards |\n+==============================================================+\n| FullHandler | abandonLate       | 301   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | advanceTime       | 241   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | applyShared       | 267   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | claimSponsored    | 250   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverFalse      | 273   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTampered   | 293   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTrue       | 253   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | donate            | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | failRequest       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | mintCard          | 263   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | registerSpec      | 284   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | replayConsumed    | 282   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | requestSharedFact | 287   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | sponsor           | 288   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | transfer          | 280   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradePaid       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradeSponsored  | 251   | 0       | 0        |\n╰-------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 116245\n  Bound result 1\n  Bound result 21\n  Bound result 0\n  Bound result 17056\n  Bound result 1\n  Bound result 16140\n  Bound result 1778899687479219757\n  Bound result 1344657187254584727\n  Bound result 5\n  Bound result 2\n  Bound result 20635105881425825\n  Bound result 3479\n  Bound result 1\n  Bound result 1743\n  Bound result 3\n  Bound result 4\n  Bound result 1\n\n[PASS] test_handlerReplayOfAConsumedIdChangesNothing() (gas: 1920763)\n[PASS] test_handlerSponsoredSelectionAcceptsMaxSeed() (gas: 1764003)\nLogs:\n  Bound result 3000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 13.64s (13.64s CPU time)\n\nRan 18 test suites in 13.64s (33.54s CPU time): 182 tests passed, 0 failed, 17 skipped (199 total tests)\n","passed":true},{"durationMs":273,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Registry.abandon(bytes32)\",\"Registry.applySharedFact(uint16,address[])\",\"Registry.approve(address,uint256)\",\"Registry.claimSponsored(uint16)\",\"Registry.mintCard()\",\"Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Registry.onResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Registry.registerSpec((uint8,address,string,string,string,uint256,string,uint8,uint256,uint64,uint64,string))\",\"Registry.requestSharedFact(uint16,uint256)\",\"Registry.safeTransferFrom(address,address,uint256)\",\"Registry.safeTransferFrom(address,address,uint256,bytes)\",\"Registry.setApprovalForAll(address,bool)\",\"Registry.sponsor(uint256)\",\"Registry.transferFrom(address,address,uint256)\",\"Registry.upgrade(uint16[],uint256)\",\"Registry.upgradeSponsored(uint256,uint16[])\"],\"files\":{\".gitignore\":8,\".gitmodules\":6,\"ADAPTATION.md\":234,\"CATALOG.md\":268,\"CONCEPT.md\":262,\"DISCLOSURE.md\":58,\"INTEGRATION.md\":450,\"LICENSE\":21,\"README.md\":431,\"TEMPLATES.md\":158,\"foundry.toml\":44,\"reference/Intake.sol\":5175,\"reference/IntakeV2.sol\":5240,\"reference/PROVENANCE.md\":44,\"reference/abi/IMD.json\":1684,\"reference/abi/IdentityMD.json\":894,\"reference/abi/Intake.json\":955,\"reference/abi/IntakeV2.json\":1070,\"reference/abi/WhitelistCurator.json\":794,\"reference/anchors/headers.json\":61,\"reference/attestations/2026-10-10-link-pilot.json\":92,\"reference/attestations/2026-10-10-meatbag-consumer.json\":104,\"reference/attestations/2026-10-11-feed-consumer-v2.json\":105,\"reference/attestations/2026-10-11-nonce-false.json\":92,\"reference/attestations/2026-10-11-nonce-true.json\":92,\"reference/attestations/README.md\":29,\"reference/burn/BurnExecutorV2.sol.txt\":314,\"reference/burn/abi.json\":1001,\"reference/burn/provenance.json\":17,\"reference/intake/completions.json\":147,\"reference/list-record/src/ListRecord.sol\":169,\"reference/list-record/src/ListRecordRenderer.sol\":126,\"reference/list-record/src/interfaces/IListRecordRenderer.sol\":29,\"reference/list-record/src/lib/SSTORE2.sol\":39,\"reference/list-record/src/lib/Str.sol\":54,\"reference/list-record/test/Renderer.t.sol\":165,\"reference/list-record/test/RendererMechanism.t.sol\":203,\"reference/list-record/test/Template.t.sol\":293,\"reference/list-record/test/fixtures/golden_synthetic_held_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_held_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_uri.txt\":1,\"reference/plane/checks/1001-hour-savior.json\":81,\"reference/plane/checks/1102-ordinal-1000.json\":81,\"reference/plane/checks/1105-first-thousand.json\":81,\"reference/plane/checks/1201-top-32.json\":82,\"reference/plane/checks/1301-not-born-yesterday.json\":86,\"reference/plane/checks/701-still-here.json\":81,\"reference/plane/checks/801-last-stand.json\":81,\"reference/plane/checks/T2-log-sum-composed.json\":81,\"reference/plane/checks/T4-call-compare-reference.json\":81,\"reference/plane/checks/T5-community-composed.json\":86,\"reference/plane/questionHashes.json\":92,\"reference/plane/quotes/1001-hour-savior.json\":20,\"reference/plane/quotes/1102-ordinal-1000.json\":20,\"reference/plane/quotes/1105-first-thousand.json\":20,\"reference/plane/quotes/1201-top-32.json\":20,\"reference/plane/quotes/1301-not-born-yesterday.json\":20,\"reference/plane/quotes/701-still-here.json\":20,\"reference/plane/quotes/801-last-stand.json\":20,\"reference/plane/quotes/T2-log-sum-composed.json\":20,\"reference/plane/quotes/T4-call-compare-reference.json\":20,\"reference/plane/quotes/T5-community-composed.json\":20,\"remappings.txt\":2,\"script/Deploy.s.sol\":48,\"src/Composer.sol\":652,\"src/HiveData.sol\":75,\"src/Registry.sol\":761,\"src/Renderer.sol\":427,\"src/TemplateData.sol\":16,\"src/Types.sol\":41,\"src/interfaces/IBurnExecutor.sol\":12,\"src/interfaces/IIDMD.sol\":8,\"src/interfaces/IIntake.sol\":29,\"src/interfaces/IOracleConsumer.sol\":38,\"src/interfaces/IWhitelistCurator.sol\":53,\"template/blob.hex\":1,\"template/offsets.txt\":1,\"templates/fixtures/1001-hour-savior.json\":22,\"templates/fixtures/1102-ordinal-1000.json\":22,\"templates/fixtures/1105-first-thousand.json\":22,\"templates/fixtures/1201-top-32.json\":22,\"templates/fixtures/1301-not-born-yesterday.json\":24,\"templates/fixtures/701-still-here.json\":22,\"templates/fixtures/801-last-stand.json\":22,\"templates/fixtures/T2-log-sum-composed.json\":23,\"templates/fixtures/T4-call-compare-reference.json\":21,\"templates/fixtures/T5-community-composed.json\":24,\"test/.gitkeep\":0,\"test/Adversarial.t.sol\":832,\"test/Artifacts.t.sol\":209,\"test/Attestations.t.sol\":196,\"test/Base.t.sol\":158,\"test/BurnInvariant.t.sol\":120,\"test/BurnRule.t.sol\":405,\"test/Floor.t.sol\":109,\"test/Goldens.t.sol\":444,\"test/Invariants.t.sol\":124,\"test/InvariantsExtended.t.sol\":520,\"test/NOTES.md\":520,\"test/ReReview.t.sol\":263,\"test/Registry.t.sol\":822,\"test/RegistryRules.t.sol\":335,\"test/Rename.t.sol\":224,\"test/ReviewChanges.t.sol\":215,\"test/SepoliaRehearsal.t.sol\":264,\"test/Templates.t.sol\":171,\"test/fixtures/golden_synthetic_collector_preimage.txt\":1,\"test/fixtures/golden_synthetic_collector_svg.txt\":1,\"test/fixtures/golden_synthetic_collector_uri.txt\":1,\"test/fixtures/golden_synthetic_direct_preimage.txt\":1,\"test/fixtures/golden_synthetic_direct_svg.txt\":1,\"test/fixtures/golden_synthetic_direct_uri.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_preimage.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_svg.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_uri.txt\":1,\"test/fixtures/golden_synthetic_honey_preimage.txt\":1,\"test/fixtures/golden_synthetic_honey_svg.txt\":1,\"test/fixtures/golden_synthetic_honey_uri.txt\":1,\"test/fixtures/golden_synthetic_newcomer_preimage.txt\":1,\"test/fixtures/golden_synthetic_newcomer_svg.txt\":1,\"test/fixtures/golden_synthetic_newcomer_uri.txt\":1,\"test/fixtures/golden_synthetic_oracle_preimage.txt\":1,\"test/fixtures/golden_synthetic_oracle_svg.txt\":1,\"test/fixtures/golden_synthetic_oracle_uri.txt\":1,\"test/fixtures/golden_synthetic_outsider_preimage.txt\":1,\"test/fixtures/golden_synthetic_outsider_svg.txt\":1,\"test/fixtures/golden_synthetic_outsider_uri.txt\":1,\"test/fixtures/golden_synthetic_width_preimage.txt\":1,\"test/fixtures/golden_synthetic_width_svg.txt\":1,\"test/fixtures/golden_synthetic_width_uri.txt\":1,\"test/fork/BurnRule.fork.t.sol\":193,\"test/fork/Mainnet.fork.t.sol\":338,\"test/mocks/MockBurnExecutor.sol\":157,\"test/mocks/Mocks.sol\":231,\"tools/gen_template.py\":898,\"tools/test_gen_template.py\":334},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":4933,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/Registry.sol:718: Registry._fromPool(uint16) (src/Registry.sol#718-731) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:509: Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes) (src/Registry.sol#509-521) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:524: Registry._rule(uint16) (src/Registry.sol#524-538) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:524: Registry._rule(uint16) (src/Registry.sol#524-538) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:421: Registry.abandon(bytes32) (src/Registry.sol#421-428) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:524: Registry._rule(uint16) (src/Registry.sol#524-538) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:484: Registry.onResult(bytes32,OracleAttestation,bytes) (src/Registry.sol#484-506) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:524: Registry._rule(uint16) (src/Registry.sol#524-538) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/Registry.sol:446: Reentrancy in Registry._request(address,uint16,uint256) (src/Registry.sol#446-468):\n[medium/medium] uninitialized-local at src/Composer.sol:566: Composer.encodeBody(Composer.Question,address).defs (src/Composer.sol#566) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Registry.sol:269: Registry.cardOf(uint256).k (src/Registry.sol#269) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Renderer.sol:407: Renderer.escapeJson(bytes).o (src/Renderer.sol#407) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Registry.sol:659: Registry.applySharedFact(uint16,address[]).found (src/Registry.sol#659) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Composer.sol:638: Composer.hexMin(uint256).n (src/Composer.sol#638) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Composer.sol:201: Composer.traitsOf(address,address).n (src/Composer.sol#201) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Renderer.sol:318: Renderer._communityAttributes(Card).name (src/Renderer.sol#318) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Registry.sol:264: Registry.cardOf(uint256).n (src/Registry.sol#264) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Composer.sol:611: Composer.canonical(Composer.Question).defs (src/Composer.sol#611) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Renderer.sol:399: Renderer.escapeJson(bytes).extra (src/Renderer.sol#399) is a local variable never initialized\n[medium/medium] unused-return at src/Registry.sol:713: Registry._requireMember() (src/Registry.sol#713-716) ignores return value by (None,joined) = curator.firstHourOf(msg.sender) (src/Registry.sol#714)\n[medium/medium] unused-return at src/Registry.sol:541: Registry._check(Registry.Pending,OracleAttestation,bytes,uint8,uint64,uint64) (src/Registry.sol#541-569) ignores return value by (signer,err,None) = ECDSA.tryRecover(attestationDigest(a),v,r,s) (src/Registry.sol#560)\n[medium/medium] unused-return at src/Registry.sol:735: Registry._burnOrRefund() (src/Registry.sol#735-760) ignores return value by (amount,fee) = burnExecutor.previewBridge{gas: PREVIEW_GAS}() (src/Registry.sol#737-754)\n[low/medium] calls-loop at src/Registry.sol:371: Registry.specOf(uint16) (src/Registry.sol#371-379) has external calls inside a loop: composer.catalogSpec(traitId,address(curator)) (src/Registry.sol#378)\n[low/medium] calls-loop at src/Registry.sol:371: Registry.specOf(uint16) (src/Registry.sol#371-379) has external calls inside a loop: composer.catalogSpec(traitId,address(curator)) (src/Registry.sol#378)\n[low/medium] calls-loop at src/Registry.sol:446: Registry._request(address,uint16,uint256) (src/Registry.sol#446-468) has external calls inside a loop: requestId = intake.requestWithFailure(ACTION,body,IIntake.Callback(address(this),this.onResult.selector),this.onFailure.selector,address(imd),price) (src/Registry.sol#456-463)\n[low/medium] calls-loop at src/Registry.sol:371: Registry.specOf(uint16) (src/Registry.sol#371-379) has external calls inside a loop: composer.catalogSpec(traitId,address(curator)) (src/Registry.sol#378)\n[low/medium] calls-loop at src/Composer.sol:172: Composer.traitsOf(address,address) (src/Composer.sol#172-209) has external calls inside a loop: ICatalogRegistry(registry).hasTrait(wallet,all[i]) (src/Composer.sol#203)\n[low/medium] calls-loop at src/Registry.sol:382: Registry.composeBody(uint16,address) (src/Registry.sol#382-389) has external calls inside a loop: composer.compose(s,claimant,address(this),traitId == 1301,address(curator)) (src/Registry.sol#388)\n[low/medium] reentrancy-benign at src/Registry.sol:446: Reentrancy in Registry._request(address,uint16,uint256) (src/Registry.sol#446-468):\n[low/medium] timestamp at src/Registry.sol:484: Registry.onResult(bytes32,OracleAttestation,bytes) (src/Registry.sol#484-506) uses timestamp for comparisons\n[low/medium] timestamp at src/Composer.sol:313: Composer.mainnetHeightBound() (src/Composer.sol#313-316) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:596: Registry._mark(address,uint16,bytes32,bytes32) (src/Registry.sol#596-602) uses timestamp for comparisons\n[low/medium] timestamp at src/Composer.sol:250: Composer.validateSpec(Spec,uint256) (src/Composer.sol#250-309) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:509: Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes) (src/Registry.sol#509-521) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:524: Registry._rule(uint16) (src/Registry.sol#524-538) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:718: Registry._fromPool(uint16) (src/Registry.sol#718-731) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:471: Registry._clear(bytes32,Registry.Pending) (src/Registry.sol#471-478) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:421: Registry.abandon(bytes32) (src/Registry.sol#421-428) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:541: Registry._check(Registry.Pending,OracleAttestation,bytes,uint8,uint64,uint64) (src/Registry.sol#541-569) uses timestamp for comparisons","passed":true},{"durationMs":998,"exitCode":0,"name":"aderyn","output":"[high] abi-encode-packed-hash-collision at src/Renderer.sol:62: `abi.encodePacked()` Hash Collision\n[high] reentrancy-state-change at src/Registry.sol:207: Reentrancy: State change after external call (4 places)\n[low] costly-loop at src/Registry.sol:404: Costly operations inside loop\n[low] internal-function-used-once at src/Composer.sol:362: Internal Function Used Only Once (4 places)\n[low] large-numeric-literal at src/Composer.sol:113: Large Numeric Literal (4 places)\n[low] literal-instead-of-constant at src/Composer.sol:90: Literal Instead of Constant (248 places)\n[low] require-revert-in-loop at src/Composer.sol:262: Loop Contains `require`/`revert` (7 places)\n[low] state-variable-could-be-immutable at src/Registry.sol:94: State Variable Could Be Immutable (9 places)\n[low] unchecked-return at src/Registry.sol:415: Unchecked Return (2 places)\n[low] uninitialized-local-variable at src/Composer.sol:638: Uninitialized Local Variable (5 places)\n[low] unsafe-oz-erc721-mint at src/Registry.sol:232: Unsafe `ERC721::_mint()`\n[low] unused-public-function at src/Composer.sol:332: Public Function Not Used Internally (4 places)\n[low] unused-state-variable at src/Registry.sol:64: Unused State Variable (2 places)","passed":true},{"durationMs":5979,"exitCode":0,"name":"proof 9a97dce53472","output":"Compiling 63 files with Solc 0.8.24\nSolc 0.8.24 finished in 5.23s\nCompiler run successful with warnings:\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/mocks/MockBurnExecutor.sol:10:9:\n   |\n10 |         selfdestruct(payable(to));\n   |         ^^^^^^^^^^^^\n\n\nRan 2 tests for test/imd-proof-5bce1dbb/Proof_9a97dce53472.t.sol:SepoliaSpecWindowTest\n[PASS] test_sepoliaRehearsalRegistersAMainnetGameWindowSpec() (gas: 536801)\n[PASS] test_sepoliaRehearsalRegistersAMainnetNonceSpec() (gas: 208427)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.15ms (568.96µs CPU time)\n\nRan 1 test suite in 2.52ms (1.15ms CPU time): 2 tests passed, 0 failed, 0 skipped (2 total tests)\n","passed":true},{"durationMs":5341,"exitCode":0,"name":"proof 206a260db83b","output":"2026-10-16T09:43:32.736607Z ERROR foundry_compilers_artifacts_solc::sources: error=\"/tmp/imd-verify-MeewtV/repo/test/imd-proof-5bce1dbb/Proof_9a97dce53472.t.sol\": No such file or directory (os error 2)\nCompiling 1 files with Solc 0.8.24\nSolc 0.8.24 finished in 4.60s\nCompiler run successful!\n\nRan 1 test for test/imd-proof-2c2e1ae8/Proof_206a260db83b.t.sol:QuestionTargetOnSepoliaTest\n[PASS] test_catalogQuestionOnSepoliaNamesAMainnetContract() (gas: 1612549)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.22ms (2.46ms CPU time)\n\nRan 1 test suite in 3.92ms (3.22ms CPU time): 1 tests passed, 0 failed, 0 skipped (1 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"8cdef01d4333da0da0060683bd7f1e68253210a29e65e7f60cfe5a9f545f2441","verifiedTreeHash":"30a5d99c7413e13673ba57b6db9e8b7a3bbe9589","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":17604,"exitCode":0,"name":"build","output":"Compiling 86 files with Solc 0.8.24\nSolc 0.8.24 finished in 17.20s\nCompiler run successful with warnings:\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/mocks/MockBurnExecutor.sol:10:9:\n   |\n10 |         selfdestruct(payable(to));\n   |         ^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n  --> test/Goldens.t.sol:67:5:\n   |\n67 |     function _widthCard() internal view returns (Card memory c) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/Goldens.t.sol:345:5:\n    |\n345 |     function _card(\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":34643,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/fork/Mainnet.fork.t.sol:MainnetForkTest\n[SKIP] test_fork_attestationSignedForAnotherConsumerMissesOnTheRealIntake() (gas: 0)\n[SKIP] test_fork_curatorIsSettledWithTheBriefsConstants() (gas: 0)\n[SKIP] test_fork_firstContributorIsAnHourZeroEarlyBird() (gas: 0)\n[SKIP] test_fork_intakeV2SellsTheActionAsTheBriefRecords() (gas: 0)\n[SKIP] test_fork_lastContributorIsNoEarlyBird() (gas: 0)\n[SKIP] test_fork_memberMintsAndRendersAgainstTheRealCurator() (gas: 0)\n[SKIP] test_fork_nonMemberReadsZeroFalseAndHasNoCuratorTrait() (gas: 0)\n[SKIP] test_fork_operatorTraitReadsTheRealCollectionAndGuardsZero() (gas: 0)\n[SKIP] test_fork_pinnedBlockIsTheOneRecorded() (gas: 0)\n[SKIP] test_fork_thousandthContributorJoinedInsideTheFirstThousandWindow() (gas: 0)\n[SKIP] test_fork_upgradeThroughTheRealIntakeThenCompleteFromTheWriter() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 11 skipped; finished in 510.36µs (381.84µs CPU time)\n\nRan 6 tests for test/fork/BurnRule.fork.t.sol:BurnRuleForkTest\n[SKIP] test_fork_coldFreeClaimExactFeeFromNonpayableContractClaimant() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithSurplusBurnsAndExecutorReturnsTheSurplus() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithoutTheFeeReverts() (gas: 0)\n[SKIP] test_fork_executorConfigurationAndPinnedQuote() (gas: 0)\n[SKIP] test_fork_realExecutorAndOFTForceRefundSurplusToNonpayableRecipient() (gas: 0)\n[SKIP] test_fork_realExecutorExactFeeForNonpayableRecipient() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 6 skipped; finished in 529.17µs (381.72µs CPU time)\n\nRan 6 tests for test/SepoliaOracle.t.sol:SepoliaOracleTest\n[PASS] test_anotherConsumerDomainSignatureCannotAuthorizeTheRegistry() (gas: 2099041)\n[PASS] test_mainnetDomainSignatureIsRejectedThenSepoliaRetrySucceeds() (gas: 4102065)\n[PASS] test_mainnetEvidenceVerifiesInSepoliaDomainUnderColdCallbackBudget() (gas: 4025855)\n[PASS] test_maximumSharedFactVerifiesOnSepoliaAndOnlyItsHeadCanApply() (gas: 1934007)\n[PASS] test_noAnswerIsSettledWithoutIssuingACredentialOrRefundingTheSpentPrice() (gas: 4000700)\n[PASS] test_sepoliaEvidenceChainIsRejectedEvenWithAValidSepoliaSignature() (gas: 2080735)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 14.18ms (19.18ms CPU time)\n\nRan 7 tests for test/Templates.t.sol:TemplatesTest\n[PASS] test_allTenBodiesAreByteExact() (gas: 1456996)\n[PASS] test_allTenQuestionHashesEqualThePlanes() (gas: 2185240)\n[PASS] test_bodyIsDeterministicInClaimantAndDiffersAcrossClaimants() (gas: 464040)\n[PASS] test_directAndUnknownIdsHaveNoBody() (gas: 60713)\n[PASS] test_hexMinAndCatalogWindows() (gas: 146951)\n[PASS] test_sepoliaChangesOnlyConsumerChainAcrossAllTenBodies() (gas: 3074114)\n[PASS] test_traitNamesAndClasses() (gas: 112489)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 17.31ms (19.32ms CPU time)\n\nRan 10 tests for test/ReReview.t.sol:ReReviewTest\n[PASS] test_coldGas_firstCommunityVerificationWithACard() (gas: 2415567)\nLogs:\n  cold onResult gas, first community verification with a card: 133357\n\n[PASS] test_coldGas_sharedFact64Catalog() (gas: 1740070)\nLogs:\n  cold onResult gas, 64-address shared fact (catalog 1201): 164088\n\n[PASS] test_coldGas_sharedFact64Community() (gas: 2108968)\nLogs:\n  cold onResult gas, 64-address shared fact (community T3): 170446\n\n[PASS] test_communityAttributesAppearOnlyForVerifiedSpecs() (gas: 4751664)\n[PASS] test_constructorReadsIsSettledWithoutWriting() (gas: 137310)\n[PASS] test_hugeSignatureOnCommunitySharedFactAndCardRequestClearsUnderStipend() (gas: 12243074)\n[PASS] test_lowerOrdinalAcquiredLaterReplacesTheHigherOne() (gas: 8479392)\n[PASS] test_sameSignedEvidenceSatisfiesAnotherRequestWithTheSameQuestion() (gas: 3262641)\n[PASS] test_specIdsEndAt65534() (gas: 909553)\n[PASS] test_unusedFixedValIsRefusedAndAnEmptyFilterIsNotSerialised() (gas: 1334433)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 25.33ms (23.64ms CPU time)\n\nRan 2 tests for test/Floor.t.sol:FloorTest\n[PASS] test_mainnetEmptyChainFloor() (gas: 72579164)\n[PASS] test_sepoliaEmptyChainFloor() (gas: 72579132)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 166.53ms (241.20ms CPU time)\n\nRan 10 tests for test/SepoliaLaunch.t.sol:SepoliaLaunchTest\n[PASS] testFuzz_badLiveDependencyRollsBackTheWholeLaunch(uint8) (runs: 256, μ: 10949509, ~: 10947571)\n[PASS] testFuzz_v1MissingPreviewRefundsTheWholeAttachment(bool,uint96) (runs: 512, μ: 1759319, ~: 1744541)\nLogs:\n  Bound result 4587101932804\n\n[PASS] test_fixedAttesterAndIntakeCannotBeBypassedOrReconfigured() (gas: 2300733)\n[PASS] test_launchUsesExactArgumentsAndCreatesOnlyThreeApplications() (gas: 160354)\n[PASS] test_livePriceChangesAreRespectedAndDisabledSaleIsAtomic() (gas: 3310117)\n[PASS] test_personalAndSharedAbandonmentAtTheExactDeadline() (gas: 6645136)\n[PASS] test_rejectedV1RefundRollsBackPaymentRequestAndAllowances() (gas: 4854491)\n[PASS] test_unsettledCuratorZeroPriceAndMissingExecutorEachRollBackLaunch() (gas: 33247590)\n[PASS] test_v1MissingPreviewWorksAtZeroAndOneWeiForBothEntryPoints() (gas: 6124244)\n[PASS] test_v1RefundCannotReenterTheOtherSponsoredPath() (gas: 2207037)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 363.54ms (468.94ms CPU time)\n\nRan 24 tests for test/BurnRule.t.sol:BurnRuleTest\n[PASS] testFuzz_belowThresholdRefundsWithoutFee(bool,uint96,uint96) (runs: 256, μ: 1562622, ~: 1572763)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueForwardsWholeValueAndExecutorForceRefunds(bool,uint96,uint96) (runs: 256, μ: 1831738, ~: 1843863)\nLogs:\n  Bound result 79228162445286906181185491772\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueWithoutEnoughFeeRevertsAtomically(bool,uint96,uint96) (runs: 256, μ: 3243284, ~: 3270594)\nLogs:\n  Bound result 79228162445286906181185491772\n  Bound result 719717216947276\n\n[PASS] testFuzz_failedPreviewOrBridgeSkipsAndRefunds(bool,uint8,uint96) (runs: 256, μ: 1804564, ~: 1598295)\nLogs:\n  Bound result 4\n  Bound result 562719717216947147\n\n[PASS] testFuzz_nonpayableContractWorksWithNoValueExactFeeAndSurplus(bool,uint8) (runs: 256, μ: 1943421, ~: 1976316)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_previewExceedingTheBudgetSkipsWithCodeOneAndRefunds(bool,uint96) (runs: 256, μ: 2165059, ~: 2150609)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] testFuzz_quoteAboveCapSkipsWithCodeThree(bool,uint96,uint96) (runs: 256, μ: 1566550, ~: 1581287)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_unsetExecutorDisablesBurnAndRefunds(bool,uint96) (runs: 256, μ: 1581533, ~: 1567348)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] test_constantsAndStorage() (gas: 29216)\n[PASS] test_constructorRejectsNonzeroExecutorWithoutCodeAndAcceptsZeroOrCode() (gas: 22214)\n[PASS] test_exactFeeAndCapAreInclusive() (gas: 1708522)\n[PASS] test_executorReentryIsGuarded() (gas: 1770433)\n[PASS] test_executorSurplusCallReentryIsGuarded() (gas: 2351802)\n[PASS] test_executorSurplusIsForcedOnARejectingRecipient() (gas: 1984874)\n[PASS] test_existingChecksAndIntakeFailurePrecedeBurnFeeCheck() (gas: 579665)\n[PASS] test_gasArgumentsIncludeOnlyTheValueStipend() (gas: 1694311)\n[PASS] test_noFeeAtExactThresholdReverts() (gas: 1537187)\n[PASS] test_nonpayableContractAcceptsZeroRefundOnPreviewFailure() (gas: 1791251)\n[PASS] test_paidFunctionsRejectOneWeiWhereZeroValueSucceeds() (gas: 3763206)\n[PASS] test_previewUsingMostOfTheBudgetIsQuotedAndBurns() (gas: 2236677)\n[PASS] test_registryRefundReentryIsGuarded() (gas: 2174351)\n[PASS] test_rejectedNonzeroRegistryRefundRevertsAllEffects() (gas: 1949325)\n[PASS] test_zeroQuoteStillTriggersWhenDue() (gas: 1643668)\n[PASS] test_zeroValueHasNoStipend() (gas: 1564768)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 398.97ms (1.11s CPU time)\n\nRan 17 tests for test/RegistryRules.t.sol:RegistryRulesTest\n[PASS] test_constructorPriceCheckIsPassiveAndAcceptsAnyNonzeroPrice() (gas: 147502)\n[PASS] test_constructorRejectsEachSingleMistypedDependency() (gas: 19912)\n[PASS] test_constructorRejectsPartiallyCodedDependencyFloor() (gas: 19824)\n[PASS] test_constructorRejectsUnavailableIntake() (gas: 26489)\n[PASS] test_constructorRejectsWrongAsset() (gas: 548859)\n[PASS] test_constructorRejectsZeroIntakePrice() (gas: 42182)\n[PASS] test_fuzz_bothPoolPathsShareOneAllowancePerUtcDay(bool,bool,uint32) (runs: 256, μ: 3245693, ~: 3226711)\nLogs:\n  Bound result 3675\n\n[PASS] test_idmdCounterFollowsTransfersAndStopsAtNine() (gas: 15433240)\n[PASS] test_idmdHolderMustAlsoBeAListMember() (gas: 1763863)\n[PASS] test_memberClaimsOnDeploymentDayWithoutCardOrIdmd() (gas: 1674934)\n[PASS] test_noVerdictConsumesTheDayAndLifetimePair() (gas: 3269326)\n[PASS] test_paidUpgradeAndSharedFactDoNotUseOrObeyPoolDailyLimit() (gas: 8188766)\n[PASS] test_revertingIntakeDoesNotConsumePoolAllowances() (gas: 2028416)\n[PASS] test_specAndFirstClaimCostSixPointNineIMD() (gas: 1880800)\n[PASS] test_specRequiresFullFeeAndAllowance() (gas: 798817)\n[PASS] test_sponsoredUpgradeRequiresExactlyOneTrait() (gas: 1780238)\n[PASS] test_switchingIdmdDoesNotBypassDailyLimit() (gas: 3191854)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 398.88ms (407.48ms CPU time)\n\nRan 8 tests for test/Rename.t.sol:RenameTest\n[PASS] test_catalogSpecNamesMatchTheTable() (gas: 495517)\n[PASS] test_collectionNameAndSymbol() (gas: 25005)\n[PASS] test_composerStaysUnderTheSizeLimitWithHeadroom() (gas: 13473)\n[PASS] test_metadataCarriesTheFinalFamilyNames() (gas: 3753859)\n[PASS] test_nameTableIsTheFinalTable() (gas: 609580)\n[PASS] test_noWorkingNameSurvivesInTheNameTable() (gas: 1060323)\n[PASS] test_unknownIdHasNoName() (gas: 25179)\n[PASS] test_upgradeRefusesTopWeightsAsASharedFact() (gas: 1641356)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 402.58ms (26.66ms CPU time)\n\nRan 3 tests for test/Attestations.t.sol:AttestationsTest\n[PASS] test_allFiveRecoverTheAttesterUnderTheirOwnDomainOnly() (gas: 5269883)\n[PASS] test_loaderRejectsUnknownAnswerTypeNames() (gas: 4845)\n[PASS] test_protocolVectorDigestAndSelector() (gas: 2162970)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 459.92ms (12.04ms CPU time)\n\nRan 29 tests for test/Registry.t.sol:RegistryTest\n[PASS] test_abandonOnlyAfterFourteenDaysAndStaleCallbackLeavesSuccessor() (gas: 3333197)\n[PASS] test_anyoneReadsAnyWalletAndNothingUsesTxOrigin() (gas: 1943609)\n[PASS] test_attestationForAnotherConsumerOrChainIsNeverAccepted() (gas: 3213484)\n[PASS] test_callbacksRejectEveryoneButTheIntake() (gas: 1630253)\n[PASS] test_claimSponsoredRules() (gas: 5263554)\n[PASS] test_directTraitsAreLiveAndNeedNoCard() (gas: 606480)\n[PASS] test_fuzz_tiersAreMonotone(uint8,bool,uint32,uint128,uint32,uint8) (runs: 256, μ: 705809, ~: 695885)\n[PASS] test_mainnetQuestionAcceptedUnderSepoliaConsumerDomain() (gas: 1726494)\n[PASS] test_mainnetSignatureCannotAnswerSepoliaConsumer() (gas: 1667363)\n[PASS] test_malformedEnvelopeIsNotDeliveredAndStaysPending() (gas: 1561024)\n[PASS] test_mintOncePerWalletAndTransfersKeepClaimant() (gas: 956472)\n[PASS] test_mintWithoutFeeReverts() (gas: 47096)\n[PASS] test_missReasons() (gas: 29437089)\n[PASS] test_noReceiveOrFallback() (gas: 57774)\n[PASS] test_nonMemberIsNeverAnEarlyBird() (gas: 232815)\n[PASS] test_onFailureClearsAndAllowsRetry() (gas: 3005968)\n[PASS] test_onResultGasWorstCase() (gas: 2334276)\nLogs:\n  onResult worst-case gas: 164955\n\n[PASS] test_poolIsTheBalanceAndOnlyLeavesThroughSponsoredRequests() (gas: 5657440)\n[PASS] test_reentrantTokenCannotReenterMint() (gas: 2358744)\n[PASS] test_registerSpecAssignsSequentialIdsAndIsImmutable() (gas: 1231885)\n[PASS] test_sepoliaQuestionMissesWithReasonThreeUnderSepoliaDomain() (gas: 1654191)\n[PASS] test_sharedFactBadEnvelopeIsAMissAndCanBeRequestedAgain() (gas: 6924648)\n[PASS] test_sharedFactFlow() (gas: 2477894)\n[PASS] test_specGuards() (gas: 1337022)\n[PASS] test_strangerCannotDiscardLateValidAnswer() (gas: 1727512)\n[PASS] test_supportsERC4906AndERC721() (gas: 25952)\n[PASS] test_upgradeGuards() (gas: 6034510)\n[PASS] test_upgradeHappyPathMarksTraitAndRefreshesCard() (gas: 2537251)\n[PASS] test_upgradeWithoutCardAttachesToClaimant() (gas: 1895072)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 459.84ms (113.00ms CPU time)\n\nRan 8 tests for test/Artifacts.t.sol:ArtifactsTest\n[PASS] test_constructorAcceptsUnavailableCuratorOnEmptyFloor() (gas: 16156)\n[PASS] test_constructorRejectsUnsettledOrUnavailableCurator() (gas: 262986)\n[PASS] test_constructorRejectsZeroAddressesAndStoresTheRest() (gas: 8024)\n[PASS] test_deployScriptUsesMainnetConstantsOnEveryOtherChain() (gas: 60455489)\n[PASS] test_deployScriptUsesSepoliaConstantsAndNonzeroExecutor() (gas: 31103316)\n[PASS] test_noForbiddenOpcodesInRuntime() (gas: 56163984)\n[PASS] test_noImmutableReferencesInAnyArtifact() (gas: 91585297)\n[PASS] test_twoDeploymentsHaveIdenticalRuntimeCode() (gas: 3576039)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 477.80ms (177.58ms CPU time)\n\nRan 19 tests for test/Goldens.t.sol:GoldensTest\n[PASS] test_escapeJsonNeutralisesMarkup() (gas: 42645)\n[PASS] test_goldenSyntheticCollector() (gas: 20831323)\n[PASS] test_goldenSyntheticDirect() (gas: 5079487)\n[PASS] test_goldenSyntheticFullhouse() (gas: 21514473)\n[PASS] test_goldenSyntheticHoney() (gas: 23746288)\n[PASS] test_goldenSyntheticNewcomer() (gas: 3219081)\n[PASS] test_goldenSyntheticOracle() (gas: 8916232)\n[PASS] test_goldenSyntheticOutsider() (gas: 5211326)\n[PASS] test_goldenSyntheticWidthThroughTheRenderer() (gas: 24718798)\n[PASS] test_imageCommunityPathFollowsTheStepTable() (gas: 13547491)\n[PASS] test_imageIdsOutsideTheCatalogRenderWithoutReverting() (gas: 763825)\n[PASS] test_imageIsPureAndDeterministic() (gas: 16076101)\n[PASS] test_imageOverflowPathAbsentAtOrBelow39AndNeverOverflows() (gas: 13459611)\n[PASS] test_imageRareDotOnlyAtATopTierRareId() (gas: 17170837)\n[PASS] test_imageRingsByCommunityCount() (gas: 5559349)\n[PASS] test_imageStepsUseExponentiationNotXor() (gas: 6674005)\n[PASS] test_reportRendererRuntimeSize() (gas: 129606)\nLogs:\n  Renderer runtime bytes: 21570\n\n[PASS] test_reportTokenURIGas() (gas: 29841499)\nLogs:\n  tokenURI gas synthetic_width: 10810085\n  tokenURI gas synthetic_fullhouse: 9147472\n  tokenURI gas synthetic_honey: 9589924\n\n[PASS] test_templateArtifactsMatchTheCompiledConstants() (gas: 297819)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 477.82ms (399.96ms CPU time)\n\nRan 32 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_abandonedSharedFactCanBeRequestedAgainAndTheLateAnswerIsIgnored() (gas: 3063183)\n[PASS] test_attestationForAnotherClaimantIsAMissForThisRequest() (gas: 3243937)\n[PASS] test_attestationForAnotherTraitWithTheSameWindowIsAMiss() (gas: 3246988)\n[PASS] test_callbackStarvedOfGasIsNotDeliveredAndStaysPending() (gas: 1692772)\n[PASS] test_cardShowsAtMostThirtyTwoCommunityIdsAndCountsThemAll() (gas: 86215648)\n[PASS] test_claimSponsoredWhilePendingOrVerifiedReverts() (gas: 2104349)\n[PASS] test_communityT3SpecIsASharedFactWithItsOwnHead() (gas: 2423000)\n[PASS] test_everyTemplateVerifiesUnderTheStipendWithACard() (gas: 11730108)\n[PASS] test_expiryAtTheExactSecondStillPassesAndOneLaterDoesNot() (gas: 3241176)\n[PASS] test_fuzz_abandonedPoolRequestKeepsPoolUsedAndLateCallbackIsIgnored(bool) (runs: 256, μ: 1907673, ~: 1907673)\n[PASS] test_fuzz_anyFieldAlteredAfterSigningIsASignatureMiss(uint8,uint256) (runs: 512, μ: 1652833, ~: 1654062)\nLogs:\n  Bound result 8\n\n[PASS] test_fuzz_applySharedFactOnlyWithinTheHead(uint8,uint8) (runs: 256, μ: 1778023, ~: 1763878)\nLogs:\n  Bound result 2\n  Bound result 0\n\n[PASS] test_fuzz_boolAnswerMustBeExactlyZeroOrOne(uint256) (runs: 512, μ: 2075899, ~: 2075589)\n[PASS] test_fuzz_countAnswerAgainstTheThreshold(uint256,bytes1,bool) (runs: 512, μ: 1654185, ~: 1625843)\n[PASS] test_fuzz_expiryAndClockSkewBoundaries(uint64,uint64) (runs: 512, μ: 1650043, ~: 1641278)\n[PASS] test_fuzz_hasTraitAndTraitsOfNeverRevert(address,uint16,uint8,bool,uint8) (runs: 512, μ: 321242, ~: 333347)\n[PASS] test_fuzz_maximalSpecRegistersComposesAndFitsTheBody(uint8,uint256,uint256) (runs: 64, μ: 2442607, ~: 2707654)\nLogs:\n  Bound result 3\n  Bound result 11\n\n[PASS] test_fuzz_panelAndQuorumBoundaries(uint16,uint16,uint16) (runs: 512, μ: 1655129, ~: 1640399)\n[PASS] test_fuzz_panelTraitNeedsElevenAndSeven(uint16,uint16,uint16) (runs: 512, μ: 2083429, ~: 2069384)\n[PASS] test_fuzz_specBodyIsDeterministicAndClaimantBound(address,address) (runs: 256, μ: 864570, ~: 864570)\n[PASS] test_fuzz_upgradeChargesExactlyKTimesPriceAndLeavesThePoolAlone(uint8,uint256) (runs: 256, μ: 5363293, ~: 4218301)\nLogs:\n  Bound result 5\n  Bound result 4131\n\n[PASS] test_fuzz_upgradeRejectsEveryIdThatIsNotAnOracleTrait(uint16) (runs: 256, μ: 209830, ~: 209292)\n[PASS] test_fuzz_windowMustEqualTheCanonicalOne(uint64,uint64) (runs: 512, μ: 1640819, ~: 1640809)\n[PASS] test_onFailureRecordsWhatItIsToldAndStoresNothing() (gas: 3064022)\n[PASS] test_questionHashIsBoundToTheClaimantAndTheTrait() (gas: 689833)\n[PASS] test_reentrantTokenCannotReenterAnyIMDMovingFunction() (gas: 7516833)\n[PASS] test_sharedFactWorstCaseEnvelopeUnderTheStipend() (gas: 3983678)\n[PASS] test_signatureShapesThatDoNotRecover() (gas: 9337010)\n[PASS] test_tokenURIDependsOnlyOnTheClaimantsFacts() (gas: 14703083)\n[PASS] test_traitClassForEveryCatalogIdAndRevertsForUnknown() (gas: 703103)\n[PASS] test_upgradeSponsoredDrawsAllNineOverNineDaysAndRefusesDuplicates() (gas: 12559890)\n[PASS] test_verifiedWindowIsTheCanonicalWindowForEveryOracleId() (gas: 16462663)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 477.88ms (4.05s CPU time)\n\nRan 10 tests for test/ReviewChanges.t.sol:ReviewChangesTest\n[PASS] test_fuzz_emptyFixedArgRequiresZeroValueForT1AndT2(uint256) (runs: 256, μ: 3038845, ~: 3038653)\nLogs:\n  Bound result 507993366093923789062821\n\n[PASS] test_fuzz_ordinalShowsLowestVerifiedId(uint8) (runs: 256, μ: 4554014, ~: 4846154)\nLogs:\n  Bound result 1\n\n[PASS] test_hugeAnswerClearsUintBoolAndSharedRequestsUnderStipend() (gas: 26378702)\n[PASS] test_hugeSignatureClearsPendingAndAllowsImmediateRetry() (gas: 6837849)\n[PASS] test_metadataReportsMinimaEvenWhenSignedPanelIsLarger() (gas: 6306452)\n[PASS] test_scalarAnswerLengthPrecedesChainSignerAndClaimedType() (gas: 17765774)\n[PASS] test_sharedAnswerUpperBoundPrecedesChainAndSigner() (gas: 4502989)\n[PASS] test_signatureLengthPrecedesAnswerLengthAndChain() (gas: 37651315)\n[PASS] test_unknownRequestStillPrecedesDynamicSizeChecks() (gas: 12871553)\n[PASS] test_validationPrecedenceAfterSizes() (gas: 18084381)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 477.93ms (822.96ms CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariant_oneCardPerClaimantWithImmutableClaimant\n[PASS] invariant_poolOnlyLeavesThroughSponsoredRequests\n InvariantsTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claimSponsored    | 3168  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | mintCard          | 3273  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | sponsor           | 3362  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | transfer          | 3278  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | upgradeAndDeliver | 3303  | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1356223012536206823\n  Bound result 784905008410800190\n  Bound result 334213226142521150\n  Bound result 21173\n  Bound result 1543502887128063614\n  Bound result 2257\n  Bound result 935872451545656810\n  Bound result 1077040713252530805\n  Bound result 12859\n  Bound result 1452045570050637611\n  Bound result 1136742003959836652\n  Bound result 3297616802100892\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.67s (5.67s CPU time)\n\nRan 1 test for test/BurnInvariant.t.sol:BurnInvariantTest\n[PASS] invariant_registryRetainsNoClaimETHAndPoolOnlyFundsOracleRequests() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| BurnHandler | claim    | 16384 | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 111685795089766338482\n  Bound result 43\n  Bound result 84265\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1829\n  Bound result 74264337592978034889\n  Bound result 8093366063670440\n  Bound result 7441\n  Bound result 14446206397732\n  Bound result 1744\n  Bound result 821\n  Bound result 73686426\n  Bound result 20839938009\n  Bound result 31530\n  Bound result 3847111\n  Bound result 3490697260845\n  Bound result 17483265397356312\n  Bound result 6502\n  Bound result 4329670727698909\n  Bound result 6747\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2194\n  Bound result 74264337592978034889\n  Bound result 5355\n  Bound result 18175542174535606\n  Bound result 1026170\n  Bound result 187383584233\n  Bound result 18980794936170296\n  Bound result 74264337592978034889\n  Bound result 6863963500940187\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 5\n  Bound result 3820046261089565\n  Bound result 5175893019725063\n  Bound result 30\n  Bound result 4329670727698909\n  Bound result 542659680210\n  Bound result 15\n  Bound result 133316654177\n  Bound result 65\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 309\n  Bound result 74264337592978034889\n  Bound result 16333\n  Bound result 12726498599447936\n  Bound result 361391329\n  Bound result 5620\n  Bound result 6392190220459777\n  Bound result 17025\n  Bound result 1804235829\n  Bound result 6356\n  Bound result 74264337592978034889\n  Bound result 16606\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 23952\n  Bound result 1880942922\n  Bound result 4329670727698909\n  Bound result 1073\n  Bound result 2793\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 6543\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3478\n  Bound result 4329670727698909\n  Bound result 18969176681282002\n  Bound result 21610\n  Bound result 1347\n  Bound result 19999999999999777\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 584\n  Bound result 8366\n  Bound result 4333632135824622\n  Bound result 147\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 13069769755247367\n  Bound result 23690\n  Bound result 4329670727698909\n  Bound result 19131307455326744\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2221\n  Bound result 22761\n  Bound result 1048592\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 7015\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7731\n  Bound result 9238\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 445\n  Bound result 17026\n  Bound result 4333632135824622\n  Bound result 113261144333\n  Bound result 8\n  Bound result 115\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 5266236305527836\n  Bound result 59063428300621446001\n  Bound result 4329670727698909\n  Bound result 7558\n  Bound result 389\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 5015\n  Bound result 4333632135824622\n  Bound result 8702\n  Bound result 4329670727698909\n  Bound result 4858084361544537\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 91367124398043712191\n  Bound result 1017569300830\n  Bound result 7085897216441890\n  Bound result 74264337592978034889\n  Bound result 7665673092053383\n  Bound result 4333632135824622\n  Bound result 3549\n  Bound result 4329670727698909\n  Bound result 19628924136708462\n  Bound result 74264337592978034889\n  Bound result 1487264720600074\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 1185521940569152\n  Bound result 21015\n  Bound result 52806580125533239\n  Bound result 3165560241530197\n  Bound result 11420499685075676\n  Bound result 74264337592978034889\n  Bound result 191\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4202047187\n  Bound result 82718949488418772971\n  Bound result 4061674789252195\n  Bound result 36345705\n  Bound result 74264337592978034889\n  Bound result 2973\n  Bound result 18638\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 16079\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 2521\n  Bound result 12990\n  Bound result 15062\n  Bound result 14494\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 13126\n  Bound result 4261654295675941\n  Bound result 3994721424133826\n  Bound result 74264337592978034889\n  Bound result 3563072791351881\n  Bound result 4333632135824622\n  Bound result 3276318195313711\n  Bound result 153645\n  Bound result 3\n  Bound result 74264337592978034889\n  Bound result 1047234902803699\n  Bound result 1054481662464567\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.83s (11.83s CPU time)\n\nRan 3 tests for test/InvariantsExtended.t.sol:InvariantsExtendedTest\n[PASS]\nInvariantsExtendedTest invariants:\n[PASS] invariant_markedExactlyWhenAPassingAttestationWasDelivered\n[PASS] invariant_oneCardPerClaimant\n[PASS] invariant_poolDailyAndLifetimeLimits\n[PASS] invariant_poolIsFeesPlusDonationsMinusSponsoredRequests\n[PASS] invariant_sharedFactsAreHashesStoredOnlyOnDelivery\n[PASS] invariant_specsAreImmutable\n InvariantsExtendedTest invariants (runs: 96, calls: 4608, reverts: 0)\n\n╭-------------+-------------------+-------+---------+----------╮\n| Contract    | Selector          | Calls | Reverts | Discards |\n+==============================================================+\n| FullHandler | abandonLate       | 301   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | advanceTime       | 241   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | applyShared       | 267   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | claimSponsored    | 250   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverFalse      | 273   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTampered   | 293   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTrue       | 253   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | donate            | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | failRequest       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | mintCard          | 263   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | registerSpec      | 284   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | replayConsumed    | 282   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | requestSharedFact | 287   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | sponsor           | 288   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | transfer          | 280   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradePaid       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradeSponsored  | 251   | 0       | 0        |\n╰-------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 701\n  Bound result 0\n  Bound result 21\n  Bound result 0\n  Bound result 16714\n  Bound result 1\n  Bound result 14717\n  Bound result 6027832\n  Bound result 1287098807058621941\n  Bound result 6\n  Bound result 1\n  Bound result 633743933140996285\n  Bound result 2858\n  Bound result 1\n  Bound result 565\n  Bound result 1\n  Bound result 5\n  Bound result 1\n\n[PASS] test_handlerReplayOfAConsumedIdChangesNothing() (gas: 1920489)\n[PASS] test_handlerSponsoredSelectionAcceptsMaxSeed() (gas: 1763915)\nLogs:\n  Bound result 3000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 14.43s (14.42s CPU time)\n\nRan 2 tests for test/SepoliaInvariant.t.sol:SepoliaInvariantTest\n[PASS]\nSepoliaInvariantTest invariants:\n[PASS] invariant_claimantsAndLaunchConfigurationNeverChange\n[PASS] invariant_pendingRequestsAndDailyLimitsMatchTheModel\n[PASS] invariant_tokenAndEtherConservation\n SepoliaInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭--------------------------+-------------+-------+---------+----------╮\n| Contract                 | Selector    | Calls | Reverts | Discards |\n+=====================================================================+\n| SepoliaAccountingHandler | abandon     | 2438  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | advanceTime | 2462  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | askPaid     | 2434  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | changePrice | 2501  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | claim       | 2362  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | complete    | 2551  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | deposit     | 2468  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | mint        | 2421  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | replay      | 2448  | 0       | 0        |\n|--------------------------+-------------+-------+---------+----------|\n| SepoliaAccountingHandler | transfer    | 2491  | 0       | 0        |\n╰--------------------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 12290\n  Bound result 57705794186119\n  Bound result 3231\n  Bound result 1157\n  Bound result 1524103738739530580\n  Bound result 100\n  Bound result 12366\n  Bound result 4264337577698317833\n  Bound result 6481\n  Bound result 4329670727698909\n  Bound result 607\n  Bound result 507480\n  Bound result 4743\n  Bound result 4264337577698317833\n  Bound result 128\n  Bound result 4062\n  Bound result 264337553929869048\n  Bound result 4413771228584578224\n  Bound result 264337553929869078\n  Bound result 49\n  Bound result 4264337577698317833\n  Bound result 4264337577698317833\n  Bound result 4329670727698909\n  Bound result 22971\n  Bound result 4264337577698317833\n  Bound result 4329670727698909\n  Bound result 5358\n  Bound result 17233\n  Bound result 6\n  Bound result 4329670727698909\n  Bound result 4329670727698909\n  Bound result 1604\n  Bound result 4264337577698317833\n  Bound result 15090\n  Bound result 18513\n  Bound result 1007797464596467627\n  Bound result 115354\n  Bound result 4264337577698317833\n  Bound result 1078582737\n  Bound result 453\n  Bound result 264337553929869078\n  Bound result 16639\n  Bound result 49152\n  Bound result 18810\n  Bound result 448\n  Bound result 198530\n  Bound result 7418055439\n  Bound result 4264337577698317833\n  Bound result 22926\n\n[PASS] test_handlerExercisesChangingPricesRefundsFailuresAndRetries() (gas: 11817598)\nLogs:\n  Bound result 5000000000000000000\n  Bound result 1\n  Bound result 1\n  Bound result 2000000000000000000\n  Bound result 10000000000000000\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 1209600\n  Bound result 500000000000000000\n  Bound result 1\n  Bound result 1\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 34.41s (34.40s CPU time)\n\nRan 20 test suites in 34.41s (70.96s CPU time): 192 tests passed, 0 failed, 17 skipped (209 total tests)\n","passed":true},{"durationMs":262,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Registry.abandon(bytes32)\",\"Registry.applySharedFact(uint16,address[])\",\"Registry.approve(address,uint256)\",\"Registry.claimSponsored(uint16)\",\"Registry.mintCard()\",\"Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Registry.onResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Registry.registerSpec((uint8,address,string,string,string,uint256,string,uint8,uint256,uint64,uint64,string))\",\"Registry.requestSharedFact(uint16,uint256)\",\"Registry.safeTransferFrom(address,address,uint256)\",\"Registry.safeTransferFrom(address,address,uint256,bytes)\",\"Registry.setApprovalForAll(address,bool)\",\"Registry.sponsor(uint256)\",\"Registry.transferFrom(address,address,uint256)\",\"Registry.upgrade(uint16[],uint256)\",\"Registry.upgradeSponsored(uint256,uint16[])\"],\"files\":{\".gitignore\":8,\".gitmodules\":6,\"ADAPTATION.md\":185,\"CATALOG.md\":268,\"CONCEPT.md\":262,\"DISCLOSURE.md\":58,\"INTEGRATION.md\":441,\"LICENSE\":21,\"README.md\":419,\"TEMPLATES.md\":158,\"foundry.toml\":44,\"reference/Intake.sol\":5175,\"reference/IntakeV2.sol\":5240,\"reference/PROVENANCE.md\":44,\"reference/abi/IMD.json\":1684,\"reference/abi/IdentityMD.json\":894,\"reference/abi/Intake.json\":955,\"reference/abi/IntakeV2.json\":1070,\"reference/abi/WhitelistCurator.json\":794,\"reference/anchors/headers.json\":61,\"reference/attestations/2026-10-10-link-pilot.json\":92,\"reference/attestations/2026-10-10-meatbag-consumer.json\":104,\"reference/attestations/2026-10-11-feed-consumer-v2.json\":105,\"reference/attestations/2026-10-11-nonce-false.json\":92,\"reference/attestations/2026-10-11-nonce-true.json\":92,\"reference/attestations/README.md\":29,\"reference/burn/BurnExecutorV2.sol.txt\":314,\"reference/burn/abi.json\":1001,\"reference/burn/provenance.json\":17,\"reference/intake/completions.json\":147,\"reference/list-record/src/ListRecord.sol\":169,\"reference/list-record/src/ListRecordRenderer.sol\":126,\"reference/list-record/src/interfaces/IListRecordRenderer.sol\":29,\"reference/list-record/src/lib/SSTORE2.sol\":39,\"reference/list-record/src/lib/Str.sol\":54,\"reference/list-record/test/Renderer.t.sol\":165,\"reference/list-record/test/RendererMechanism.t.sol\":203,\"reference/list-record/test/Template.t.sol\":293,\"reference/list-record/test/fixtures/golden_synthetic_held_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_held_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_uri.txt\":1,\"reference/plane/checks/1001-hour-savior.json\":81,\"reference/plane/checks/1102-ordinal-1000.json\":81,\"reference/plane/checks/1105-first-thousand.json\":81,\"reference/plane/checks/1201-top-32.json\":82,\"reference/plane/checks/1301-not-born-yesterday.json\":86,\"reference/plane/checks/701-still-here.json\":81,\"reference/plane/checks/801-last-stand.json\":81,\"reference/plane/checks/T2-log-sum-composed.json\":81,\"reference/plane/checks/T4-call-compare-reference.json\":81,\"reference/plane/checks/T5-community-composed.json\":86,\"reference/plane/questionHashes.json\":92,\"reference/plane/quotes/1001-hour-savior.json\":20,\"reference/plane/quotes/1102-ordinal-1000.json\":20,\"reference/plane/quotes/1105-first-thousand.json\":20,\"reference/plane/quotes/1201-top-32.json\":20,\"reference/plane/quotes/1301-not-born-yesterday.json\":20,\"reference/plane/quotes/701-still-here.json\":20,\"reference/plane/quotes/801-last-stand.json\":20,\"reference/plane/quotes/T2-log-sum-composed.json\":20,\"reference/plane/quotes/T4-call-compare-reference.json\":20,\"reference/plane/quotes/T5-community-composed.json\":20,\"remappings.txt\":2,\"script/Deploy.s.sol\":48,\"src/Composer.sol\":629,\"src/HiveData.sol\":75,\"src/Registry.sol\":761,\"src/Renderer.sol\":427,\"src/TemplateData.sol\":16,\"src/Types.sol\":41,\"src/interfaces/IBurnExecutor.sol\":12,\"src/interfaces/IIDMD.sol\":8,\"src/interfaces/IIntake.sol\":29,\"src/interfaces/IOracleConsumer.sol\":38,\"src/interfaces/IWhitelistCurator.sol\":53,\"template/blob.hex\":1,\"template/offsets.txt\":1,\"templates/fixtures/1001-hour-savior.json\":22,\"templates/fixtures/1102-ordinal-1000.json\":22,\"templates/fixtures/1105-first-thousand.json\":22,\"templates/fixtures/1201-top-32.json\":22,\"templates/fixtures/1301-not-born-yesterday.json\":24,\"templates/fixtures/701-still-here.json\":22,\"templates/fixtures/801-last-stand.json\":22,\"templates/fixtures/T2-log-sum-composed.json\":23,\"templates/fixtures/T4-call-compare-reference.json\":21,\"templates/fixtures/T5-community-composed.json\":24,\"test/.gitkeep\":0,\"test/Adversarial.t.sol\":832,\"test/Artifacts.t.sol\":209,\"test/Attestations.t.sol\":196,\"test/Base.t.sol\":158,\"test/BurnInvariant.t.sol\":120,\"test/BurnRule.t.sol\":405,\"test/Floor.t.sol\":135,\"test/Goldens.t.sol\":444,\"test/Invariants.t.sol\":124,\"test/InvariantsExtended.t.sol\":520,\"test/NOTES.md\":495,\"test/ReReview.t.sol\":263,\"test/Registry.t.sol\":822,\"test/RegistryRules.t.sol\":335,\"test/Rename.t.sol\":224,\"test/ReviewChanges.t.sol\":215,\"test/Sepolia.md\":46,\"test/SepoliaInvariant.t.sol\":366,\"test/SepoliaLaunch.t.sol\":275,\"test/SepoliaOracle.t.sol\":129,\"test/Templates.t.sol\":171,\"test/fixtures/golden_synthetic_collector_preimage.txt\":1,\"test/fixtures/golden_synthetic_collector_svg.txt\":1,\"test/fixtures/golden_synthetic_collector_uri.txt\":1,\"test/fixtures/golden_synthetic_direct_preimage.txt\":1,\"test/fixtures/golden_synthetic_direct_svg.txt\":1,\"test/fixtures/golden_synthetic_direct_uri.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_preimage.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_svg.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_uri.txt\":1,\"test/fixtures/golden_synthetic_honey_preimage.txt\":1,\"test/fixtures/golden_synthetic_honey_svg.txt\":1,\"test/fixtures/golden_synthetic_honey_uri.txt\":1,\"test/fixtures/golden_synthetic_newcomer_preimage.txt\":1,\"test/fixtures/golden_synthetic_newcomer_svg.txt\":1,\"test/fixtures/golden_synthetic_newcomer_uri.txt\":1,\"test/fixtures/golden_synthetic_oracle_preimage.txt\":1,\"test/fixtures/golden_synthetic_oracle_svg.txt\":1,\"test/fixtures/golden_synthetic_oracle_uri.txt\":1,\"test/fixtures/golden_synthetic_outsider_preimage.txt\":1,\"test/fixtures/golden_synthetic_outsider_svg.txt\":1,\"test/fixtures/golden_synthetic_outsider_uri.txt\":1,\"test/fixtures/golden_synthetic_width_preimage.txt\":1,\"test/fixtures/golden_synthetic_width_svg.txt\":1,\"test/fixtures/golden_synthetic_width_uri.txt\":1,\"test/fork/BurnRule.fork.t.sol\":193,\"test/fork/Mainnet.fork.t.sol\":338,\"test/helpers/SepoliaFixture.sol\":125,\"test/mocks/MockBurnExecutor.sol\":157,\"test/mocks/Mocks.sol\":231,\"tools/gen_template.py\":898,\"tools/test_gen_template.py\":334},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"a007f32be491ec98708fa092b1717a3412725675e29b1725008bd7ac3c58757a","verifiedTreeHash":"250b72a050b734cc42669a58783e23d00cc8b6a9","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":14983,"exitCode":0,"name":"build","output":"Compiling 82 files with Solc 0.8.24\nSolc 0.8.24 finished in 14.60s\nCompiler run successful with warnings:\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/mocks/MockBurnExecutor.sol:10:9:\n   |\n10 |         selfdestruct(payable(to));\n   |         ^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n  --> test/Goldens.t.sol:67:5:\n   |\n67 |     function _widthCard() internal view returns (Card memory c) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/Goldens.t.sol:345:5:\n    |\n345 |     function _card(\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":14527,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/fork/Mainnet.fork.t.sol:MainnetForkTest\n[SKIP] test_fork_attestationSignedForAnotherConsumerMissesOnTheRealIntake() (gas: 0)\n[SKIP] test_fork_curatorIsSettledWithTheBriefsConstants() (gas: 0)\n[SKIP] test_fork_firstContributorIsAnHourZeroEarlyBird() (gas: 0)\n[SKIP] test_fork_intakeV2SellsTheActionAsTheBriefRecords() (gas: 0)\n[SKIP] test_fork_lastContributorIsNoEarlyBird() (gas: 0)\n[SKIP] test_fork_memberMintsAndRendersAgainstTheRealCurator() (gas: 0)\n[SKIP] test_fork_nonMemberReadsZeroFalseAndHasNoCuratorTrait() (gas: 0)\n[SKIP] test_fork_operatorTraitReadsTheRealCollectionAndGuardsZero() (gas: 0)\n[SKIP] test_fork_pinnedBlockIsTheOneRecorded() (gas: 0)\n[SKIP] test_fork_thousandthContributorJoinedInsideTheFirstThousandWindow() (gas: 0)\n[SKIP] test_fork_upgradeThroughTheRealIntakeThenCompleteFromTheWriter() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 11 skipped; finished in 484.04µs (570.23µs CPU time)\n\nRan 6 tests for test/fork/BurnRule.fork.t.sol:BurnRuleForkTest\n[SKIP] test_fork_coldFreeClaimExactFeeFromNonpayableContractClaimant() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithSurplusBurnsAndExecutorReturnsTheSurplus() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithoutTheFeeReverts() (gas: 0)\n[SKIP] test_fork_executorConfigurationAndPinnedQuote() (gas: 0)\n[SKIP] test_fork_realExecutorAndOFTForceRefundSurplusToNonpayableRecipient() (gas: 0)\n[SKIP] test_fork_realExecutorExactFeeForNonpayableRecipient() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 6 skipped; finished in 599.24µs (301.93µs CPU time)\n\nRan 2 tests for test/Floor.t.sol:FloorTest\n[PASS] test_mainnetEmptyChainFloor() (gas: 72441196)\n[PASS] test_sepoliaEmptyChainFloor() (gas: 72441164)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 141.74ms (240.77ms CPU time)\n\nRan 29 tests for test/Registry.t.sol:RegistryTest\n[PASS] test_abandonOnlyAfterFourteenDaysAndStaleCallbackLeavesSuccessor() (gas: 3333197)\n[PASS] test_anyoneReadsAnyWalletAndNothingUsesTxOrigin() (gas: 1943609)\n[PASS] test_attestationForAnotherConsumerOrChainIsNeverAccepted() (gas: 3213484)\n[PASS] test_callbacksRejectEveryoneButTheIntake() (gas: 1630253)\n[PASS] test_claimSponsoredRules() (gas: 5263554)\n[PASS] test_directTraitsAreLiveAndNeedNoCard() (gas: 606480)\n[PASS] test_fuzz_tiersAreMonotone(uint8,bool,uint32,uint128,uint32,uint8) (runs: 256, μ: 704119, ~: 695879)\n[PASS] test_mainnetQuestionAcceptedUnderSepoliaConsumerDomain() (gas: 1726494)\n[PASS] test_mainnetSignatureCannotAnswerSepoliaConsumer() (gas: 1667363)\n[PASS] test_malformedEnvelopeIsNotDeliveredAndStaysPending() (gas: 1561024)\n[PASS] test_mintOncePerWalletAndTransfersKeepClaimant() (gas: 956472)\n[PASS] test_mintWithoutFeeReverts() (gas: 47096)\n[PASS] test_missReasons() (gas: 29437089)\n[PASS] test_noReceiveOrFallback() (gas: 57774)\n[PASS] test_nonMemberIsNeverAnEarlyBird() (gas: 232815)\n[PASS] test_onFailureClearsAndAllowsRetry() (gas: 3005968)\n[PASS] test_onResultGasWorstCase() (gas: 2334276)\nLogs:\n  onResult worst-case gas: 164955\n\n[PASS] test_poolIsTheBalanceAndOnlyLeavesThroughSponsoredRequests() (gas: 5657440)\n[PASS] test_reentrantTokenCannotReenterMint() (gas: 2358744)\n[PASS] test_registerSpecAssignsSequentialIdsAndIsImmutable() (gas: 1231885)\n[PASS] test_sepoliaQuestionMissesWithReasonThreeUnderSepoliaDomain() (gas: 1654191)\n[PASS] test_sharedFactBadEnvelopeIsAMissAndCanBeRequestedAgain() (gas: 6924648)\n[PASS] test_sharedFactFlow() (gas: 2477894)\n[PASS] test_specGuards() (gas: 1337022)\n[PASS] test_strangerCannotDiscardLateValidAnswer() (gas: 1727512)\n[PASS] test_supportsERC4906AndERC721() (gas: 25952)\n[PASS] test_upgradeGuards() (gas: 6034510)\n[PASS] test_upgradeHappyPathMarksTraitAndRefreshesCard() (gas: 2537251)\n[PASS] test_upgradeWithoutCardAttachesToClaimant() (gas: 1895072)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 295.89ms (357.22ms CPU time)\n\nRan 24 tests for test/BurnRule.t.sol:BurnRuleTest\n[PASS] testFuzz_belowThresholdRefundsWithoutFee(bool,uint96,uint96) (runs: 256, μ: 1562622, ~: 1572763)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueForwardsWholeValueAndExecutorForceRefunds(bool,uint96,uint96) (runs: 256, μ: 1831738, ~: 1843863)\nLogs:\n  Bound result 79228162445286906181185491772\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueWithoutEnoughFeeRevertsAtomically(bool,uint96,uint96) (runs: 256, μ: 3243284, ~: 3270594)\nLogs:\n  Bound result 79228162445286906181185491772\n  Bound result 719717216947276\n\n[PASS] testFuzz_failedPreviewOrBridgeSkipsAndRefunds(bool,uint8,uint96) (runs: 256, μ: 1804564, ~: 1598295)\nLogs:\n  Bound result 4\n  Bound result 562719717216947147\n\n[PASS] testFuzz_nonpayableContractWorksWithNoValueExactFeeAndSurplus(bool,uint8) (runs: 256, μ: 1943421, ~: 1976316)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_previewExceedingTheBudgetSkipsWithCodeOneAndRefunds(bool,uint96) (runs: 256, μ: 2165059, ~: 2150609)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] testFuzz_quoteAboveCapSkipsWithCodeThree(bool,uint96,uint96) (runs: 256, μ: 1566550, ~: 1581287)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_unsetExecutorDisablesBurnAndRefunds(bool,uint96) (runs: 256, μ: 1581533, ~: 1567348)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] test_constantsAndStorage() (gas: 29216)\n[PASS] test_constructorRejectsNonzeroExecutorWithoutCodeAndAcceptsZeroOrCode() (gas: 22214)\n[PASS] test_exactFeeAndCapAreInclusive() (gas: 1708522)\n[PASS] test_executorReentryIsGuarded() (gas: 1770433)\n[PASS] test_executorSurplusCallReentryIsGuarded() (gas: 2351802)\n[PASS] test_executorSurplusIsForcedOnARejectingRecipient() (gas: 1984874)\n[PASS] test_existingChecksAndIntakeFailurePrecedeBurnFeeCheck() (gas: 579665)\n[PASS] test_gasArgumentsIncludeOnlyTheValueStipend() (gas: 1694311)\n[PASS] test_noFeeAtExactThresholdReverts() (gas: 1537187)\n[PASS] test_nonpayableContractAcceptsZeroRefundOnPreviewFailure() (gas: 1791251)\n[PASS] test_paidFunctionsRejectOneWeiWhereZeroValueSucceeds() (gas: 3763206)\n[PASS] test_previewUsingMostOfTheBudgetIsQuotedAndBurns() (gas: 2236677)\n[PASS] test_registryRefundReentryIsGuarded() (gas: 2174351)\n[PASS] test_rejectedNonzeroRegistryRefundRevertsAllEffects() (gas: 1949325)\n[PASS] test_zeroQuoteStillTriggersWhenDue() (gas: 1643668)\n[PASS] test_zeroValueHasNoStipend() (gas: 1564768)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 393.64ms (1.61s CPU time)\n\nRan 17 tests for test/RegistryRules.t.sol:RegistryRulesTest\n[PASS] test_constructorPriceCheckIsPassiveAndAcceptsAnyNonzeroPrice() (gas: 147502)\n[PASS] test_constructorRejectsEachSingleMistypedDependency() (gas: 19912)\n[PASS] test_constructorRejectsPartiallyCodedDependencyFloor() (gas: 19824)\n[PASS] test_constructorRejectsUnavailableIntake() (gas: 26489)\n[PASS] test_constructorRejectsWrongAsset() (gas: 548859)\n[PASS] test_constructorRejectsZeroIntakePrice() (gas: 42182)\n[PASS] test_fuzz_bothPoolPathsShareOneAllowancePerUtcDay(bool,bool,uint32) (runs: 256, μ: 3245695, ~: 3226711)\nLogs:\n  Bound result 3675\n\n[PASS] test_idmdCounterFollowsTransfersAndStopsAtNine() (gas: 15433240)\n[PASS] test_idmdHolderMustAlsoBeAListMember() (gas: 1763863)\n[PASS] test_memberClaimsOnDeploymentDayWithoutCardOrIdmd() (gas: 1674934)\n[PASS] test_noVerdictConsumesTheDayAndLifetimePair() (gas: 3269326)\n[PASS] test_paidUpgradeAndSharedFactDoNotUseOrObeyPoolDailyLimit() (gas: 8188766)\n[PASS] test_revertingIntakeDoesNotConsumePoolAllowances() (gas: 2028416)\n[PASS] test_specAndFirstClaimCostSixPointNineIMD() (gas: 1880800)\n[PASS] test_specRequiresFullFeeAndAllowance() (gas: 798817)\n[PASS] test_sponsoredUpgradeRequiresExactlyOneTrait() (gas: 1780238)\n[PASS] test_switchingIdmdDoesNotBypassDailyLimit() (gas: 3191854)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 407.95ms (427.14ms CPU time)\n\nRan 8 tests for test/Artifacts.t.sol:ArtifactsTest\n[PASS] test_constructorAcceptsUnavailableCuratorOnEmptyFloor() (gas: 16156)\n[PASS] test_constructorRejectsUnsettledOrUnavailableCurator() (gas: 262986)\n[PASS] test_constructorRejectsZeroAddressesAndStoresTheRest() (gas: 8024)\n[PASS] test_deployScriptUsesMainnetConstantsOnEveryOtherChain() (gas: 60455489)\n[PASS] test_deployScriptUsesSepoliaConstantsAndNonzeroExecutor() (gas: 31103316)\n[PASS] test_noForbiddenOpcodesInRuntime() (gas: 56163984)\n[PASS] test_noImmutableReferencesInAnyArtifact() (gas: 91585297)\n[PASS] test_twoDeploymentsHaveIdenticalRuntimeCode() (gas: 3576039)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 408.21ms (229.47ms CPU time)\n\nRan 10 tests for test/ReReview.t.sol:ReReviewTest\n[PASS] test_coldGas_firstCommunityVerificationWithACard() (gas: 2415567)\nLogs:\n  cold onResult gas, first community verification with a card: 133357\n\n[PASS] test_coldGas_sharedFact64Catalog() (gas: 1740070)\nLogs:\n  cold onResult gas, 64-address shared fact (catalog 1201): 164088\n\n[PASS] test_coldGas_sharedFact64Community() (gas: 2108968)\nLogs:\n  cold onResult gas, 64-address shared fact (community T3): 170446\n\n[PASS] test_communityAttributesAppearOnlyForVerifiedSpecs() (gas: 4751664)\n[PASS] test_constructorReadsIsSettledWithoutWriting() (gas: 137310)\n[PASS] test_hugeSignatureOnCommunitySharedFactAndCardRequestClearsUnderStipend() (gas: 12243074)\n[PASS] test_lowerOrdinalAcquiredLaterReplacesTheHigherOne() (gas: 8479392)\n[PASS] test_sameSignedEvidenceSatisfiesAnotherRequestWithTheSameQuestion() (gas: 3262641)\n[PASS] test_specIdsEndAt65534() (gas: 909553)\n[PASS] test_unusedFixedValIsRefusedAndAnEmptyFilterIsNotSerialised() (gas: 1334433)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 408.22ms (42.93ms CPU time)\n\nRan 8 tests for test/Rename.t.sol:RenameTest\n[PASS] test_catalogSpecNamesMatchTheTable() (gas: 495517)\n[PASS] test_collectionNameAndSymbol() (gas: 25005)\n[PASS] test_composerStaysUnderTheSizeLimitWithHeadroom() (gas: 13473)\n[PASS] test_metadataCarriesTheFinalFamilyNames() (gas: 3753859)\n[PASS] test_nameTableIsTheFinalTable() (gas: 609580)\n[PASS] test_noWorkingNameSurvivesInTheNameTable() (gas: 1060323)\n[PASS] test_unknownIdHasNoName() (gas: 25179)\n[PASS] test_upgradeRefusesTopWeightsAsASharedFact() (gas: 1641356)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 408.15ms (15.37ms CPU time)\n\nRan 10 tests for test/ReviewChanges.t.sol:ReviewChangesTest\n[PASS] test_fuzz_emptyFixedArgRequiresZeroValueForT1AndT2(uint256) (runs: 256, μ: 3038848, ~: 3038677)\nLogs:\n  Bound result 1334495919225191144\n\n[PASS] test_fuzz_ordinalShowsLowestVerifiedId(uint8) (runs: 256, μ: 4554014, ~: 4846154)\nLogs:\n  Bound result 0\n\n[PASS] test_hugeAnswerClearsUintBoolAndSharedRequestsUnderStipend() (gas: 26378702)\n[PASS] test_hugeSignatureClearsPendingAndAllowsImmediateRetry() (gas: 6837849)\n[PASS] test_metadataReportsMinimaEvenWhenSignedPanelIsLarger() (gas: 6306452)\n[PASS] test_scalarAnswerLengthPrecedesChainSignerAndClaimedType() (gas: 17765774)\n[PASS] test_sharedAnswerUpperBoundPrecedesChainAndSigner() (gas: 4502989)\n[PASS] test_signatureLengthPrecedesAnswerLengthAndChain() (gas: 37651315)\n[PASS] test_unknownRequestStillPrecedesDynamicSizeChecks() (gas: 12871553)\n[PASS] test_validationPrecedenceAfterSizes() (gas: 18084381)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 408.15ms (801.20ms CPU time)\n\nRan 32 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_abandonedSharedFactCanBeRequestedAgainAndTheLateAnswerIsIgnored() (gas: 3063183)\n[PASS] test_attestationForAnotherClaimantIsAMissForThisRequest() (gas: 3243937)\n[PASS] test_attestationForAnotherTraitWithTheSameWindowIsAMiss() (gas: 3246988)\n[PASS] test_callbackStarvedOfGasIsNotDeliveredAndStaysPending() (gas: 1692772)\n[PASS] test_cardShowsAtMostThirtyTwoCommunityIdsAndCountsThemAll() (gas: 86215648)\n[PASS] test_claimSponsoredWhilePendingOrVerifiedReverts() (gas: 2104349)\n[PASS] test_communityT3SpecIsASharedFactWithItsOwnHead() (gas: 2423000)\n[PASS] test_everyTemplateVerifiesUnderTheStipendWithACard() (gas: 11730108)\n[PASS] test_expiryAtTheExactSecondStillPassesAndOneLaterDoesNot() (gas: 3241176)\n[PASS] test_fuzz_abandonedPoolRequestKeepsPoolUsedAndLateCallbackIsIgnored(bool) (runs: 256, μ: 1907673, ~: 1907673)\n[PASS] test_fuzz_anyFieldAlteredAfterSigningIsASignatureMiss(uint8,uint256) (runs: 512, μ: 1652833, ~: 1654062)\nLogs:\n  Bound result 6\n\n[PASS] test_fuzz_applySharedFactOnlyWithinTheHead(uint8,uint8) (runs: 256, μ: 1778023, ~: 1763878)\nLogs:\n  Bound result 30\n  Bound result 3\n\n[PASS] test_fuzz_boolAnswerMustBeExactlyZeroOrOne(uint256) (runs: 512, μ: 2075896, ~: 2075589)\n[PASS] test_fuzz_countAnswerAgainstTheThreshold(uint256,bytes1,bool) (runs: 512, μ: 1654092, ~: 1625843)\n[PASS] test_fuzz_expiryAndClockSkewBoundaries(uint64,uint64) (runs: 512, μ: 1650383, ~: 1641284)\n[PASS] test_fuzz_hasTraitAndTraitsOfNeverRevert(address,uint16,uint8,bool,uint8) (runs: 512, μ: 321331, ~: 333353)\n[PASS] test_fuzz_maximalSpecRegistersComposesAndFitsTheBody(uint8,uint256,uint256) (runs: 64, μ: 2439680, ~: 2708008)\nLogs:\n  Bound result 3\n  Bound result 11\n\n[PASS] test_fuzz_panelAndQuorumBoundaries(uint16,uint16,uint16) (runs: 512, μ: 1655129, ~: 1640399)\n[PASS] test_fuzz_panelTraitNeedsElevenAndSeven(uint16,uint16,uint16) (runs: 512, μ: 2083429, ~: 2069384)\n[PASS] test_fuzz_specBodyIsDeterministicAndClaimantBound(address,address) (runs: 256, μ: 864570, ~: 864570)\n[PASS] test_fuzz_upgradeChargesExactlyKTimesPriceAndLeavesThePoolAlone(uint8,uint256) (runs: 256, μ: 5363291, ~: 4218301)\nLogs:\n  Bound result 5\n  Bound result 57005\n\n[PASS] test_fuzz_upgradeRejectsEveryIdThatIsNotAnOracleTrait(uint16) (runs: 256, μ: 209815, ~: 209292)\n[PASS] test_fuzz_windowMustEqualTheCanonicalOne(uint64,uint64) (runs: 512, μ: 1640820, ~: 1640809)\n[PASS] test_onFailureRecordsWhatItIsToldAndStoresNothing() (gas: 3064022)\n[PASS] test_questionHashIsBoundToTheClaimantAndTheTrait() (gas: 689833)\n[PASS] test_reentrantTokenCannotReenterAnyIMDMovingFunction() (gas: 7516833)\n[PASS] test_sharedFactWorstCaseEnvelopeUnderTheStipend() (gas: 3983678)\n[PASS] test_signatureShapesThatDoNotRecover() (gas: 9337010)\n[PASS] test_tokenURIDependsOnlyOnTheClaimantsFacts() (gas: 14703083)\n[PASS] test_traitClassForEveryCatalogIdAndRevertsForUnknown() (gas: 703103)\n[PASS] test_upgradeSponsoredDrawsAllNineOverNineDaysAndRefusesDuplicates() (gas: 12559890)\n[PASS] test_verifiedWindowIsTheCanonicalWindowForEveryOracleId() (gas: 16462663)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 408.34ms (3.23s CPU time)\n\nRan 7 tests for test/Templates.t.sol:TemplatesTest\n[PASS] test_allTenBodiesAreByteExact() (gas: 1456996)\n[PASS] test_allTenQuestionHashesEqualThePlanes() (gas: 2185240)\n[PASS] test_bodyIsDeterministicInClaimantAndDiffersAcrossClaimants() (gas: 464040)\n[PASS] test_directAndUnknownIdsHaveNoBody() (gas: 60713)\n[PASS] test_hexMinAndCatalogWindows() (gas: 146951)\n[PASS] test_sepoliaChangesOnlyConsumerChainAcrossAllTenBodies() (gas: 3074114)\n[PASS] test_traitNamesAndClasses() (gas: 112489)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 408.12ms (25.71ms CPU time)\n\nRan 19 tests for test/Goldens.t.sol:GoldensTest\n[PASS] test_escapeJsonNeutralisesMarkup() (gas: 42645)\n[PASS] test_goldenSyntheticCollector() (gas: 20831323)\n[PASS] test_goldenSyntheticDirect() (gas: 5079487)\n[PASS] test_goldenSyntheticFullhouse() (gas: 21514473)\n[PASS] test_goldenSyntheticHoney() (gas: 23746288)\n[PASS] test_goldenSyntheticNewcomer() (gas: 3219081)\n[PASS] test_goldenSyntheticOracle() (gas: 8916232)\n[PASS] test_goldenSyntheticOutsider() (gas: 5211326)\n[PASS] test_goldenSyntheticWidthThroughTheRenderer() (gas: 24718798)\n[PASS] test_imageCommunityPathFollowsTheStepTable() (gas: 13547491)\n[PASS] test_imageIdsOutsideTheCatalogRenderWithoutReverting() (gas: 763825)\n[PASS] test_imageIsPureAndDeterministic() (gas: 16076101)\n[PASS] test_imageOverflowPathAbsentAtOrBelow39AndNeverOverflows() (gas: 13459611)\n[PASS] test_imageRareDotOnlyAtATopTierRareId() (gas: 17170837)\n[PASS] test_imageRingsByCommunityCount() (gas: 5559349)\n[PASS] test_imageStepsUseExponentiationNotXor() (gas: 6674005)\n[PASS] test_reportRendererRuntimeSize() (gas: 129606)\nLogs:\n  Renderer runtime bytes: 21570\n\n[PASS] test_reportTokenURIGas() (gas: 29841499)\nLogs:\n  tokenURI gas synthetic_width: 10810085\n  tokenURI gas synthetic_fullhouse: 9147472\n  tokenURI gas synthetic_honey: 9589924\n\n[PASS] test_templateArtifactsMatchTheCompiledConstants() (gas: 297819)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 408.44ms (443.39ms CPU time)\n\nRan 3 tests for test/Attestations.t.sol:AttestationsTest\n[PASS] test_allFiveRecoverTheAttesterUnderTheirOwnDomainOnly() (gas: 5269883)\n[PASS] test_loaderRejectsUnknownAnswerTypeNames() (gas: 4845)\n[PASS] test_protocolVectorDigestAndSelector() (gas: 2162970)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 411.56ms (12.36ms CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariant_oneCardPerClaimantWithImmutableClaimant\n[PASS] invariant_poolOnlyLeavesThroughSponsoredRequests\n InvariantsTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claimSponsored    | 3168  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | mintCard          | 3273  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | sponsor           | 3362  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | transfer          | 3278  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | upgradeAndDeliver | 3303  | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1421195560410230378\n  Bound result 752987475861199155\n  Bound result 1784022239563890866\n  Bound result 21173\n  Bound result 1782299519076417196\n  Bound result 2271\n  Bound result 517449057663035263\n  Bound result 1387038790252933162\n  Bound result 3559\n  Bound result 3018192530371669\n  Bound result 1136742003959836652\n  Bound result 3297616802100892\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.38s (5.37s CPU time)\n\nRan 1 test for test/BurnInvariant.t.sol:BurnInvariantTest\n[PASS] invariant_registryRetainsNoClaimETHAndPoolOnlyFundsOracleRequests() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| BurnHandler | claim    | 16384 | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 111685795089766338482\n  Bound result 43\n  Bound result 84265\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1829\n  Bound result 74264337592978034889\n  Bound result 8093366063670440\n  Bound result 7441\n  Bound result 14446206397732\n  Bound result 1744\n  Bound result 821\n  Bound result 73686426\n  Bound result 20839938009\n  Bound result 31530\n  Bound result 3847111\n  Bound result 3490697260845\n  Bound result 17483265397356312\n  Bound result 6502\n  Bound result 4329670727698909\n  Bound result 6747\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2194\n  Bound result 74264337592978034889\n  Bound result 5355\n  Bound result 18175542174535606\n  Bound result 1026170\n  Bound result 187383584233\n  Bound result 18980794936170296\n  Bound result 74264337592978034889\n  Bound result 6863963500940185\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 5\n  Bound result 3820046261089565\n  Bound result 5175893019725063\n  Bound result 30\n  Bound result 4329670727698909\n  Bound result 542659680210\n  Bound result 15\n  Bound result 133316654177\n  Bound result 65\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 309\n  Bound result 74264337592978034889\n  Bound result 16333\n  Bound result 19042238427497373\n  Bound result 361391329\n  Bound result 5620\n  Bound result 6392190220459738\n  Bound result 17025\n  Bound result 1804235829\n  Bound result 6356\n  Bound result 74264337592978034889\n  Bound result 16606\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 23952\n  Bound result 1880942922\n  Bound result 4329670727698909\n  Bound result 1073\n  Bound result 2793\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 6543\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3478\n  Bound result 4329670727698909\n  Bound result 11361106585804716\n  Bound result 21610\n  Bound result 1347\n  Bound result 12810785098791205\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 584\n  Bound result 8366\n  Bound result 4333632135824622\n  Bound result 147\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7417599342909485\n  Bound result 23690\n  Bound result 4329670727698909\n  Bound result 19131307455326744\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2221\n  Bound result 22761\n  Bound result 133316654177\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 7015\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 7731\n  Bound result 9238\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 445\n  Bound result 17026\n  Bound result 4333632135824622\n  Bound result 113261144333\n  Bound result 8\n  Bound result 115\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 5266236305527836\n  Bound result 59063428300621446001\n  Bound result 4329670727698909\n  Bound result 7558\n  Bound result 389\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 5015\n  Bound result 4333632135824622\n  Bound result 8702\n  Bound result 4329670727698909\n  Bound result 4858084361544504\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 91367124398043712191\n  Bound result 1017569300830\n  Bound result 7085897216441890\n  Bound result 74264337592978034889\n  Bound result 7665673092053418\n  Bound result 4333632135824622\n  Bound result 3549\n  Bound result 4329670727698909\n  Bound result 19628924136708464\n  Bound result 74264337592978034889\n  Bound result 1487264720600064\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 1185521940569152\n  Bound result 21015\n  Bound result 52806580125533239\n  Bound result 3165560241530197\n  Bound result 11420499685075676\n  Bound result 74264337592978034889\n  Bound result 4461\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 420\n  Bound result 82718949488418772971\n  Bound result 4061674789252195\n  Bound result 36345705\n  Bound result 74264337592978034889\n  Bound result 10625\n  Bound result 18423\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 16314\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 2521\n  Bound result 12990\n  Bound result 15062\n  Bound result 14494\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 13126\n  Bound result 3862456930981917\n  Bound result 4001723606078192\n  Bound result 74264337592978034889\n  Bound result 4814907602518285\n  Bound result 4333632135824622\n  Bound result 3276318195313711\n  Bound result 153645\n  Bound result 3\n  Bound result 74264337592978034889\n  Bound result 1048591\n  Bound result 14411366952071972\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.40s (11.39s CPU time)\n\nRan 3 tests for test/InvariantsExtended.t.sol:InvariantsExtendedTest\n[PASS]\nInvariantsExtendedTest invariants:\n[PASS] invariant_markedExactlyWhenAPassingAttestationWasDelivered\n[PASS] invariant_oneCardPerClaimant\n[PASS] invariant_poolDailyAndLifetimeLimits\n[PASS] invariant_poolIsFeesPlusDonationsMinusSponsoredRequests\n[PASS] invariant_sharedFactsAreHashesStoredOnlyOnDelivery\n[PASS] invariant_specsAreImmutable\n InvariantsExtendedTest invariants (runs: 96, calls: 4608, reverts: 0)\n\n╭-------------+-------------------+-------+---------+----------╮\n| Contract    | Selector          | Calls | Reverts | Discards |\n+==============================================================+\n| FullHandler | abandonLate       | 301   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | advanceTime       | 241   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | applyShared       | 267   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | claimSponsored    | 250   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverFalse      | 273   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTampered   | 293   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTrue       | 253   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | donate            | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | failRequest       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | mintCard          | 263   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | registerSpec      | 284   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | replayConsumed    | 282   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | requestSharedFact | 287   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | sponsor           | 288   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | transfer          | 280   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradePaid       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradeSponsored  | 251   | 0       | 0        |\n╰-------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1\n  Bound result 3\n  Bound result 21\n  Bound result 0\n  Bound result 2604993126529435205\n  Bound result 1\n  Bound result 165478\n  Bound result 2851861791\n  Bound result 2278136462115891318\n  Bound result 6\n  Bound result 2\n  Bound result 51505905562047985\n  Bound result 3360\n  Bound result 1\n  Bound result 379\n  Bound result 2\n  Bound result 1\n  Bound result 1\n\n[PASS] test_handlerReplayOfAConsumedIdChangesNothing() (gas: 1920489)\n[PASS] test_handlerSponsoredSelectionAcceptsMaxSeed() (gas: 1763915)\nLogs:\n  Bound result 3000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 14.30s (14.29s CPU time)\n\nRan 17 test suites in 14.30s (35.59s CPU time): 174 tests passed, 0 failed, 17 skipped (191 total tests)\n","passed":true},{"durationMs":220,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Registry.abandon(bytes32)\",\"Registry.applySharedFact(uint16,address[])\",\"Registry.approve(address,uint256)\",\"Registry.claimSponsored(uint16)\",\"Registry.mintCard()\",\"Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Registry.onResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Registry.registerSpec((uint8,address,string,string,string,uint256,string,uint8,uint256,uint64,uint64,string))\",\"Registry.requestSharedFact(uint16,uint256)\",\"Registry.safeTransferFrom(address,address,uint256)\",\"Registry.safeTransferFrom(address,address,uint256,bytes)\",\"Registry.setApprovalForAll(address,bool)\",\"Registry.sponsor(uint256)\",\"Registry.transferFrom(address,address,uint256)\",\"Registry.upgrade(uint16[],uint256)\",\"Registry.upgradeSponsored(uint256,uint16[])\"],\"files\":{\".gitignore\":8,\".gitmodules\":6,\"ADAPTATION.md\":185,\"CATALOG.md\":268,\"CONCEPT.md\":262,\"DISCLOSURE.md\":58,\"INTEGRATION.md\":441,\"LICENSE\":21,\"README.md\":419,\"TEMPLATES.md\":158,\"foundry.toml\":44,\"launch.json\":27,\"reference/Intake.sol\":5175,\"reference/IntakeV2.sol\":5240,\"reference/PROVENANCE.md\":44,\"reference/abi/IMD.json\":1684,\"reference/abi/IdentityMD.json\":894,\"reference/abi/Intake.json\":955,\"reference/abi/IntakeV2.json\":1070,\"reference/abi/WhitelistCurator.json\":794,\"reference/anchors/headers.json\":61,\"reference/attestations/2026-10-10-link-pilot.json\":92,\"reference/attestations/2026-10-10-meatbag-consumer.json\":104,\"reference/attestations/2026-10-11-feed-consumer-v2.json\":105,\"reference/attestations/2026-10-11-nonce-false.json\":92,\"reference/attestations/2026-10-11-nonce-true.json\":92,\"reference/attestations/README.md\":29,\"reference/burn/BurnExecutorV2.sol.txt\":314,\"reference/burn/abi.json\":1001,\"reference/burn/provenance.json\":17,\"reference/intake/completions.json\":147,\"reference/list-record/src/ListRecord.sol\":169,\"reference/list-record/src/ListRecordRenderer.sol\":126,\"reference/list-record/src/interfaces/IListRecordRenderer.sol\":29,\"reference/list-record/src/lib/SSTORE2.sol\":39,\"reference/list-record/src/lib/Str.sol\":54,\"reference/list-record/test/Renderer.t.sol\":165,\"reference/list-record/test/RendererMechanism.t.sol\":203,\"reference/list-record/test/Template.t.sol\":293,\"reference/list-record/test/fixtures/golden_synthetic_held_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_held_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_uri.txt\":1,\"reference/plane/checks/1001-hour-savior.json\":81,\"reference/plane/checks/1102-ordinal-1000.json\":81,\"reference/plane/checks/1105-first-thousand.json\":81,\"reference/plane/checks/1201-top-32.json\":82,\"reference/plane/checks/1301-not-born-yesterday.json\":86,\"reference/plane/checks/701-still-here.json\":81,\"reference/plane/checks/801-last-stand.json\":81,\"reference/plane/checks/T2-log-sum-composed.json\":81,\"reference/plane/checks/T4-call-compare-reference.json\":81,\"reference/plane/checks/T5-community-composed.json\":86,\"reference/plane/questionHashes.json\":92,\"reference/plane/quotes/1001-hour-savior.json\":20,\"reference/plane/quotes/1102-ordinal-1000.json\":20,\"reference/plane/quotes/1105-first-thousand.json\":20,\"reference/plane/quotes/1201-top-32.json\":20,\"reference/plane/quotes/1301-not-born-yesterday.json\":20,\"reference/plane/quotes/701-still-here.json\":20,\"reference/plane/quotes/801-last-stand.json\":20,\"reference/plane/quotes/T2-log-sum-composed.json\":20,\"reference/plane/quotes/T4-call-compare-reference.json\":20,\"reference/plane/quotes/T5-community-composed.json\":20,\"remappings.txt\":2,\"script/Deploy.s.sol\":48,\"src/Composer.sol\":629,\"src/HiveData.sol\":75,\"src/Registry.sol\":761,\"src/Renderer.sol\":427,\"src/TemplateData.sol\":16,\"src/Types.sol\":41,\"src/interfaces/IBurnExecutor.sol\":12,\"src/interfaces/IIDMD.sol\":8,\"src/interfaces/IIntake.sol\":29,\"src/interfaces/IOracleConsumer.sol\":38,\"src/interfaces/IWhitelistCurator.sol\":53,\"template/blob.hex\":1,\"template/offsets.txt\":1,\"templates/fixtures/1001-hour-savior.json\":22,\"templates/fixtures/1102-ordinal-1000.json\":22,\"templates/fixtures/1105-first-thousand.json\":22,\"templates/fixtures/1201-top-32.json\":22,\"templates/fixtures/1301-not-born-yesterday.json\":24,\"templates/fixtures/701-still-here.json\":22,\"templates/fixtures/801-last-stand.json\":22,\"templates/fixtures/T2-log-sum-composed.json\":23,\"templates/fixtures/T4-call-compare-reference.json\":21,\"templates/fixtures/T5-community-composed.json\":24,\"test/.gitkeep\":0,\"test/Adversarial.t.sol\":832,\"test/Artifacts.t.sol\":209,\"test/Attestations.t.sol\":196,\"test/Base.t.sol\":158,\"test/BurnInvariant.t.sol\":120,\"test/BurnRule.t.sol\":405,\"test/Floor.t.sol\":109,\"test/Goldens.t.sol\":444,\"test/Invariants.t.sol\":124,\"test/InvariantsExtended.t.sol\":520,\"test/NOTES.md\":495,\"test/ReReview.t.sol\":263,\"test/Registry.t.sol\":822,\"test/RegistryRules.t.sol\":335,\"test/Rename.t.sol\":224,\"test/ReviewChanges.t.sol\":215,\"test/Templates.t.sol\":171,\"test/fixtures/golden_synthetic_collector_preimage.txt\":1,\"test/fixtures/golden_synthetic_collector_svg.txt\":1,\"test/fixtures/golden_synthetic_collector_uri.txt\":1,\"test/fixtures/golden_synthetic_direct_preimage.txt\":1,\"test/fixtures/golden_synthetic_direct_svg.txt\":1,\"test/fixtures/golden_synthetic_direct_uri.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_preimage.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_svg.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_uri.txt\":1,\"test/fixtures/golden_synthetic_honey_preimage.txt\":1,\"test/fixtures/golden_synthetic_honey_svg.txt\":1,\"test/fixtures/golden_synthetic_honey_uri.txt\":1,\"test/fixtures/golden_synthetic_newcomer_preimage.txt\":1,\"test/fixtures/golden_synthetic_newcomer_svg.txt\":1,\"test/fixtures/golden_synthetic_newcomer_uri.txt\":1,\"test/fixtures/golden_synthetic_oracle_preimage.txt\":1,\"test/fixtures/golden_synthetic_oracle_svg.txt\":1,\"test/fixtures/golden_synthetic_oracle_uri.txt\":1,\"test/fixtures/golden_synthetic_outsider_preimage.txt\":1,\"test/fixtures/golden_synthetic_outsider_svg.txt\":1,\"test/fixtures/golden_synthetic_outsider_uri.txt\":1,\"test/fixtures/golden_synthetic_width_preimage.txt\":1,\"test/fixtures/golden_synthetic_width_svg.txt\":1,\"test/fixtures/golden_synthetic_width_uri.txt\":1,\"test/fork/BurnRule.fork.t.sol\":193,\"test/fork/Mainnet.fork.t.sol\":338,\"test/mocks/MockBurnExecutor.sol\":157,\"test/mocks/Mocks.sol\":231,\"tools/gen_template.py\":898,\"tools/test_gen_template.py\":334},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"b2d2b38cba4e83043cfd994e05e160d6fc4624b86eb189ffb2e7aaab943c146d","verifiedTreeHash":"eb24f7a24be86dd592e497a0070ed193eb9be271","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":16511,"exitCode":0,"name":"build","output":"Compiling 82 files with Solc 0.8.24\nSolc 0.8.24 finished in 16.09s\nCompiler run successful with warnings:\nWarning (5159): \"selfdestruct\" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode.\n  --> test/mocks/MockBurnExecutor.sol:10:9:\n   |\n10 |         selfdestruct(payable(to));\n   |         ^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n  --> test/Goldens.t.sol:67:5:\n   |\n67 |     function _widthCard() internal view returns (Card memory c) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/Goldens.t.sol:345:5:\n    |\n345 |     function _card(\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":15194,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/fork/Mainnet.fork.t.sol:MainnetForkTest\n[SKIP] test_fork_attestationSignedForAnotherConsumerMissesOnTheRealIntake() (gas: 0)\n[SKIP] test_fork_curatorIsSettledWithTheBriefsConstants() (gas: 0)\n[SKIP] test_fork_firstContributorIsAnHourZeroEarlyBird() (gas: 0)\n[SKIP] test_fork_intakeV2SellsTheActionAsTheBriefRecords() (gas: 0)\n[SKIP] test_fork_lastContributorIsNoEarlyBird() (gas: 0)\n[SKIP] test_fork_memberMintsAndRendersAgainstTheRealCurator() (gas: 0)\n[SKIP] test_fork_nonMemberReadsZeroFalseAndHasNoCuratorTrait() (gas: 0)\n[SKIP] test_fork_operatorTraitReadsTheRealCollectionAndGuardsZero() (gas: 0)\n[SKIP] test_fork_pinnedBlockIsTheOneRecorded() (gas: 0)\n[SKIP] test_fork_thousandthContributorJoinedInsideTheFirstThousandWindow() (gas: 0)\n[SKIP] test_fork_upgradeThroughTheRealIntakeThenCompleteFromTheWriter() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 11 skipped; finished in 592.92µs (696.68µs CPU time)\n\nRan 6 tests for test/fork/BurnRule.fork.t.sol:BurnRuleForkTest\n[SKIP] test_fork_coldFreeClaimExactFeeFromNonpayableContractClaimant() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithSurplusBurnsAndExecutorReturnsTheSurplus() (gas: 0)\n[SKIP] test_fork_coldFreeClaimWithoutTheFeeReverts() (gas: 0)\n[SKIP] test_fork_executorConfigurationAndPinnedQuote() (gas: 0)\n[SKIP] test_fork_realExecutorAndOFTForceRefundSurplusToNonpayableRecipient() (gas: 0)\n[SKIP] test_fork_realExecutorExactFeeForNonpayableRecipient() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 6 skipped; finished in 605.76µs (221.70µs CPU time)\n\nRan 7 tests for test/Templates.t.sol:TemplatesTest\n[PASS] test_allTenBodiesAreByteExact() (gas: 1456996)\n[PASS] test_allTenQuestionHashesEqualThePlanes() (gas: 2185240)\n[PASS] test_bodyIsDeterministicInClaimantAndDiffersAcrossClaimants() (gas: 464040)\n[PASS] test_directAndUnknownIdsHaveNoBody() (gas: 60713)\n[PASS] test_hexMinAndCatalogWindows() (gas: 146951)\n[PASS] test_sepoliaChangesOnlyConsumerChainAcrossAllTenBodies() (gas: 3074114)\n[PASS] test_traitNamesAndClasses() (gas: 112489)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 20.45ms (17.99ms CPU time)\n\nRan 10 tests for test/ReReview.t.sol:ReReviewTest\n[PASS] test_coldGas_firstCommunityVerificationWithACard() (gas: 2415567)\nLogs:\n  cold onResult gas, first community verification with a card: 133357\n\n[PASS] test_coldGas_sharedFact64Catalog() (gas: 1740070)\nLogs:\n  cold onResult gas, 64-address shared fact (catalog 1201): 164088\n\n[PASS] test_coldGas_sharedFact64Community() (gas: 2108968)\nLogs:\n  cold onResult gas, 64-address shared fact (community T3): 170446\n\n[PASS] test_communityAttributesAppearOnlyForVerifiedSpecs() (gas: 4751664)\n[PASS] test_constructorReadsIsSettledWithoutWriting() (gas: 137310)\n[PASS] test_hugeSignatureOnCommunitySharedFactAndCardRequestClearsUnderStipend() (gas: 12243074)\n[PASS] test_lowerOrdinalAcquiredLaterReplacesTheHigherOne() (gas: 8479392)\n[PASS] test_sameSignedEvidenceSatisfiesAnotherRequestWithTheSameQuestion() (gas: 3262641)\n[PASS] test_specIdsEndAt65534() (gas: 909553)\n[PASS] test_unusedFixedValIsRefusedAndAnEmptyFilterIsNotSerialised() (gas: 1334433)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 91.63ms (37.14ms CPU time)\n\nRan 2 tests for test/Floor.t.sol:FloorTest\n[PASS] test_mainnetEmptyChainFloor() (gas: 72441196)\n[PASS] test_sepoliaEmptyChainFloor() (gas: 72441164)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 151.20ms (267.92ms CPU time)\n\nRan 17 tests for test/RegistryRules.t.sol:RegistryRulesTest\n[PASS] test_constructorPriceCheckIsPassiveAndAcceptsAnyNonzeroPrice() (gas: 147502)\n[PASS] test_constructorRejectsEachSingleMistypedDependency() (gas: 19912)\n[PASS] test_constructorRejectsPartiallyCodedDependencyFloor() (gas: 19824)\n[PASS] test_constructorRejectsUnavailableIntake() (gas: 26489)\n[PASS] test_constructorRejectsWrongAsset() (gas: 548859)\n[PASS] test_constructorRejectsZeroIntakePrice() (gas: 42182)\n[PASS] test_fuzz_bothPoolPathsShareOneAllowancePerUtcDay(bool,bool,uint32) (runs: 256, μ: 3245695, ~: 3226711)\nLogs:\n  Bound result 3675\n\n[PASS] test_idmdCounterFollowsTransfersAndStopsAtNine() (gas: 15433240)\n[PASS] test_idmdHolderMustAlsoBeAListMember() (gas: 1763863)\n[PASS] test_memberClaimsOnDeploymentDayWithoutCardOrIdmd() (gas: 1674934)\n[PASS] test_noVerdictConsumesTheDayAndLifetimePair() (gas: 3269326)\n[PASS] test_paidUpgradeAndSharedFactDoNotUseOrObeyPoolDailyLimit() (gas: 8188766)\n[PASS] test_revertingIntakeDoesNotConsumePoolAllowances() (gas: 2028416)\n[PASS] test_specAndFirstClaimCostSixPointNineIMD() (gas: 1880800)\n[PASS] test_specRequiresFullFeeAndAllowance() (gas: 798817)\n[PASS] test_sponsoredUpgradeRequiresExactlyOneTrait() (gas: 1780238)\n[PASS] test_switchingIdmdDoesNotBypassDailyLimit() (gas: 3191854)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 324.67ms (336.20ms CPU time)\n\nRan 24 tests for test/BurnRule.t.sol:BurnRuleTest\n[PASS] testFuzz_belowThresholdRefundsWithoutFee(bool,uint96,uint96) (runs: 256, μ: 1562622, ~: 1572763)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueForwardsWholeValueAndExecutorForceRefunds(bool,uint96,uint96) (runs: 256, μ: 1831738, ~: 1843863)\nLogs:\n  Bound result 79228162445286906181185491772\n  Bound result 562719717216947147\n\n[PASS] testFuzz_dueWithoutEnoughFeeRevertsAtomically(bool,uint96,uint96) (runs: 256, μ: 3243284, ~: 3270594)\nLogs:\n  Bound result 79228162445264337595068453172\n  Bound result 337593543950335\n\n[PASS] testFuzz_failedPreviewOrBridgeSkipsAndRefunds(bool,uint8,uint96) (runs: 256, μ: 1804564, ~: 1598295)\nLogs:\n  Bound result 4\n  Bound result 562719717216947147\n\n[PASS] testFuzz_nonpayableContractWorksWithNoValueExactFeeAndSurplus(bool,uint8) (runs: 256, μ: 1943421, ~: 1976316)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_previewExceedingTheBudgetSkipsWithCodeOneAndRefunds(bool,uint96) (runs: 256, μ: 2165059, ~: 2150609)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] testFuzz_quoteAboveCapSkipsWithCodeThree(bool,uint96,uint96) (runs: 256, μ: 1566550, ~: 1581287)\nLogs:\n  Bound result 22568587641541436\n  Bound result 562719717216947147\n\n[PASS] testFuzz_unsetExecutorDisablesBurnAndRefunds(bool,uint96) (runs: 256, μ: 1581533, ~: 1567348)\nLogs:\n  Bound result 264337514315787821\n\n[PASS] test_constantsAndStorage() (gas: 29216)\n[PASS] test_constructorRejectsNonzeroExecutorWithoutCodeAndAcceptsZeroOrCode() (gas: 22214)\n[PASS] test_exactFeeAndCapAreInclusive() (gas: 1708522)\n[PASS] test_executorReentryIsGuarded() (gas: 1770433)\n[PASS] test_executorSurplusCallReentryIsGuarded() (gas: 2351802)\n[PASS] test_executorSurplusIsForcedOnARejectingRecipient() (gas: 1984874)\n[PASS] test_existingChecksAndIntakeFailurePrecedeBurnFeeCheck() (gas: 579665)\n[PASS] test_gasArgumentsIncludeOnlyTheValueStipend() (gas: 1694311)\n[PASS] test_noFeeAtExactThresholdReverts() (gas: 1537187)\n[PASS] test_nonpayableContractAcceptsZeroRefundOnPreviewFailure() (gas: 1791251)\n[PASS] test_paidFunctionsRejectOneWeiWhereZeroValueSucceeds() (gas: 3763206)\n[PASS] test_previewUsingMostOfTheBudgetIsQuotedAndBurns() (gas: 2236677)\n[PASS] test_registryRefundReentryIsGuarded() (gas: 2174351)\n[PASS] test_rejectedNonzeroRegistryRefundRevertsAllEffects() (gas: 1949325)\n[PASS] test_zeroQuoteStillTriggersWhenDue() (gas: 1643668)\n[PASS] test_zeroValueHasNoStipend() (gas: 1564768)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 373.26ms (1.10s CPU time)\n\nRan 8 tests for test/Rename.t.sol:RenameTest\n[PASS] test_catalogSpecNamesMatchTheTable() (gas: 495517)\n[PASS] test_collectionNameAndSymbol() (gas: 25005)\n[PASS] test_composerStaysUnderTheSizeLimitWithHeadroom() (gas: 13473)\n[PASS] test_metadataCarriesTheFinalFamilyNames() (gas: 3753859)\n[PASS] test_nameTableIsTheFinalTable() (gas: 609580)\n[PASS] test_noWorkingNameSurvivesInTheNameTable() (gas: 1060323)\n[PASS] test_unknownIdHasNoName() (gas: 25179)\n[PASS] test_upgradeRefusesTopWeightsAsASharedFact() (gas: 1641356)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 373.30ms (14.47ms CPU time)\n\nRan 3 tests for test/Attestations.t.sol:AttestationsTest\n[PASS] test_allFiveRecoverTheAttesterUnderTheirOwnDomainOnly() (gas: 5269883)\n[PASS] test_loaderRejectsUnknownAnswerTypeNames() (gas: 4845)\n[PASS] test_protocolVectorDigestAndSelector() (gas: 2162970)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 428.68ms (7.78ms CPU time)\n\nRan 29 tests for test/Registry.t.sol:RegistryTest\n[PASS] test_abandonOnlyAfterFourteenDaysAndStaleCallbackLeavesSuccessor() (gas: 3333197)\n[PASS] test_anyoneReadsAnyWalletAndNothingUsesTxOrigin() (gas: 1943609)\n[PASS] test_attestationForAnotherConsumerOrChainIsNeverAccepted() (gas: 3213484)\n[PASS] test_callbacksRejectEveryoneButTheIntake() (gas: 1630253)\n[PASS] test_claimSponsoredRules() (gas: 5263554)\n[PASS] test_directTraitsAreLiveAndNeedNoCard() (gas: 606480)\n[PASS] test_fuzz_tiersAreMonotone(uint8,bool,uint32,uint128,uint32,uint8) (runs: 256, μ: 704119, ~: 695879)\n[PASS] test_mainnetQuestionAcceptedUnderSepoliaConsumerDomain() (gas: 1726494)\n[PASS] test_mainnetSignatureCannotAnswerSepoliaConsumer() (gas: 1667363)\n[PASS] test_malformedEnvelopeIsNotDeliveredAndStaysPending() (gas: 1561024)\n[PASS] test_mintOncePerWalletAndTransfersKeepClaimant() (gas: 956472)\n[PASS] test_mintWithoutFeeReverts() (gas: 47096)\n[PASS] test_missReasons() (gas: 29437089)\n[PASS] test_noReceiveOrFallback() (gas: 57774)\n[PASS] test_nonMemberIsNeverAnEarlyBird() (gas: 232815)\n[PASS] test_onFailureClearsAndAllowsRetry() (gas: 3005968)\n[PASS] test_onResultGasWorstCase() (gas: 2334276)\nLogs:\n  onResult worst-case gas: 164955\n\n[PASS] test_poolIsTheBalanceAndOnlyLeavesThroughSponsoredRequests() (gas: 5657440)\n[PASS] test_reentrantTokenCannotReenterMint() (gas: 2358744)\n[PASS] test_registerSpecAssignsSequentialIdsAndIsImmutable() (gas: 1231885)\n[PASS] test_sepoliaQuestionMissesWithReasonThreeUnderSepoliaDomain() (gas: 1654191)\n[PASS] test_sharedFactBadEnvelopeIsAMissAndCanBeRequestedAgain() (gas: 6924648)\n[PASS] test_sharedFactFlow() (gas: 2477894)\n[PASS] test_specGuards() (gas: 1337022)\n[PASS] test_strangerCannotDiscardLateValidAnswer() (gas: 1727512)\n[PASS] test_supportsERC4906AndERC721() (gas: 25952)\n[PASS] test_upgradeGuards() (gas: 6034510)\n[PASS] test_upgradeHappyPathMarksTraitAndRefreshesCard() (gas: 2537251)\n[PASS] test_upgradeWithoutCardAttachesToClaimant() (gas: 1895072)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 428.68ms (116.67ms CPU time)\n\nRan 8 tests for test/Artifacts.t.sol:ArtifactsTest\n[PASS] test_constructorAcceptsUnavailableCuratorOnEmptyFloor() (gas: 16156)\n[PASS] test_constructorRejectsUnsettledOrUnavailableCurator() (gas: 262986)\n[PASS] test_constructorRejectsZeroAddressesAndStoresTheRest() (gas: 8024)\n[PASS] test_deployScriptUsesMainnetConstantsOnEveryOtherChain() (gas: 60455489)\n[PASS] test_deployScriptUsesSepoliaConstantsAndNonzeroExecutor() (gas: 31103316)\n[PASS] test_noForbiddenOpcodesInRuntime() (gas: 56163984)\n[PASS] test_noImmutableReferencesInAnyArtifact() (gas: 91585297)\n[PASS] test_twoDeploymentsHaveIdenticalRuntimeCode() (gas: 3576039)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 428.70ms (164.01ms CPU time)\n\nRan 19 tests for test/Goldens.t.sol:GoldensTest\n[PASS] test_escapeJsonNeutralisesMarkup() (gas: 42645)\n[PASS] test_goldenSyntheticCollector() (gas: 20831323)\n[PASS] test_goldenSyntheticDirect() (gas: 5079487)\n[PASS] test_goldenSyntheticFullhouse() (gas: 21514473)\n[PASS] test_goldenSyntheticHoney() (gas: 23746288)\n[PASS] test_goldenSyntheticNewcomer() (gas: 3219081)\n[PASS] test_goldenSyntheticOracle() (gas: 8916232)\n[PASS] test_goldenSyntheticOutsider() (gas: 5211326)\n[PASS] test_goldenSyntheticWidthThroughTheRenderer() (gas: 24718798)\n[PASS] test_imageCommunityPathFollowsTheStepTable() (gas: 13547491)\n[PASS] test_imageIdsOutsideTheCatalogRenderWithoutReverting() (gas: 763825)\n[PASS] test_imageIsPureAndDeterministic() (gas: 16076101)\n[PASS] test_imageOverflowPathAbsentAtOrBelow39AndNeverOverflows() (gas: 13459611)\n[PASS] test_imageRareDotOnlyAtATopTierRareId() (gas: 17170837)\n[PASS] test_imageRingsByCommunityCount() (gas: 5559349)\n[PASS] test_imageStepsUseExponentiationNotXor() (gas: 6674005)\n[PASS] test_reportRendererRuntimeSize() (gas: 129606)\nLogs:\n  Renderer runtime bytes: 21570\n\n[PASS] test_reportTokenURIGas() (gas: 29841499)\nLogs:\n  tokenURI gas synthetic_width: 10810085\n  tokenURI gas synthetic_fullhouse: 9147472\n  tokenURI gas synthetic_honey: 9589924\n\n[PASS] test_templateArtifactsMatchTheCompiledConstants() (gas: 297819)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 428.68ms (495.27ms CPU time)\n\nRan 32 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_abandonedSharedFactCanBeRequestedAgainAndTheLateAnswerIsIgnored() (gas: 3063183)\n[PASS] test_attestationForAnotherClaimantIsAMissForThisRequest() (gas: 3243937)\n[PASS] test_attestationForAnotherTraitWithTheSameWindowIsAMiss() (gas: 3246988)\n[PASS] test_callbackStarvedOfGasIsNotDeliveredAndStaysPending() (gas: 1692772)\n[PASS] test_cardShowsAtMostThirtyTwoCommunityIdsAndCountsThemAll() (gas: 86215648)\n[PASS] test_claimSponsoredWhilePendingOrVerifiedReverts() (gas: 2104349)\n[PASS] test_communityT3SpecIsASharedFactWithItsOwnHead() (gas: 2423000)\n[PASS] test_everyTemplateVerifiesUnderTheStipendWithACard() (gas: 11730108)\n[PASS] test_expiryAtTheExactSecondStillPassesAndOneLaterDoesNot() (gas: 3241176)\n[PASS] test_fuzz_abandonedPoolRequestKeepsPoolUsedAndLateCallbackIsIgnored(bool) (runs: 256, μ: 1907673, ~: 1907673)\n[PASS] test_fuzz_anyFieldAlteredAfterSigningIsASignatureMiss(uint8,uint256) (runs: 512, μ: 1652833, ~: 1654062)\nLogs:\n  Bound result 7\n\n[PASS] test_fuzz_applySharedFactOnlyWithinTheHead(uint8,uint8) (runs: 256, μ: 1778023, ~: 1763878)\nLogs:\n  Bound result 2\n  Bound result 0\n\n[PASS] test_fuzz_boolAnswerMustBeExactlyZeroOrOne(uint256) (runs: 512, μ: 2075896, ~: 2075589)\n[PASS] test_fuzz_countAnswerAgainstTheThreshold(uint256,bytes1,bool) (runs: 512, μ: 1654092, ~: 1625843)\n[PASS] test_fuzz_expiryAndClockSkewBoundaries(uint64,uint64) (runs: 512, μ: 1650383, ~: 1641284)\n[PASS] test_fuzz_hasTraitAndTraitsOfNeverRevert(address,uint16,uint8,bool,uint8) (runs: 512, μ: 321331, ~: 333353)\n[PASS] test_fuzz_maximalSpecRegistersComposesAndFitsTheBody(uint8,uint256,uint256) (runs: 64, μ: 2439680, ~: 2708008)\nLogs:\n  Bound result 3\n  Bound result 11\n\n[PASS] test_fuzz_panelAndQuorumBoundaries(uint16,uint16,uint16) (runs: 512, μ: 1655129, ~: 1640399)\n[PASS] test_fuzz_panelTraitNeedsElevenAndSeven(uint16,uint16,uint16) (runs: 512, μ: 2083429, ~: 2069384)\n[PASS] test_fuzz_specBodyIsDeterministicAndClaimantBound(address,address) (runs: 256, μ: 864570, ~: 864570)\n[PASS] test_fuzz_upgradeChargesExactlyKTimesPriceAndLeavesThePoolAlone(uint8,uint256) (runs: 256, μ: 5363291, ~: 4218301)\nLogs:\n  Bound result 5\n  Bound result 57005\n\n[PASS] test_fuzz_upgradeRejectsEveryIdThatIsNotAnOracleTrait(uint16) (runs: 256, μ: 209815, ~: 209292)\n[PASS] test_fuzz_windowMustEqualTheCanonicalOne(uint64,uint64) (runs: 512, μ: 1640820, ~: 1640809)\n[PASS] test_onFailureRecordsWhatItIsToldAndStoresNothing() (gas: 3064022)\n[PASS] test_questionHashIsBoundToTheClaimantAndTheTrait() (gas: 689833)\n[PASS] test_reentrantTokenCannotReenterAnyIMDMovingFunction() (gas: 7516833)\n[PASS] test_sharedFactWorstCaseEnvelopeUnderTheStipend() (gas: 3983678)\n[PASS] test_signatureShapesThatDoNotRecover() (gas: 9337010)\n[PASS] test_tokenURIDependsOnlyOnTheClaimantsFacts() (gas: 14703083)\n[PASS] test_traitClassForEveryCatalogIdAndRevertsForUnknown() (gas: 703103)\n[PASS] test_upgradeSponsoredDrawsAllNineOverNineDaysAndRefusesDuplicates() (gas: 12559890)\n[PASS] test_verifiedWindowIsTheCanonicalWindowForEveryOracleId() (gas: 16462663)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 429.04ms (3.79s CPU time)\n\nRan 10 tests for test/ReviewChanges.t.sol:ReviewChangesTest\n[PASS] test_fuzz_emptyFixedArgRequiresZeroValueForT1AndT2(uint256) (runs: 256, μ: 3038848, ~: 3038677)\nLogs:\n  Bound result 507993366093923789062821\n\n[PASS] test_fuzz_ordinalShowsLowestVerifiedId(uint8) (runs: 256, μ: 4554014, ~: 4846154)\nLogs:\n  Bound result 0\n\n[PASS] test_hugeAnswerClearsUintBoolAndSharedRequestsUnderStipend() (gas: 26378702)\n[PASS] test_hugeSignatureClearsPendingAndAllowsImmediateRetry() (gas: 6837849)\n[PASS] test_metadataReportsMinimaEvenWhenSignedPanelIsLarger() (gas: 6306452)\n[PASS] test_scalarAnswerLengthPrecedesChainSignerAndClaimedType() (gas: 17765774)\n[PASS] test_sharedAnswerUpperBoundPrecedesChainAndSigner() (gas: 4502989)\n[PASS] test_signatureLengthPrecedesAnswerLengthAndChain() (gas: 37651315)\n[PASS] test_unknownRequestStillPrecedesDynamicSizeChecks() (gas: 12871553)\n[PASS] test_validationPrecedenceAfterSizes() (gas: 18084381)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 432.68ms (802.13ms CPU time)\n\nRan 1 test for test/Invariants.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariant_oneCardPerClaimantWithImmutableClaimant\n[PASS] invariant_poolOnlyLeavesThroughSponsoredRequests\n InvariantsTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claimSponsored    | 3168  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | mintCard          | 3273  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | sponsor           | 3362  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | transfer          | 3278  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | upgradeAndDeliver | 3303  | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1553128467581215636\n  Bound result 784905008410800190\n  Bound result 1061547490797859549\n  Bound result 21174\n  Bound result 157716842327070725\n  Bound result 2271\n  Bound result 1731197118826027222\n  Bound result 345005913057400960\n  Bound result 3559\n  Bound result 8720\n  Bound result 9115\n  Bound result 3297616802100892\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.09s (6.09s CPU time)\n\nRan 1 test for test/BurnInvariant.t.sol:BurnInvariantTest\n[PASS] invariant_registryRetainsNoClaimETHAndPoolOnlyFundsOracleRequests() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| BurnHandler | claim    | 16384 | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 111685795089766338482\n  Bound result 43\n  Bound result 84265\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1829\n  Bound result 74264337592978034889\n  Bound result 8093366063670440\n  Bound result 7441\n  Bound result 14446206397732\n  Bound result 1744\n  Bound result 821\n  Bound result 73686426\n  Bound result 20839938009\n  Bound result 31530\n  Bound result 3847111\n  Bound result 3490697260845\n  Bound result 17483265397356312\n  Bound result 6502\n  Bound result 4329670727698909\n  Bound result 6747\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2194\n  Bound result 74264337592978034889\n  Bound result 5355\n  Bound result 18175542174535606\n  Bound result 1026170\n  Bound result 187383584233\n  Bound result 18980794936170296\n  Bound result 74264337592978034889\n  Bound result 6863963500940184\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 5\n  Bound result 3820046261089565\n  Bound result 5175893019725063\n  Bound result 30\n  Bound result 4329670727698909\n  Bound result 542659680210\n  Bound result 15\n  Bound result 133316654177\n  Bound result 65\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 309\n  Bound result 74264337592978034889\n  Bound result 16333\n  Bound result 15144139800018388\n  Bound result 361391329\n  Bound result 5620\n  Bound result 6392190220459758\n  Bound result 17025\n  Bound result 1804235829\n  Bound result 6356\n  Bound result 74264337592978034889\n  Bound result 16606\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 23952\n  Bound result 1880942922\n  Bound result 4329670727698909\n  Bound result 1073\n  Bound result 2793\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 6543\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3478\n  Bound result 4329670727698909\n  Bound result 1209039221755432\n  Bound result 21610\n  Bound result 1347\n  Bound result 8062538255276358\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 584\n  Bound result 8366\n  Bound result 4333632135824622\n  Bound result 147\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 13069769755247365\n  Bound result 23690\n  Bound result 4329670727698909\n  Bound result 19131307455326744\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2221\n  Bound result 22761\n  Bound result 9197977283572036\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 7014\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 16062\n  Bound result 9238\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 116\n  Bound result 17027\n  Bound result 4333632135824622\n  Bound result 113261144333\n  Bound result 8\n  Bound result 115\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 16207\n  Bound result 3486224446370\n  Bound result 4329670727698909\n  Bound result 16029\n  Bound result 318\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 19602\n  Bound result 4333632135824622\n  Bound result 8485\n  Bound result 4329670727698909\n  Bound result 16380987763949530\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 91367124398043712191\n  Bound result 1017569300830\n  Bound result 7085897216441890\n  Bound result 74264337592978034889\n  Bound result 5356\n  Bound result 4333632135824622\n  Bound result 3351\n  Bound result 4329670727698909\n  Bound result 4858084361544515\n  Bound result 74264337592978034889\n  Bound result 8843781773092492\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 24481\n  Bound result 5638\n  Bound result 52806580125533239\n  Bound result 3165560241530197\n  Bound result 11420499685075676\n  Bound result 74264337592978034889\n  Bound result 191\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4202047187\n  Bound result 82718949488418772971\n  Bound result 4061674789252195\n  Bound result 36345705\n  Bound result 74264337592978034889\n  Bound result 21299\n  Bound result 18638\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 15994\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 2363\n  Bound result 12946\n  Bound result 14883\n  Bound result 14309\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 13090\n  Bound result 9625401639367080\n  Bound result 18957550992404897\n  Bound result 74264337592978034889\n  Bound result 8955842611469346\n  Bound result 4333632135824622\n  Bound result 3276318195313711\n  Bound result 153645\n  Bound result 3\n  Bound result 74264337592978034889\n  Bound result 8542977452425818\n  Bound result 14411366952071960\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 12.73s (12.72s CPU time)\n\nRan 3 tests for test/InvariantsExtended.t.sol:InvariantsExtendedTest\n[PASS]\nInvariantsExtendedTest invariants:\n[PASS] invariant_markedExactlyWhenAPassingAttestationWasDelivered\n[PASS] invariant_oneCardPerClaimant\n[PASS] invariant_poolDailyAndLifetimeLimits\n[PASS] invariant_poolIsFeesPlusDonationsMinusSponsoredRequests\n[PASS] invariant_sharedFactsAreHashesStoredOnlyOnDelivery\n[PASS] invariant_specsAreImmutable\n InvariantsExtendedTest invariants (runs: 96, calls: 4608, reverts: 0)\n\n╭-------------+-------------------+-------+---------+----------╮\n| Contract    | Selector          | Calls | Reverts | Discards |\n+==============================================================+\n| FullHandler | abandonLate       | 301   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | advanceTime       | 241   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | applyShared       | 267   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | claimSponsored    | 250   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverFalse      | 273   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTampered   | 293   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTrue       | 253   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | donate            | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | failRequest       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | mintCard          | 263   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | registerSpec      | 284   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | replayConsumed    | 282   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | requestSharedFact | 287   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | sponsor           | 288   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | transfer          | 280   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradePaid       | 265   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradeSponsored  | 251   | 0       | 0        |\n╰-------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1\n  Bound result 0\n  Bound result 21\n  Bound result 0\n  Bound result 16714\n  Bound result 1\n  Bound result 14715\n  Bound result 6027832\n  Bound result 560497340611443044\n  Bound result 6\n  Bound result 2\n  Bound result 472141011443392434\n  Bound result 2859\n  Bound result 1\n  Bound result 1604\n  Bound result 3\n  Bound result 2\n  Bound result 1\n\n[PASS] test_handlerReplayOfAConsumedIdChangesNothing() (gas: 1920489)\n[PASS] test_handlerSponsoredSelectionAcceptsMaxSeed() (gas: 1763915)\nLogs:\n  Bound result 3000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 14.94s (14.93s CPU time)\n\nRan 17 test suites in 14.94s (37.67s CPU time): 174 tests passed, 0 failed, 17 skipped (191 total tests)\n","passed":true},{"durationMs":276,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Registry.abandon(bytes32)\",\"Registry.applySharedFact(uint16,address[])\",\"Registry.approve(address,uint256)\",\"Registry.claimSponsored(uint16)\",\"Registry.mintCard()\",\"Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Registry.onResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Registry.registerSpec((uint8,address,string,string,string,uint256,string,uint8,uint256,uint64,uint64,string))\",\"Registry.requestSharedFact(uint16,uint256)\",\"Registry.safeTransferFrom(address,address,uint256)\",\"Registry.safeTransferFrom(address,address,uint256,bytes)\",\"Registry.setApprovalForAll(address,bool)\",\"Registry.sponsor(uint256)\",\"Registry.transferFrom(address,address,uint256)\",\"Registry.upgrade(uint16[],uint256)\",\"Registry.upgradeSponsored(uint256,uint16[])\"],\"files\":{\".gitignore\":8,\".gitmodules\":6,\"ADAPTATION.md\":185,\"CATALOG.md\":268,\"CONCEPT.md\":262,\"DISCLOSURE.md\":58,\"INTEGRATION.md\":441,\"LICENSE\":21,\"README.md\":419,\"TEMPLATES.md\":158,\"foundry.toml\":44,\"reference/Intake.sol\":5175,\"reference/IntakeV2.sol\":5240,\"reference/PROVENANCE.md\":44,\"reference/abi/IMD.json\":1684,\"reference/abi/IdentityMD.json\":894,\"reference/abi/Intake.json\":955,\"reference/abi/IntakeV2.json\":1070,\"reference/abi/WhitelistCurator.json\":794,\"reference/anchors/headers.json\":61,\"reference/attestations/2026-10-10-link-pilot.json\":92,\"reference/attestations/2026-10-10-meatbag-consumer.json\":104,\"reference/attestations/2026-10-11-feed-consumer-v2.json\":105,\"reference/attestations/2026-10-11-nonce-false.json\":92,\"reference/attestations/2026-10-11-nonce-true.json\":92,\"reference/attestations/README.md\":29,\"reference/burn/BurnExecutorV2.sol.txt\":314,\"reference/burn/abi.json\":1001,\"reference/burn/provenance.json\":17,\"reference/intake/completions.json\":147,\"reference/list-record/src/ListRecord.sol\":169,\"reference/list-record/src/ListRecordRenderer.sol\":126,\"reference/list-record/src/interfaces/IListRecordRenderer.sol\":29,\"reference/list-record/src/lib/SSTORE2.sol\":39,\"reference/list-record/src/lib/Str.sol\":54,\"reference/list-record/test/Renderer.t.sol\":165,\"reference/list-record/test/RendererMechanism.t.sol\":203,\"reference/list-record/test/Template.t.sol\":293,\"reference/list-record/test/fixtures/golden_synthetic_held_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_held_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_transferred_uri.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_svg.txt\":1,\"reference/list-record/test/fixtures/golden_synthetic_width_uri.txt\":1,\"reference/plane/checks/1001-hour-savior.json\":81,\"reference/plane/checks/1102-ordinal-1000.json\":81,\"reference/plane/checks/1105-first-thousand.json\":81,\"reference/plane/checks/1201-top-32.json\":82,\"reference/plane/checks/1301-not-born-yesterday.json\":86,\"reference/plane/checks/701-still-here.json\":81,\"reference/plane/checks/801-last-stand.json\":81,\"reference/plane/checks/T2-log-sum-composed.json\":81,\"reference/plane/checks/T4-call-compare-reference.json\":81,\"reference/plane/checks/T5-community-composed.json\":86,\"reference/plane/questionHashes.json\":92,\"reference/plane/quotes/1001-hour-savior.json\":20,\"reference/plane/quotes/1102-ordinal-1000.json\":20,\"reference/plane/quotes/1105-first-thousand.json\":20,\"reference/plane/quotes/1201-top-32.json\":20,\"reference/plane/quotes/1301-not-born-yesterday.json\":20,\"reference/plane/quotes/701-still-here.json\":20,\"reference/plane/quotes/801-last-stand.json\":20,\"reference/plane/quotes/T2-log-sum-composed.json\":20,\"reference/plane/quotes/T4-call-compare-reference.json\":20,\"reference/plane/quotes/T5-community-composed.json\":20,\"remappings.txt\":2,\"script/Deploy.s.sol\":48,\"src/Composer.sol\":629,\"src/HiveData.sol\":75,\"src/Registry.sol\":761,\"src/Renderer.sol\":427,\"src/TemplateData.sol\":16,\"src/Types.sol\":41,\"src/interfaces/IBurnExecutor.sol\":12,\"src/interfaces/IIDMD.sol\":8,\"src/interfaces/IIntake.sol\":29,\"src/interfaces/IOracleConsumer.sol\":38,\"src/interfaces/IWhitelistCurator.sol\":53,\"template/blob.hex\":1,\"template/offsets.txt\":1,\"templates/fixtures/1001-hour-savior.json\":22,\"templates/fixtures/1102-ordinal-1000.json\":22,\"templates/fixtures/1105-first-thousand.json\":22,\"templates/fixtures/1201-top-32.json\":22,\"templates/fixtures/1301-not-born-yesterday.json\":24,\"templates/fixtures/701-still-here.json\":22,\"templates/fixtures/801-last-stand.json\":22,\"templates/fixtures/T2-log-sum-composed.json\":23,\"templates/fixtures/T4-call-compare-reference.json\":21,\"templates/fixtures/T5-community-composed.json\":24,\"test/.gitkeep\":0,\"test/Adversarial.t.sol\":832,\"test/Artifacts.t.sol\":209,\"test/Attestations.t.sol\":196,\"test/Base.t.sol\":158,\"test/BurnInvariant.t.sol\":120,\"test/BurnRule.t.sol\":405,\"test/Floor.t.sol\":109,\"test/Goldens.t.sol\":444,\"test/Invariants.t.sol\":124,\"test/InvariantsExtended.t.sol\":520,\"test/NOTES.md\":495,\"test/ReReview.t.sol\":263,\"test/Registry.t.sol\":822,\"test/RegistryRules.t.sol\":335,\"test/Rename.t.sol\":224,\"test/ReviewChanges.t.sol\":215,\"test/Templates.t.sol\":171,\"test/fixtures/golden_synthetic_collector_preimage.txt\":1,\"test/fixtures/golden_synthetic_collector_svg.txt\":1,\"test/fixtures/golden_synthetic_collector_uri.txt\":1,\"test/fixtures/golden_synthetic_direct_preimage.txt\":1,\"test/fixtures/golden_synthetic_direct_svg.txt\":1,\"test/fixtures/golden_synthetic_direct_uri.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_preimage.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_svg.txt\":1,\"test/fixtures/golden_synthetic_fullhouse_uri.txt\":1,\"test/fixtures/golden_synthetic_honey_preimage.txt\":1,\"test/fixtures/golden_synthetic_honey_svg.txt\":1,\"test/fixtures/golden_synthetic_honey_uri.txt\":1,\"test/fixtures/golden_synthetic_newcomer_preimage.txt\":1,\"test/fixtures/golden_synthetic_newcomer_svg.txt\":1,\"test/fixtures/golden_synthetic_newcomer_uri.txt\":1,\"test/fixtures/golden_synthetic_oracle_preimage.txt\":1,\"test/fixtures/golden_synthetic_oracle_svg.txt\":1,\"test/fixtures/golden_synthetic_oracle_uri.txt\":1,\"test/fixtures/golden_synthetic_outsider_preimage.txt\":1,\"test/fixtures/golden_synthetic_outsider_svg.txt\":1,\"test/fixtures/golden_synthetic_outsider_uri.txt\":1,\"test/fixtures/golden_synthetic_width_preimage.txt\":1,\"test/fixtures/golden_synthetic_width_svg.txt\":1,\"test/fixtures/golden_synthetic_width_uri.txt\":1,\"test/fork/BurnRule.fork.t.sol\":193,\"test/fork/Mainnet.fork.t.sol\":338,\"test/mocks/MockBurnExecutor.sol\":157,\"test/mocks/Mocks.sol\":231,\"tools/gen_template.py\":898,\"tools/test_gen_template.py\":334},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"db6b20183be11177ef271c57646aca70cb60134e8a4c4cc987a43b6d5376e8f0","verifiedTreeHash":"f2e34495b0d09a2ccccc6119db2cf6fe48f782f7","verifierVersion":"0.1.0+d952fceb"}]}