{"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":"d0b06613-a5d7-45bb-af2d-dff73bb429da","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"82822a7c29a69d8e19101cde0cb3592148b74403bac6d28391462ac7a36e5301","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":"Continue from 2aef6408eabb45b8f149e16a96c7734d4b4b5b07. Targeted fixes, not a report. Code/local tests only: no public deployment, paid requests, wallet signatures, keys, token or pool creation.\n\n1. Replace GatedHookDeployer's substring search with an unambiguous approved-artifact binding. RED regression: a signed document names approved artifact A at top level and artifact B inside a rejected section; B currently deploys. Reject nested/duplicate/ambiguous substitutions; prove A still works. Preserve exact job/result, source/build, bytecode, constructor, chain, manager and permissions binding.\n\n2. Fix deployment revocation for BOTH callback/binding orders. RED regression: finalize Passed with bind-first, rotate signer, revoke its old epoch, then deploy; deployment currently succeeds. Receipt-first already blocks it. Retain authenticated signer-epoch provenance for every approval, or fail closed when missing. Preserve verdict/history and callback protections.\n\n3. Use IMD's actual completion schema (https://imd.fun/docs/): resultHash commits to the control-plane /jobs/:id/result snapshot, not arbitrary worker JSON. Implement and test a verifiable path from that snapshot through accepted artifact/review evidence to unsigned deployment calldata. Do not assume workers can inject top-level fields. Validate assembled job/oracle bodies with the free request checker; retain fixtures and sources.\n\n4. Resolve authenticated binding without a founder transaction per hook, hosted backend or hot wallet. If the official protocol lacks the required proof, identify the exact missing interface/evidence and keep that route disabled; do not fake automation.\n\nShow RED then GREEN for the two regressions. Preserve existing tests; rerun Foundry, SDK, site/ABI and cold callback-gas checks. Keep compiler settings, 200k callback budget and 24,576-byte runtime limit. Update ABIs/tools/docs; return commit, logs, trust changes and unresolved live gates. No audit/live-readiness claim.","parentJobId":"d8ec4ec9-b939-4ff8-8ce1-fad7a6a69bd9","planHash":"eaf3128e34371b3514395eeb1d4fa7dc78eafa89e217785d76e372cb71266010","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"28e81139-f2a5-4a5a-a239-b6c315b58e01","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1811-build-technical-foundation-hooks"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52147","feedbackHash":"c83f731db95d839f905cc02f901ccc28ba4ee9365bf032030372c365e537b244","nodeKey":"build_contract_project","submissionHash":"82822a7c29a69d8e19101cde0cb3592148b74403bac6d28391462ac7a36e5301","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"db8dbdea00abee77949f40cb686c065a835160f620d5fb07877ab24d31bd5970","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"318a398ba0fef8b07401e60cf7c7b9575b8f64c24413f2717045ef587da33cd7","device":"c04c741787c1223a","findings":[],"hash":"82822a7c29a69d8e19101cde0cb3592148b74403bac6d28391462ac7a36e5301","nodeId":"d99835d4-c7c8-4d6d-a72c-d24206e7e126","outcome":"completed","summary":"Implemented both fixes and the accepted-evidence path using [IMD’s completion schema](https://imd.fun/docs/#intake-what-comes-back). Nested/duplicate substitutions fail; approved A deploys. Both callback orders retain signer provenance and enforce revocation.\n\n- RED → GREEN preserved.\n- Passed: build, formatting, **358 Foundry**, **49 Python**, **22 site/ABI** tests; assignment-seed checks also pass.\n- Largest measured cold review callback: **192,286 / 200,000 gas**.\n- Runtimes: **24,166** and **16,890 bytes**, below 24,576.\n\n[Logs and evidence](/root/.identitymd/work/d0b06613-a5d7-45bb-af2d-dff73bb429da/d99835d4-c7c8-4d6d-a72c-d24206e7e126/docs/checks/approval-binding/README.md) include checker fixtures and sources.\n\nAutomatic binding remains disabled pending official authenticated mapping proof. Manual owner binding and Intake/oracle trust remain; [operational responsibilities and live gates](/root/.identitymd/work/d0b06613-a5d7-45bb-af2d-dff73bb429da/d99835d4-c7c8-4d6d-a72c-d24206e7e126/docs/GATED_DEPLOYMENT.md) are documented.\n\nBase: `2aef6408eabb45b8f149e16a96c7734d4b4b5b07`. No new commit created because `.git` modifications are prohibited. No public deployment or audit/live-readiness claim.","treeHash":"2e4f109c383109a5a5b00b7356a0eb4c4f4cbc22","usage":{"cachedInputTokens":8751744,"inputTokens":385763,"model":"gpt-6-astra","outputTokens":64108,"runtime":"codex","turns":10,"wallClockMs":1710932}}],"verification":[{"checks":[{"durationMs":13321,"exitCode":0,"name":"build","output":"Compiling 140 files with Solc 0.8.26\nSolc 0.8.26 finished in 13.21s\nCompiler run successful with warnings:\nWarning (2018): Function state mutability can be restricted to pure\n  --> test/AcceptedArtifact.t.sol:35:5:\n   |\n35 |     function _file(bytes32 digest) internal view returns (bytes memory) {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> test/AcceptedArtifact.t.sol:106:5:\n    |\n106 |     function testCanonicalApprovalHasNoAmbiguousFieldsOrTrailingBytes() public view {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":26837,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/JobProtocolTuple.t.sol:JobProtocolGasTest\n[PASS] testColdTupleWithLongURIFits200kAndRuntimeLimit() (gas: 894390)\nLogs:\n  Cold job tuple with 4096-byte URI minimum forwarded gas: 67052\n  Requester deployed runtime bytes: 24166\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.65ms (571.34µs CPU time)\n\nRan 1 test for test/AuditReceiptConflictProof.t.sol:StuckReceiptProofTest\n[PASS] testOwnerCanCloseReceiptWhoseUuidWasConsumedElsewhere() (gas: 2596747)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.58ms (2.41ms CPU time)\n\nRan 1 test for test/AuditExpiryProof.t.sol:ExpiryFrontRunShoppingTest\n[PASS] testRequesterFrontRunsLateNotPassedWithExpiryAndReasks() (gas: 1278383)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.60ms (2.15ms CPU time)\n\nRan 7 tests for test/FeaturedAdversarial.t.sol:FeaturedAdversarialTest\n[PASS] testFalseRevertingMalformedAndNoMovementTokensCannotCreateCredit() (gas: 1201538)\n[PASS] testMissingTokenCodeAfterConfigurationCannotFakeTransfer() (gas: 68113)\n[PASS] testNoReturnTokenWorksForDepositsAndWithdrawals() (gas: 264270)\n[PASS] testProceedsWithdrawalAlsoGuardsReentrancy() (gas: 1621022)\n[PASS] testRecipientCannotBlockCancellationOrSettlementAndFailedClaimRollsBack() (gas: 2093568)\n[PASS] testTaxedOrFailedWithdrawalRollsBackAndRemainsRetryable() (gas: 1194337)\n[PASS] testTokenCallbacksCannotReenterAnyCustodyMutation() (gas: 3108803)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 3.69ms (2.52ms CPU time)\n\nRan 3 tests for test/DeployHookJobRequester.t.sol:DeployHookJobRequesterTest\n[PASS] testCheckRefusesAddressesWithoutCodeAndUnsoldActions() (gas: 136180)\n[PASS] testDeployThenConfigureGivesAWorkingRequesterOwnedByTheNamedOwner() (gas: 10466130)\n[PASS] testRunRefusesZeroBroadcaster() (gas: 125889)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.80ms (2.98ms CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] testProtocolSignatureVerifiesBeforeItsNonBoolAnswerIsRefused() (gas: 3944782)\n[PASS] test_acceptsAFreshSignatureFromTheVectorKeyAsDelivered() (gas: 4027766)\n[PASS] test_callbackSelectorsAreCanonical() (gas: 3965)\n[PASS] test_digestMatchesTheProtocol() (gas: 13912)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 4.64ms (1.67ms CPU time)\n\nRan 6 tests for test/OracleSigner.t.sol:OracleSignerTest\n[PASS] testContractSignerUsesErc1271FallbackUnderTheStipend() (gas: 4606151)\n[PASS] testDelegatedSignerStillRejectsWrongKeyTamperingAndMalformedEcdsa() (gas: 4483612)\n[PASS] testEcdsaKeyRemainsValidEvenIfItsCodeRejectsErc1271() (gas: 4228268)\n[PASS] testEip7702DesignatorDoesNotDisableTheSignersEcdsaKey() (gas: 4242411)\n[PASS] testErc1271RevocationRevertAndShortReturnFailClosedAndDoNotConsume() (gas: 5026287)\n[PASS] testFutureAttestationIsRefusedWithoutConsumingIt() (gas: 4159675)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 7.40ms (5.38ms CPU time)\n\nRan 1 test for test/UriPilotGas.t.sol:UriPilotGasTest\n[PASS] testColdMeasuredUriBoundaryAndOneAttemptFeeLoss() (gas: 989256)\nLogs:\n  Local cold URI bytes delivered under exact 200k: 20224\n  Local cold URI bytes exceeding exact 200k: 20256\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.50ms (291.86µs CPU time)\n\nRan 29 tests for test/HookJobRequester.t.sol:HookJobRequesterTest\n[PASS] testAnswerSignedForAnotherConsumerRefused() (gas: 4163586)\n[PASS] testBodyIsExactTemplateWithStepsSpecAndQuotedBrief() (gas: 2409015)\n[PASS] testBriefValidation() (gas: 3212711)\n[PASS] testCallbackWithUnexpectedAbiFailsSafeAndJobCanExpire() (gas: 2545277)\n[PASS] testCallbacksFitTheIntakeStipend() (gas: 4544365)\n[PASS] testConstructorRefusesZeroAddresses() (gas: 10483)\n[PASS] testForgedExpiredWeakOrMistypedAnswersRefused() (gas: 4947071)\n[PASS] testFuzzPrintableAsciiBriefAcceptedUnlessReserved(bytes32,uint8) (runs: 256, μ: 1264311, ~: 2210713)\nLogs:\n  Bound result 20\n\n[PASS] testJobFailureClosesJobOnceAndIsNotAVerdict() (gas: 3795089)\n[PASS] testJobIdCollidingWithPendingReviewAskRefused() (gas: 5334786)\n[PASS] testOpenJobPaysOncePullsExactPriceAndTracksRequestId() (gas: 2733010)\n[PASS] testOwnerSettersAreOwnerOnlyAndValidated() (gas: 666450)\n[PASS] testPriceCeilingProtectsStandingAllowance() (gas: 7257584)\n[PASS] testResultAcceptedOnceFromIntakeOnly() (gas: 2459049)\n[PASS] testReusedRequestIdRefused() (gas: 2841382)\n[PASS] testReviewExpiryRequestedByRequesterAndConfirmedByOwner() (gas: 4350028)\n[PASS] testReviewFailureLeavesNoVerdictAndAllowsRetry() (gas: 6052399)\n[PASS] testReviewNotPassedIsStoredNotReverted() (gas: 4254672)\n[PASS] testReviewOnlyForDeliveredOrExpiredJobsByRequester() (gas: 4383477)\n[PASS] testReviewPassedOnlyFromSignedOracleAnswer() (gas: 4517825)\n[PASS] testSameAttestationCannotSettleASecondAsk() (gas: 8213473)\n[PASS] testSignerRotationTakesEffect() (gas: 4340241)\n[PASS] testStaticSiteReadContract() (gas: 2362347)\n[PASS] testSweepRecoversStrayTokens() (gas: 137069)\n[PASS] testUnconfiguredRequesterRefusesUntilOwnerSetsTemplates() (gas: 4280386)\n[PASS] testUnknownRequestIdRefused() (gas: 142556)\n[PASS] testUnpricedActionAndVersion1IntakeRefusedWithoutPayment() (gas: 703697)\n[PASS] testVersion1IntakeWorksWithTheFailureHookOff() (gas: 6709005)\n[PASS] testWalletMustApproveAndPay() (gas: 603979)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 49.88ms (63.18ms CPU time)\n\nRan 5 tests for test/FeaturedTransfer.t.sol:FeaturedTransferTest\n[PASS] testBuyerCanClearSellersAdAndBuyItsOwnWhileOnlySellerGetsRefund() (gas: 3188812)\n[PASS] testFuzzNewOwnerCancellationConservesAllCredits(uint256) (runs: 256, μ: 1712296, ~: 1713805)\nLogs:\n  Bound result 15161\n\n[PASS] testIntermediateOwnerLosesCancellationPowerButOriginalPayerKeepsIt() (gas: 1869005)\n[PASS] testNewOwnerCannotCancelAtExpiryAndCanRenewBeforeOldSettlement() (gas: 2169353)\n[PASS] testProposedOwnerCannotCancelUntilAcceptingAndAdminCannotCancel() (gas: 1838309)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 61.47ms (62.49ms CPU time)\n\nRan 21 tests for test/FeaturedPlacements.t.sol:FeaturedPlacementsTest\n[PASS] testAdminRotationIsTwoStepAndDoesNotControlCustody() (gas: 805868)\n[PASS] testBadTokenConfigurationAndConstructorArguments() (gas: 1022284)\n[PASS] testCancelledPlacementCannotSettleOrCancelTwice() (gas: 1586722)\n[PASS] testDepositWithdrawBelongsToDepositorAndCannotBeSwept() (gas: 693423)\n[PASS] testDirectTransfersAreNotCreditsAndCannotBeSwept() (gas: 496850)\n[PASS] testEditingInvalidatesStalePurchaseAndFeeDisclosuresAreSnapshotted() (gas: 1995083)\n[PASS] testExpirySettlementIsPermissionlessAndCannotBeRepeatedOrRefunded() (gas: 1830989)\n[PASS] testFeaturedOrderingPaginationAndLabelsSkipCancelledAndExpired() (gas: 3095145)\n[PASS] testFuzzCancellationConservesFundsAndRoundsInPayersFavor(uint256) (runs: 256, μ: 1590328, ~: 1591843)\nLogs:\n  Bound result 14099\n\n[PASS] testHalfDurationCancellationSplitsFeeAndProceedsArePullBased() (gas: 1742376)\n[PASS] testImmediateCancellationFullyRefundsThenOwnerCanWithdraw() (gas: 1648242)\n[PASS] testOnlyListingOwnerCanBuyAndUnrelatedAccountsCannotCancelIncludingAdmin() (gas: 1766171)\n[PASS] testPurchaseCostsExactlyPointOneImdAndHasSevenDayAdLabel() (gas: 1481632)\n[PASS] testRecipientRotationInvalidatesStalePurchaseBeforeFundsAreLocked() (gas: 1453614)\n[PASS] testRecipientsAreSnapshottedAndChangingThemCannotTakeOldFunds() (gas: 2414968)\n[PASS] testSingleLivePlacementButCanRenewUnsettledExpiredOrCancelledPlacement() (gas: 2497512)\n[PASS] testSnapshotSurvivesEditingArchivingTransferAndRefundStaysWithPayer() (gas: 2399315)\n[PASS] testStaleTermsInactiveListingInsufficientBalanceAndDeadlineFailBeforeDebit() (gas: 1405175)\n[PASS] testUnknownIdsAndInvalidPagesFail() (gas: 228111)\n[PASS] testUnsetConfigurationAndTokenCanOnlyBeChosenOnce() (gas: 703556)\n[PASS] testZeroAmountsInvalidRecipientsAndExcessWithdrawalsFail() (gas: 629582)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 116.84ms (119.55ms CPU time)\n\nRan 15 tests for test/HookIntegration.t.sol:HookIntegrationTest\n[PASS] testAllDirectionsAndExactModesAcceptLimit() (gas: 650218)\n[PASS] testDuplicatePoolInitializationFails() (gas: 41653)\n[PASS] testDynamicFeePoolRejectedAtomically() (gas: 97839)\n[PASS] testFuzzHookDataHasNoAuthority(bytes) (runs: 256, μ: 210230, ~: 210034)\n[PASS] testFuzzRealSwapsSettleAndConserve(uint128,bool,bool,bool) (runs: 256, μ: 280994, ~: 278533)\nLogs:\n  Bound result 4373\n\n[PASS] testFuzzSignedBoundaryAndNeutralReturn(int256,bytes) (runs: 256, μ: 30794, ~: 29816)\n[PASS] testFuzzUnauthorizedCallbacks(address) (runs: 256, μ: 95005, ~: 95102)\n[PASS] testIntMinIntMaxAndZeroFailClearly() (gas: 88270)\n[PASS] testLimitCapsOnlySpecifiedSideNotUnspecifiedSide() (gas: 427039)\n[PASS] testLiquidityWithdrawalRemainsAvailableAfterRejectedSwap() (gas: 184825)\n[PASS] testOverLimitRevertsThroughManagerInAllModes() (gas: 253819)\n[PASS] testSettlementFailureRollsBackCounterAndPoolState() (gas: 388376)\n[PASS] testTwoNewPoolsReuseOneDeployedHook() (gas: 624953)\n[PASS] testUnusedCallbacksAlwaysRevert() (gas: 209241)\n[PASS] testWrongHookAndUnknownPoolRejected() (gas: 124522)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 126.15ms (121.26ms CPU time)\n\nRan 2 tests for test/ReviewBinding.t.sol:RequesterOwnershipTest\n[PASS] testMistypedHandoverCanBeCancelledOrReplacedAndOnlyNomineeAccepts() (gas: 430359)\n[PASS] testZeroAndSelfHandoversRefusedWithoutLosingControl() (gas: 103680)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.63ms (398.63µs CPU time)\n\nRan 11 tests for test/HookListingRegistry.t.sol:HookListingRegistryTest\n[PASS] testAuditUrlAndAuditLabelNeverConferVerification() (gas: 1866291)\n[PASS] testFreeCreateAndEditPersistAllFieldsAndHistory() (gas: 1618302)\n[PASS] testFuzzUnauthorizedCallerCannotModifyListing(address) (runs: 256, μ: 842677, ~: 842726)\n[PASS] testFuzzValidLabelsRemainSearchable(uint128) (runs: 256, μ: 747246, ~: 746681)\n[PASS] testInvalidIdentityUnknownRecordsAndPagesRevert() (gas: 931804)\n[PASS] testInvalidMetadataIsAtomicAndReferencesMayBeAbsent() (gas: 1106108)\n[PASS] testLabelValidationBoundsAndDuplicates() (gas: 965451)\n[PASS] testSameHookCanHaveIndependentOwnersButNoOwnerDuplicates() (gas: 2284749)\n[PASS] testSearchByLabelChainOwnerAndVisibilityUsesBoundedAscendingCursor() (gas: 2329424)\n[PASS] testTransferCanBeCancelledOrReplaced() (gas: 1022369)\n[PASS] testTwoStepListingTransferAndDuplicateProtection() (gas: 1824321)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 190.82ms (87.10ms CPU time)\n\nRan 11 tests for test/JobProtocolTuple.t.sol:JobProtocolTupleTest\n[PASS] testDuplicateCannotReplaceHashOrURI() (gas: 2434602)\n[PASS] testEmptyURICanBeReportedWithoutReviewApproval() (gas: 2369282)\n[PASS] testFuzzLateTupleWorksBeforeOrAfterLocalExpiry(bool) (runs: 256, μ: 2446857, ~: 2446857)\n[PASS] testFuzzSuppliedHashAndURIBytesArePreserved(bytes32,uint16) (runs: 256, μ: 2465772, ~: 2434268)\nLogs:\n  Bound result 66\n\n[PASS] testLateTuplePreservesFinalizedNegativeReview() (gas: 4447582)\n[PASS] testMalformedTuplesLoseOnlyTheSingleIntakeAttempt() (gas: 15421220)\n[PASS] testObsoleteSelectorIsNotAnAlias() (gas: 2367507)\n[PASS] testProtocolTuple() (gas: 2338928)\n[PASS] testRegisteredSelectorAndResultEventsMatchProtocol() (gas: 2562114)\n[PASS] testUnauthorizedTupleLeavesJobAndLogsUntouched() (gas: 2460445)\n[PASS] testUnknownTupleCannotDeliverAnotherRequest() (gas: 2371681)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 202.84ms (207.25ms CPU time)\n\nRan 8 tests for test/ReviewReceiptGas.t.sol:ReviewReceiptGasTest\n[PASS] testAudit22ColdReadsNowRetainsOneShotReceiptAndBoundVerdict() (gas: 3974794)\nLogs:\n  Cold audit registry +22 reads receipt minimum forwarded gas: 187231\n  Cold audit registry +22 reads bound minimum forwarded gas: 156968\n\n[PASS] testColdEoaReceiptGasAndExactStipend() (gas: 1565468)\nLogs:\n  Cold EOA receipt minimum forwarded gas: 124984\n\n[PASS] testColdFiveOfSevenReceiptAfterExpiryRequestFitsStipend() (gas: 2880417)\nLogs:\n  Cold 5-of-7 receipt after expiry request minimum forwarded gas: 170077\n\n[PASS] testColdFiveOfSevenReceiptAndBoundCallbacksFitStipend() (gas: 5243994)\nLogs:\n  Cold 5-of-7 receipt minimum forwarded gas: 170077\n  Cold 5-of-7 bound minimum forwarded gas: 139795\n\n[PASS] testColdFiveOfSevenRetryReceiptBeforeReservationReleaseFitsStipend() (gas: 2982360)\nLogs:\n  Cold 5-of-7 reserved retry receipt minimum forwarded gas: 170077\n\n[PASS] testColdWrongPrebindingRetainsReceiptWithFiveOfSevenAndAuditSigner() (gas: 4978500)\nLogs:\n  Cold 5-of-7 mismatched pre-binding minimum forwarded gas: 175123\n  Cold audit +22 reads mismatched pre-binding minimum forwarded gas: 192286\n\n[PASS] testFuzzMultisignerRefusesWrongKeyDuplicateRevokedExpiredOrInsufficientSignatures(uint8) (runs: 256, μ: 425887, ~: 429159)\nLogs:\n  Bound result 3\n\n[PASS] testOverBudgetSignerStillFailsClosedAndLosesSingleAttemptWithoutPartialReceipt() (gas: 798860)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 243.61ms (235.14ms CPU time)\n\nRan 3 tests for test/ReviewReceiptPacking.t.sol:ReviewReceiptPackingTest\n[PASS] testAllocatedMetadataIsNotAnAnswerAndReadAbiRemainsTenWords() (gas: 3722730)\n[PASS] testFuzzReceiptPreservesFullContextAndPackedFields(uint64,uint64,uint64,uint16,uint16,bool,uint256) (runs: 256, μ: 4286948, ~: 4286939)\nLogs:\n  Bound result 0\n  Bound result 5\n  Bound result 5\n\n[PASS] testReceiptPackingMaximumValuesDoNotLeakIntoAdjacentFields() (gas: 4276934)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 359.79ms (357.92ms CPU time)\n\nRan 6 tests for test/RequesterMvpAudit.t.sol:RequesterMvpPaymentTest\n[PASS] testCallerLimitZeroFailsAndLowerQuoteChargesOnlyQuote() (gas: 2535149)\n[PASS] testExistingDonationsCannotHideUnderpaymentOrBecomeCallerFunds() (gas: 4500348)\n[PASS] testFuzzCallerLimitSurvivesOwnerCeilingIncreaseAndIntakePriceMove(bool,uint96) (runs: 256, μ: 3285276, ~: 3959271)\nLogs:\n  Bound result 1\n\n[PASS] testFuzzInexactIncomingTokensCannotSpendPreexistingDonations(uint8) (runs: 256, μ: 1324132, ~: 1325846)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzUnderspendingIntakeRollsBackAllStateAndLeavesNothingSweepable(uint256,bool,bool) (runs: 256, μ: 4907699, ~: 5214114)\nLogs:\n  Bound result 25647596775635\n\n[PASS] testTokenCallbackCannotReenterSweepOrChangePaymentConfiguration() (gas: 8082821)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 506.58ms (377.18ms CPU time)\n\nRan 13 tests for test/RequesterMvpAudit.t.sol:RequesterMvpLifecycleTest\n[PASS] testAbandonedAskReceiptBlocksClosureWithoutRequesterExpiryRequest() (gas: 4240417)\n[PASS] testBindingResetRequiresOwnerExactBodyAndPendingBoundAsk() (gas: 4717158)\n[PASS] testFuzzCompromisedEpochBlocksRetainedAnswersAndAllowsHonestClosure(bool,bool) (runs: 256, μ: 6582139, ~: 6729569)\n[PASS] testFuzzJobFailureAndExpiryOrderingCannotChangeReviewEligibility(uint8,bool) (runs: 256, μ: 4467392, ~: 4478759)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzWrongPrebindingRetainsOneShotAnswerAndCanBeCorrected(uint8,bool) (runs: 256, μ: 4818284, ~: 4817882)\nLogs:\n  Bound result 0\n\n[PASS] testIncidentRevocationIsExplicitAndCannotUndoFinalizedVerdicts() (gas: 4376090)\n[PASS] testLateFailureCannotClearFinalizedNegativeReview() (gas: 4388280)\n[PASS] testOwnerClosesAbandonedAskOnlyAfterDeadlineAndCannotCloseItsRetry() (gas: 6287966)\n[PASS] testRevocationFreezesEveryOldReceiptButNotANewEpochReceipt() (gas: 12277460)\n[PASS] testRevocationValidatesAuthorityEpochAndEvidence() (gas: 238952)\n[PASS] testRevokedBoundMismatchClosesWithoutResetAndReservationReleasePreservesHistory() (gas: 4622628)\n[PASS] testSwappedPreboundDeliveriesStayPendingAndNeverConsumeEachOthersUuid() (gas: 8940515)\n[PASS] testUnknownOrMissingReceiptCannotBeIncidentClosed() (gas: 3710507)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 506.65ms (1.07s CPU time)\n\nRan 11 tests for test/ReviewRecovery.t.sol:ReviewRecoveryTest\n[PASS] testBoundOrTerminalAsksCannotBeDiscarded() (gas: 4346517)\n[PASS] testDiscardingDuplicateReceiptDoesNotClearGenuineConsumedUuid() (gas: 8148868)\n[PASS] testExpiredJobFalseVerdictRemainsTerminalEvenIfReviewLaterCompletes() (gas: 4328366)\n[PASS] testFuzzOwnerCannotDiscardReceiptWithMatchingContext(bool) (runs: 256, μ: 4259899, ~: 4259899)\n[PASS] testFuzzReleaseUnusedReservationAfterExpiryOrFailureThenFinalizeRetry(bool,bool) (runs: 256, μ: 10006110, ~: 10007814)\n[PASS] testFuzzSameUuidFieldMismatchCannotDiscardReceipt(uint8) (runs: 256, μ: 4165650, ~: 4165848)\nLogs:\n  Bound result 1\n\n[PASS] testLateNotPassedReceiptCannotBeFrontRunByRequesterExpiry() (gas: 4297163)\n[PASS] testRecoveryRequiresCurrentOwnerExactBodyValidContextAndReceipt() (gas: 4455893)\n[PASS] testReservationReleaseRejectsUnknownUnboundAndPendingHolderEvenPastDeadline() (gas: 7850350)\n[PASS] testSignerRotationPreservesRetainedVerificationButRejectsUndeliveredOldSignature() (gas: 8337221)\n[PASS] testSwappedReceiptOwnerClosesWrongAskWithoutStrandingGenuineUuid() (gas: 10550714)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 540.78ms (713.41ms CPU time)\n\nRan 11 tests for test/AuditFixes.t.sol:AuditFixesTest\n[PASS] testAllowedTestnetsDeployAndVerifyEndToEnd() (gas: 7765983)\n[PASS] testBaseMainnetRejectedOnEveryReleasePath() (gas: 9450397)\n[PASS] testEthereumMainnetRejectedOnEveryReleasePath() (gas: 9450443)\n[PASS] testFullPageCompletesOrResumesUnderTypicalCallGasCap() (gas: 4696895)\n[PASS] testFuzzUnknownChainsRejectedOnEveryReleasePath(uint64) (runs: 256, μ: 9453605, ~: 9453605)\n[PASS] testHookConstructorStillBindsSpecToActualChain() (gas: 19895)\n[PASS] testHookTemplateStaysChainAgnosticForFutureMainnetRelease() (gas: 1388790)\n[PASS] testMaxPageGasWithinBudgetWhenUncapped() (gas: 2338692)\n[PASS] testRobinhoodMainnetRejectedOnEveryReleasePath() (gas: 9450442)\n[PASS] testTooLittleGasForOneCandidateRevertsClearly() (gas: 17619788)\n[PASS] testTruncatedPageReportsFirstUncheckedNonce() (gas: 1946363)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 632.16ms (690.27ms CPU time)\n\nRan 12 tests for test/AuditContextMismatchProof.t.sol:AuditContextMismatchProofTest\n[PASS] testAsynchronousRefusalAfterPaymentClosesWithoutRefund() (gas: 5087663)\n[PASS] testContextMismatchRecoveryCannotSetAsideAMatchingVerdictOrBeCalledByRequester() (gas: 4573881)\n[PASS] testContextMismatchRecoveryNeedsAnUnboundPendingAskWithAReceipt() (gas: 4429620)\n[PASS] testFuzzAcceptedTemplateNamesEveryStepInEveryAssembledBody(bytes32,uint16,uint8) (runs: 256, μ: 4453868, ~: 4552134)\nLogs:\n  Bound result 204\n\n[PASS] testFuzzBodyQuorumBelowConfiguredMinimumNoLongerBurnsAnAgreedAnswer(uint16,uint16,bool,bool) (runs: 256, μ: 4216073, ~: 4164464)\nLogs:\n  Bound result 6\n  Bound result 5\n\n[PASS] testFuzzPanelStrengthMinimumsStillRefuseWeakAnswersInOneShot(uint8) (runs: 256, μ: 4404345, ~: 4404402)\nLogs:\n  Bound result 2\n\n[PASS] testFuzzSameUuidOtherSignedContextWasStuckAndNowClosesHonestly(uint8,bool) (runs: 256, μ: 6496881, ~: 6496966)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzStepMarkerSplitAcrossFragmentsIsRefused(uint8,uint8,uint8) (runs: 256, μ: 2694293, ~: 2717338)\nLogs:\n  Bound result 1\n  Bound result 0\n  Bound result 8\n\n[PASS] testFuzzSynchronousIntakeRefusalRevertsTheWholeAskWithoutDebit(bytes4,bool) (runs: 256, μ: 4552216, ~: 4585024)\n[PASS] testMarkersOnlyACreatorBriefCouldSupplyDoNotSatisfyTheTemplate() (gas: 1174914)\n[PASS] testReceiptAcknowledgmentCommitsToTheVerdict() (gas: 4079933)\n[PASS] testReproductionQuorumOneWithSixAgreedIsAValidAnswer() (gas: 4257809)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 886.38ms (2.14s CPU time)\n\nRan 7 tests for test/ReviewAuditRegression.t.sol:ReviewAuditRegressionTest\n[PASS] testExpiryNeedsDeadlineAndCurrentOwnerApprovalForExactAsk() (gas: 6182276)\n[PASS] testExpiryRequestAllowsBindingBeforeLateDelivery() (gas: 4426143)\n[PASS] testFuzzExactConflictRecoveryPreservesOtherAskAndReplayProtection(bool,bool,bool) (runs: 256, μ: 10365196, ~: 10365183)\n[PASS] testFuzzExpiryAndDeliveryBothOrdersPreserveVerdictAndBlockRetries(bool,bool,bool) (runs: 256, μ: 4628453, ~: 4684391)\n[PASS] testFuzzSameUuidTypoCannotDiscardGenuineNegativeEvenWithConflict(uint8,bool) (runs: 256, μ: 6333775, ~: 4508729)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzUnavailableDifferentTrueUuidCannotDiscardGenuineNegative(uint8) (runs: 256, μ: 8457396, ~: 8450142)\nLogs:\n  Bound result 2\n\n[PASS] testIntakeFailureAfterExpiryRequestAllowsRetryAndInvalidatesOldApproval() (gas: 5736722)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.26s (2.17s CPU time)\n\nRan 9 tests for test/AcceptedArtifact.t.sol:AcceptedArtifactTest\n[PASS] testCanonicalApprovalHasNoAmbiguousFieldsOrTrailingBytes() (gas: 48236)\n[PASS] testCompletionFlagsAndApprovalMetadataCannotBeCoerced() (gas: 4059505)\n[PASS] testDuplicateKeysAnywhereAndEscapedAliasesFailClosed() (gas: 2345943)\n[PASS] testFuzzDifferentArtifactOrSourceCannotMatch(bytes32,bool) (runs: 256, μ: 657072, ~: 670793)\n[PASS] testMalformedJsonAndBoundsRefuseInsteadOfGuessing() (gas: 902129)\n[PASS] testOnlyUniqueTopLevelAcceptedFileAuthorizesArtifact() (gas: 1817022)\n[PASS] testRejectedOnlyAndDuplicateFileEntriesFailClosed() (gas: 1397034)\n[PASS] testSourceMustBeAcceptedAndUnambiguous() (gas: 2009784)\n[PASS] testWhitespaceAndReorderedMembersPreserveExactFileBinding() (gas: 673788)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 1.26s (1.28s CPU time)\n\nRan 25 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] testAllNamedMainnetsAndUnknownChainsRejected() (gas: 4440)\n[PASS] testAnyoneMayDeployIdenticalPlanWithoutTakingOwnership() (gas: 3340102)\n[PASS] testChangedConstructorSettingsInvalidateCachedPlan() (gas: 2452880)\n[PASS] testChangingManagerChangesCommitments() (gas: 4456007)\n[PASS] testDuplicateDeploymentRejectedAndMinerSkipsOccupiedAddress() (gas: 3409894)\n[PASS] testFuzzOnlyExactPermissionMaskAccepted(uint160) (runs: 256, μ: 29868, ~: 30225)\n[PASS] testFuzzPredictionMatchesIndependentCreate2Formula(address,bytes32,bytes32) (runs: 256, μ: 3933, ~: 3933)\n[PASS] testFuzzSpecLimitCommitsToExactConstructor(uint128,bytes32) (runs: 256, μ: 44323, ~: 44323)\n[PASS] testInvalidSearchRanges() (gas: 100769)\n[PASS] testInvalidSpecFieldsRejected() (gas: 161488)\n[PASS] testManagerCodeChangeFailsClosed() (gas: 2410875)\n[PASS] testManagerMustHaveExpectedCode() (gas: 68520)\n[PASS] testPredictionDeploymentPermissionsSettingsAndBytecodeAgree() (gas: 3496937)\n[PASS] testPrefundedPredictedAddressStillDeploys() (gas: 3331370)\n[PASS] testScriptUsesSamePlanAndDeploymentAsStore() (gas: 7192658)\n[PASS] testScriptsRejectMissingBroadcaster() (gas: 7147621)\n[PASS] testSearchExhaustionAndResume() (gas: 6291072)\n[PASS] testStaleOrForgedScriptPlansRejected() (gas: 6271704)\n[PASS] testTestnetPolicyIdsOnlyLocalSimulation() (gas: 7542)\n[PASS] testVerificationDetectsCorruptedConstructorStorage() (gas: 3314813)\n[PASS] testVerificationDetectsCorruptedRuntime() (gas: 3308499)\n[PASS] testVerifyUndeployedOrWrongAddressRejected() (gas: 2430633)\n[PASS] testWrongChainRejected() (gas: 29640)\n[PASS] testWrongExpectedAddressAndHashRejected() (gas: 2458895)\n[PASS] testWrongSaltRejectedByFactoryAndConstructor() (gas: 98469)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 1.26s (135.41ms CPU time)\n\nRan 44 tests for test/GatedHookDeployer.t.sol:GatedHookDeployerTest\n[PASS] testArtifactFieldEditNotInReviewedResult() (gas: 7407533)\n[PASS] testBoundedSwapHookDeploysThroughGateAndInitializesPool() (gas: 11274498)\n[PASS] testCheckViewMatchesDeploy() (gas: 6715357)\n[PASS] testConstructorRejectsZeroRequesterAndOwner() (gas: 6141)\n[PASS] testDisabledManagerRefused() (gas: 6191147)\n[PASS] testEmptyRuntimeRefused() (gas: 7391299)\n[PASS] testEnvironmentDependentRuntimeRefused() (gas: 18903556)\n[PASS] testExpectedHookMismatchRefused() (gas: 6758407)\n[PASS] testForgedResultDocumentRefused() (gas: 6196025)\n[PASS] testForgedSignatureNeverApproves() (gas: 6124971)\n[PASS] testFuzzAnyValidMaskDeploys(uint16) (runs: 256, μ: 10989457, ~: 9629766)\n[PASS] testGeneratedHookDeploysAfterBindThenCallback() (gas: 7091530)\n[PASS] testGeneratedHookDeploysAfterCallbackThenBind() (gas: 7169949)\n[PASS] testInvalidMasksRefused() (gas: 42323)\n[PASS] testJobReplayRefused() (gas: 11005417)\n[PASS] testLyingManagerReadbackRefused() (gas: 9703446)\n[PASS] testLyingPermissionsReadbackRefused() (gas: 13788908)\n[PASS] testManagerCodeHashMismatchRefused() (gas: 6163802)\n[PASS] testMarkerFormat() (gas: 31558)\n[PASS] testMaxJobAgeBounds() (gas: 103304)\n[PASS] testNoReviewRefused() (gas: 4261702)\n[PASS] testNotPassedRefused() (gas: 6184033)\n[PASS] testOccupiedAddressRefused() (gas: 6758887)\n[PASS] testOnlyJobRequesterMayDeploy() (gas: 6183500)\n[PASS] testOnlyOwnerSetsManager() (gas: 40216)\n[PASS] testOtherJobsApprovalCannotBeBorrowed() (gas: 13240505)\n[PASS] testPendingReviewRefused() (gas: 5940792)\n[PASS] testPinnedManagerRefusedWhenLiveCodeDiffers() (gas: 63586)\n[PASS] testProductionChainsAcceptOnlyPinnedManager() (gas: 297744)\n[PASS] testReenteringConstructorCannotReuseApproval() (gas: 9868821)\n[PASS] testRetainedUnboundReceiptIsNotApproval() (gas: 5882442)\n[PASS] testRevertingConstructorLeavesApprovalUnused() (gas: 8380271)\n[PASS] testRevokedSignerEpochBlocksRetainedVerdict() (gas: 6423740)\n[PASS] testStaleApprovalRefused() (gas: 6224342)\n[PASS] testSubstitutedConstructorArgsRefused() (gas: 6162547)\n[PASS] testSubstitutedCreationCodeRefused() (gas: 6160592)\n[PASS] testUnansweredReviewRefused() (gas: 5992350)\n[PASS] testUndeliveredJobRefused() (gas: 2469172)\n[PASS] testUnminedSaltRefused() (gas: 6765619)\n[PASS] testUnsupportedChainRefused() (gas: 41053)\n[PASS] testWrongChainRefused() (gas: 6151515)\n[PASS] testWrongDeployerRefused() (gas: 6232175)\n[PASS] testWrongManagerRefused() (gas: 10539314)\n[PASS] testWrongMaskRefused() (gas: 6759647)\nSuite result: ok. 44 passed; 0 failed; 0 skipped; finished in 1.33s (1.57s CPU time)\n\nRan 13 tests for test/ReviewBinding.t.sol:ReviewBindingTest\n[PASS] testAnswerAtDeadlineAcceptedAndExcessiveBackwardSkewRefused() (gas: 4404872)\n[PASS] testBindingRequiresOwnerAndExactRecordedBodyAndCannotBeOverwritten() (gas: 4139432)\n[PASS] testExpiredAskAnswerCannotSettleRetryOfIdenticalQuestion() (gas: 6265327)\n[PASS] testFuzzIntakeIdCannotBeReusedAfterReviewCloses(uint8) (runs: 256, μ: 5739587, ~: 5774441)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzOracleIdReservationSurvivesFailureExpiryAndSettlement(uint8) (runs: 256, μ: 8172978, ~: 8195963)\nLogs:\n  Bound result 0\n\n[PASS] testInvalidOrUnknownBindingsRefused() (gas: 3952341)\n[PASS] testLateValidAnswerAndLateBindingAllowedUntilExplicitExpiry() (gas: 8424630)\n[PASS] testOwnerRotationPowersApplyToAlreadyPendingRequestsAsDocumented() (gas: 6638582)\n[PASS] testSignedPanelQuorumAndCountsMustBeConsistent() (gas: 4215132)\n[PASS] testSignedWrongQuestionIdChainOrWindowCannotSettle() (gas: 5919419)\n[PASS] testSwappedHonestAnswersLeaveBothPendingThenSettleTheirOwnAsks() (gas: 8980422)\n[PASS] testTemplateAndTimeoutChangesDoNotChangePendingAskContext() (gas: 4671871)\n[PASS] testUnboundReceiptDoesNotTrustMatchingIntakeIdAndRawBodyHash() (gas: 4400476)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 1.57s (595.32ms CPU time)\n\nRan 52 tests for test/ApprovalBindingRegression.t.sol:ApprovalBindingRegressionTest\n[PASS] testApprovedADeploysFromSnapshotThatAlsoMentionsRejectedB() (gas: 8091826)\n[PASS] testArtifactFieldEditNotInReviewedResult() (gas: 7407473)\n[PASS] testAutomaticBindingRemainsDisabled() (gas: 8501)\n[PASS] testBoundedSwapHookDeploysThroughGateAndInitializesPool() (gas: 11274454)\n[PASS] testCheckViewMatchesDeploy() (gas: 6715341)\n[PASS] testConstructorRejectsZeroRequesterAndOwner() (gas: 6074)\n[PASS] testDisabledManagerRefused() (gas: 6191154)\n[PASS] testEmptyRuntimeRefused() (gas: 7391261)\n[PASS] testEnvironmentDependentRuntimeRefused() (gas: 18903562)\n[PASS] testEpochIsVerificationTimeNotAskTime() (gas: 7136215)\n[PASS] testExpectedHookMismatchRefused() (gas: 6758436)\n[PASS] testForgedResultDocumentRefused() (gas: 6196074)\n[PASS] testForgedSignatureNeverApproves() (gas: 6124977)\n[PASS] testFuzzAnyValidMaskDeploys(uint16) (runs: 256, μ: 10663755, ~: 9533700)\n[PASS] testFuzzBothOrdersKeepEpochAcrossOrdinaryRotation(bool,bool) (runs: 256, μ: 6758929, ~: 7093399)\n[PASS] testGeneratedHookDeploysAfterBindThenCallback() (gas: 7091557)\n[PASS] testGeneratedHookDeploysAfterCallbackThenBind() (gas: 7169889)\n[PASS] testInvalidMasksRefused() (gas: 42317)\n[PASS] testJobReplayRefused() (gas: 11005353)\n[PASS] testLyingManagerReadbackRefused() (gas: 9703408)\n[PASS] testLyingPermissionsReadbackRefused() (gas: 13788870)\n[PASS] testManagerCodeHashMismatchRefused() (gas: 6163853)\n[PASS] testMarkerFormat() (gas: 31514)\n[PASS] testMaxJobAgeBounds() (gas: 103304)\n[PASS] testMissingSignerProvenanceFailsClosed() (gas: 6190614)\n[PASS] testNoReviewRefused() (gas: 4261714)\n[PASS] testNotPassedRefused() (gas: 6184039)\n[PASS] testOccupiedAddressRefused() (gas: 6758915)\n[PASS] testOnlyJobRequesterMayDeploy() (gas: 6183529)\n[PASS] testOnlyOwnerSetsManager() (gas: 40172)\n[PASS] testOtherJobsApprovalCannotBeBorrowed() (gas: 13240479)\n[PASS] testPendingReviewRefused() (gas: 5940805)\n[PASS] testPinnedManagerRefusedWhenLiveCodeDiffers() (gas: 63630)\n[PASS] testProductionChainsAcceptOnlyPinnedManager() (gas: 297763)\n[PASS] testReenteringConstructorCannotReuseApproval() (gas: 9868755)\n[PASS] testRegressionBindFirstRevokedEpochCannotDeploy() (gas: 6354617)\n[PASS] testRegressionRejectedNestedArtifactCannotDeploy() (gas: 6247310)\n[PASS] testRejectedSignatureLeavesNoProvenance() (gas: 6078117)\n[PASS] testRetainedUnboundReceiptIsNotApproval() (gas: 5882448)\n[PASS] testRevertingConstructorLeavesApprovalUnused() (gas: 8380227)\n[PASS] testRevokedSignerEpochBlocksRetainedVerdict() (gas: 6423658)\n[PASS] testStaleApprovalRefused() (gas: 6224304)\n[PASS] testSubstitutedConstructorArgsRefused() (gas: 6162509)\n[PASS] testSubstitutedCreationCodeRefused() (gas: 6160532)\n[PASS] testUnansweredReviewRefused() (gas: 5992367)\n[PASS] testUndeliveredJobRefused() (gas: 2469106)\n[PASS] testUnminedSaltRefused() (gas: 6765625)\n[PASS] testUnsupportedChainRefused() (gas: 41031)\n[PASS] testWrongChainRefused() (gas: 6151563)\n[PASS] testWrongDeployerRefused() (gas: 6232137)\n[PASS] testWrongManagerRefused() (gas: 10539276)\n[PASS] testWrongMaskRefused() (gas: 6759676)\nSuite result: ok. 52 passed; 0 failed; 0 skipped; finished in 1.57s (2.41s CPU time)\n\nRan 24 tests for test/ReviewDelivery.t.sol:ReviewDeliveryTest\n[PASS] testAnswerAtExactSignatureExpiryCanBeRetainedAndConfirmedLater() (gas: 4280936)\n[PASS] testConfirmedReceiptCannotBeReplayedOrRebound() (gas: 4331974)\n[PASS] testEarlyEip7702KeyReceiptFitsColdStipend() (gas: 4281461)\n[PASS] testEarlyErc1271ReceiptFitsColdStipendAndSurvivesLaterRevocation() (gas: 4812446)\n[PASS] testFreshLateAnswerAcceptedIfRequesterRequestsExpiryFirst() (gas: 4348598)\n[PASS] testFuzzBindingMustMatchEveryRetainedFieldAndFailedBindingCanBeCorrected(uint8) (runs: 256, μ: 4571279, ~: 4571489)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzClockSkewToleranceIsSymmetricAtAskTime(int16,bool) (runs: 256, μ: 4260788, ~: 4288742)\nLogs:\n  Bound result -126\n\n[PASS] testFuzzEarlyOneAttemptCallbackRetainedThenConfirmedWithoutAnotherFee(bool) (runs: 256, μ: 4815553, ~: 4815553)\n[PASS] testFuzzFreshLateAnswerAcceptedUntilExplicitExpiry(bool,uint32) (runs: 256, μ: 4374632, ~: 4378792)\nLogs:\n  Bound result 1\n\n[PASS] testFuzzInvalidEarlyAnswerNeverCreatesReceiptOrVerdict(uint8) (runs: 256, μ: 3908868, ~: 3912223)\nLogs:\n  Bound result 0\n\n[PASS] testFuzzRequesterCannotDiscardRetainedAnswerOrBuyAnotherReview(bool) (runs: 256, μ: 4514640, ~: 4514640)\n[PASS] testIntakeFailureBeforeReceiptIsTerminalAndBindingCannotInventAnAnswer() (gas: 3938559)\n[PASS] testInvalidOneAttemptCallbackLosesFeeAndCannotRetryOrCreateReceipt() (gas: 6139188)\n[PASS] testMalformedOneShotCallbackCannotCreateReceipt() (gas: 3730088)\n[PASS] testOneSecondBackwardSkewAndExactFiveMinuteBoundaryAccepted() (gas: 8476307)\n[PASS] testOnlyCurrentIntakeMayRetainAndOnlyOwnerMayConfirm() (gas: 4480318)\n[PASS] testReceiptBindingStillRequiresExactBodyFingerprint() (gas: 4286012)\n[PASS] testReceiptCanBeConfirmedAfterSignatureExpiryTimeoutAndAuthorityRotation() (gas: 4646292)\n[PASS] testReceiptCannotBeOverwrittenOrClearedBySecondIntakeCallback() (gas: 4563939)\n[PASS] testReservedUuidRetainedWithoutVerdictButConsumedUuidRefused() (gas: 11791459)\n[PASS] testSignatureExpiryStillControlsArrivalEvenAfterAskDeadline() (gas: 3906880)\n[PASS] testSwappedEarlyYesAndNoAnswersCannotBecomeVerdicts() (gas: 8130457)\n[PASS] testTimestampExtremesDoNotOverflowSkewCheck() (gas: 4339991)\n[PASS] testUnconfirmedDuplicateCannotReserveOrConsumeTheActualAsksUuid() (gas: 8142790)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 1.57s (2.78s CPU time)\n\nRan 1 test for test/FeaturedTransferInvariant.t.sol:FeaturedTransferInvariantTest\n[PASS] invariantEveryTokenIsAccountedForAndEveryCreditHasBacking() (runs: 256, calls: 128000, reverts: 0)\n\n╭-------------------------+------------------------+-------+---------+----------╮\n| Contract                | Selector               | Calls | Reverts | Discards |\n+===============================================================================+\n| FeaturedTransferHandler | advanceTime            | 11546 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | cancel                 | 11611 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | cancelAsCurrentOwner   | 11850 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | claim                  | 11725 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | deposit                | 11528 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | purchaseAsCurrentOwner | 11566 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | rotateRecipient        | 11577 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | settle                 | 11707 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | toggleCurrentListing   | 11731 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | transferListing        | 11629 | 0       | 0        |\n|-------------------------+------------------------+-------+---------+----------|\n| FeaturedTransferHandler | withdraw               | 11530 | 0       | 0        |\n╰-------------------------+------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 225820091276669328\n  Bound result 1473\n  Bound result 286186293615491085\n  Bound result 97\n  Bound result 1132\n  Bound result 495824\n  Bound result 595\n  Bound result 10444\n  Bound result 75015\n  Bound result 239\n  Bound result 11102\n  Bound result 3004\n  Bound result 11906\n  Bound result 546603\n  Bound result 37454916337858695\n  Bound result 348604\n  Bound result 320\n  Bound result 290740339967630715\n  Bound result 102\n  Bound result 1041\n  Bound result 65\n  Bound result 161545851962896838\n  Bound result 2667\n  Bound result 2\n  Bound result 34602677700046047\n  Bound result 224\n  Bound result 405158003080370527\n  Bound result 1455668719529169\n  Bound result 102\n  Bound result 130542032965347623\n  Bound result 1006543976599966\n  Bound result 7183\n  Bound result 12\n  Bound result 2678400\n  Bound result 19720556331765034\n  Bound result 65\n  Bound result 133304234428190692\n  Bound result 36803635479754237\n  Bound result 5888\n  Bound result 3871614074\n  Bound result 92\n  Bound result 3115\n  Bound result 5038\n  Bound result 10780\n  Bound result 64\n  Bound result 626814\n  Bound result 459248\n  Bound result 292539217066958302\n  Bound result 102\n  Bound result 9764761028258558\n  Bound result 5166\n  Bound result 659\n  Bound result 144\n  Bound result 168\n  Bound result 12067\n  Bound result 4966\n  Bound result 50634895284670879\n  Bound result 1954017187\n  Bound result 6030\n  Bound result 3000\n  Bound result 1000000000000000\n  Bound result 658321\n  Bound result 1014\n  Bound result 7851\n  Bound result 12345\n  Bound result 94\n  Bound result 20970704779629376\n  Bound result 250766565201069726\n  Bound result 5582074203448574\n  Bound result 63141518161494337\n  Bound result 115428911151845857\n  Bound result 95\n  Bound result 777598\n  Bound result 8699\n  Bound result 167934543576446635\n  Bound result 1\n  Bound result 79615831735745761\n  Bound result 2048\n  Bound result 131072\n  Bound result 239\n  Bound result 84\n  Bound result 6737048805\n  Bound result 284634302914454324\n  Bound result 176\n  Bound result 490\n  Bound result 84532\n  Bound result 81332986539268065\n  Bound result 584061\n  Bound result 448120919896\n  Bound result 1826\n  Bound result 3404\n  Bound result 17794162357734873\n  Bound result 252\n  Bound result 7037\n  Bound result 537820\n  Bound result 676730\n  Bound result 30\n  Bound result 244582105181900174\n  Bound result 2729\n  Bound result 1524\n  Bound result 139195097218399804\n  Bound result 268697\n  Bound result 2407\n  Bound result 295506664936804492\n  Bound result 144\n  Bound result 1964478451514920\n  Bound result 76826494098623668\n  Bound result 8551\n  Bound result 1792\n  Bound result 258\n  Bound result 210\n  Bound result 224\n  Bound result 448\n  Bound result 555710\n  Bound result 23432275544978165\n  Bound result 195902\n  Bound result 3067\n  Bound result 12\n  Bound result 19572\n  Bound result 11713\n  Bound result 1900\n  Bound result 38758911047606747\n  Bound result 4294967296\n  Bound result 256024\n  Bound result 4951892677004382\n  Bound result 54960701404759629\n  Bound result 9670\n  Bound result 154659669\n  Bound result 12517\n  Bound result 59108895537546375\n  Bound result 5608933574520423\n  Bound result 6657\n  Bound result 216\n  Bound result 6004\n  Bound result 6801454864269637\n  Bound result 141521116776380160\n  Bound result 653906675248\n  Bound result 9588\n  Bound result 2744\n  Bound result 20921691928391950\n  Bound result 11113\n  Bound result 6677\n  Bound result 315066\n  Bound result 37\n  Bound result 2069\n  Bound result 357706\n  Bound result 213845706268122588\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 26.07s (26.06s CPU time)\n\nRan 1 test for test/FeaturedInvariant.t.sol:FeaturedInvariantTest\n[PASS] invariantEveryTokenIsAccountedForAndEveryCreditHasBacking() (runs: 256, calls: 128000, reverts: 0)\n\n╭-----------------+-----------------+-------+---------+----------╮\n| Contract        | Selector        | Calls | Reverts | Discards |\n+================================================================+\n| FeaturedHandler | advanceTime     | 14053 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | cancel          | 14187 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | claim           | 14209 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | deposit         | 14094 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | purchase        | 14187 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | rotateRecipient | 14101 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | settle          | 14296 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | toggleListing   | 14538 | 0       | 0        |\n|-----------------+-----------------+-------+---------+----------|\n| FeaturedHandler | withdraw        | 14335 | 0       | 0        |\n╰-----------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 8791\n  Bound result 9318\n  Bound result 1624\n  Bound result 5806\n  Bound result 3792478064\n  Bound result 133180\n  Bound result 3964\n  Bound result 41\n  Bound result 7968\n  Bound result 23577192917924694\n  Bound result 85540\n  Bound result 289939\n  Bound result 30000\n  Bound result 720\n  Bound result 2\n  Bound result 100000000000000000\n  Bound result 139911\n  Bound result 195000\n  Bound result 248\n  Bound result 8164\n  Bound result 3939\n  Bound result 311022\n  Bound result 55\n  Bound result 1098161448\n  Bound result 30000000\n  Bound result 212910\n  Bound result 475\n  Bound result 2050420677\n  Bound result 584061\n  Bound result 956\n  Bound result 444890\n  Bound result 27\n  Bound result 41\n  Bound result 348604\n  Bound result 41\n  Bound result 164337593543950336\n  Bound result 200000\n  Bound result 277511596451062893\n  Bound result 72724351347617082\n  Bound result 55604069246240023\n  Bound result 28749173510940120\n  Bound result 64\n  Bound result 300\n  Bound result 36\n  Bound result 22595111\n  Bound result 336\n  Bound result 400\n  Bound result 3342869410561502\n  Bound result 6\n  Bound result 4754\n  Bound result 1633\n  Bound result 30000\n  Bound result 157198259\n  Bound result 8436046826597696\n  Bound result 7895\n  Bound result 1177\n  Bound result 871\n  Bound result 87\n  Bound result 8776\n  Bound result 7264\n  Bound result 4491\n  Bound result 292003956564819967\n  Bound result 4\n  Bound result 4088\n  Bound result 212855\n  Bound result 208\n  Bound result 785096068603109\n  Bound result 225146773\n  Bound result 223\n  Bound result 103418122632195338\n  Bound result 14346466075402469\n  Bound result 208\n  Bound result 103\n  Bound result 6\n  Bound result 16\n  Bound result 30\n  Bound result 16383\n  Bound result 75644250940394395\n  Bound result 322\n  Bound result 76038072236372397\n  Bound result 6145\n  Bound result 2274\n  Bound result 157198260\n  Bound result 279917\n  Bound result 229035837012967424\n  Bound result 16424072465412064\n  Bound result 18\n  Bound result 6569\n  Bound result 206948\n  Bound result 4381\n  Bound result 209967492117590365\n  Bound result 155631823579132689\n  Bound result 1800000000\n  Bound result 3809229177\n  Bound result 36\n  Bound result 448\n  Bound result 60000\n  Bound result 56\n  Bound result 3\n  Bound result 3600\n  Bound result 324\n  Bound result 172357989925515275\n  Bound result 768\n  Bound result 7868\n  Bound result 5\n  Bound result 5906\n  Bound result 63\n  Bound result 7328\n  Bound result 12420956096314298\n  Bound result 190000\n  Bound result 225684821632784055\n  Bound result 75644250940394395\n  Bound result 191206856778189459\n  Bound result 20256\n  Bound result 4114\n  Bound result 37454916337858695\n  Bound result 1000\n  Bound result 127035603870986413\n  Bound result 234095\n  Bound result 80\n  Bound result 459054890262582783\n  Bound result 2249\n  Bound result 160582627929692603\n  Bound result 2678400\n  Bound result 95051910212078418\n  Bound result 7015\n  Bound result 16300405249147273\n  Bound result 7672\n  Bound result 100\n  Bound result 3518789281\n  Bound result 230304381176537400\n  Bound result 643666665\n  Bound result 7149\n  Bound result 5261\n  Bound result 128\n  Bound result 9263\n  Bound result 2298\n  Bound result 8010\n  Bound result 123577196710178818\n  Bound result 8534\n  Bound result 3276341858\n  Bound result 14609269785723646\n  Bound result 1\n  Bound result 31337\n  Bound result 5164\n  Bound result 316964\n  Bound result 49518908592647628\n  Bound result 24671440193027842\n  Bound result 371636862\n  Bound result 72\n  Bound result 722578\n  Bound result 9067\n  Bound result 5037\n  Bound result 1024\n  Bound result 1056290820\n  Bound result 19384007006004500\n  Bound result 2967\n  Bound result 46630\n  Bound result 40\n  Bound result 103\n  Bound result 24\n  Bound result 2000\n  Bound result 190000\n  Bound result 138364216735888775\n  Bound result 561440\n  Bound result 19375814212309689\n  Bound result 200\n  Bound result 98\n  Bound result 579673\n  Bound result 172800\n  Bound result 41\n  Bound result 543452\n  Bound result 255444464034512895\n  Bound result 6484\n  Bound result 8180\n  Bound result 3110\n  Bound result 500\n  Bound result 251676137223155592\n  Bound result 532336032585278\n  Bound result 176\n  Bound result 113311920487266818\n  Bound result 93927912796468996\n  Bound result 1920\n  Bound result 957\n  Bound result 1569\n  Bound result 6353\n  Bound result 1086\n  Bound result 2993\n  Bound result 438314\n  Bound result 4\n  Bound result 168\n  Bound result 832300323010846005\n  Bound result 1803316289\n  Bound result 89\n  Bound result 798020860\n  Bound result 184\n  Bound result 2723\n  Bound result 334477\n  Bound result 645788\n  Bound result 313\n  Bound result 125169935154903511\n  Bound result 3\n  Bound result 3951\n  Bound result 519224\n  Bound result 1390386024848151\n  Bound result 360\n  Bound result 19\n  Bound result 40603142610881131\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 26.72s (26.72s CPU time)\n\nRan 31 test suites in 26.73s (67.07s CPU time): 358 tests passed, 0 failed, 0 skipped (358 total tests)\n","passed":true},{"durationMs":131,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"BoundedSwapHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"BoundedSwapHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"FeaturedPlacements.acceptOwnership()\",\"FeaturedPlacements.cancel(uint256)\",\"FeaturedPlacements.cancelOwnershipTransfer()\",\"FeaturedPlacements.configureToken(address)\",\"FeaturedPlacements.deposit(uint256)\",\"FeaturedPlacements.purchase(uint256,uint256,address,uint256)\",\"FeaturedPlacements.setProceedsRecipient(address)\",\"FeaturedPlacements.settle(uint256)\",\"FeaturedPlacements.transferOwnership(address)\",\"FeaturedPlacements.withdraw(uint256,address)\",\"FeaturedPlacements.withdrawProceeds(uint256,address)\",\"GatedHookDeployer.acceptOwnership()\",\"GatedHookDeployer.cancelOwnershipTransfer()\",\"GatedHookDeployer.deploy((bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,uint256,address,address,bytes32,uint160),bytes,bytes,bytes,bytes32,address)\",\"GatedHookDeployer.setManager(address,bytes32,bool)\",\"GatedHookDeployer.setMaxJobAge(uint64)\",\"GatedHookDeployer.transferOwnership(address)\",\"HookJobRequester.acceptOwnership()\",\"HookJobRequester.bindReview(bytes32,bytes32,bytes32,bytes32,uint256,uint64,uint64)\",\"HookJobRequester.cancelOwnershipTransfer()\",\"HookJobRequester.closeRevokedReviewReceipt(bytes32)\",\"HookJobRequester.confirmReviewExpiry(bytes32)\",\"HookJobRequester.discardMismatchedReviewReceipt(bytes32,bytes32,bytes32,bytes32,uint256,uint64,uint64)\",\"HookJobRequester.discardReviewReceipt(bytes32,bytes32,bytes32,bytes32,uint256,uint64,uint64)\",\"HookJobRequester.expireJob(bytes32)\",\"HookJobRequester.expireReview(bytes32)\",\"HookJobRequester.onJobFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"HookJobRequester.onJobResult(bytes32,bytes32,string)\",\"HookJobRequester.onReviewFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"HookJobRequester.onReviewResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"HookJobRequester.openJob(bytes32,bytes,uint256)\",\"HookJobRequester.releaseReservation(bytes32)\",\"HookJobRequester.requestReview(bytes32,uint256)\",\"HookJobRequester.resetReviewBinding(bytes32,bytes32)\",\"HookJobRequester.revokeSignerEpoch(uint32,bytes32)\",\"HookJobRequester.setFailureHook(bool)\",\"HookJobRequester.setIntake(address)\",\"HookJobRequester.setJobTemplate(bytes32,bytes,bytes,bytes)\",\"HookJobRequester.setOracleSigner(address)\",\"HookJobRequester.setPayment(address,uint256)\",\"HookJobRequester.setReviewTemplate(bytes32,bytes,bytes,uint16,uint16)\",\"HookJobRequester.setTimeouts(uint64,uint64)\",\"HookJobRequester.sweep(address,address,uint256)\",\"HookJobRequester.transferOwnership(address)\",\"HookListingRegistry.acceptListingOwnership(uint256)\",\"HookListingRegistry.cancelListingTransfer(uint256)\",\"HookListingRegistry.createListing(uint256,address,(string,string,string,string,string,uint160,string,string,string,string[]))\",\"HookListingRegistry.proposeListingOwner(uint256,address)\",\"HookListingRegistry.setListingActive(uint256,bool)\",\"HookListingRegistry.updateListing(uint256,(string,string,string,string,string,uint160,string,string,string,string[]))\",\"HooksStoreFactory.deploy((uint32,bytes32,uint256,address,bytes32,uint160,uint128),bytes32,address,bytes32)\"],\"files\":{\".gitignore\":6,\"LICENSE\":24,\"README.md\":169,\"dependencies.lock.json\":20,\"deployment/audited-build.json\":157,\"deployment/current-build.json\":196,\"deployment/ethereum.draft.json\":13,\"deployment/hook-templates.json\":222,\"deployment/manifest.json\":216,\"deployment/robinhood.draft.json\":13,\"deployment/sepolia.draft.json\":13,\"docs/AUDIT_1053AF02.md\":106,\"docs/AUDIT_5F43F94D.md\":94,\"docs/AUDIT_648BA2E5.md\":61,\"docs/AUDIT_6B607200.md\":76,\"docs/AUDIT_D9970905.md\":79,\"docs/AUDIT_EF1F6915.md\":127,\"docs/CHAINS.md\":35,\"docs/DEPENDENCIES.md\":22,\"docs/DEPLOYMENT.md\":88,\"docs/DEPLOYMENT_PREPARATION.md\":334,\"docs/GATED_DEPLOYMENT.md\":222,\"docs/HOOK_SPEC.md\":63,\"docs/IMD_INTEGRATION.md\":467,\"docs/LISTINGS_AND_ADS.md\":214,\"docs/STORE_API.md\":101,\"docs/THREAT_MODEL.md\":72,\"docs/VERIFICATION.md\":453,\"docs/build-fingerprints.json\":48,\"docs/checks/approval-binding/README.md\":113,\"docs/checks/approval-binding/assignment-seed.log\":70,\"docs/checks/approval-binding/build-identity.log\":68,\"docs/checks/approval-binding/build.log\":2508,\"docs/checks/approval-binding/cold-gas.log\":54,\"docs/checks/approval-binding/fixtures/approval.json\":1,\"docs/checks/approval-binding/fixtures/build-identity.json\":1,\"docs/checks/approval-binding/fixtures/completion.json\":1,\"docs/checks/approval-binding/fixtures/provenance.json\":9,\"docs/checks/approval-binding/fixtures/source.bundle\":1,\"docs/checks/approval-binding/fmt.log\":0,\"docs/checks/approval-binding/foundry.log\":969,\"docs/checks/approval-binding/green.log\":9,\"docs/checks/approval-binding/job.open.body.json\":1,\"docs/checks/approval-binding/job.open.check.json\":120,\"docs/checks/approval-binding/oracle.request.body.json\":1,\"docs/checks/approval-binding/oracle.request.check-input.json\":10,\"docs/checks/approval-binding/oracle.request.check.json\":88,\"docs/checks/approval-binding/oracle.request.draft-response.json\":1,\"docs/checks/approval-binding/oracle.request.first-body.json\":1,\"docs/checks/approval-binding/oracle.request.first-check.json\":92,\"docs/checks/approval-binding/oracle.request.rejected.json\":1,\"docs/checks/approval-binding/red-regression.sol.txt\":41,\"docs/checks/approval-binding/red.log\":20,\"docs/checks/approval-binding/sdk.log\":54,\"docs/checks/approval-binding/site-abi.log\":30,\"docs/checks/approval-binding/sources/adversarial-review.json\":1,\"docs/checks/approval-binding/sources/imd-docs.html\":764,\"docs/checks/approval-binding/sources/imd-docs.txt\":2437,\"docs/checks/approval-binding/sources/openapi.json\":1,\"docs/checks/approval-binding/sources/previous-job-result.json\":1,\"docs/checks/approval-binding/sources/provenance.json\":50,\"docs/checks/approval-binding/sources/research-report.json\":1,\"docs/checks/approval-binding/sources/skills.json\":1,\"docs/checks/approval-binding/sources/write-readme-and-docs.json\":1,\"docs/checks/approval-binding/summary.json\":89,\"docs/checks/deployment-preparation/README.md\":105,\"docs/checks/deployment-preparation/assignment-seed.log\":394,\"docs/checks/deployment-preparation/baseline-build.log\":2256,\"docs/checks/deployment-preparation/build.log\":2257,\"docs/checks/deployment-preparation/bytecode-unchanged.json\":56,\"docs/checks/deployment-preparation/capabilities.json\":376,\"docs/checks/deployment-preparation/cold-gas.log\":56,\"docs/checks/deployment-preparation/deployment-tests.log\":15,\"docs/checks/deployment-preparation/ethereum-preflight.json\":17,\"docs/checks/deployment-preparation/fmt.log\":3,\"docs/checks/deployment-preparation/forge-test.log\":392,\"docs/checks/deployment-preparation/launcher-recipe.json\":10,\"docs/checks/deployment-preparation/live-rpc.json\":551,\"docs/checks/deployment-preparation/local-dry-run.json\":665,\"docs/checks/deployment-preparation/local-dry-run.log\":39,\"docs/checks/deployment-preparation/local-requester-activation.json\":538,\"docs/checks/deployment-preparation/local-script-dry-runs.log\":90,\"docs/checks/deployment-preparation/official-observations.json\":77,\"docs/checks/deployment-preparation/official-recheck.log\":53,\"docs/checks/deployment-preparation/preflight-commands.json\":47,\"docs/checks/deployment-preparation/python-tests.log\":39,\"docs/checks/deployment-preparation/robinhood-preflight.json\":17,\"docs/checks/deployment-preparation/sdk.log\":21,\"docs/checks/deployment-preparation/sepolia-preflight.json\":17,\"docs/checks/deployment-preparation/site-abi.log\":31,\"docs/checks/gated-deployment/managers.json\":16,\"docs/checks/job-protocol-tuple/README.md\":112,\"docs/checks/job-protocol-tuple/assignment-seed-gas.log\":1494,\"docs/checks/job-protocol-tuple/build.log\":2256,\"docs/checks/job-protocol-tuple/cold-gas.log\":46,\"docs/checks/job-protocol-tuple/fmt.log\":0,\"docs/checks/job-protocol-tuple/foundry.log\":386,\"docs/checks/job-protocol-tuple/green.log\":60,\"docs/checks/job-protocol-tuple/implementation.patch\":998,\"docs/checks/job-protocol-tuple/red.log\":113,\"docs/checks/job-protocol-tuple/sdk.log\":15,\"docs/checks/job-protocol-tuple/site-abi.log\":26,\"docs/checks/job-protocol-tuple/tuple-tests.log\":30,\"docs/checks/job-protocol-tuple/vendored-retry.log\":1,\"docs/checks/job-protocol-tuple/vendored.log\":1,\"docs/checksums/FORMAT_ONLY.txt\":24,\"docs/checksums/UPSTREAM.sha256\":96,\"docs/checksums/VENDORED.sha256\":96,\"foundry.toml\":22,\"remappings.txt\":3,\"schemas/hook-approval.v1.schema.json\":13,\"schemas/hook-spec.v1.schema.json\":17,\"script/DeployHook.s.sol\":38,\"script/DeployHookJobRequester.s.sol\":86,\"script/DeployStore.s.sol\":19,\"script/check_request_body.py\":46,\"script/dry_run_deployment.py\":100,\"script/prepare_deployment.py\":67,\"script/recheck_gated_managers.sh\":21,\"script/recheck_official.py\":150,\"script/update_build_evidence.py\":53,\"script/verify-vendored.sh\":15,\"sdk/deployment.py\":453,\"sdk/gated_deploy.py\":157,\"sdk/hooks_store.py\":350,\"sdk/request_templates.py\":57,\"sdk/result_snapshot.py\":114,\"site/GatedHookDeployer.abi.json\":1492,\"site/HookJobRequester.abi.json\":2834,\"site/display-text.js\":7,\"site/index.html\":228,\"site/listings.html\":57,\"site/listings.js\":213,\"src/BoundedSwapHook.sol\":97,\"src/DisabledCallbacks.sol\":63,\"src/HookSpec.sol\":61,\"src/HooksStoreFactory.sol\":114,\"src/deployment/AcceptedArtifact.sol\":102,\"src/deployment/DeploymentPolicy.sol\":21,\"src/deployment/GatedHookDeployer.sol\":346,\"src/deployment/HookDeployment.sol\":44,\"src/deployment/HookMiner.sol\":63,\"src/deployment/ResultJson.sol\":209,\"src/imd/HookJobRequester.sol\":1081,\"src/imd/IIntake.sol\":27,\"src/imd/OracleAttestation.sol\":230,\"src/interfaces/IHooksStore.sol\":36,\"src/store/ExactStoreToken.sol\":48,\"src/store/FeaturedPlacements.sol\":270,\"src/store/HookListingRegistry.sol\":217,\"src/store/StoreAdmin.sol\":46,\"src/vendor/openzeppelin/LICENSE\":22,\"src/vendor/openzeppelin/interfaces/IERC1271.sol\":17,\"src/vendor/openzeppelin/interfaces/IERC5267.sol\":28,\"src/vendor/openzeppelin/interfaces/IERC7913.sol\":18,\"src/vendor/openzeppelin/utils/Bytes.sol\":247,\"src/vendor/openzeppelin/utils/Panic.sol\":57,\"src/vendor/openzeppelin/utils/ShortStrings.sol\":122,\"src/vendor/openzeppelin/utils/StorageSlot.sol\":143,\"src/vendor/openzeppelin/utils/Strings.sol\":515,\"src/vendor/openzeppelin/utils/cryptography/ECDSA.sol\":285,\"src/vendor/openzeppelin/utils/cryptography/EIP712.sol\":160,\"src/vendor/openzeppelin/utils/cryptography/MessageHashUtils.sol\":100,\"src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol\":162,\"src/vendor/openzeppelin/utils/math/Math.sol\":758,\"src/vendor/openzeppelin/utils/math/SafeCast.sol\":1162,\"src/vendor/openzeppelin/utils/math/SignedMath.sol\":68,\"test/AcceptedArtifact.t.sol\":214,\"test/ApprovalBindingRegression.t.sol\":127,\"test/AuditContextMismatchProof.t.sol\":444,\"test/AuditExpiryProof.t.sol\":168,\"test/AuditFixes.t.sol\":192,\"test/AuditReceiptConflictProof.t.sol\":197,\"test/DeployHookJobRequester.t.sol\":104,\"test/Deployment.t.sol\":329,\"test/FeaturedAdversarial.t.sol\":151,\"test/FeaturedInvariant.t.sol\":186,\"test/FeaturedPlacements.t.sol\":443,\"test/FeaturedTransfer.t.sol\":120,\"test/FeaturedTransferInvariant.t.sol\":80,\"test/GatedHookDeployer.t.sol\":620,\"test/HookIntegration.t.sol\":294,\"test/HookJobRequester.t.sol\":775,\"test/HookListingRegistry.t.sol\":265,\"test/JobProtocolTuple.t.sol\":220,\"test/OracleConformance.t.sol\":135,\"test/OracleSigner.t.sol\":125,\"test/RequesterMvpAudit.t.sol\":508,\"test/ReviewAuditRegression.t.sol\":295,\"test/ReviewBinding.t.sol\":359,\"test/ReviewDelivery.t.sol\":500,\"test/ReviewReceiptGas.t.sol\":284,\"test/ReviewReceiptPacking.t.sol\":99,\"test/ReviewRecovery.t.sol\":341,\"test/UriPilotGas.t.sol\":34,\"test/__init__.py\":1,\"test/helpers/Fixture.sol\":46,\"test/helpers/GeneratedHooks.sol\":85,\"test/helpers/ImdTemplates.sol\":16,\"test/helpers/MockIntake.sol\":127,\"test/helpers/MockVerdictRequester.sol\":29,\"test/helpers/PoolRouter.sol\":76,\"test/helpers/ReceiptSigners.sol\":75,\"test/helpers/StoreFixture.sol\":81,\"test/helpers/StoreTokenMock.sol\":82,\"test/helpers/TestToken.sol\":13,\"test/helpers/__init__.py\":1,\"test/helpers/local_rpc.py\":86,\"test/listings-reader.test.cjs\":108,\"test/requester-abi.test.cjs\":249,\"test/test_deployment_preparation.py\":210,\"test/test_gated_deploy.py\":147,\"test/test_receipts.py\":62,\"test/test_request_body_check.py\":55,\"test/test_request_templates.py\":70,\"test/test_result_snapshot.py\":96,\"test/test_store_sdk.py\":215},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":4761,"exitCode":0,"name":"slither","output":"[high/medium] incorrect-exp at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) has bitwise-xor operator ^ instead of the exponentiation operator **: \n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:315: Math.invMod(uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#315-363) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/vendor/openzeppelin/utils/math/Math.sol:204: Math.mulDiv(uint256,uint256,uint256) (src/vendor/openzeppelin/utils/math/Math.sol#204-275) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/store/FeaturedPlacements.sol:219: FeaturedPlacements.getPlacement(uint256) (src/store/FeaturedPlacements.sol#219-222) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/imd/HookJobRequester.sol:378: Reentrancy in HookJobRequester.requestReview(bytes32,uint256) (src/imd/HookJobRequester.sol#378-406):\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:1024: HookJobRequester._validateBrief(bytes).cp (src/imd/HookJobRequester.sol#1024) is a local variable never initialized\n[medium/medium] uninitialized-local at src/deployment/AcceptedArtifact.sol:74: AcceptedArtifact._approval(ResultJson.Document,bytes32,uint256).found (src/deployment/AcceptedArtifact.sol#74) is a local variable never initialized\n[medium/medium] uninitialized-local at src/deployment/ResultJson.sol:60: ResultJson.hashValue(ResultJson.Document,uint256).value (src/deployment/ResultJson.sol#60) is a local variable never initialized\n[medium/medium] uninitialized-local at src/imd/HookJobRequester.sol:1023: HookJobRequester._validateBrief(bytes).len (src/imd/HookJobRequester.sol#1023) is a local variable never initialized\n[medium/medium] uninitialized-local at src/deployment/AcceptedArtifact.sol:54: AcceptedArtifact._source(ResultJson.Document,bytes32).found (src/deployment/AcceptedArtifact.sol#54) is a local variable never initialized\n[medium/medium] unused-return at src/store/FeaturedPlacements.sol:104: FeaturedPlacements.configureToken(address) (src/store/FeaturedPlacements.sol#104-113) ignores return value by ExactStoreToken.balance(token,address(this)) (src/store/FeaturedPlacements.sol#110)\n[medium/medium] unused-return at src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol:44: SignatureChecker.isValidSignatureNowCalldata(address,bytes32,bytes) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#44-55) ignores return value by (recovered,err,None) = ECDSA.tryRecoverCalldata(hash,signature) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#50)\n[medium/medium] unused-return at src/imd/OracleAttestation.sol:159: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/imd/OracleAttestation.sol#159-174) ignores return value by (recovered,err,None) = ECDSA.tryRecoverCalldata(digest,signature) (src/imd/OracleAttestation.sol#169)\n[medium/medium] unused-return at src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol:32: SignatureChecker.isValidSignatureNow(address,bytes32,bytes) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#32-39) ignores return value by (recovered,err,None) = ECDSA.tryRecover(hash,signature) (src/vendor/openzeppelin/utils/cryptography/SignatureChecker.sol#34)\n[low/medium] reentrancy-benign at src/imd/HookJobRequester.sol:378: Reentrancy in HookJobRequester.requestReview(bytes32,uint256) (src/imd/HookJobRequester.sol#378-406):\n[low/medium] reentrancy-benign at src/store/FeaturedPlacements.sol:123: Reentrancy in FeaturedPlacements.deposit(uint256) (src/store/FeaturedPlacements.sol#123-131):\n[low/medium] reentrancy-benign at src/imd/HookJobRequester.sol:302: Reentrancy in HookJobRequester.openJob(bytes32,bytes,uint256) (src/imd/HookJobRequester.sol#302-324):\n[low/medium] return-bomb at src/deployment/GatedHookDeployer.sol:327: GatedHookDeployer.verifyDeployment(address,GatedHookDeployer.Artifact) (src/deployment/GatedHookDeployer.sol#327-339) tries to limit the gas of an external call that controls implicit decoding\n[low/medium] timestamp at src/imd/HookJobRequester.sol:806: HookJobRequester.confirmReviewExpiry(bytes32) (src/imd/HookJobRequester.sol#806-818) uses timestamp for comparisons\n[low/medium] timestamp at src/deployment/GatedHookDeployer.sol:265: GatedHookDeployer._checkApproval(GatedHookDeployer.Artifact,bytes,address) (src/deployment/GatedHookDeployer.sol#265-290) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/HookJobRequester.sol:360: HookJobRequester.expireJob(bytes32) (src/imd/HookJobRequester.sol#360-368) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/HookJobRequester.sol:786: HookJobRequester.expireReview(bytes32) (src/imd/HookJobRequester.sol#786-799) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:197: FeaturedPlacements.settle(uint256) (src/store/FeaturedPlacements.sol#197-206) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:145: FeaturedPlacements.purchase(uint256,uint256,address,uint256) (src/store/FeaturedPlacements.sol#145-173) uses timestamp for comparisons\n[low/medium] timestamp at src/imd/OracleAttestation.sol:159: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/imd/OracleAttestation.sol#159-174) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:224: FeaturedPlacements.isActive(uint256) (src/store/FeaturedPlacements.sol#224-227) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:177: FeaturedPlacements.cancel(uint256) (src/store/FeaturedPlacements.sol#177-194) uses timestamp for comparisons\n[low/medium] timestamp at src/store/FeaturedPlacements.sol:219: FeaturedPlacements.getPlacement(uint256) (src/store/FeaturedPlacements.sol#219-222) uses timestamp for comparisons","passed":true},{"durationMs":834,"exitCode":0,"name":"aderyn","output":"[high] abi-encode-packed-hash-collision at src/vendor/openzeppelin/utils/cryptography/MessageHashUtils.sol:63: `abi.encodePacked()` Hash Collision (2 places)\n[high] incorrect-caret-operator at src/vendor/openzeppelin/utils/math/Math.sol:257: Incorrect use of caret operator\n[high] incorrect-shift-order at src/deployment/HookMiner.sol:27: Incorrect Assembly Shift Parameter Order\n[high] reentrancy-state-change at src/imd/HookJobRequester.sol:312: Reentrancy: State change after external call (4 places)\n[high] reused-contract-name at src/vendor/openzeppelin/utils/math/SafeCast.sol:19: Contract Name Reused in Different Files\n[high] unsafe-casting at src/vendor/openzeppelin/utils/Strings.sol:432: Unsafe Casting of integers\n[low] centralization-risk at src/deployment/GatedHookDeployer.sol:151: Centralization Risk (22 places)\n[low] costly-loop at src/store/HookListingRegistry.sol:175: Costly operations inside loop (2 places)\n[low] ecrecover at src/vendor/openzeppelin/utils/cryptography/ECDSA.sol:191: `ecrecover` Signature Malleability\n[low] internal-function-used-once at src/HookSpec.sol:35: Internal Function Used Only Once (35 places)\n[low] large-numeric-literal at src/deployment/GatedHookDeployer.sol:62: Large Numeric Literal (3 places)\n[low] literal-instead-of-constant at src/deployment/AcceptedArtifact.sol:39: Literal Instead of Constant (239 places)\n[low] local-variable-shadowing at src/imd/HookJobRequester.sol:68: Local Variable Shadows State Variable (2 places)\n[low] modifier-used-only-once at src/deployment/GatedHookDeployer.sol:129: Modifier Invoked Only Once\n[low] non-reentrant-not-first at src/imd/HookJobRequester.sol:877: `nonReentrant` is Not the First Modifier (4 places)\n[low] push-zero-opcode at src/vendor/openzeppelin/interfaces/IERC1271.sol:4: PUSH0 Opcode (15 places)\n[low] require-revert-in-loop at src/deployment/AcceptedArtifact.sol:40: Loop Contains `require`/`revert` (15 places)\n[low] state-change-without-event at src/imd/HookJobRequester.sol:962: State Change Without Event\n[low] state-no-address-check at src/BoundedSwapHook.sol:43: Address State Variable Set Without Checks\n[low] state-variable-could-be-immutable at src/BoundedSwapHook.sol:21: State Variable Could Be Immutable (5 places)\n[low] unchecked-return at src/deployment/GatedHookDeployer.sol:253: Unchecked Return (7 places)\n[low] uninitialized-local-variable at src/deployment/AcceptedArtifact.sol:40: Uninitialized Local Variable (15 places)\n[low] unsafe-erc20-operation at src/store/ExactStoreToken.sol:43: Unsafe ERC20 Operation\n[low] unspecific-solidity-pragma at src/vendor/openzeppelin/interfaces/IERC1271.sol:4: Unspecific Solidity Pragma (4 places)\n[low] unused-public-function at src/deployment/GatedHookDeployer.sol:176: Public Function Not Used Internally (2 places)\n[low] unused-state-variable at src/deployment/GatedHookDeployer.sol:62: Unused State Variable","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"82822a7c29a69d8e19101cde0cb3592148b74403bac6d28391462ac7a36e5301","verifiedTreeHash":"2e4f109c383109a5a5b00b7356a0eb4c4f4cbc22","verifierVersion":"0.1.0+c3fba9eb"}]}