{"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":"610d1be1-f3fa-4dfd-9165-a0edacb19016","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"5ca3ecae1c10214b64ceafe29653d5ede66642955662e0f843ea95a1c5579928","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b037a7b6601e883cf8a906c1520c0624817d42d8310b65c2f43679204608af3","skillId":"adversarial-review","tools":[]},"key":"adversarial_review","kind":"code","role":"review","skillHash":"6b037a7b6601e883cf8a906c1520c0624817d42d8310b65c2f43679204608af3","skillId":"adversarial-review","state":"accepted"},{"acceptedSubmissionHash":"e5b8c4027ca9ee9c28bceb1328849b56c1e8fee155292e9a173f4d960b099dd8","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","state":"accepted"}],"objective":"Two steps, one worker each; a worker sees only this objective and its own step text. Do only your step; the other step's text is deliberately not here, so never ask for it. DECIDE, DO NOT ASK: a needs_input blocks the whole job and costs the payer; when a rule below conflicts with a required check, make the smallest change that satisfies the check, keep everything else, and report the change in your summary. Project: Sworn (SWORN), an ownerless ERC-721 registry of facts about wallets, Foundry, three contracts; your starting tree is the project's newest result. Two corrections to the burn rule in src/Registry.sol plus one test gap, all found by the independent verification; nothing else changes.\n\nCORRECTION 1, preview gas. _burnOrRefund reads burnExecutor.previewBridge() in try/catch with a 200,000 gas cap. Measured against the real IMD BurnExecutor V2 (0xe29386719C155B6847aD5a4E97C6674f10ffc750) on 2026-10-16: eth_call at block 26,202,500 returns (0,0,0) below about 272,000 gas at the CALL (the executor catches its inner OFT quote running out of gas) and the real quote above it; a cold fork trace at block 26,202,203 shows 264,408 gas. So the delivered rule never burns on mainnet (the amount reads below BURN_MIN; silent refund). The delivered fork test passes only warm, because it reads the uncapped quote first; a mainnet claim reaches the executor cold. Fix: uint256 internal constant PREVIEW_GAS = 600_000; as the gas argument of that call (2.2 times the measured need, below BURN_GAS); nothing else in the rule moves.\n\nCORRECTION 2, executor without code. try/catch catches only a revert of the external call; the three return words are decoded outside it, so an executor address with no code reverts claimSponsored and upgradeSponsored for every wallet for ever, and an ownerless registry cannot repair it. Fix: in the constructor, when burnExecutor_ is not zero, revert ExecutorHasNoCode() if burnExecutor_.code.length == 0 (zero stays allowed and means no burn rule, which the Sepolia rehearsal uses). A coded executor returning fewer than three words still reverts a claim: document it as the residual; add no low-level call for it. KNOWN CONSEQUENCE: test/Artifacts.t.sol test_deployScriptUsesTheFiveStaticAddresses runs the deploy script offline with the mainnet executor constant and no code there; put deployCodeTo(\"MockBurnExecutor.sol:MockBurnExecutor\", d.BURN_EXECUTOR()) before d.deploy() in that test. Other tests use address(0) or a mock; if one still breaks, fix it the same way and list it.\n\nTEST GAP: a payable upgrade() survives the whole suite because test_paidFunctionsRemainNonpayableAndNeverTriggerBurn accepts any revert; step 1 replaces it.\n\nRULES. Touch only src/Registry.sol, test/BurnRule.t.sol, test/mocks/MockBurnExecutor.sol (its gas fixture and its refund path only), test/fork/BurnRule.fork.t.sol, test/Artifacts.t.sol (the one line above), test/NOTES.md, README.md, CONCEPT.md, INTEGRATION.md, DISCLOSURE.md. Everything else (Composer, Renderer, Types, generator, goldens, Deploy.s.sol, foundry.toml, other tests) stays byte-equal unless the constructor check forces the minimal edit above. No new production contract (test-only helpers under test/ are fine), no compiler-setting change, no removed behaviour; local factoring of the pool paths and fixed small codes only if the Registry would not fit otherwise. SIZE: the Registry is 24,495 B (81 B under EIP-170) before this job; both corrections are known to fit without factoring; report the size after; if it does not fit, stop and report, never remove behaviour. CHECKS for every step: forge build, forge fmt --check, forge test (offline; 165 pass today, 15 fork skips), python3 tools/gen_template.py --check (28 artifacts), python3 -m unittest discover -s tools (18 tests). FORK TESTS: test/fork/BurnRule.fork.t.sol stays opt-in exactly as it is (forge test --match-contract BurnRuleForkTest --fork-url <RPC> --fork-block-number 26202203; no environment reads offline); without an archive RPC, say so rather than weaken a test. Never publish anything.\n\nDOCS (step 1). README 'Free claims and the burn rule', INTEGRATION section 5b, CONCEPT, DISCLOSURE and test/NOTES.md must say what is true after the change: PREVIEW_GAS 600,000 and why (the measurement above, with block and date); at the pinned block the corrected preview returns the real quote and the fork test burns; the constructor rejects a nonzero executor without code; a claimant should attach exactly the fee quoted in the same block, because the executor re-quotes when it bridges and keeps the whole attachment if the quote rose; and the residuals (short return data from a coded executor; the executor owner's configuration authority; a future quote above PREVIEW_GAS or BURN_FEE_CAP; the asynchronous Base burn). The rule stays best effort: remove every sentence that says the capped preview returns zero at the pinned block, but promise no future liveness.","parentJobId":"7b754195-9b7d-4250-b2c8-2b56008d3c0f","planHash":"8c31d9828942bba0b70e29a2d5ddc3f4fa9c255afef8e0585c7ec2046699e376","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"27391f0e-0419-4d15-a5d5-bb182f137bd9","publication":{"commit":null,"deliveredAt":null,"repoUrl":null},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51020","feedbackHash":"34c26d739d31ac3487435f995f18fc23e1b2a85e629c5467560a1ea23de41e98","nodeKey":"adversarial_review","submissionHash":"5ca3ecae1c10214b64ceafe29653d5ede66642955662e0f843ea95a1c5579928","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52151","feedbackHash":"d0786805306ae5f5d152ec20aac74b51bd952a836d1e0ff31131bec259f9e43a","nodeKey":"build_contract_project","submissionHash":"e5b8c4027ca9ee9c28bceb1328849b56c1e8fee155292e9a173f4d960b099dd8","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"b3bd80fb871b14e2bce902eeb3aa612a92ece71528df9ad94c65d6b25cfcad58","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a31e321b410aaa02","findings":[{"citation":"resolved","description":"Not a defect against the requested design (the objective explicitly accepts this residual and forbids a low-level call), recorded so the path is named. The three return words are ABI-decoded outside the try/catch, so a nonzero executor whose code answers previewBridge() with 64 bytes (or none) makes claimSponsored and upgradeSponsored revert for every wallet, and the ownerless registry cannot repair it. The constructor's ExecutorHasNoCode() check (line 198) only guards the no-code case. The real BurnExecutor V2 at 0xe29386719C155B6847aD5a4E97C6674f10ffc750 returns three words (verified by eth_call at block 26,202,203), so this is only reachable through a different executor argument at deployment. Docs (README 'Residuals, stated', INTEGRATION 5b, CONCEPT, DISCLOSURE, test/NOTES.md) state it correctly.","line":726,"path":"src/Registry.sol","reproduction":"Deploy Registry with burnExecutor_ = address of a contract whose fallback does `mstore(0, 100 ether); return(0, 64)`. Member alice calls claimSponsored(701). Expected under the accepted design: revert (decoding failure outside the catch). Actual: revert; the claim can never succeed for anyone. Verified with a scratch test (test/scratch/Hostile.t.sol, removed): vm.expectRevert(); registry.claimSponsored(701) passes.","severity":"info","snippet":"            try burnExecutor.previewBridge{gas: PREVIEW_GAS}() returns (uint256 amount, uint256, uint256 fee) {","title":"Documented residual confirmed: a coded executor returning fewer than three words reverts every sponsored claim"},{"citation":"resolved","description":"Solidity copies the whole return data of the preview into the caller's memory before decoding. With PREVIEW_GAS = 600,000 the callee can afford roughly 500 KB of memory, and the caller then pays returndatacopy plus its own memory expansion for that size. Measured: a claim against such an executor costs about 2,994,721 gas and still succeeds (BurnTriggered path with the three leading words valid). The executor is the trusted IMD contract and the claimant can supply the gas, so this is bounded and not blocking; it is recorded as the only other executor-driven cost path found. No change recommended.","line":726,"path":"src/Registry.sol","reproduction":"Deploy Registry with burnExecutor_ = a contract whose fallback stores (100 ether, 100 ether, 0.001 ether) at memory 0..96 and executes return(0, 500000). Member alice calls claimSponsored{value: 0.001 ether}(701) with a 10,000,000 gas limit. Expected: success. Actual: success, gas used 2,994,721 (log from test/scratch/Hostile.t.sol, removed); with a 2,000,000 gas limit the same call runs out of gas, which is a claimant-side limit, not a revert caused by the executor.","severity":"info","snippet":"            try burnExecutor.previewBridge{gas: PREVIEW_GAS}() returns (uint256 amount, uint256, uint256 fee) {","title":"A hostile coded executor can inflate a sponsored claim's gas to about 3,000,000 by returning ~500 KB of preview data, but cannot block it"}],"hash":"5ca3ecae1c10214b64ceafe29653d5ede66642955662e0f843ea95a1c5579928","nodeId":"f8f72ca2-c7f8-4f66-9049-7acb5a53c37a","outcome":"completed","summary":"Review complete. The step-1 change is correct on every point I was asked to verify, and I found no blocking defect. Findings and the coverage record are in `.imd-findings.json`.\n\n**What I verified**\n\n- **Registry diff is minimal.** Only the PREVIEW_GAS constant replacing the 200,000 literal, the ExecutorHasNoCode error, its constructor check, and comments. No other literal moved, no behaviour removed. Runtime size measured at 24,495 B, identical to the parent and 81 B under EIP-170.\n- **Executor code check.** A nonzero executor without code reverts at construction, and the zero address still disables the rule. The deploy-script test installs the mock at the mainnet constant.\n- **Fork tests at block 26,202,203 ran for real.** The public endpoint at eth.drpc.org answered archive calls, and all six opt-in tests pass. The cold claim burns the pinned amount for the pinned fee, the executor drains to dust, the exact-fee nonpayable claimant succeeds, the no-fee claim reverts BurnFeeRequired, and the registry's ETH is conserved. Both zero-preview tests are gone. A direct eth_call at that block confirms the measurement: zeros under the old cap, the real quote at 300,000 gas.\n- **Mock fixture** asserts 590,000 to 600,000 entry gas for the preview and 800,000 plus the stipend for the bridge.\n- **Nonpayability regression** has a funded zero-value positive control. Making upgrade() payable in a scratch worktree made it fail with \"paid IMD path must reject ETH\".\n- **Checks**: build, fmt, offline suite (164 pass, 17 fork skips versus the parent's 159 and 15), generator check (28 artifacts), and the 18 Python unit tests all pass. Only the ten permitted files differ from the parent.\n- **Docs** state PREVIEW_GAS with the block and date, the burn at the pinned block, the exact-fee advice, the residuals, and best-effort wording. The remaining zero-preview sentences in test/NOTES.md are labelled as history.\n\n**Hostile executor probing** produced two informational notes, neither blocking:\n\n1. A coded executor returning fewer than three words reverts every sponsored claim. This is the residual the objective accepts and the docs state. I reproduced it to name the path.\n2. An executor returning about 500 KB of preview data inflates a claim to roughly 3.0M gas but cannot block it.\n\nReverting previews, previews burning over 600,000 gas, refund-path reentry and ETH-rejecting claimants all behave as documented. Scratch tests and the temporary worktree were removed, so the tree is unchanged apart from the findings file.","treeHash":null,"usage":{"cachedInputTokens":911370,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":21907,"runtime":"claude","turns":30,"wallClockMs":540719}},{"artifacts":[],"attempt":1,"bundleHash":"3775cc5f86690b68745bdf65a0bf3f53f71f4b6c9518afa5838ff8c20a485974","device":"cdeffb0cd839cbf7","findings":[],"hash":"e5b8c4027ca9ee9c28bceb1328849b56c1e8fee155292e9a173f4d960b099dd8","nodeId":"5654ef6b-5e7c-450f-bbab-4085e2e76139","outcome":"completed","summary":"Both corrections are applied, every check passes, and the fork suite burns at the pinned block over two archive endpoints.\n\n**Registry changes** (`src/Registry.sol`)\n- `PREVIEW_GAS = 600_000` replaces the 200,000 literal as the gas argument of the preview try/catch. Nothing else in the rule moves.\n- The constructor reverts `ExecutorHasNoCode()` for a nonzero executor without code. Zero still means no burn rule. The check reads code size only and never calls the executor.\n- Runtime size stayed at 24,495 B before and after (81 B under EIP-170), because the constant has the same width and the code check is init code only. Init code grew from 26,082 to 26,146 B. Composer (23,377 B) and Renderer (21,570 B) are byte-equal and untouched. No factoring was needed.\n\n**Known consequence** applied: one `deployCodeTo` line installs the mock executor at the mainnet address in the deploy-script test. No other test broke.\n\n**Unit tests** (`test/BurnRule.t.sol`, mock): constructor rejects a bare address and the mainnet constant offline, accepts zero and the mock. The gas fixture now requires 590,000 < entry gas <= 600,000, with the bridge assertions kept. A preview burning 500,000 gas is quoted and bridges; one burning 600,001 skips with code 1 and refunds. The mock's surplus refund now tries a 100,000-gas call first and force-sends only on failure, like the real executor. A claimant re-entering from `receive()` during that call hits the reentrancy guard. The nonpayable test is replaced by a positive control with zero value, a state snapshot, and the identical call with 1 wei that must revert, for all five paid functions.\n\n**Fork tests** (`test/fork/BurnRule.fork.t.sol`): the two zero-preview tests are deleted. New tests use the pinned constants and make the claim the first executor touch in the test. The executor configuration reads moved from setUp into their own test. Results at block 26,202,203:\n\n| endpoint | result |\n|---|---|\n| eth.drpc.org | 6 passed |\n| eth-mainnet.public.blastapi.io | 6 passed |\n| rpc.mevblocker.io/fast | 4 passed, 2 transient backend reverts; both pass on rerun with identical gas |\n| ethereum-rpc.publicnode.com | no archive state at that block |\n\n**Checks**: `forge build` clean, `forge fmt --check` clean, `git diff --check` clean. `forge test` with the verifier seed: 164 passed, 0 failed, 17 skipped (the brief said 165 pass today; the tree had 159 before my five additions, matching the step-5 notes). Generator check: 28 artifacts. Python tests: 18 pass.\n\n**Docs** updated in README, INTEGRATION section 5b, CONCEPT, DISCLOSURE and test/NOTES.md: the measurement with block and date, the burn at the pinned block, the constructor check, exact-fee advice, and the residuals. Every sentence claiming a zero capped preview at the pinned block is gone, and the rule is stated as best effort.\n\n**One deviation to note**: the background reference says a constructor should not require an address to have code. The brief's correction 2 requires it, so the brief wins, and the deploy-script test installs code at the executor address offline. Nothing was committed or published.","treeHash":"96d3422fb3c6d9f0df64a154f911339ff59a013b","usage":{"cachedInputTokens":2227877,"inputTokens":578,"model":"claude-fable-5-1","outputTokens":48928,"runtime":"claude","turns":64,"wallClockMs":961622}}],"verification":[{"checks":[{"durationMs":26854,"exitCode":0,"name":"build","output":"Compiling 81 files with Solc 0.8.24\nSolc 0.8.24 finished in 25.94s\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":18306,"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 18.85ms (19.84ms 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 20.53ms (33.29ms 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: 1640620)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 42.90ms (20.80ms CPU time)\n\nRan 6 tests for test/Templates.t.sol:TemplatesTest\n[PASS] test_allTenBodiesAreByteExact() (gas: 1449627)\n[PASS] test_allTenQuestionHashesEqualThePlanes() (gas: 2177871)\n[PASS] test_bodyIsDeterministicInClaimantAndDiffersAcrossClaimants() (gas: 461117)\n[PASS] test_directAndUnknownIdsHaveNoBody() (gas: 60735)\n[PASS] test_hexMinAndCatalogWindows() (gas: 146951)\n[PASS] test_traitNamesAndClasses() (gas: 112489)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 43.36ms (20.53ms CPU time)\n\nRan 3 tests for test/Attestations.t.sol:AttestationsTest\n[PASS] test_allFiveRecoverTheAttesterUnderTheirOwnDomainOnly() (gas: 4846330)\n[PASS] test_loaderRejectsUnknownAnswerTypeNames() (gas: 4845)\n[PASS] test_protocolVectorDigestAndSelector() (gas: 1951585)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 84.13ms (31.64ms CPU time)\n\nRan 7 tests for test/Artifacts.t.sol:ArtifactsTest\n[PASS] test_constructorRejectsUnsettledOrUnavailableCurator() (gas: 260841)\n[PASS] test_constructorRejectsZeroAddressesAndStoresTheRest() (gas: 5882)\n[PASS] test_deployScriptUsesTheFiveStaticAddresses() (gas: 30483883)\n[PASS] test_noForbiddenOpcodesInRuntime() (gas: 56081012)\n[PASS] test_noImmutableReferencesInAnyArtifact() (gas: 90444293)\n[PASS] test_sepoliaRehearsalPassesZeroBurnExecutor() (gas: 31658412)\n[PASS] test_twoDeploymentsHaveIdenticalRuntimeCode() (gas: 3365926)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 711.90ms (404.66ms CPU time)\n\nRan 24 tests for test/BurnRule.t.sol:BurnRuleTest\n[PASS] testFuzz_belowThresholdRefundsWithoutFee(bool,uint96,uint96) (runs: 256, μ: 1560367, ~: 1546626)\nLogs:\n  Bound result 11823\n  Bound result 264337514315787821\n\n[PASS] testFuzz_dueForwardsWholeValueAndExecutorForceRefunds(bool,uint96,uint96) (runs: 256, μ: 1829501, ~: 1815396)\nLogs:\n  Bound result 79228162514264337593543950335\n  Bound result 264337514315787821\n\n[PASS] testFuzz_dueWithoutEnoughFeeRevertsAtomically(bool,uint96,uint96) (runs: 256, μ: 3238825, ~: 3209711)\nLogs:\n  Bound result 79228162445264337593543950363\n  Bound result 894089195692114\n\n[PASS] testFuzz_failedPreviewOrBridgeSkipsAndRefunds(bool,uint8,uint96) (runs: 256, μ: 1769924, ~: 1596875)\nLogs:\n  Bound result 6\n  Bound result 189010336172188459\n\n[PASS] testFuzz_nonpayableContractWorksWithNoValueExactFeeAndSurplus(bool,uint8) (runs: 256, μ: 1951157, ~: 1975580)\nLogs:\n  Bound result 0\n\n[PASS] testFuzz_previewExceedingTheBudgetSkipsWithCodeOneAndRefunds(bool,uint96) (runs: 256, μ: 2166421, ~: 2180866)\nLogs:\n  Bound result 23669\n\n[PASS] testFuzz_quoteAboveCapSkipsWithCodeThree(bool,uint96,uint96) (runs: 256, μ: 1564304, ~: 1550300)\nLogs:\n  Bound result 79228162514259337593543950362\n  Bound result 3894089195692114\n\n[PASS] testFuzz_unsetExecutorDisablesBurnAndRefunds(bool,uint96) (runs: 256, μ: 1582842, ~: 1597606)\nLogs:\n  Bound result 23669\n\n[PASS] test_constantsAndStorage() (gas: 29216)\n[PASS] test_constructorRejectsNonzeroExecutorWithoutCodeAndAcceptsZeroOrCode() (gas: 22214)\n[PASS] test_exactFeeAndCapAreInclusive() (gas: 1707786)\n[PASS] test_executorReentryIsGuarded() (gas: 1769697)\n[PASS] test_executorSurplusCallReentryIsGuarded() (gas: 2351066)\n[PASS] test_executorSurplusIsForcedOnARejectingRecipient() (gas: 1984138)\n[PASS] test_existingChecksAndIntakeFailurePrecedeBurnFeeCheck() (gas: 578929)\n[PASS] test_gasArgumentsIncludeOnlyTheValueStipend() (gas: 1693575)\n[PASS] test_noFeeAtExactThresholdReverts() (gas: 1536451)\n[PASS] test_nonpayableContractAcceptsZeroRefundOnPreviewFailure() (gas: 1790515)\n[PASS] test_paidFunctionsRejectOneWeiWhereZeroValueSucceeds() (gas: 3761733)\n[PASS] test_previewUsingMostOfTheBudgetIsQuotedAndBurns() (gas: 2235941)\n[PASS] test_registryRefundReentryIsGuarded() (gas: 2173615)\n[PASS] test_rejectedNonzeroRegistryRefundRevertsAllEffects() (gas: 1948589)\n[PASS] test_zeroQuoteStillTriggersWhenDue() (gas: 1642932)\n[PASS] test_zeroValueHasNoStipend() (gas: 1564032)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 725.47ms (4.02s CPU time)\n\nRan 15 tests for test/RegistryRules.t.sol:RegistryRulesTest\n[PASS] test_constructorPriceCheckIsPassiveAndAcceptsAnyNonzeroPrice() (gas: 147524)\n[PASS] test_constructorRejectsUnavailableIntake() (gas: 26511)\n[PASS] test_constructorRejectsWrongAsset() (gas: 548759)\n[PASS] test_constructorRejectsZeroIntakePrice() (gas: 42149)\n[PASS] test_fuzz_bothPoolPathsShareOneAllowancePerUtcDay(bool,bool,uint32) (runs: 256, μ: 3241878, ~: 3225260)\nLogs:\n  Bound result 37089\n\n[PASS] test_idmdCounterFollowsTransfersAndStopsAtNine() (gas: 15425880)\n[PASS] test_idmdHolderMustAlsoBeAListMember() (gas: 1763127)\n[PASS] test_memberClaimsOnDeploymentDayWithoutCardOrIdmd() (gas: 1674133)\n[PASS] test_noVerdictConsumesTheDayAndLifetimePair() (gas: 3267853)\n[PASS] test_paidUpgradeAndSharedFactDoNotUseOrObeyPoolDailyLimit() (gas: 8184370)\n[PASS] test_revertingIntakeDoesNotConsumePoolAllowances() (gas: 2026944)\n[PASS] test_specAndFirstClaimCostSixPointNineIMD() (gas: 1880063)\n[PASS] test_specRequiresFullFeeAndAllowance() (gas: 798750)\n[PASS] test_sponsoredUpgradeRequiresExactlyOneTrait() (gas: 1779524)\n[PASS] test_switchingIdmdDoesNotBypassDailyLimit() (gas: 3190403)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 734.90ms (721.65ms 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: 8914756)\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 796.94ms (847.12ms CPU time)\n\nRan 25 tests for test/Registry.t.sol:RegistryTest\n[PASS] test_abandonOnlyAfterFourteenDaysAndStaleCallbackLeavesSuccessor() (gas: 3290693)\n[PASS] test_anyoneReadsAnyWalletAndNothingUsesTxOrigin() (gas: 1943609)\n[PASS] test_attestationForAnotherConsumerOrChainIsNeverAccepted() (gas: 3212010)\n[PASS] test_callbacksRejectEveryoneButTheIntake() (gas: 1629408)\n[PASS] test_claimSponsoredRules() (gas: 5261343)\n[PASS] test_directTraitsAreLiveAndNeedNoCard() (gas: 606480)\n[PASS] test_fuzz_tiersAreMonotone(uint8,bool,uint32,uint128,uint32,uint8) (runs: 256, μ: 702574, ~: 695897)\n[PASS] test_malformedEnvelopeIsNotDeliveredAndStaysPending() (gas: 1560266)\n[PASS] test_mintOncePerWalletAndTransfersKeepClaimant() (gas: 956472)\n[PASS] test_mintWithoutFeeReverts() (gas: 47096)\n[PASS] test_missReasons() (gas: 29423817)\n[PASS] test_noReceiveOrFallback() (gas: 57774)\n[PASS] test_nonMemberIsNeverAnEarlyBird() (gas: 232815)\n[PASS] test_onFailureClearsAndAllowsRetry() (gas: 3004496)\n[PASS] test_onResultGasWorstCase() (gas: 2333538)\nLogs:\n  onResult worst-case gas: 164954\n\n[PASS] test_poolIsTheBalanceAndOnlyLeavesThroughSponsoredRequests() (gas: 5655208)\n[PASS] test_reentrantTokenCannotReenterMint() (gas: 2358744)\n[PASS] test_registerSpecAssignsSequentialIdsAndIsImmutable() (gas: 1230411)\n[PASS] test_sharedFactBadEnvelopeIsAMissAndCanBeRequestedAgain() (gas: 6920875)\n[PASS] test_sharedFactFlow() (gas: 2477157)\n[PASS] test_specGuards() (gas: 1337022)\n[PASS] test_supportsERC4906AndERC721() (gas: 25952)\n[PASS] test_upgradeGuards() (gas: 6031562)\n[PASS] test_upgradeHappyPathMarksTraitAndRefreshesCard() (gas: 2535776)\n[PASS] test_upgradeWithoutCardAttachesToClaimant() (gas: 1894335)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 796.65ms (851.44ms CPU time)\n\nRan 10 tests for test/ReviewChanges.t.sol:ReviewChangesTest\n[PASS] test_fuzz_emptyFixedArgRequiresZeroValueForT1AndT2(uint256) (runs: 256, μ: 3038868, ~: 3038677)\nLogs:\n  Bound result 10\n\n[PASS] test_fuzz_ordinalShowsLowestVerifiedId(uint8) (runs: 256, μ: 4982340, ~: 4865158)\nLogs:\n  Bound result 9\n\n[PASS] test_hugeAnswerClearsUintBoolAndSharedRequestsUnderStipend() (gas: 26374277)\n[PASS] test_hugeSignatureClearsPendingAndAllowsImmediateRetry() (gas: 6836376)\n[PASS] test_metadataReportsMinimaEvenWhenSignedPanelIsLarger() (gas: 6304975)\n[PASS] test_scalarAnswerLengthPrecedesChainSignerAndClaimedType() (gas: 17758399)\n[PASS] test_sharedAnswerUpperBoundPrecedesChainAndSigner() (gas: 4500780)\n[PASS] test_signatureLengthPrecedesAnswerLengthAndChain() (gas: 37648371)\n[PASS] test_unknownRequestStillPrecedesDynamicSizeChecks() (gas: 12869628)\n[PASS] test_validationPrecedenceAfterSizes() (gas: 18077721)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 797.73ms (1.59s CPU time)\n\nRan 32 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_abandonedPoolRequestKeepsPoolUsedAndLateCallbackIsIgnored() (gas: 1762092)\n[PASS] test_abandonedSharedFactCanBeRequestedAgainAndTheLateAnswerIsIgnored() (gas: 3059160)\n[PASS] test_attestationForAnotherClaimantIsAMissForThisRequest() (gas: 3242463)\n[PASS] test_attestationForAnotherTraitWithTheSameWindowIsAMiss() (gas: 3245512)\n[PASS] test_callbackStarvedOfGasIsNotDeliveredAndStaysPending() (gas: 1692036)\n[PASS] test_cardShowsAtMostThirtyTwoCommunityIdsAndCountsThemAll() (gas: 86190556)\n[PASS] test_claimSponsoredWhilePendingOrVerifiedReverts() (gas: 2103612)\n[PASS] test_communityT3SpecIsASharedFactWithItsOwnHead() (gas: 2422263)\n[PASS] test_everyTemplateVerifiesUnderTheStipendWithACard() (gas: 11725680)\n[PASS] test_expiryAtTheExactSecondStillPassesAndOneLaterDoesNot() (gas: 3239701)\n[PASS] test_fuzz_anyFieldAlteredAfterSigningIsASignatureMiss(uint8,uint256) (runs: 512, μ: 1651985, ~: 1653372)\nLogs:\n  Bound result 7\n\n[PASS] test_fuzz_applySharedFactOnlyWithinTheHead(uint8,uint8) (runs: 256, μ: 1778518, ~: 1767053)\nLogs:\n  Bound result 49\n  Bound result 0\n\n[PASS] test_fuzz_boolAnswerMustBeExactlyZeroOrOne(uint256) (runs: 512, μ: 2074991, ~: 2074849)\n[PASS] test_fuzz_countAnswerAgainstTheThreshold(uint256,bytes1,bool) (runs: 512, μ: 1654142, ~: 1630963)\n[PASS] test_fuzz_expiryAndClockSkewBoundaries(uint64,uint64) (runs: 512, μ: 1648023, ~: 1640529)\n[PASS] test_fuzz_hasTraitAndTraitsOfNeverRevert(address,uint16,uint8,bool,uint8) (runs: 512, μ: 323499, ~: 334078)\n[PASS] test_fuzz_maximalSpecRegistersComposesAndFitsTheBody(uint8,uint256,uint256) (runs: 64, μ: 2533577, ~: 2714954)\nLogs:\n  Bound result 4\n  Bound result 31600713528358602543377\n\n[PASS] test_fuzz_panelAndQuorumBoundaries(uint16,uint16,uint16) (runs: 512, μ: 1655096, ~: 1639674)\n[PASS] test_fuzz_panelTraitNeedsElevenAndSeven(uint16,uint16,uint16) (runs: 512, μ: 2083371, ~: 2068656)\n[PASS] test_fuzz_specBodyIsDeterministicAndClaimantBound(address,address) (runs: 256, μ: 862359, ~: 862359)\n[PASS] test_fuzz_upgradeChargesExactlyKTimesPriceAndLeavesThePoolAlone(uint8,uint256) (runs: 256, μ: 5222440, ~: 5330237)\nLogs:\n  Bound result 1\n  Bound result 26451681879937463710\n\n[PASS] test_fuzz_upgradeRejectsEveryIdThatIsNotAnOracleTrait(uint16) (runs: 256, μ: 209781, ~: 209334)\n[PASS] test_fuzz_windowMustEqualTheCanonicalOne(uint64,uint64) (runs: 512, μ: 1640080, ~: 1640072)\n[PASS] test_onFailureRecordsWhatItIsToldAndStoresNothing() (gas: 3062571)\n[PASS] test_questionHashIsBoundToTheClaimantAndTheTrait() (gas: 685415)\n[PASS] test_reentrantTokenCannotReenterAnyIMDMovingFunction() (gas: 7515361)\n[PASS] test_sharedFactWorstCaseEnvelopeUnderTheStipend() (gas: 3982203)\n[PASS] test_signatureShapesThatDoNotRecover() (gas: 9332591)\n[PASS] test_tokenURIDependsOnlyOnTheClaimantsFacts() (gas: 14702346)\n[PASS] test_traitClassForEveryCatalogIdAndRevertsForUnknown() (gas: 703103)\n[PASS] test_upgradeSponsoredDrawsAllNineOverNineDaysAndRefusesDuplicates() (gas: 12553282)\n[PASS] test_verifiedWindowIsTheCanonicalWindowForEveryOracleId() (gas: 16455284)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 797.53ms (5.85s CPU time)\n\nRan 10 tests for test/ReReview.t.sol:ReReviewTest\n[PASS] test_coldGas_firstCommunityVerificationWithACard() (gas: 2414829)\nLogs:\n  cold onResult gas, first community verification with a card: 133356\n\n[PASS] test_coldGas_sharedFact64Catalog() (gas: 1739333)\nLogs:\n  cold onResult gas, 64-address shared fact (catalog 1201): 164087\n\n[PASS] test_coldGas_sharedFact64Community() (gas: 2108231)\nLogs:\n  cold onResult gas, 64-address shared fact (community T3): 170445\n\n[PASS] test_communityAttributesAppearOnlyForVerifiedSpecs() (gas: 4750926)\n[PASS] test_constructorReadsIsSettledWithoutWriting() (gas: 137310)\n[PASS] test_hugeSignatureOnCommunitySharedFactAndCardRequestClearsUnderStipend() (gas: 12241601)\n[PASS] test_lowerOrdinalAcquiredLaterReplacesTheHigherOne() (gas: 8477178)\n[PASS] test_sameSignedEvidenceSatisfiesAnotherRequestWithTheSameQuestion() (gas: 3260591)\n[PASS] test_specIdsEndAt65534() (gas: 909553)\n[PASS] test_unusedFixedValIsRefusedAndAnEmptyFilterIsNotSerialised() (gas: 1332960)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 797.54ms (126.76ms 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    | 3266  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | mintCard          | 3449  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | sponsor           | 3213  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | transfer          | 3184  | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | upgradeAndDeliver | 3272  | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 901475214087870280\n  Bound result 25769870\n  Bound result 84053849345747441\n  Bound result 3649\n  Bound result 1396784016898205330\n  Bound result 244361541815123712\n  Bound result 333\n  Bound result 3957\n  Bound result 882061480941226302\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.97s (6.95s 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 74264337592978034889\n  Bound result 2657\n  Bound result 4333632135824622\n  Bound result 68330678444668109497\n  Bound result 8251\n  Bound result 4717\n  Bound result 1931435106\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034887\n  Bound result 0\n  Bound result 4333632135824619\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4110\n  Bound result 7880\n  Bound result 21829\n  Bound result 4333632135824622\n  Bound result 1\n  Bound result 1303829504125119\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 6217\n  Bound result 3403771066\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 9458\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 18291\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3588\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3225070\n  Bound result 16495349986309\n  Bound result 11618357\n  Bound result 118982368435591052\n  Bound result 8741404629557170\n  Bound result 4213403311663225\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 510\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 12940\n  Bound result 74264337592978034889\n  Bound result 9297\n  Bound result 5788\n  Bound result 22095\n  Bound result 21006\n  Bound result 4333632135824622\n  Bound result 132935233229822681294\n  Bound result 6164396931396376\n  Bound result 176217208161\n  Bound result 82453257632232404594\n  Bound result 4329670727698909\n  Bound result 11717\n  Bound result 14052\n  Bound result 12638\n  Bound result 18612892154464373\n  Bound result 74264337592978034889\n  Bound result 13677\n  Bound result 2530\n  Bound result 128353164922403029897\n  Bound result 5423442881\n  Bound result 17122769658348775\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 1207\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 3767\n  Bound result 2083348174366735\n  Bound result 588\n  Bound result 74264337592978034889\n  Bound result 636\n  Bound result 9299\n  Bound result 74264337592978034889\n  Bound result 9999999999900651\n  Bound result 4333632135824622\n  Bound result 583052228\n  Bound result 3918617\n  Bound result 4333632135824619\n  Bound result 74264337592978034889\n  Bound result 12279\n  Bound result 2359\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 13287430266606833\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 127452729333875247015\n  Bound result 4329670727698909\n  Bound result 8846061162513396\n  Bound result 5758\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 5308139448722988\n  Bound result 6685\n  Bound result 604\n  Bound result 1047234902803688\n  Bound result 776741359818196\n  Bound result 6741\n  Bound result 971200056\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 3503\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4856\n  Bound result 4333632135824622\n  Bound result 21078\n  Bound result 7058193009744279\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 2148\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 1882026272997603\n  Bound result 7190\n  Bound result 74264337592978034889\n  Bound result 19105\n  Bound result 4333632135824622\n  Bound result 84\n  Bound result 0\n  Bound result 400636252224855\n  Bound result 4229\n  Bound result 21509\n  Bound result 16545599783761434\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 3909925700804183\n  Bound result 424166831675912\n  Bound result 21439702358472\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 8469\n  Bound result 1751\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 111549063278189983\n  Bound result 8333803949439632\n  Bound result 12955216603868506\n  Bound result 134999999999999999995\n  Bound result 6559\n  Bound result 4333632135824622\n  Bound result 1198\n  Bound result 21030\n  Bound result 4333632135824622\n  Bound result 72326638841849096661\n  Bound result 15672242090\n  Bound result 4805966724\n  Bound result 74264337592978034889\n  Bound result 610949771953697\n  Bound result 4333632135824622\n  Bound result 74264337592978034889\n  Bound result 9625383016660648\n  Bound result 2283\n  Bound result 74264337592978034889\n  Bound result 6834727296537086\n  Bound result 1537671381967870\n  Bound result 127\n  Bound result 4329670727698909\n  Bound result 4333632135824622\n  Bound result 650\n  Bound result 191938451820077\n  Bound result 17993943502510798\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 2972\n  Bound result 74264337592978034889\n  Bound result 4329670727698909\n  Bound result 6285524748478378\n  Bound result 8710\n  Bound result 2999824150180271\n  Bound result 4322\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 15.07s (15.04s 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       | 273   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | advanceTime       | 276   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | applyShared       | 252   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | claimSponsored    | 294   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverFalse      | 280   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTampered   | 288   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | deliverTrue       | 293   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | donate            | 261   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | failRequest       | 263   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | mintCard          | 256   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | registerSpec      | 257   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | replayConsumed    | 260   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | requestSharedFact | 283   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | sponsor           | 269   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | transfer          | 261   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradePaid       | 253   | 0       | 0        |\n|-------------+-------------------+-------+---------+----------|\n| FullHandler | upgradeSponsored  | 289   | 0       | 0        |\n╰-------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 447225065643960400\n  Bound result 16\n  Bound result 21383\n  Bound result 8607\n  Bound result 260709894551400127\n  Bound result 24663\n  Bound result 448799784807385670\n  Bound result 541138299730102183\n  Bound result 1\n  Bound result 173\n  Bound result 14809\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 56957419720\n\n[PASS] test_handlerReplayOfAConsumedIdChangesNothing() (gas: 1919752)\n[PASS] test_handlerSponsoredSelectionAcceptsMaxSeed() (gas: 1763178)\nLogs:\n  Bound result 3000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 17.80s (17.78s CPU time)\n\nRan 16 test suites in 17.82s (46.21s CPU time): 164 tests passed, 0 failed, 17 skipped (181 total tests)\n","passed":true},{"durationMs":429,"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,\"CATALOG.md\":267,\"CONCEPT.md\":251,\"DISCLOSURE.md\":50,\"INTEGRATION.md\":417,\"LICENSE\":21,\"README.md\":392,\"TEMPLATES.md\":154,\"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\":38,\"src/Composer.sol\":627,\"src/HiveData.sol\":75,\"src/Registry.sol\":750,\"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\":815,\"test/Artifacts.t.sol\":173,\"test/Attestations.t.sol\":196,\"test/Base.t.sol\":158,\"test/BurnInvariant.t.sol\":120,\"test/BurnRule.t.sol\":405,\"test/Goldens.t.sol\":444,\"test/Invariants.t.sol\":124,\"test/InvariantsExtended.t.sol\":519,\"test/NOTES.md\":391,\"test/ReReview.t.sol\":262,\"test/Registry.t.sol\":772,\"test/RegistryRules.t.sol\":310,\"test/Rename.t.sol\":224,\"test/ReviewChanges.t.sol\":214,\"test/Templates.t.sol\":149,\"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":7513,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/Registry.sol:513: Registry._rule(uint16) (src/Registry.sol#513-527) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:707: Registry._fromPool(uint16) (src/Registry.sol#707-720) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:513: Registry._rule(uint16) (src/Registry.sol#513-527) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:498: Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes) (src/Registry.sol#498-510) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:473: Registry.onResult(bytes32,OracleAttestation,bytes) (src/Registry.sol#473-495) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:513: Registry._rule(uint16) (src/Registry.sol#513-527) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:411: Registry.abandon(bytes32) (src/Registry.sol#411-417) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:513: Registry._rule(uint16) (src/Registry.sol#513-527) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/Registry.sol:435: Reentrancy in Registry._request(address,uint16,uint256) (src/Registry.sol#435-457):\n[medium/medium] uninitialized-local at src/Composer.sol:543: Composer.encodeBody(Composer.Question,address).defs (src/Composer.sol#543) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Registry.sol:260: Registry.cardOf(uint256).k (src/Registry.sol#260) 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:648: Registry.applySharedFact(uint16,address[]).found (src/Registry.sol#648) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Composer.sol:613: Composer.hexMin(uint256).n (src/Composer.sol#613) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Composer.sol:187: Composer.traitsOf(address,address).n (src/Composer.sol#187) 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:255: Registry.cardOf(uint256).n (src/Registry.sol#255) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Composer.sol:586: Composer.canonical(Composer.Question).defs (src/Composer.sol#586) 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:724: Registry._burnOrRefund() (src/Registry.sol#724-749) ignores return value by (amount,fee) = burnExecutor.previewBridge{gas: PREVIEW_GAS}() (src/Registry.sol#726-743)\n[medium/medium] unused-return at src/Registry.sol:702: Registry._requireMember() (src/Registry.sol#702-705) ignores return value by (None,joined) = curator.firstHourOf(msg.sender) (src/Registry.sol#703)\n[medium/medium] unused-return at src/Registry.sol:530: Registry._check(Registry.Pending,OracleAttestation,bytes,uint8,uint64,uint64) (src/Registry.sol#530-558) ignores return value by (signer,err,None) = ECDSA.tryRecover(attestationDigest(a),v,r,s) (src/Registry.sol#549)\n[low/medium] calls-loop at src/Registry.sol:373: Registry.composeBody(uint16,address) (src/Registry.sol#373-380) has external calls inside a loop: composer.compose(s,claimant,address(this),traitId == 1301,address(curator)) (src/Registry.sol#379)\n[low/medium] calls-loop at src/Composer.sol:158: Composer.traitsOf(address,address) (src/Composer.sol#158-195) has external calls inside a loop: ICatalogRegistry(registry).hasTrait(wallet,all[i]) (src/Composer.sol#189)\n[low/medium] calls-loop at src/Registry.sol:362: Registry.specOf(uint16) (src/Registry.sol#362-370) has external calls inside a loop: composer.catalogSpec(traitId,address(curator)) (src/Registry.sol#369)\n[low/medium] calls-loop at src/Registry.sol:362: Registry.specOf(uint16) (src/Registry.sol#362-370) has external calls inside a loop: composer.catalogSpec(traitId,address(curator)) (src/Registry.sol#369)\n[low/medium] calls-loop at src/Registry.sol:435: Registry._request(address,uint16,uint256) (src/Registry.sol#435-457) 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#445-452)\n[low/medium] calls-loop at src/Registry.sol:362: Registry.specOf(uint16) (src/Registry.sol#362-370) has external calls inside a loop: composer.catalogSpec(traitId,address(curator)) (src/Registry.sol#369)\n[low/medium] reentrancy-benign at src/Registry.sol:435: Reentrancy in Registry._request(address,uint16,uint256) (src/Registry.sol#435-457):\n[low/medium] timestamp at src/Registry.sol:411: Registry.abandon(bytes32) (src/Registry.sol#411-417) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:513: Registry._rule(uint16) (src/Registry.sol#513-527) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:707: Registry._fromPool(uint16) (src/Registry.sol#707-720) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:530: Registry._check(Registry.Pending,OracleAttestation,bytes,uint8,uint64,uint64) (src/Registry.sol#530-558) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:460: Registry._clear(bytes32,Registry.Pending) (src/Registry.sol#460-467) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:498: Registry.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes) (src/Registry.sol#498-510) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:585: Registry._mark(address,uint16,bytes32,bytes32) (src/Registry.sol#585-591) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:473: Registry.onResult(bytes32,OracleAttestation,bytes) (src/Registry.sol#473-495) uses timestamp for comparisons","passed":true},{"durationMs":1754,"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:200: Reentrancy: State change after external call (4 places)\n[low] costly-loop at src/Registry.sol:395: Costly operations inside loop\n[low] internal-function-used-once at src/Composer.sol:335: Internal Function Used Only Once (4 places)\n[low] large-numeric-literal at src/Composer.sol:99: Large Numeric Literal (4 places)\n[low] literal-instead-of-constant at src/Composer.sol:76: Literal Instead of Constant (248 places)\n[low] require-revert-in-loop at src/Composer.sol:244: Loop Contains `require`/`revert` (7 places)\n[low] state-variable-could-be-immutable at src/Registry.sol:93: State Variable Could Be Immutable (9 places)\n[low] unchecked-return at src/Registry.sol:406: Unchecked Return (2 places)\n[low] uninitialized-local-variable at src/Composer.sol:613: Uninitialized Local Variable (5 places)\n[low] unsafe-oz-erc721-mint at src/Registry.sol:223: Unsafe `ERC721::_mint()`\n[low] unused-public-function at src/Composer.sol:307: Public Function Not Used Internally (4 places)\n[low] unused-state-variable at src/Registry.sol:64: Unused State Variable (2 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e5b8c4027ca9ee9c28bceb1328849b56c1e8fee155292e9a173f4d960b099dd8","verifiedTreeHash":"96d3422fb3c6d9f0df64a154f911339ff59a013b","verifierVersion":"0.1.0+d952fceb"}]}