{"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":"00b86a67-41e0-4c50-8e6c-15321366b51f","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"159958ecd6236d3a9258641a16158351077ab96bbb8fab47f1b157f48ecc2340","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":"0d765948e7707dfe8282634db9e3593d3067f8f27137f2fbe21deab2d0f35f12","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":"Sworn - an ownerless registry of facts about wallets: the three contracts of this repository built from its specification alone, every line new, as one code job without deployment (the entrant deploys afterwards with its own gate). WHAT IT IS: an ownerless ERC-721 registry of facts about wallets: Registry mints one card per wallet (transferable; its direct traits are frozen at mint and its facts stay about the minting wallet), verifies traits from the settled WhitelistCurator (free, direct reads) or from the IMD oracle through the Intake (paid by the claimant), stores shared facts, and registers community specs; every fee it takes (mint, registration) is forwarded to the IMD BurnExecutor V2 for bridging and burning on Base. Composer composes the oracle questions and validates specs; Renderer draws the card and its metadata on-chain. Anyone may call every function; there is no owner, setter or upgrade path. STARTING TREE: this repository at the pinned commit (branch rebuild-base): no product code, only the specification: docs/REBUILD.md on top (self-contained on every rule; where another document disagrees it wins), CONCEPT.md, CATALOG.md, TEMPLATES.md, INTEGRATION.md, templates/fixtures/ (the exact question bodies), reference/ (verified sources, ABIs, served attestations, the plane's questionHash goldens), and the scaffold that does not change (foundry.toml, remappings.txt, lib/ submodules). Earlier trees of this product exist on the repository's main branch and in identity-md-launches; they are not an input of this build: do not copy from them; write an independent implementation. WORK: write src/ (Registry, Composer, Renderer, the interfaces from the verified sources under reference/), test/, script/Deploy.s.sol and tools/gen_template.py from docs/REBUILD.md exactly: the public surface of its section 2, complete and unchanged in names, types and return order; the registry rules of section 3 (every fee transferred to the BurnExecutor in the transaction that pulls it, no pool, no payable function; the callback's clear-then-check order with its nine checks and ten reason codes; the seven-argument constructor with the code checks and the empty-chain floor of 3.9; every call works under Glamsterdam gas (3.11: the Intake's callback writes no slot that held zero and keeps 25,000 of its 200,000 gas spare; settle stores a true verdict the Intake could not deliver; upgrade takes exactly one id)); the Composer of section 4 (the five templates equal to templates/fixtures/, the questionHash document equal to reference/plane/questionHashes.json, kind 6 Swarmed with the living window and the recipe of 4.2 word for word, the given fixture templates/fixtures/T6-operator-reference.json); the Renderer of section 5 (the metadata as written, the hive by its numbers, bytes constant tables, no immutable); the generator and goldens of 6.1 (synthetic wallets 0x...c1a1 only); every test of section 7; test/NOTES.md with one line per rule and its test, the three sizes and their sum, the maximum-state tokenURI gas. SIZE BUDGET (hard): Registry, Composer and Renderer runtimes together at or under 69,800 bytes, each under 24,576 (the three are deployed in one mainnet transaction under the 16,777,216-gas cap; the last mainnet build's 68,086 bytes used 16,009,263 of it); prefer deleting over adding; optimizer_runs stays 200; a test pins the sum. DECIDE, DO NOT ASK: when a rule conflicts with a required check, make the smallest change that satisfies the check, keep everything else, and record the choice in test/NOTES.md. NO TOKEN: this project issues no ERC-20 and mints no coin; its only token is the ERC-721 card of the Registry: token name Sworn, token symbol SWORN, total supply: unlimited, no cap, 0 at launch (one card per wallet, minted on demand, never burned); fees are paid in the existing IMD token 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, which this project does not create, mint or hold; no owner. The constructor of the Registry takes seven addresses (curator, imd, intake, attester, renderer, composer, burnExecutor); the mainnet values are in docs/REBUILD.md section 8; nothing is deployed in this job.","parentJobId":null,"planHash":"21953e4f0f911f0bdbfa4bef518a919f2d1a27bbce938837af6e650b1484950b","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"00b86a67-41e0-4c50-8e6c-15321366b51f","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":"52116","feedbackHash":"0ee7dcb44abcfaaf26572dbde6967aef67f3740d8e7e88374d94a1b13b5f91cf","nodeKey":"adversarial_review","submissionHash":"159958ecd6236d3a9258641a16158351077ab96bbb8fab47f1b157f48ecc2340","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51241","feedbackHash":"6f0bb9976bbfe8a99bdd53048292bd147155ab85dd26a6d3d03e62833be4d659","nodeKey":"build_contract_project","submissionHash":"0d765948e7707dfe8282634db9e3593d3067f8f27137f2fbe21deab2d0f35f12","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"d51b208085c0e712f08a955b72e3004cd7a17bc484923a9c39d7dd1971370953","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"dfbd2d0d8fcec3259d41532cb12b048fd0d8fe511f1b825f53448fba61c74182","device":"b6e7758e5e0349d3","findings":[],"hash":"0d765948e7707dfe8282634db9e3593d3067f8f27137f2fbe21deab2d0f35f12","nodeId":"34c275b0-f6a6-4bc5-b109-6e6a1a550087","outcome":"completed","summary":"Implemented all three contracts, deployment script, generators, goldens, tests, and documentation.\n\n- Offline tests: **62 passed**, 1 optional fork test skipped.\n- Build, formatting, generator checks, and removal greps passed.\n- Combined runtime: **60,255 / 69,800 bytes**.\n- Maximum-state tokenURI: **9,005,154 gas**.\n\nCoverage, measurements, and decisions are recorded in [test/NOTES.md](/root/.identitymd/work/00b86a67-41e0-4c50-8e6c-15321366b51f/34c275b0-f6a6-4bc5-b109-6e6a1a550087/test/NOTES.md).\n\nProtected configuration and dependencies are unchanged. Nothing was deployed.","treeHash":"3091659a5baa57771ffb1887e2271f001e3af042","usage":{"cachedInputTokens":14273664,"inputTokens":380626,"model":"gpt-6-astra","outputTokens":119471,"runtime":"codex","turns":13,"wallClockMs":3631123}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6d0f746f68a99ddf","findings":[{"citation":"resolved","description":"REBUILD 2.2 documents validateSpec(s, blockNumber) as 'on chain 1 reads block.number, ignores blockNumber', and 3.6 says the argument 'counts off mainnet only'. The implementation derives H from mainnetHeightBound() off chain 1 and never reads the argument. test/NOTES.md records this as a deliberate choice (the Registry passes block.number, which on Sepolia is far below every mainnet anchor, so honouring the argument would make every registration revert there). Behaviour on mainnet is exactly the specified one. Reported as a documented deviation of the surface's semantics, not as a defect; no change is recommended unless the owner wants the argument honoured off mainnet.","line":28,"path":"src/Composer.sol","reproduction":"vm.chainId(11155111); build a valid kind-1 spec with toBlock = composer.mainnetHeightBound() - 64 and fromBlock = toBlock - 7199. composer.validateSpec(s, 0) succeeds (expected per 2.2 wording: the argument 0 would bound H and the window would fail). composer.validateSpec(s, type(uint256).max) with toBlock = mainnetHeightBound() - 63 reverts BadSpec(\"window\") although the argument says the head is far higher. SpecValidationTest.test_windowBoundariesAndOffMainnetHeight pins this chosen behaviour.","severity":"info","snippet":"        SpecGrammar.validate(s, block.chainid == 1 ? block.number : mainnetHeightBound());","title":"validateSpec ignores its blockNumber argument on every chain, not only on chain 1"},{"citation":"resolved","description":"REBUILD 2.1 comments specOf as 'catalog ids too; reverts for an unknown id'. A direct id (101, 201, ... 503) is a catalog id but has no Spec, so Composer.catalogSpec reverts NotACatalogOracleTrait(id) and specOf(101) reverts. 2.2 scopes catalogSpec to 'every catalog oracle id', so this reading is consistent with the Composer surface; integrators that call specOf over traitsOf() output must skip direct ids. Not a defect in the registry's rules; an interface note.","line":205,"path":"src/Registry.sol","reproduction":"registry.specOf(101) reverts with Composer.NotACatalogOracleTrait(101); registry.specOf(601) and specOf(1201) return the catalog specs; specOf(9999) reverts the same way.","severity":"info","snippet":"        return IComposer(composer).catalogSpec(id, curator);","title":"specOf reverts for the thirteen direct catalog ids"}],"hash":"159958ecd6236d3a9258641a16158351077ab96bbb8fab47f1b157f48ecc2340","nodeId":"fed03bbf-fd5d-4a57-9d12-074ef4aa2b08","outcome":"completed","summary":"The review is complete and the findings file is written and valid JSON. No tracked file was changed.\n\n**Outcome: no defect found that warrants a revision.** The delivered tree matches docs/REBUILD.md on every rule I traced, and the suite exercises the edges the specification names. Two informational notes are recorded in `.imd-findings.json`, each with a concrete input; neither is a correctness or safety defect.\n\n**What I checked**\n\n- **Surface of section 2.** Every Registry, Composer and Renderer function, event and error is present with the specified names, types and return order. The `OracleAttestation` struct and EIP-712 type string match INTEGRATION.md, and the conformance test recovers the plane's served signatures.\n- **Callback rules of 3.4.** `onResult` clears to a tombstone first, then runs the nine checks in the specified order with reason codes 1 to 10. Length checks precede any hashing, recovery uses `tryRecover`, and the question hash binds claimant and window. `settle` runs the same checks but reverts on any reason, so a miss never clears a pending pair. A stale attestation for a re-requested pair fails the date check.\n- **Glamsterdam rules of 3.11.** Every slot the callback writes was prepared nonzero by the paid request. Tombstoned and prepared slots read as absent in every public view. State-diff tests assert this on the catalog, first-community, 601, shared-32 and failure paths and keep the 25,000-gas margin.\n- **Fees.** Both fees are pulled and forwarded to the BurnExecutor in the same call. The request price is pulled, approved and consumed by the Intake. The invariant suite pins a zero registry balance.\n- **Composer and fixtures.** The eleven fixture bodies and questionHashes reproduce byte for byte. The T6 definitions keep the 4.2 order in the body and are sorted only for the canonical document. The living window is computed identically in `compose` and `_ask`.\n- **Grammar and renderer.** `item` parsing enforces identifiers of at most 32 bytes, at most three indexed parameters, closed type list, head 1 to 32, and the window rules. The renderer bounds every registry reply before decoding and caps community reads at 32.\n\n**Informational notes recorded**\n\n1. `validateSpec` ignores its block-number argument off mainnet as well as on it. The NOTES file records this as a deliberate choice, since the Registry passes a Sepolia block number that lies below every mainnet anchor.\n2. `specOf` reverts for the thirteen direct catalog ids, consistent with the Composer's \"every catalog oracle id\" scope. Integrators iterating `traitsOf` output must skip direct ids.\n\n**Coverage.** All 14 ABI entry points are marked as holding, plus four invariant rows. No row is marked unreached.","treeHash":null,"usage":{"cachedInputTokens":1129699,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":23537,"runtime":"claude","turns":23,"wallClockMs":421382}}],"verification":[{"checks":[{"durationMs":10139,"exitCode":0,"name":"build","output":"Compiling 81 files with Solc 0.8.24\nSolc 0.8.24 finished in 9.85s\nCompiler run successful with warnings:\nWarning (2519): This declaration shadows an existing declaration.\n  --> test/Gas.t.sol:72:13:\n   |\n72 |             bytes32 rid = ask(ALICE, 701);\n   |             ^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> test/Gas.t.sol:86:9:\n   |\n86 |         bytes32 rid = ask(ALICE, 701);\n   |         ^^^^^^^^^^^\n\nWarning (2519): This declaration shadows an existing declaration.\n  --> test/Gas.t.sol:73:13:\n   |\n73 |             OracleAttestation memory a = attestation(rid, abi.encode(uint256(1)));\n   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> test/Gas.t.sol:87:9:\n   |\n87 |         OracleAttestation memory a = attestation(rid, abi.encode(uint256(1)));\n   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2519): This declaration shadows an existing declaration.\n   --> test/Registry.t.sol:186:13:\n    |\n186 |             bytes32 rid = ask(ALICE, 701);\n    |             ^^^^^^^^^^^\nNote: The shadowed declaration is here:\n   --> test/Registry.t.sol:198:9:\n    |\n198 |         bytes32 rid = ask(ALICE, 701);\n    |         ^^^^^^^^^^^\n\nWarning (2519): This declaration shadows an existing declaration.\n   --> test/Registry.t.sol:187:13:\n    |\n187 |             OracleAttestation memory a = attestation(rid, abi.encode(uint256(1)));\n    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n   --> test/Registry.t.sol:199:9:\n    |\n199 |         OracleAttestation memory a = attestation(rid, abi.encode(uint256(1)));\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2519): This declaration shadows an existing declaration.\n   --> test/Registry.t.sol:270:13:\n    |\n270 |             bytes32 rid = ask(ALICE, 701);\n    |             ^^^^^^^^^^^\nNote: The shadowed declaration is here:\n   --> test/Registry.t.sol:286:9:\n    |\n286 |         bytes32 rid = ask(ALICE, 701);\n    |         ^^^^^^^^^^^\n\nWarning (2519): This declaration shadows an existing declaration.\n   --> test/Registry.t.sol:271:13:\n    |\n271 |             OracleAttestation memory a = attestation(rid, abi.encode(uint256(1)));\n    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n   --> test/Registry.t.sol:287:9:\n    |\n287 |         OracleAttestation memory a = attestation(rid, abi.encode(uint256(1)));\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2519): This declaration shadows an existing declaration.\n   --> test/Registry.t.sol:326:13:\n    |\n326 |             bytes32 rid = shared(1201);\n    |             ^^^^^^^^^^^\nNote: The shadowed declaration is here:\n   --> test/Registry.t.sol:333:9:\n    |\n333 |         bytes32 rid = shared(1201);\n    |         ^^^^^^^^^^^\n\nWarning (2519): This declaration shadows an existing declaration.\n   --> test/Registry.t.sol:327:13:\n    |\n327 |             address[] memory list = new address[](n);\n    |             ^^^^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n   --> test/Registry.t.sol:334:9:\n    |\n334 |         address[] memory list = new address[](32);\n    |         ^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2519): This declaration shadows an existing declaration.\n  --> test/SpecValidation.t.sol:88:14:\n   |\n88 |             (bytes memory body,) = composer.compose(10001, s, ALICE, address(registry), address(curator));\n   |              ^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n   --> test/SpecValidation.t.sol:105:10:\n    |\n105 |         (bytes memory body,) = registry.composeBody(601, ALICE);\n    |          ^^^^^^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to view\n   --> test/Adversarial.t.sol:101:5:\n    |\n101 |     function testFuzz_malformedItemsNeverPanic(bytes memory item) public {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n  --> test/Limits.t.sol:30:5:\n   |\n30 |     function accountCost(Vm.AccountAccess[] memory accesses, uint256 used) internal view returns (uint256 future) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":9224,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Fork.t.sol:ForkTest\n[SKIP] testFork_realDependenciesFeeBridgePreviewAndComplete() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 245.25µs (78.86µs CPU time)\n\nRan 4 tests for test/Constructor.t.sol:ConstructorTest\n[PASS] test_allCodeCombinationsFloorOnlyWhenAllThreeEmpty() (gas: 841393)\n[PASS] test_allSevenZeroArgumentsRevert() (gas: 242137)\n[PASS] test_deployScriptEmptyChainMainnetAndSepolia() (gas: 38726247)\n[PASS] test_helpersAlwaysCodeExecutorOnlyOffFloorAndDecimals() (gas: 499018)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.88ms (5.01ms CPU time)\n\nRan 3 tests for test/Attestations.t.sol:AttestationsTest\n[PASS] test_fiveServedProtocolSignaturesAndWrongDomain() (gas: 1099289)\n[PASS] test_protocolCanonicalDocumentVector() (gas: 3377)\n[PASS] test_protocolVectorDigestRecoveryAndCanonicalSelector() (gas: 79256)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 14.81ms (13.93ms CPU time)\n\nRan 5 tests for test/ColdCallbacks.t.sol:ColdCallbacksTest\n[PASS] test_coldClean601() (gas: 247193)\nLogs:\n  601 cold current: 41057\n  601 cold Glamsterdam: 62657\n\n[PASS] test_coldCleanCatalog() (gas: 249680)\nLogs:\n  catalog cold current: 43077\n  catalog cold Glamsterdam: 64677\n\n[PASS] test_coldCleanFirstCommunityWithCard() (gas: 291308)\nLogs:\n  community cold current: 51159\n  community cold Glamsterdam: 94359\n\n[PASS] test_coldCleanShared32() (gas: 278663)\nLogs:\n  shared cold current: 48835\n  shared cold Glamsterdam: 77635\n\n[PASS] test_sixtyThousandStipendAlreadySuffices() (gas: 322864)\nLogs:\n  60k community cold current: 51159\n  60k community cold Glamsterdam: 94359\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 15.30ms (2.88ms CPU time)\n\nRan 3 tests for test/Settlement.t.sol:SettlementTest\n[PASS] test_settleAfterDeliveryAbandonUnknownAndShared() (gas: 4522039)\n[PASS] test_settleRejectsMissesWithoutClearing() (gas: 8064561)\n[PASS] test_settleUndeliveredTrueByStrangerAndReplay() (gas: 409289)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 30.39ms (30.56ms CPU time)\n\nRan 6 tests for test/Composer.t.sol:ComposerTest\n[PASS] test_bodyConsumerChangesWithoutChangingQuestionHash() (gas: 1792974)\n[PASS] test_catalogWindowsNamesAndLive601() (gas: 8706073)\n[PASS] test_directBitsAndNonMembers() (gas: 177997)\n[PASS] test_finalityAndExpectedId() (gas: 1820241)\n[PASS] test_fixtureBodiesAndCanonicalHashes() (gas: 14576182)\n[PASS] test_specsGrammarAndFields() (gas: 4379159)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 36.94ms (78.42ms CPU time)\n\nRan 3 tests for test/SpecValidation.t.sol:SpecValidationTest\n[PASS] test_allFieldGuardsRunBeforeFee() (gas: 7656503)\n[PASS] test_closedTypeGrammarRejectsNearMisses() (gas: 1563321)\n[PASS] test_windowBoundariesAndOffMainnetHeight() (gas: 7094914)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 38.88ms (54.25ms CPU time)\n\nRan 15 tests for test/Registry.t.sol:RegistryTest\n[PASS] testFuzz_directTierMonotonicity(uint64,uint16,uint8,uint8) (runs: 256, μ: 488267, ~: 491435)\n[PASS] test_abandonSharedAndPersonalStrictBoundary() (gas: 4227048)\n[PASS] test_callbackOnlyIntakeUnknownReplayAndUnsignedFailure() (gas: 2721691)\n[PASS] test_communityVerificationOrderAndHiddenPreparation() (gas: 4399936)\n[PASS] test_datesExactLastSecondBothKindsBothOrderings() (gas: 11195007)\n[PASS] test_datesRejectEarlyLateAndLongThenRetry() (gas: 5452082)\n[PASS] test_feesForwardedAndAtomicFailure() (gas: 1291122)\n[PASS] test_forwardFailureRollsBackPullAndNonReceiverCanMint() (gas: 465859)\n[PASS] test_livingWindowStoredAfterHeadAdvances() (gas: 8780200)\n[PASS] test_missesAllReasonsAndPrecedence() (gas: 16140917)\n[PASS] test_reentrancyOnFeeAndRequestCannotMintTwice() (gas: 1554847)\n[PASS] test_reusedRequestIdRollsBackPaymentAndApproval() (gas: 3485947)\n[PASS] test_sharedExactEnvelopeAndMembership() (gas: 5516729)\n[PASS] test_transferPreservesFactsAndBuyerIndependence() (gas: 6919605)\n[PASS] test_upgradeGuardsPriceAndAllowance() (gas: 1916231)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 42.25ms (178.82ms CPU time)\n\nRan 2 tests for test/Metadata.t.sol:MetadataTest\n[PASS] test_metadataWindowsPanelMinimaAndCommunityOrder() (gas: 22479121)\n[PASS] test_noCardAndCollectionInterfaces() (gas: 111125)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 50.66ms (49.76ms CPU time)\n\nRan 3 tests for test/Artifacts.t.sol:ArtifactsTest\n[PASS] test_noForbiddenRuntimeOperations() (gas: 58704804)\n[PASS] test_runtimeIdenticalAndImmutableReferencesEmpty() (gas: 44539119)\n[PASS] test_runtimeSizesAndSumPinned() (gas: 30202)\nLogs:\n  Registry runtime: 20912\n  Composer runtime: 22277\n  Renderer runtime: 17066\n  Combined runtime: 60255\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 104.54ms (130.00ms CPU time)\n\nRan 4 tests for test/Goldens.t.sol:GoldensTest\n[PASS] test_allSyntheticGoldensByteForByte() (gas: 66829442)\n[PASS] test_hostileRepliesFailCleanlyAndForeignFamiliesSkip() (gas: 5247008)\n[PASS] test_rareDotsRingsAndStepTable() (gas: 5164110)\n[PASS] test_singleQuoteEscapedAndNoCardPreview() (gas: 1452964)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 109.68ms (125.81ms CPU time)\n\nRan 3 tests for test/Gas.t.sol:GasTest\n[PASS] test_callbackGasCatalogCommunityOperatorSharedAndFailure() (gas: 19403714)\nLogs:\n  catalog current: 42027\n  catalog Glamsterdam: 63627\n  first community with card current: 51159\n  first community with card Glamsterdam: 94359\n  601 current: 41057\n  601 Glamsterdam: 62657\n  32 addresses current: 48835\n  32 addresses Glamsterdam: 77635\n  failure current: 13385\n  failure Glamsterdam: 20585\n\n[PASS] test_callbackGasEveryMissAndHugeFields() (gas: 104525277)\nLogs:\n  miss 2 current: 21649\n  miss 2 Glamsterdam: 28849\n  miss 3 current: 13230\n  miss 3 Glamsterdam: 20430\n  miss 4 current: 24024\n  miss 4 Glamsterdam: 31224\n  miss 5 current: 24561\n  miss 5 Glamsterdam: 31761\n  miss 6 current: 27612\n  miss 6 Glamsterdam: 34812\n  miss 7 current: 28488\n  miss 7 Glamsterdam: 35688\n  miss 8 current: 33892\n  miss 8 Glamsterdam: 41092\n  miss 9 current: 13198\n  miss 9 Glamsterdam: 20398\n  miss 10 current: 31494\n  miss 10 Glamsterdam: 38694\n  huge signature current: 12573\n  huge signature Glamsterdam: 19773\n  huge answer current: 12946\n  huge answer Glamsterdam: 20146\n  miss 1 current: 9278\n  miss 1 Glamsterdam: 9278\n\n[PASS] test_preparedStorageInvisibleAfterMissFailureAbandon() (gas: 17795074)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 126.72ms (221.42ms CPU time)\n\nRan 6 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] testFuzz_malformedItemsNeverPanic(bytes) (runs: 256, μ: 42934, ~: 43039)\n[PASS] test_defensiveBoolAndArrayDecoding() (gas: 9990983)\n[PASS] test_everyPanelAndClockSkewCondition() (gas: 5386001)\n[PASS] test_grammarEveryTypeAndFunctionIdentifierBounds() (gas: 629587)\n[PASS] test_questionCannotMoveBetweenWalletsOrRequests() (gas: 2737656)\n[PASS] test_validSignaturesCannotCrossDomainsOrAuthenticateTampering() (gas: 4144081)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 197.07ms (101.24ms CPU time)\n\nRan 4 tests for test/Limits.t.sol:LimitsTest\n[PASS] testFuzz_maximalSpecBodyCaps(uint256,uint256,uint64) (runs: 256, μ: 2433151, ~: 2427389)\nLogs:\n  Bound result 4709368346551\n  Bound result 32507015254551893387178409653719781760456849942021668028014928769369113805\n\n[PASS] test_largestUserCallsWithinGlamsterdamLimit() (gas: 8614885)\nLogs:\n  mint Glamsterdam: 1112011\n  601 request Glamsterdam: 4411511\n  max registration Glamsterdam: 2964710\n  max kind 2 request Glamsterdam: 2881533\n  32 address apply Glamsterdam: 181757\n\n[PASS] test_maximumStateTokenURIGas() (gas: 113593826)\nLogs:\n  maximum state tokenURI gas: 9005154\n  maximum state URI bytes: 43453\n\n[PASS] test_specIdsEndAt65534() (gas: 942099)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 232.80ms (456.10ms CPU time)\n\nRan 1 test for test/Invariant.t.sol:InvariantsTest\n[PASS]\nInvariantsTest invariants:\n[PASS] invariant_claimantSnapshotAndSupply\n[PASS] invariant_feesAndRequestPricesConservedWithoutRegistryBalance\n InvariantsTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------+----------+-------+---------+----------╮\n| Contract      | Selector | Calls | Reverts | Discards |\n+=======================================================+\n| WalletHandler | answer   | 3296  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| WalletHandler | ask      | 3296  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| WalletHandler | failure  | 3190  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| WalletHandler | mint     | 3305  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| WalletHandler | transfer | 3297  | 0       | 0        |\n╰---------------+----------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 9.05s (9.05s CPU time)\n\nRan 15 test suites in 9.05s (10.05s CPU time): 62 tests passed, 0 failed, 1 skipped (63 total tests)\n","passed":true},{"durationMs":173,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Registry.abandon(bytes32)\",\"Registry.applySharedFact(uint16,address[])\",\"Registry.approve(address,uint256)\",\"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),uint256)\",\"Registry.requestSharedFact(uint16,uint256)\",\"Registry.safeTransferFrom(address,address,uint256)\",\"Registry.safeTransferFrom(address,address,uint256,bytes)\",\"Registry.setApprovalForAll(address,bool)\",\"Registry.settle(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Registry.transferFrom(address,address,uint256)\",\"Registry.upgrade(uint16[],uint256)\"],\"files\":{\".gitignore\":8,\".gitmodules\":6,\"CATALOG.md\":258,\"CONCEPT.md\":210,\"DEPLOYMENTS.md\":113,\"DISCLOSURE.md\":162,\"INTEGRATION.md\":406,\"LICENSE\":21,\"README.md\":88,\"TEMPLATES.md\":202,\"audits/2026-10-11-code-review-brief-job-1.md\":92,\"audits/2026-10-12-review-round-2-dispositions.md\":58,\"audits/2026-10-18-swarm-launch-audit-c3792acf.md\":140,\"audits/2026-10-19-onedollaraudit-1033.md\":323,\"audits/2026-10-19-onedollaraudit-1033.report.md\":263,\"audits/2026-10-21-onedollaraudit-1042.md\":386,\"audits/2026-10-21-onedollaraudit-1042.report.md\":329,\"audits/2026-10-21-onedollaraudit-1043.md\":38,\"audits/2026-10-21-onedollaraudit-1043.report.md\":396,\"audits/2026-10-21-onedollaraudit-1044.md\":40,\"audits/2026-10-21-onedollaraudit-1044.report.md\":318,\"audits/README.md\":18,\"docs/DESIGN.md\":55,\"docs/REBUILD.md\":888,\"docs/SITE.md\":176,\"foundry.toml\":44,\"reference/Intake.sol\":5175,\"reference/IntakeV2.sol\":5240,\"reference/PROVENANCE.md\":45,\"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/census/census.py\":115,\"reference/census/curator-source.json\":242,\"reference/census/hours.json\":490,\"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/checks/T6-operator-reference.json\":98,\"reference/plane/questionHashes.json\":101,\"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,\"reference/plane/quotes/T6-operator-reference.json\":20,\"remappings.txt\":2,\"script/Deploy.s.sol\":30,\"src/Composer.sol\":261,\"src/Registry.sol\":451,\"src/Renderer.sol\":247,\"src/interfaces/ICurator.sol\":11,\"src/interfaces/IIntake.sol\":22,\"src/interfaces/ISworn.sol\":30,\"src/interfaces/Types.sol\":35,\"src/lib/AttestationHash.sol\":39,\"src/lib/Buffer.sol\":36,\"src/lib/Catalog.sol\":71,\"src/lib/Hive.sol\":132,\"src/lib/HiveTables.sol\":14,\"src/lib/RecipeText.sol\":46,\"src/lib/SpecGrammar.sol\":151,\"src/lib/Tables.sol\":32,\"src/lib/Text.sol\":90,\"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,\"templates/fixtures/T6-operator-reference.json\":28,\"templates/fixtures/negative/1201-grouped-by-data-field.json\":58,\"test/Adversarial.t.sol\":109,\"test/Artifacts.t.sol\":57,\"test/Attestations.t.sol\":113,\"test/Base.t.sol\":131,\"test/ColdCallbacks.t.sol\":67,\"test/Composer.t.sol\":169,\"test/Constructor.t.sol\":103,\"test/Fork.t.sol\":89,\"test/Gas.t.sol\":160,\"test/Goldens.t.sol\":158,\"test/Invariant.t.sol\":135,\"test/Limits.t.sol\":155,\"test/Metadata.t.sol\":78,\"test/Mocks.sol\":208,\"test/NOTES.md\":234,\"test/Registry.t.sol\":392,\"test/Settlement.t.sol\":85,\"test/SpecValidation.t.sol\":129,\"test/fixtures/cases.json\":154,\"test/fixtures/empty.svg\":1,\"test/fixtures/empty.uri\":1,\"test/fixtures/escaping.svg\":1,\"test/fixtures/escaping.uri\":1,\"test/fixtures/first1000.svg\":1,\"test/fixtures/first1000.uri\":1,\"test/fixtures/ordinal1000.svg\":1,\"test/fixtures/ordinal1000.uri\":1,\"test/fixtures/ordinal10000.svg\":1,\"test/fixtures/ordinal10000.uri\":1,\"test/fixtures/ordinal19522.svg\":1,\"test/fixtures/ordinal19522.uri\":1,\"test/fixtures/partials1.svg\":1,\"test/fixtures/partials1.uri\":1,\"test/fixtures/partials2.svg\":1,\"test/fixtures/partials2.uri\":1,\"test/fixtures/partials3.svg\":1,\"test/fixtures/partials3.uri\":1,\"test/fixtures/rare.svg\":1,\"test/fixtures/rare.uri\":1,\"test/fixtures/short_path.svg\":1,\"test/fixtures/short_path.uri\":1,\"test/fixtures/single.svg\":1,\"test/fixtures/single.uri\":1,\"test/fixtures/six_segments.svg\":1,\"test/fixtures/six_segments.uri\":1,\"test/fixtures/wide.svg\":1,\"test/fixtures/wide.uri\":1,\"tools/build_recipe_text.py\":92,\"tools/gen_template.py\":148,\"tools/test_gen_template.py\":28,\"tools/test_recipe_text.py\":42,\"web/README.md\":3},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":4442,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/Composer.sol:135: Composer._fill(string,string[14]) (src/Composer.sol#135-169) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:181: Composer.compose(uint16,Spec,address,address,address) (src/Composer.sol#181-205) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:178: Registry.hasTrait(address,uint16) (src/Registry.sol#178-182) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:207: Composer._defs(Composer.Question,bool) (src/Composer.sol#207-222) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:135: Composer._fill(string,string[14]) (src/Composer.sol#135-169) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:135: Composer._fill(string,string[14]) (src/Composer.sol#135-169) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:241: Composer._body(Composer.Question,Spec,address) (src/Composer.sol#241-260) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:207: Composer._defs(Composer.Question,bool) (src/Composer.sol#207-222) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:255: Registry._ask(uint16,Spec,address,uint256) (src/Registry.sol#255-293) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Registry.sol:300: Registry.pendingOf(address,uint16) (src/Registry.sol#300-303) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:111: Composer._context(uint16,Spec,address) (src/Composer.sol#111-133) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:224: Composer._canonical(Composer.Question,Spec) (src/Composer.sol#224-239) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Composer.sol:111: Composer._context(uint16,Spec,address) (src/Composer.sol#111-133) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/Registry.sol:255: Reentrancy in Registry._ask(uint16,Spec,address,uint256) (src/Registry.sol#255-293):\n[medium/medium] uninitialized-local at src/Composer.sol:192: Composer.compose(uint16,Spec,address,address,address).q (src/Composer.sol#192) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Renderer.sol:160: Renderer._record(Buffer.B,address,address,uint16,bool).r (src/Renderer.sol#160) is a local variable never initialized\n[medium/medium] uninitialized-local at src/lib/SpecGrammar.sol:49: SpecGrammar.typeOK(bytes).value (src/lib/SpecGrammar.sol#49) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Registry.sol:441: Registry.applySharedFact(uint16,address[]).included (src/Registry.sol#441) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Renderer.sol:33: Renderer.tokenURIOf(address,uint256).card (src/Renderer.sol#33) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Renderer.sol:133: Renderer._oracle(Buffer.B,address,Renderer.Card).comma (src/Renderer.sol#133) is a local variable never initialized\n[medium/medium] uninitialized-local at src/lib/SpecGrammar.sol:37: SpecGrammar.typeOK(bytes).fixedBytes (src/lib/SpecGrammar.sol#37) is a local variable never initialized\n[medium/medium] uninitialized-local at src/lib/SpecGrammar.sol:81: SpecGrammar.eventFields(Spec).indexed_ (src/lib/SpecGrammar.sol#81) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Registry.sol:164: Registry.hasDirectTrait(address,uint16).bits (src/Registry.sol#164) is a local variable never initialized\n[medium/medium] unused-return at src/Registry.sol:380: Registry._check(Registry.Request,OracleAttestation,bytes) (src/Registry.sol#380-411) ignores return value by (signer,err,None) = ECDSA.tryRecover(attestationDigest(a),sig) (src/Registry.sol#385)\n[low/medium] calls-loop at src/Renderer.sol:155: Renderer._record(Buffer.B,address,address,uint16,bool) (src/Renderer.sol#155-183) has external calls inside a loop: (r.rid,r.oid,r.from,r.to) = IRegistryView(registry).verified(claimant,id) (src/Renderer.sol#161)\n[low/medium] calls-loop at src/Composer.sol:101: Composer.traitsOf(address,address) (src/Composer.sol#101-109) has external calls inside a loop: IRegistryView(registry).hasTrait(wallet,all[i]) (src/Composer.sol#106)\n[low/medium] reentrancy-benign at src/Registry.sol:255: Reentrancy in Registry._ask(uint16,Spec,address,uint256) (src/Registry.sol#255-293):\n[low/medium] timestamp at src/Composer.sol:207: Composer._defs(Composer.Question,bool) (src/Composer.sol#207-222) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:380: Registry._check(Registry.Request,OracleAttestation,bytes) (src/Registry.sol#380-411) uses timestamp for comparisons\n[low/medium] timestamp at src/Composer.sol:111: Composer._context(uint16,Spec,address) (src/Composer.sol#111-133) uses timestamp for comparisons\n[low/medium] timestamp at src/Composer.sol:135: Composer._fill(string,string[14]) (src/Composer.sol#135-169) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:329: Registry.abandon(bytes32) (src/Registry.sol#329-336) uses timestamp for comparisons\n[low/medium] timestamp at src/Composer.sol:181: Composer.compose(uint16,Spec,address,address,address) (src/Composer.sol#181-205) uses timestamp for comparisons\n[low/medium] timestamp at src/Composer.sol:23: Composer.mainnetHeightBound() (src/Composer.sol#23-25) uses timestamp for comparisons\n[low/medium] timestamp at src/Composer.sol:224: Composer._canonical(Composer.Question,Spec) (src/Composer.sol#224-239) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:178: Registry.hasTrait(address,uint16) (src/Registry.sol#178-182) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:300: Registry.pendingOf(address,uint16) (src/Registry.sol#300-303) uses timestamp for comparisons\n[low/medium] timestamp at src/Composer.sol:241: Composer._body(Composer.Question,Spec,address) (src/Composer.sol#241-260) uses timestamp for comparisons\n[low/medium] timestamp at src/Registry.sol:255: Registry._ask(uint16,Spec,address,uint256) (src/Registry.sol#255-293) uses timestamp for comparisons","passed":true},{"durationMs":966,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/Registry.sol:117: Reentrancy: State change after external call (5 places)\n[low] large-numeric-literal at src/Composer.sol:63: Large Numeric Literal (3 places)\n[low] literal-instead-of-constant at src/Composer.sol:24: Literal Instead of Constant (119 places)\n[low] missing-inheritance at src/Composer.sol:12: Missing Inheritance (2 places)\n[low] require-revert-in-loop at src/Composer.sol:195: Loop Contains `require`/`revert` (7 places)\n[low] state-variable-could-be-immutable at src/Registry.sol:25: State Variable Could Be Immutable (7 places)\n[low] unsafe-oz-erc721-mint at src/Registry.sol:139: Unsafe `ERC721::_mint()`\n[low] unused-import at src/Renderer.sol:11: Unused Import","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"0d765948e7707dfe8282634db9e3593d3067f8f27137f2fbe21deab2d0f35f12","verifiedTreeHash":"3091659a5baa57771ffb1887e2271f001e3af042","verifierVersion":"0.1.0+560ab6a2"}]}