{"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":"149ae437-cf48-4b8f-aee2-7b8fa83d6502","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"e3ee72b13a9264706071f0404d5b89f63a6612eb85c33a2b8dd37b61569099c1","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 the public equipment-rental project from job d25b652e-88d6-4174-8901-da3f8707f6d8, delivered commit 14b7205477fc0b98d11f761f429c848a1b328316 in https://github.com/identity-md-launches/launch-1988-kkk.\n\nExisting contracts: RentalEscrow holds equipment-booking deposits, enforces reservation/return/cancellation rules, credits renter refunds, manages staff and records fee withdrawals by request ID. MockPaymentToken supplies local test tokens. Preserve both contracts and their existing rules; build no new contract.\n\nMake one targeted backend repair: its reconciliation command currently misses incomplete records and incorrect historical payment totals. Independent local testing reproduced all existing acceptance scenarios, but these three separate alterations of an otherwise valid snapshot still returned ok:true from shared/reconcile.ts:\n1. Delete a completed entry from feeRequests.\n2. Delete an enabled staff member from staff.\n3. Change totals.feesPaid from the actual amount paid to zero.\n\nFix the completeness check, not the rental rules. Keep contracts, existing Solidity tests, Foundry configuration/dependencies, CI, and the backend's pinned package versions unchanged. Do not replace the framework or redesign the backend in this job. Work within the actual assignment permissions; report a specific restriction if it prevents completion, without bypassing it.\n\nRequired behavior\n- Discover expected fee-request IDs and staff-state records independently of the snapshot being checked, using canonical escrow events from its configured deployment block through the SAME indexed block. Compare missing and unexpected entries as well as their values. Derive and verify cumulative refund/fee payment totals from authoritative events, including totals.refundsPaid and totals.feesPaid. Do not use the possibly incomplete projection or its history table as the sole source of expected identities/totals.\n- Preserve exact integer arithmetic, current-obligation and token-balance checks, and canonical block-hash checks before and after reconciliation. Detect inconsistent source data and fail visibly. Never repair the database silently or substitute latest-block state. Preserve handling of donations, duplicate/replayed RPC logs and short reorgs.\n- Add executable tests using real local Anvil transactions. Start with a valid reconciled baseline, then separately omit a completed fee request, omit an enabled staff member, alter feesPaid, and alter refundsPaid. Each corruption must be rejected, and the real reconciliation CLI must exit nonzero for these invalid snapshots while leaving the underlying projection untouched. Test an unexpected extra record and a valid staff revocation too. Valid data must still reconcile successfully.\n- Rerun existing unit/installer checks, typecheck, ABI check, formatting, live acceptance A-F, and the demo/restart/reconciliation flow. Preserve and rerun the 85 existing individual Foundry checks. Do not weaken existing tests to pass.\n- Document exactly what reconciliation now establishes and any remaining coverage limits. Record actual commands, versions, results and any checks not run. Clearly label partial or untested work.\n\nSafety and delivery\nSource-only GitHub delivery to this rental repository. Only synthetic rental data and disposable local Anvil chain 31337; all services on loopback. Backend remains read-only and has no keys or transaction capability. Only the existing guarded test harness may transact using public Anvil development accounts. No private repositories or documents, user credentials, funded wallets, public contracts, tunnels, cloud accounts, hosting, new paid jobs or deployments. No IMD configuration changes. This is a local development trial, not production approval.","parentJobId":"d25b652e-88d6-4174-8901-da3f8707f6d8","planHash":"76e4ccd742c0d65401f7e0d9e84296de583449f4113303a1031fc5df240edc34","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"0b32e9c2-5e73-434d-b219-5c39c759f59c","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1988-kkk"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51431","feedbackHash":"62292f560f6c9b0beb0ec05b45b2cff4c20839df67158d2ee0cfba6d4eb94667","nodeKey":"build_contract_project","submissionHash":"e3ee72b13a9264706071f0404d5b89f63a6612eb85c33a2b8dd37b61569099c1","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"04cb2890dc06165a21d6ecd9b168d285d21a2d4f0f78008906dbc4b2b88a9e26","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"a3bacc262861377348207a78e56c862cb300a23f4614c477dcebee99944d28ce","device":"74f6c6912a376f27","findings":[],"hash":"e3ee72b13a9264706071f0404d5b89f63a6612eb85c33a2b8dd37b61569099c1","nodeId":"494a5c92-525b-478e-9753-1f1847c7c4f5","outcome":"completed","summary":"Implemented independent event-based reconciliation for fee/staff completeness and cumulative payment totals. Invalid snapshots now fail the real CLI without changing the projection.\n\nAll required checks passed: 85 Foundry checks with the requested seed, 9 unit tests, 4 installer tests, build, typecheck, ABI, formatting, live A–F, and demo/restart/reconciliation.\n\nContracts and protected configuration/dependencies remain unchanged.\n\n[Validation report and coverage limits](/home/imd-worker/.identitymd/work/149ae437-cf48-4b8f-aee2-7b8fa83d6502/494a5c92-525b-478e-9753-1f1847c7c4f5/docs/RECONCILIATION-REPAIR.md)","treeHash":"fa4f3b48a74e1cdf5a3d5262f7dc11b1699a6ae5","usage":{"cachedInputTokens":3636480,"inputTokens":121812,"model":"gpt-6-astra","outputTokens":35213,"runtime":"codex","turns":9,"wallClockMs":1039767}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7a2710990fabf59a","findings":[],"hash":"eb0e72a22fed99c682a317fa91a74c662901470067e590d879d7b1eeab147639","nodeId":"494a5c92-525b-478e-9753-1f1847c7c4f5","outcome":"failed","summary":"{\"type\":\"error\",\"status\":400,\"error\":{\"type\":\"invalid_request_error\",\"message\":\"The 'gpt-6.1-sol' model is not supported when using Codex with a ChatGPT account.\"}}","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":5473}}],"verification":[{"checks":[{"durationMs":2884,"exitCode":0,"name":"build","output":"Compiling 46 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.81s\nCompiler run successful!\n","passed":true},{"durationMs":1065,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/invariant/RentalEscrowHandler.t.sol:RentalEscrowHandlerTest\n[PASS] test_cancel_maximumSeedDoesNotOverflowHandler() (gas: 5029700)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.16ms (922.39µs CPU time)\n\nRan 4 tests for test/MockPaymentToken.t.sol:MockPaymentTokenTest\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 111369, ~: 112125)\nLogs:\n  Bound result 594165202044\n\n[PASS] test_fixedSupplyMintedToHolder() (gas: 40449)\n[PASS] test_metadata() (gas: 31712)\n[PASS] test_rejectsZeroHolder() (gas: 3695)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 7.56ms (7.46ms CPU time)\n\nRan 13 tests for test/WithdrawalRecovery.t.sol:WithdrawalRecoveryTest\n[PASS] testFuzz_feeRetry_arbitraryIdAmountAndConflictingPayload(bytes32,uint256,uint256,address) (runs: 256, μ: 1126257, ~: 1126815)\nLogs:\n  Bound result 5000000\n\n[PASS] test_feeLookup_unusedRequest() (gas: 16169)\n[PASS] test_feeRetry_conflictingAmountRejected() (gas: 1008099)\n[PASS] test_feeRetry_conflictingRecipientRejected() (gas: 1022555)\n[PASS] test_feeRetry_oldIdProtectedAfterNewFeesAccrue() (gas: 1026360)\n[PASS] test_feeRetry_survivesAdminHandover() (gas: 1418870)\n[PASS] test_feeRetry_tenEarnedFiveRequestedPaysOnce_newIdPaysRemainder() (gas: 1297138)\n[PASS] test_feeWithdrawal_falseTransferRollsBackAndSameIdCanRetry() (gas: 1192235)\n[PASS] test_feeWithdrawal_insufficientFeesDoesNotConsumeId() (gas: 665563)\n[PASS] test_feeWithdrawal_legacySelectorCannotBypassRequestId() (gas: 489636)\n[PASS] test_feeWithdrawal_requiresNonzeroId() (gas: 513153)\n[PASS] test_feeWithdrawal_revertedTransferRollsBackAndSameIdCanRetry() (gas: 1191711)\n[PASS] test_refundRecovery_interveningSettlementPaysOnlyNewAggregateCredit() (gas: 1123254)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 97.63ms (30.28ms CPU time)\n\nRan 47 tests for test/RentalEscrow.t.sol:RentalEscrowTest\n[PASS] test_adminHandover_cancelPending() (gas: 110437)\n[PASS] test_adminHandover_twoStep() (gas: 210261)\n[PASS] test_cancel_afterCheckoutReverts() (gas: 399863)\n[PASS] test_cancel_boundary_lastSecondOkExactExpiryRejected() (gas: 629540)\n[PASS] test_cancel_creditsDepositMinusFee() (gas: 605010)\n[PASS] test_cancel_onlyRenter() (gas: 416150)\n[PASS] test_cancel_twiceReverts() (gas: 478652)\n[PASS] test_cancel_unknownReservation() (gas: 34754)\n[PASS] test_cancel_withFullFeePolicyCreditsNothing() (gas: 598961)\n[PASS] test_cancel_withZeroFeePolicyCreditsEverything() (gas: 538782)\n[PASS] test_checkOut_afterCancelReverts() (gas: 474306)\n[PASS] test_checkOut_boundary_rejectedAtExpiry() (gas: 447475)\n[PASS] test_checkOut_byStaff() (gas: 442551)\n[PASS] test_checkOut_twiceReverts() (gas: 397949)\n[PASS] test_checkOut_unauthorizedCallers() (gas: 409564)\n[PASS] test_confirmReturn_creditsFullDeposit() (gas: 585826)\n[PASS] test_confirmReturn_requiresRentedStatus() (gas: 358364)\n[PASS] test_confirmReturn_twiceReverts_singleCredit() (gas: 507354)\n[PASS] test_confirmReturn_unauthorized() (gas: 423890)\n[PASS] test_constructor_revertsOnZeroAddresses() (gas: 6107)\n[PASS] test_constructor_setsTokenAndAdmin() (gas: 33599)\n[PASS] test_createPolicy_validation() (gas: 333197)\n[PASS] test_delistingDuringReservation_doesNotBreakLifecycle() (gas: 549074)\n[PASS] test_expire_byAnyoneAtExpiry() (gas: 904182)\n[PASS] test_expire_cancelledOrUnknownReverts() (gas: 495012)\n[PASS] test_expire_longAfterExpiryStillWorksOnce() (gas: 475852)\n[PASS] test_expire_rentedItemsNeverExpire() (gas: 401421)\n[PASS] test_fullLifecycle_itemReusedAcrossManyRentals() (gas: 2312696)\n[PASS] test_items_adminManagement() (gas: 370704)\n[PASS] test_policyChange_doesNotAffectExistingReservation() (gas: 984625)\n[PASS] test_reserve_competing_secondRenterRejected() (gas: 402534)\n[PASS] test_reserve_feeOnTransferTokenIsRejected() (gas: 906194)\n[PASS] test_reserve_happyPath() (gas: 466137)\n[PASS] test_reserve_insufficientAllowanceOrBalanceTakesNothing() (gas: 736004)\n[PASS] test_reserve_rejectsStalePolicyQuote() (gas: 183775)\n[PASS] test_reserve_rejectsUnknownOrDelistedItem() (gas: 127542)\n[PASS] test_reserve_rejectsZeroRef() (gas: 41926)\n[PASS] test_reserve_retryWithSameRefRevertsAndNamesReservation() (gas: 822038)\n[PASS] test_reserve_sameRefDifferentRentersAreIndependent() (gas: 705866)\n[PASS] test_setStaff_onlyAdmin() (gas: 121884)\n[PASS] test_staffRevocation_isImmediate() (gas: 689368)\n[PASS] test_views_revertOnUnknownReservation() (gas: 25884)\n[PASS] test_withdrawFees_adminOnlyAndBounded() (gas: 1005974)\n[PASS] test_withdrawFees_cannotReachEscrowedDeposits() (gas: 383064)\n[PASS] test_withdrawRefund_accumulatesAcrossReservations() (gas: 899675)\n[PASS] test_withdrawRefund_isPerBeneficiary() (gas: 508823)\n[PASS] test_withdrawRefund_paysOnceOnly() (gas: 623888)\nSuite result: ok. 47 passed; 0 failed; 0 skipped; finished in 97.66ms (9.03ms CPU time)\n\nRan 9 tests for test/RentalEscrowFuzz.t.sol:RentalEscrowFuzzTest\n[PASS] testFuzz_competingReservations(address,address,bytes32,bytes32) (runs: 256, μ: 931520, ~: 931600)\n[PASS] testFuzz_duplicateActionsSettleOnce(uint8,uint64) (runs: 256, μ: 676556, ~: 671587)\nLogs:\n  Bound result 2\n  Bound result 6106\n\n[PASS] testFuzz_expiryBoundary_cancelVsExpire(uint256,uint256,uint64,uint64) (runs: 256, μ: 779414, ~: 766798)\nLogs:\n  Bound result 458701915\n  Bound result 139130780\n  Bound result 2188510\n  Bound result 0\n\n[PASS] testFuzz_feeWithdrawalBounded(uint256,uint8,uint8) (runs: 256, μ: 2701538, ~: 2663536)\nLogs:\n  Bound result 2\n  Bound result 7\n  Bound result 440325150\n\n[PASS] testFuzz_policyChangeDoesNotLeak(uint256,uint256,uint64,uint256,uint256,uint64,bool) (runs: 256, μ: 1120028, ~: 1126634)\nLogs:\n  Bound result 147846028\n  Bound result 61509211\n  Bound result 111107\n  Bound result 81456733\n  Bound result 0\n  Bound result 975614\n\n[PASS] testFuzz_refundRetries(uint8,bool) (runs: 256, μ: 3008088, ~: 936873)\n[PASS] testFuzz_rentedNeverExpires(uint256,uint256,uint64,uint64) (runs: 256, μ: 681992, ~: 683724)\nLogs:\n  Bound result 7830\n  Bound result 1\n  Bound result 1\n  Bound result 15\n\n[PASS] testFuzz_reserve_exactDepositAndSnapshot(uint256,uint256,uint64,bytes32) (runs: 256, μ: 572562, ~: 574863)\nLogs:\n  Bound result 701375685\n  Bound result 371508366\n  Bound result 1\n\n[PASS] testFuzz_unauthorizedCallersRejected(address,uint8) (runs: 256, μ: 667035, ~: 648665)\nLogs:\n  Bound result 0\n\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 97.68ms (656.90ms CPU time)\n\nRan 3 tests for test/Scripts.t.sol:ScriptsTest\n[PASS] test_deploy_rejectsZeroConfig() (gas: 3443102)\n[PASS] test_deploy_wiresTokenAndEscrow() (gas: 6022019)\n[PASS] test_seed_createsDemoStateAndFundsRenter() (gas: 8827469)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 97.63ms (1.21ms CPU time)\n\nRan 1 test for test/invariant/RentalEscrowInvariant.t.sol:RentalEscrowInvariantTest\n[PASS]\nRentalEscrowInvariantTest invariants:\n[PASS] invariant_adminUnchanged\n[PASS] invariant_balanceCoversLiabilities\n[PASS] invariant_balanceEqualsLiabilities\n[PASS] invariant_conservationOfDeposits\n[PASS] invariant_oneActiveReservationPerItem\n[PASS] invariant_refundCreditsSum\n[PASS] invariant_reservationHistoryIsConsistent\n[PASS] invariant_settlementTotalsMatch\n RentalEscrowInvariantTest invariants (runs: 64, calls: 3072, reverts: 0)\n\n╭---------------------+-----------------------+-------+---------+----------╮\n| Contract            | Selector              | Calls | Reverts | Discards |\n+==========================================================================+\n| RentalEscrowHandler | cancel                | 252   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | checkOut              | 245   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | checkOutByStranger    | 225   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | confirmReturn         | 214   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | createPolicyAndAssign | 223   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | expire                | 246   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | reserve               | 223   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | reserveDuplicateRef   | 239   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | toggleListing         | 238   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | toggleStaff           | 261   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | warp                  | 243   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | withdrawFees          | 236   | 0       | 0        |\n|---------------------+-----------------------+-------+---------+----------|\n| RentalEscrowHandler | withdrawRefund        | 227   | 0       | 0        |\n╰---------------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 4331\n  Bound result 11711637\n  Bound result 4826\n  Bound result 6\n  Bound result 246370441\n  Bound result 7418212\n  Bound result 1396\n  Bound result 86400000\n  Bound result 10800\n  Bound result 8628\n  Bound result 723\n  Bound result 3600\n  Bound result 6420\n  Bound result 9\n  Bound result 7\n  Bound result 47607319\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 984.48ms (982.24ms CPU time)\n\nRan 7 test suites in 986.68ms (1.38s CPU time): 78 tests passed, 0 failed, 0 skipped (78 total tests)\n","passed":true},{"durationMs":47,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MockPaymentToken.approve(address,uint256)\",\"MockPaymentToken.transfer(address,uint256)\",\"MockPaymentToken.transferFrom(address,address,uint256)\",\"RentalEscrow.acceptAdmin()\",\"RentalEscrow.addItem(uint64,string)\",\"RentalEscrow.cancel(uint256)\",\"RentalEscrow.checkOut(uint256)\",\"RentalEscrow.confirmReturn(uint256)\",\"RentalEscrow.createPolicy(uint256,uint256,uint64)\",\"RentalEscrow.expire(uint256)\",\"RentalEscrow.reserve(uint256,uint64,bytes32)\",\"RentalEscrow.setItemListed(uint256,bool)\",\"RentalEscrow.setItemMetadata(uint256,string)\",\"RentalEscrow.setItemPolicy(uint256,uint64)\",\"RentalEscrow.setStaff(address,bool)\",\"RentalEscrow.transferAdmin(address)\",\"RentalEscrow.withdrawFees(bytes32,address,uint256)\",\"RentalEscrow.withdrawRefund()\"],\"files\":{\".gitignore\":20,\"README.md\":298,\"docs/BACKEND-TRIAL.txt\":261,\"docs/INTEGRATION.md\":329,\"docs/RECONCILIATION-REPAIR.md\":158,\"docs/TEST-RESULTS.md\":259,\"foundry.toml\":42,\"indexer/.env.example\":3,\"indexer/README.md\":345,\"indexer/abis/MockPaymentToken.ts\":353,\"indexer/abis/RentalEscrow.ts\":1412,\"indexer/config.example.json\":9,\"indexer/evidence/acceptance.json\":1,\"indexer/evidence/bundle-repair.json\":25,\"indexer/evidence/checks.json\":127,\"indexer/evidence/demo-acceptance.json\":1,\"indexer/evidence/demo-restart.txt\":3,\"indexer/evidence/example-reservation.json\":1,\"indexer/evidence/example-snapshot.json\":1,\"indexer/evidence/framework-recovery.txt\":24,\"indexer/evidence/reconciliation-acceptance.json\":300,\"indexer/evidence/reconciliation-checks.json\":62,\"indexer/evidence/reconciliation-demo.json\":291,\"indexer/package-lock.json\":2906,\"indexer/package.json\":31,\"indexer/ponder-env.d.ts\":15,\"indexer/ponder.config.ts\":36,\"indexer/ponder.schema.ts\":17,\"indexer/scripts/abi.mjs\":34,\"indexer/scripts/install.mjs\":146,\"indexer/scripts/reconcile.ts\":19,\"indexer/scripts/runtime.mjs\":202,\"indexer/scripts/start.mjs\":120,\"indexer/scripts/trace-modules.mjs\":22,\"indexer/scripts/vendor-cache.mjs\":17,\"indexer/scripts/vendor-runtime.py\":139,\"indexer/shared/config.ts\":116,\"indexer/shared/domain.ts\":310,\"indexer/shared/reconcile-events.ts\":116,\"indexer/shared/reconcile.ts\":185,\"indexer/shared/status.ts\":77,\"indexer/shared/transport.ts\":59,\"indexer/src/api/index.ts\":152,\"indexer/src/index.ts\":62,\"indexer/tests/acceptance.ts\":941,\"indexer/tests/harness.ts\":343,\"indexer/tests/install.test.mjs\":132,\"indexer/tests/unit.test.ts\":285,\"indexer/tsconfig.json\":16,\"indexer/vendor/README.md\":85,\"indexer/vendor/manifest.json\":2285,\"indexer/vendor/runtime-selection.json\":2718,\"indexer/vendor/runtime.sha256\":1,\"remappings.txt\":2,\"script/Deploy.s.sol\":51,\"script/Seed.s.sol\":73,\"script/demo.sh\":178,\"src/MockPaymentToken.sol\":30,\"src/RentalEscrow.sol\":532,\"test/MockPaymentToken.t.sol\":40,\"test/RentalEscrow.t.sol\":906,\"test/RentalEscrowFuzz.t.sol\":331,\"test/Scripts.t.sol\":74,\"test/WithdrawalRecovery.t.sol\":307,\"test/invariant/RentalEscrowHandler.sol\":283,\"test/invariant/RentalEscrowHandler.t.sol\":25,\"test/invariant/RentalEscrowInvariant.t.sol\":141,\"test/utils/EscrowTestBase.sol\":60},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":true}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e3ee72b13a9264706071f0404d5b89f63a6612eb85c33a2b8dd37b61569099c1","verifiedTreeHash":"fa4f3b48a74e1cdf5a3d5262f7dc11b1699a6ae5","verifierVersion":"0.1.0+745c1db4"}]}