{"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":"0fa911d8-3f31-493c-8c41-87e5099f7c7a","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"5ab022b0042587e9953cf43117bb786ebb5e40ae0009c151b770752eddee1671","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"ea5db8ea23a93d7611f9ab749d6255ad6596ee76a985c1261d43e63612dfc3cf","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"ea5db8ea23a93d7611f9ab749d6255ad6596ee76a985c1261d43e63612dfc3cf","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"0cfa492f26d2f183f6605c0d6ace9489cb9cf4793c58a170ad62caa002d1e5be","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"ddce9200d51ecd29175283af26df650886cfbaaf9a03c6c92630d812ad2d6b69","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"52271c6f8a7c8c031608f305ddcedafd50b4ea23ddbf585dbbe34c798c74e53b","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b72293c3366fff3f0b93151bca72cc6cbd189dad31d1ccd1d34dd483f2165a36","skillId":"audit-imported-code","subagents":4,"tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"b72293c3366fff3f0b93151bca72cc6cbd189dad31d1ccd1d34dd483f2165a36","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":"bb7d8e6310fffdbb7eef9028c5ca068fb048140f033a0f3f1e4fbfc244d51d6c","dependsOn":["adapt_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","subagents":4,"tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"d0f7b4ec3eaebc83bc8cc19365b0aa97914aef3ae1ae3a4a86b18add1537570c","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"58f0a90d21d2d8409c045e4946c1f94ebecce01a304e8c0d83800493db1e4359","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"7a34ba4393407453071f9dbcafdf8f2166779035034cbce11da2a30a8dc37c1f","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"62833376e6dc57f03089fbce1fb103b8b6c3c722ec60141def01ddf64c4c4118","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","subagents":4,"tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Launch PLEA on Ethereum mainnet from this Foundry repository exactly as launch.json lists it: five contracts (PLEA, CabalGate, Seasons, PleaDistributor, PleaLaunch), deployed in order in one transaction with the constructor arguments in launch.json. Everything the job needs is in this repository: the code, its spec (README.md, OBJECTIONS.md), the threat model and the findings ledger (audit/). The same contracts, with test settings, ran live on Sepolia for five days (approved and denied pleas and letters, sales, objections sustained and overruled, a season prize, the Cabal's death and the free market after it). Two code differences: PleaHook.MARKET_CAP_IMD is 20,000 IMD (5,700 on Sepolia), and the need is retuned for mainnet (CabalGate.PASS_MARK 69, was 71; holding points 3/2/1, were 7/4/2; PLEA no buy record covers at profit 9, was 10); on chain id 1 PleaLaunch.seed refuses a market cap under 14,000 IMD, a season under 15 days or a dead-man under 33 hours. Mainnet settings in launch.json: IMD 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 is both the pool currency and the oracle fee asset, so the mint flag is 0 (the Letterbox buys the 0.5 IMD oracle fee and the 0.25 IMD tip with the writer's PLEA; a hand plea, an appeal and an objection pay the fee in IMD); Uniswap v4's PoolManager 0x000000000004444c5dc75cB358380D2e3dE08A90; imd/acc's Stacker 0x06909f672301f28a810f78cfe7a754851269f4f0 with credit gas 400000 (the 0.5% cashback is staked through it, or paid in plain IMD if the credit reverts); the seat NFT identity.md 0x0000ec93127baa929e58e97dd0095a2bfb38ec1d (Seasons' fourth argument: 1.2x points for holders); seasons 1296000 s (15 days), dead-man 118800 s (33 hours), START 1795532400 (anyone may seed from then, PLEA's owner earlier). The owner (this job's owner) receives the hook's 1% owner fee, sets the distributor's Merkle root once, and is excluded from points, prizes and the bonus. The rules: fees 2.25% (0.5% cashback, 1% owner, 0.25% prize pot, 0.25% wall, 0.25% of the PLEA burned); a plea of 1% to 50% of the balance or 2.5M PLEA, judged by a panel of 30 (quorum 17, score 0-45); letters plead 20%; fact score 0-41: share sold at most 20%: 16, at most 35%: 9, more: 3; held 7 days: 3, 3 days: 2, 1 day: 1; at a loss: 13, gain at most 50%: 12, 200%: 10, 500%: 8, 1,000%: 6, more: 4; PLEA no buy record covers: held since trading opened, at profit 9; 24h trend up: 9, flat: 5, down: 0; need = 69 - fact (CannotPass above 45); every fix of the earlier audits, each listed with its fix in audit/FINDINGS.md; the Letterbox and Objection! (src/Tribunal.sol, spec OBJECTIONS.md) deployed after the launch through PleaLaunch.deployLetterbox and deployTribunal against the hashes committed as its 12th and 13th arguments: for 20 minutes after an approval anyone except the seller and the excluded wallets may object (the 0.5 oracle fee and a 0.35 IMD stake); sustained when newScore + 2 < need (no points, stake back), otherwise overruled (stake to the plea's season pot); no answer within 20 minutes voids it (stake back); the recorded score is the lowest any panel gave; at most two objections per plea, from different wallets; cap decay 15 days to the 900,000 PLEA floor, the wall guard 700 ticks a day, the 82/6/12 split, six bonus seasons of 10,000,000 PLEA, top 25 from 450 to 350 bps. Build: a bare forge build compiles src, script and the launch-manifest suites in test/ (about 1 GB, under two minutes); a new test file goes in test/ and joins that build. The suite (852 tests in 91 suites) lives in test/full/ and the forks in test/fork/, both skipped by the default profile: run them with FOUNDRY_PROFILE=full forge test --match-path 'test/full/{A,B}.t.sol' a few files at a time (the forks skip without their RPC URL variables; test/fork/ForkMainnet.t.sol rehearses buys and letters against the real IMD, sIMD, PoolManager, Intake v2 and Stacker); never FOUNDRY_PROFILE=full forge build of the whole tree (several GB of memory, over a 10-minute limit); test/LaunchManifest.t.sol ties launch.json to both committed code hashes and asserts the launch fits the 16,777,216-gas cap with your factory's 22% headroom (13,489,877 as charged, 16,457,649 with headroom, 319,567 under). Audit the imported code and deploy it unchanged; fix only what the audit proves is a real bug, and keep every number as it is (timings, panel 30, quorum 17, 15-day seasons, 33-hour dead-man, START 1795532400, credit gas 400000, the 20,000 IMD market cap, pass mark 69, fees 2.25%, letters 20%, the fact table above, plea 1% to 50% or 2.5M, 0.70 IMD minimum plea value, 95% sale minimum, fee cap +10%, objection window 20 minutes, stake 0.35 IMD, margin 2, two objections per plea). If you change the Letterbox or the Tribunal, update its code hash in launch.json. Runtime sizes: PleaHook 24,381 bytes (195 under the EIP-170 limit), CabalGate 24,018, Letterbox 23,255, Tribunal 21,654, Seasons 12,473: keep any fix within them. Keep PLEA.setLauncher accepting either the deploy-transaction flag or PLEA's deployment block, and keep foundry.toml as it is, including the default profile's skip list, [lint] lint_on_build = false and the read-only fs_permissions for ./out and ./launch.json.","parentJobId":null,"planHash":"8a4051df522701637e7b171f4c26a50d9d1d99021a53a2d9ee0d038a52f22102","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"0fa911d8-3f31-493c-8c41-87e5099f7c7a","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2647-src-cabalgate-sol-src-tribunal-sol-src-p"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"50970","feedbackHash":"0e57a6700fd1737f3eb2032847b4d79e7a081490a5a94c93fc59927215d1a14a","nodeKey":"adapt_contract_project","submissionHash":"5ab022b0042587e9953cf43117bb786ebb5e40ae0009c151b770752eddee1671","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51214","feedbackHash":"4e4401cde1a020a527a7e285072a4943a961e7993345423277ef586fe0445ba3","nodeKey":"audit_economics","submissionHash":"0cfa492f26d2f183f6605c0d6ace9489cb9cf4793c58a170ad62caa002d1e5be","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52706","feedbackHash":"e2f3d9f09595f00f26cb4b6d151860b8482abd6cddc838bc5c9396879de6c334","nodeKey":"audit_flow","submissionHash":"ddce9200d51ecd29175283af26df650886cfbaaf9a03c6c92630d812ad2d6b69","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51060","feedbackHash":"c3e99ed7a9c15dcf3f60b57d0600ab8324b1c71275c2958e40c51ad80cf4dd66","nodeKey":"audit_imported_code","submissionHash":"52271c6f8a7c8c031608f305ddcedafd50b4ea23ddbf585dbbe34c798c74e53b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52232","feedbackHash":"d5299c4a099f873fbd5d5185957b6919af1e13735e959ce9c65ba0cab3818ed8","nodeKey":"audit_judge","submissionHash":"bb7d8e6310fffdbb7eef9028c5ca068fb048140f033a0f3f1e4fbfc244d51d6c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52660","feedbackHash":"cfee4026f85d8092c8e9cc46e7c31a04d3ddbc0b1baf669ea0a3955339f9b6e2","nodeKey":"audit_math","submissionHash":"d0f7b4ec3eaebc83bc8cc19365b0aa97914aef3ae1ae3a4a86b18add1537570c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51317","feedbackHash":"08976606c47c207bb0b4d6397fe6119930fccb9586a392f65b65fdd5926e5f56","nodeKey":"audit_permissions","submissionHash":"58f0a90d21d2d8409c045e4946c1f94ebecce01a304e8c0d83800493db1e4359","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52120","feedbackHash":"d8de2241b06cd5f81dc0d7026dca93ed0b7bbd060646fb48f6f883a2fbe91b1b","nodeKey":"manifest","submissionHash":"7a34ba4393407453071f9dbcafdf8f2166779035034cbce11da2a30a8dc37c1f","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51570","feedbackHash":"640a191ced753e30d546172fbc12b1c2cd12a0bc62a1927138b92de948607c71","nodeKey":"write_foundry_tests","submissionHash":"62833376e6dc57f03089fbce1fb103b8b6c3c722ec60141def01ddf64c4c4118","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"6ec0d1100ed8fe963a4a1119c2460bbcf009f27ad562b1bc9ec0244d1de82c6b","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dd2ee4882a1be950","findings":[],"hash":"0cfa492f26d2f183f6605c0d6ace9489cb9cf4793c58a170ad62caa002d1e5be","nodeId":"1450c8d1-f968-4a94-9d62-cd330458ef83","outcome":"completed","summary":"The review is complete. The findings file is written and no repository file was changed.\n\n**Outcome:** no reproducible economic defect found. The file `.imd-findings.json` holds an empty findings list and a coverage record of 59 rows: one for each of the 56 listed entry points, all `holds`, plus three invariant rows I checked directly.\n\n**What I covered, against the Economic Security, Invariant and Flow Gap guides:**\n\n- **Value flows.** The 2.25% fee split in the hook, the launch extra fee, the opening-buy exception keyed on the pool's own IMD, cashback claims fallback, the cap ratchet and trim, and the wall reserve. The wall's IMD never leaves the pool and the Stacker allowance is per credit.\n- **Conservation laws.** Seasons' accounted pot stays equal to open season fees plus rollover across every writer, including a repeat flush after a late overruled stake. The Letterbox holds exactly one 0.25 IMD tip per open escrow because the fee sale delivers exactly the IMD the gate then pulls. Each Tribunal stake leaves once, to the objector or to the plea's season.\n- **Flow seams.** Letter fee sale before the oracle request, escrow close before the gate sale, lapsed approvals recorded on settle, objection hold versus the one-hour close grace, and the dead-man reset only by plea verdicts.\n- **Arithmetic I re-derived.** The prize share table sums to 10,000 basis points. A letter's fee sale needs about 0.77 of the snapshot value against the 1.1 cap. The mainnet fact table gives a maximum of 41 and a lowest need of 28, matching the documented numbers.\n\n**Not reached in depth:** the Uniswap v4 tick and liquidity arithmetic inside the hook's seed and rebalance was traced at the flow level only, not re-derived numerically. Everything I examined that looked unusual is already an accepted entry in the findings ledger, such as the min-of-panels objection economics, the hourly checkpoint timing and share-band padding by buying first.","treeHash":null,"usage":{"cachedInputTokens":1078323,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":37838,"runtime":"claude","turns":21,"wallClockMs":533666}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"312a95392d3e8a75","findings":[{"citation":"resolved","description":"Read in full against the Pashov checklist (access control, trust, asymmetry, math, boundaries, economics, invariants, flow, execution trace, periphery): src/PLEA.sol, src/CabalGate.sol, src/Seasons.sol, src/PleaDistributor.sol, src/PleaLaunch.sol, src/PleaHook.sol, src/Letterbox.sol, src/Tribunal.sol, src/OracleAttestation.sol and src/interfaces/*. launch.json was checked against the constructor signatures (PLEA 1, CabalGate 7, Seasons 4, PleaDistributor 2, PleaLaunch 13 words, all backward references, no zero address except the mint flag 0) and test/LaunchManifest.t.sol passes on this tree (12 tests: the Letterbox and Tribunal hashes in launch.json match this build, the 16,777,216 gas cap holds with 22% headroom). The protected floor's forbidden-opcode and owner checks are satisfied by inspection: no DELEGATECALL, CALLCODE or SELFDESTRUCT, no proxy or initializer, no mint after PLEA.init, no pause or blacklist; PLEA and PleaDistributor are owned by $owner, the rest are ownerless. Not reached: the live Ethereum IMD 0xd34a…b7, Intake v2 0xa43e…82, Stacker 0x0690…f4f0, PoolManager 0x0000…8A90 and the seat NFT 0x0000ec93…1d (no fork run in this budget). Every state-changing external function was traced for caller, value moved and trust; no loss-of-funds, wrong-party payment, accounting, reentrancy or access-control defect was found that the findings ledger (audit/FINDINGS.md) does not already list as fixed or accepted.","line":34,"path":"src/PleaLaunch.sol","reproduction":"Not a defect. forge test --match-path test/LaunchManifest.t.sol: 12 passed, 0 failed on commit 42e0f85.","severity":"info","snippet":"contract PleaLaunch {","title":"Coverage: all nine src contracts read; the live mainnet dependencies were not reached"},{"citation":"resolved","description":"record(pleaId) may be called by anyone from the first second after the objection hold ends (verdictAt + 20 minutes, no pending objection). The 1.2x seat multiplier is read inside _record at that call, from the seller's seat balance at that instant. A seller who acquires a seat after the verdict (or whose seat is in transit) can be recorded by any other wallet at 1.0x before they act, and the plea is then AlreadyRecorded for good: 45 points instead of 54. The reverse also holds (a seat held at the rival's moment counts even if sold a second later). This matches README's 'at record time' wording, so it is a design note for the adapter and the site, not a code bug; the cost is at most 9 points per plea and no funds move.","line":262,"path":"src/Seasons.sol","reproduction":"Fixture with the Tribunal on: alice buys 100 IMD of PLEA, pleads 10% and is approved at 45 with no seat; skip(20 minutes + 1); bob calls seasons.record(id); then alice receives a seat. Observed: seasons.pointsOf(id) == 45 while seasons.pointsFor(alice, 45) == 54 (test/scratch/ReviewChecks.t.sol test_rivalRecordsBeforeSellerHoldsSeat, passes on this tree). Expected by the seller: 54 once they hold the seat; actual: 45, fixed forever.","severity":"info","snippet":"        uint8 pleaPoints = pointsFor(seller, score);","title":"Seasons.record is permissionless and reads the seat multiplier at that moment, so a rival chooses when a seller's plea is recorded"},{"citation":"resolved","description":"_validTrader refuses the Stacker, IMD, sIMD, the hook and the PoolManager as a named trader, but not the Letterbox, Seasons, the distributor or the gate. While the Cabal watches an exact-input buy delivers its whole PLEA output as ERC-20 to the named trader (afterSwap: poolManager.take(plea, trader, ...)) and the 0.5% cashback is credited to it through the Stacker. None of those contracts has a sweep: PLEA sent to the Letterbox belongs to no escrow and sits there forever, PLEA sent to Seasons is burned at flushToWall, PLEA sent to the distributor exceeds the Merkle total and is stranded; the sIMD credited to any of them is stranded. Only the buyer loses (self-harm, like the accepted ODA-1014-5 for the gate), so this is a note: a one-line extension of the deny list (plea.letterbox(), seasons, plea.distributor(), plea.gate()) would close it if the hook's 195 spare bytes allow.","line":715,"path":"src/PleaHook.sol","reproduction":"Fixture: alice calls router.buyExactIn(100e18, abi.encode(address(letterbox))). Observed in the trace: PoolManager::take(PLEA, Letterbox, 4,849,456 PLEA) succeeds and the Letterbox's PLEA balance rises by that amount with no escrow referencing it (test/scratch/ReviewChecks.t.sol test_namedTraderCanBeTheLetterbox: the PLEA assertion holds; the sIMD assertion in that scratch test fails only because the mock Stacker credits differently). Expected: the hook refuses a court contract as recipient (RecipientRequired) or the PLEA reaches the buyer; actual: the PLEA is parked in the Letterbox for good.","severity":"info","snippet":"            t == address(0) || t == address(stacker) || t == address(imd) || t == simd || t == address(this)","title":"A buy may name the court's own contracts (Letterbox, Seasons, distributor) as the trader; the PLEA and cashback delivered there are unrecoverable"}],"hash":"52271c6f8a7c8c031608f305ddcedafd50b4ea23ddbf585dbbe34c798c74e53b","nodeId":"af49103a-e5c0-4f41-876c-b947b38084a0","outcome":"completed","summary":"Review complete. The findings file is written and the tree is otherwise untouched.\n\n**Outcome.** No Critical, High, Medium or Low defect was found in the imported code. Three Info notes are in `.imd-findings.json`, each with a concrete reproduction.\n\n**What was read.** All nine contracts in `src/` plus the interfaces, the findings ledger, the threat model, launch.json and the two pinned protected checks. Every state-changing external function was traced for caller, value moved and trust, against the Pashov checklist. The launch forbids nothing present here: no DELEGATECALL, CALLCODE, SELFDESTRUCT, proxy, initializer, post-launch mint, pause or blacklist. PLEA and PleaDistributor are owned by the launch owner, the rest are ownerless.\n\n**What was checked by running.** The default build compiles. The manifest suite passes on this tree, so launch.json's Letterbox and Tribunal hashes match this build and the launch fits the gas cap with headroom. The constructor argument counts and backward references in launch.json match the declared constructors.\n\n**Not reached.** The live Ethereum IMD, Intake v2, Stacker, PoolManager and seat NFT were not read on chain. No fork rehearsal ran within the budget.\n\n**Findings written, all Info:**\n- Coverage statement, as the acceptance criteria require.\n- `Seasons.record` is permissionless and reads the seat multiplier at the call. A rival can record a seller's plea at 1.0x the second the hold ends, before the seller acquires a seat. Reproduced in a scratch test: 45 points recorded where 54 would follow a second later. This matches README's \"at record time\" wording, so it is a design note for the adapter and the site.\n- The hook's trader deny list omits the court's own contracts. A buy naming the Letterbox as trader parked 4.85M PLEA there with no escrow and no sweep. Self-harm only, like the accepted note for the gate, and a one-line deny-list extension would close it if the hook's spare bytes allow.\n\n**Next for the adapter.** Nothing blocks the launch from this review. The two code notes are optional hardening. The scratch tests used to reproduce them were removed, as the task allows.","treeHash":null,"usage":{"cachedInputTokens":2646118,"inputTokens":514,"model":"claude-fable-5-1","outputTokens":46565,"runtime":"claude","turns":29,"wallClockMs":792039}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0476c44a80aa9574","findings":[],"hash":"58f0a90d21d2d8409c045e4946c1f94ebecce01a304e8c0d83800493db1e4359","nodeId":"412b1416-ede0-4a2a-8e14-08cea74c4606","outcome":"completed","summary":"Review complete. The findings file is written and holds an empty findings list with a 58-row coverage record (all 56 listed entry points plus two invariant rows).\n\n**Outcome: no permission defect substantiated.** I traced every state-changing entry point for the Access Control, Trust Gap and Asymmetry failure modes and found each guard matches its effect:\n\n- **Write-once wiring holds.** PLEA's launcher, Letterbox and hook are set only by the launch path, once, and the manifest rehearsal tests confirm no later block or transaction can register a launcher.\n- **Custody paths are seller-bound.** The Letterbox moves PLEA only through courtTake on its own caller, sells only via the gate's Letterbox-only entry, and every settle or deliver pays the recorded writer. The gate's sell path uses the caller's own pending plea.\n- **Oracle callbacks are bound.** Both the gate and the Tribunal accept answers only from the immutable Intake, for a request they paid for, signed by the immutable signer under separate EIP-712 domains, consumed once. The accepted L85-I-1 writer trust assumption stands.\n- **Owner powers stay within the listed set.** Allowlist is add-only and never opens the PoolManager or the gate. Early seed follows PLEA's current owner. The distributor root is set once and renounce is refused before it. Exclusion from prizes covers PLEA's owner and the hook's immutable owner.\n- **Paired surfaces are symmetric.** Hand plea versus Letterbox plea, appeal versus appealFor, executeSell versus executeSellFor, record versus the close's list, and the Tribunal's object/standing checks all share the same bounds.\n\n**Verification run here.** The manifest suite passed 12 of 12, so launch.json commits to this tree's Letterbox and Tribunal code. On Ethereum, every dependency address in launch.json has code, IMD answers its symbol, and the Intake's runtime contains the exact selectors the gate and Tribunal call. The signer address is an EOA, which the ECDSA path handles.\n\n**Not reached.** I did not run the full-profile adversarial suites or the mainnet fork rehearsal within the budget, and the hook's economics beyond its access and beneficiary paths were outside this area.","treeHash":null,"usage":{"cachedInputTokens":1373444,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":27845,"runtime":"claude","turns":32,"wallClockMs":480425}},{"artifacts":[],"attempt":1,"bundleHash":"9f1c52455ce5681c7bce9a493b00b3fb97c9bfe2c6a85138d9d1d92f811ffde3","device":"c2a0c6e1f08b5974","findings":[],"hash":"5ab022b0042587e9953cf43117bb786ebb5e40ae0009c151b770752eddee1671","nodeId":"5a9a71ca-5fc9-48cc-acc7-54cdab2f5f16","outcome":"completed","summary":"Added eight regression tests and updated [ADAPTATION.md](/home/imd/.identitymd/work/0fa911d8-3f31-493c-8c41-87e5099f7c7a/5a9a71ca-5fc9-48cc-acc7-54cdab2f5f16/ADAPTATION.md). No contract changes were warranted; launch settings and manifest remain unchanged.\n\nValidation passed:\n\n- `forge build`\n- 30 default tests\n- 803 full-profile test entries, using the required seed\n\nLaunch gas remains 319,567 below the cap with headroom. No live fork or broadcast was performed.","treeHash":"8ebfb9e01730de4a217b00fbee2f1e7781e2af5d","usage":{"cachedInputTokens":8305920,"inputTokens":603475,"model":"gpt-6-astra","outputTokens":33152,"runtime":"codex","turns":14,"wallClockMs":1288682}},{"artifacts":[],"attempt":2,"bundleHash":"814e812fd5d5b9ac17c1ab877d46ef1e43e50b31c668863b4edbf8a381cf4808","device":"493095393c4a2a74","findings":[],"hash":"62833376e6dc57f03089fbce1fb103b8b6c3c722ec60141def01ddf64c4c4118","nodeId":"720512d5-3578-44ec-93f0-c6cbabf87823","outcome":"completed","summary":"Added failure-path tests and four-actor custody invariants, only under `test/`.\n\n- Clean build passed: 1.31 GiB peak memory.\n- Seeded default suite: 40 passed.\n- Selected regressions: 46 passed.\n- Invariants: 10,240 randomized calls, no unexpected reverts.\n\nNo contract defects found in these checks. Production code and configuration remain unchanged. Live fork tests were not run.","treeHash":"51462905680dcd8629dcbd12f11b7d36391804e9","usage":{"cachedInputTokens":8041856,"inputTokens":183082,"model":"gpt-6-astra","outputTokens":40420,"runtime":"codex","turns":11,"wallClockMs":1618086}},{"artifacts":[],"attempt":1,"bundleHash":"cf97c2349386d3064c8cb5d31d054f2b0aae6a03441bc68d1ae90c7cdc247823","device":"a5c5e95a2ed07117","findings":[],"hash":"7a34ba4393407453071f9dbcafdf8f2166779035034cbce11da2a30a8dc37c1f","nodeId":"7e83652c-31d6-4581-ac8f-608d575791da","outcome":"completed","summary":"The manifest is complete and verified. No changes were needed.\n\n**Result:** the existing launch.json in the working tree is the correct `evm_contracts` manifest for the accepted mainnet code, and every check against it passes. I left it as it is, so the tree is clean and no file other than the manifest is involved.\n\n**What I verified:**\n- **Shape.** Exactly the keys kind, contracts and notes. Five unique contracts in dependency order: PLEA, CabalGate, Seasons, PleaDistributor, PleaLaunch. Every argument is a string. Notes are under the cap.\n- **Arities.** The argument lists match the constructors in source: 1, 7, 4, 2 and 13 words, in declaration order.\n- **Owners.** PLEA and PleaDistributor take `$owner`. PleaLaunch reads its owner from PLEA, so the factory never owns anything. This satisfies the protected owner check.\n- **Mainnet settings.** IMD is both the oracle fee asset and the pool currency with mint flag 0. PoolManager, Stacker, credit gas 400000, the seat NFT, season 1296000, dead-man 118800 and START 1795532400 all match the brief. Intake v2 and the oracle signer match the README's mainnet table. Both mixed-case addresses are valid EIP-55 checksums.\n- **Code hashes.** The 12th and 13th PleaLaunch arguments equal the keccak256 of the current Letterbox and Tribunal creation bytecode in the build output. I recomputed both from the artifacts independently of the test.\n- **Retuned constants.** Source has pass mark 69, quorum 17, holding points 3/2/1, no-buy-record profit 9, market cap 20,000 IMD, and the chain-1 seed floors of 14,000 IMD, 15 days and 33 hours.\n\n**Test runs.** A bare build compiles. The default suite with the verifier's fuzz seed passes all 30 tests in 6 suites, including the manifest suite, which rehearses the five-contract launch through the factory on an empty chain and reports the gas as charged, the limit with headroom and the margin:\n\n| Measure | Gas |\n|---|---|\n| Launch transaction as charged | 13,489,877 |\n| Limit with 22% headroom | 16,457,649 |\n| Margin under the 16,777,216 cap | 319,567 |\n\n**Notes field length:** 3,982 characters, under the 4,000 limit.\n\nThe working tree is unchanged and clean, so the manifest is ready for the manifest step as committed.","treeHash":"8ebfb9e01730de4a217b00fbee2f1e7781e2af5d","usage":{"cachedInputTokens":259660,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":5862,"runtime":"claude","turns":9,"wallClockMs":185429}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"82692ab5f7f7e54e","findings":[],"hash":"bb7d8e6310fffdbb7eef9028c5ca068fb048140f033a0f3f1e4fbfc244d51d6c","nodeId":"ca4e1df1-a6bc-46ea-801d-f5e64bfc12ef","outcome":"completed","summary":"Review complete. The findings file is written and validated.\n\n**Result: no reproducible defect.** `.imd-findings.json` holds an empty findings list and 58 coverage rows, one per listed entry point plus two invariants, all `holds`. No other file was changed.\n\n**Specialist findings.** All four areas and the test writer reported nothing, so there was nothing to reproduce, merge or drop. I treated their coverage as leads and traced every entry point myself.\n\n**What I checked, in brief:**\n- Read all nine files under `src/` in full and traced each entry point's guards, state writes and failure paths.\n- The default build passes. The manifest suite in `test/LaunchManifest.t.sol` passes, including both committed code hashes and the gas cap.\n- Runtime sizes match the brief exactly for the hook, gate, Letterbox, Tribunal and Seasons. Cancun is pinned, which the transient-storage deploy flag and reentrancy guard need.\n- Every constructor argument in launch.json matches its constructor's count and order. The on-chain seed checks for chain 1 accept the configured 15-day season and 33-hour dead-man exactly.\n- The agreed numbers are the constants in the code: pass mark 69, hold points 3/2/1, uncovered profit 9, the fact bands, fee split 2.25%, letters 20%, objection window, stake, margin, two objections, cap decay, wall guard and the 25-rank share table summing to 10,000.\n\n**Observations, not defects:**\n- The gate and Tribunal bind a signed answer to its request only through the Intake, not by comparing the attestation's request id or question hash. The owner accepted this in writing in round 8.5 as finding L85-I-1, and the threat model records it as trust in the Intake writer.\n- The owner powers are the documented ones: the add-only PLEA allowlist, the one-time Merkle root, early seeding, and the 1% fee. The owner is excluded from points, prizes and the bonus.\n- The Letterbox's auto-sell fee and the hook's prize fee are credited to the season running at the time of the sale, not the plea's verdict season. A sale happens within seven minutes of the verdict, so this only differs at a season boundary and is the documented accounting rule.\n\nNothing is outstanding from this review.","treeHash":null,"usage":{"cachedInputTokens":1031950,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":33402,"runtime":"claude","turns":21,"wallClockMs":534914}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a4b99d560a579411","findings":[],"hash":"bf57c1f64abd3d5c6bf2af36c50901a7b1126568757284967a46342bd38c96f4","nodeId":"720512d5-3578-44ec-93f0-c6cbabf87823","outcome":"failed","summary":"the local build failed, so this was not submitted:\nforge build exited with 1:\nCompiling 127 files with Solc 0.8.26\nError: solc exited with signal: 9 (SIGKILL)\n<empty output>","treeHash":null,"usage":{"cachedInputTokens":11801984,"inputTokens":347022,"model":"gpt-6-astra","outputTokens":50768,"runtime":"codex","turns":20,"wallClockMs":2040837}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"1ec9f666356a7ad7","findings":[],"hash":"d0f7b4ec3eaebc83bc8cc19365b0aa97914aef3ae1ae3a4a86b18add1537570c","nodeId":"dfaeabaf-78a9-4b3d-94f0-ad8e8c5f79e1","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written at the repository root with an empty findings list and a coverage record for every listed entry point. The working tree is unchanged apart from that file and build output, and the scratch test was removed.\n\n**Outcome: no reproducible math defect found.** The math area (Math Precision, Boundary, Numerical Gap) of the mainnet tree at commit 149343a is clean against every failure mode in the three guides that I could reach with concrete numbers.\n\n**What I checked, with numbers**\n\n- **Fee arithmetic on all four swap shapes.** Exact-input fee is A·r/(B+r) and exact-output A·r/(B−r), with r up to 7,200 bps in the launch window. The settled fee is floor((A−fee)·r/B), which is always at least the reserved fee, so a full fill refunds zero. The three payouts are floored from one basis, so their sum never exceeds the IMD fee and the pool share never underflows.\n- **The fact table and need.** Share in ceiling basis points, hold 3/2/1, loss 13 and the exact gain bands, received PLEA at 9, trend 9/5/0, and the PLEA-weighted mean rounded to nearest. Every need figure in the README re-derives from the code: 35/34/33/32 for a fresh buyer at a loss, 39/38/37/36 for received PLEA, 45 and 46 at the over-35% edges, 36/35/39 at 3x and 11x.\n- **Seasons payouts.** The 25 share constants sum to exactly 10,000 bps. Prizes and the 10,000,000 PLEA bonus floor per rank, so paid never exceeds the pot, and the accounted pot and rollover stay consistent through close, stake bookings and the final flush.\n- **Hook pool math.** Seed price for 20,000 IMD in both token orderings, liquidity around 3.65e24 within uint128, the cap ratchet's remainder bookkeeping, and tick alignment with negative ticks.\n- **Single-sided liquidity rounding.** A scratch sweep replayed the hook's liquidity formula against Uniswap's rounded-up amounts for dust reserves of 1 to 3,000 wei across the tick range in both orientations. The add never asks for more than the reserve, so a dust wall cannot make rebalance revert.\n- **Boundaries.** Every narrowing cast has a proven bound, every external read with no code at the receiver fails open or reverts only the caller's own call, and every decoded byte input is length-checked or self-encoded.\n\n**Build and tests.** The default-profile build succeeded. The manifest suite passed its 12 tests, confirming both committed hashes match this Letterbox and Tribunal and that the launch fits the gas cap with headroom.\n\n**Not reached.** The full-profile suites and the mainnet fork were not re-run. Live IMD, Stacker and Intake behaviour is taken from the threat model, not re-verified on chain.","treeHash":null,"usage":{"cachedInputTokens":3178901,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":48409,"runtime":"claude","turns":35,"wallClockMs":732161}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f3b611cf8afb513f","findings":[],"hash":"ddce9200d51ecd29175283af26df650886cfbaaf9a03c6c92630d812ad2d6b69","nodeId":"303946aa-c011-4203-b1af-dd02e55a5b2d","outcome":"completed","summary":"The review is complete and the record is written.\n\n**Outcome: no reproducible defect found in the control-flow area.** `.imd-findings.json` holds an empty findings list and a 59-row coverage record: one `holds` row for each of the 56 listed entry points plus three invariant rows, each with a one-line reason.\n\n**What I covered**, following the Senior Auditor's Mindset and the Execution Trace, Periphery and First Principles guides:\n\n- **Periphery first**: PleaLaunch, PLEA, PleaDistributor and the OracleAttestation library and consumer. The launch wiring is once-only and committed by hash, PLEA's transfer rule admits only the gate's pull, the court's `courtTake` and exempt senders, and the attestation consumer binds answers to each contract's own EIP-712 domain and consumes each request id once.\n- **Execution traces** through every value-moving path: letter and site pleas (escrow, fee swap, oracle fee, tip), hand and Letterbox sales, appeals, objections and stake settlement, prize and bonus closes, the flush to the wall, and the hook's swap callbacks. Every allowance is consumed in the call that grants it, every callback is gated on the PoolManager or the Intake plus an expected-flag, and the partial-state cases (expiry, failure callbacks, stale pendings, lapsed approvals) all leave consistent storage.\n- **First-principles checks** on the cross-contract timing: the 40-minute objection hold always ends inside the one-hour close grace, verdicts delivered after a season's end are booked to the verdict's season, and a stake settled after the final flush lands in recoverable rollover that a second `flushToWall` sweeps to the wall.\n- **Manifest**: launch.json has only the three schema keys, notes of 3,982 characters, constructor words in declaration order with IMD in all three places and the mint flag 0. I ran the committed launch-manifest suite in the default profile, and all 12 tests passed, including the Letterbox and Tribunal hash ties and the gas-cap assertion.\n\n**Not reached**: I did not run the full-profile suites in `test/full/` or the forks, and I did not independently re-derive the hook's tick and liquidity arithmetic beyond reading it, since those belong to the math and economics areas. Nothing in the files was changed.","treeHash":null,"usage":{"cachedInputTokens":1254298,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":36845,"runtime":"claude","turns":23,"wallClockMs":583723}}],"verification":[{"checks":[{"durationMs":33314,"exitCode":0,"name":"build","output":"Compiling 123 files with Solc 0.8.26\nSolc 0.8.26 finished in 33.20s\nCompiler run successful with warnings:\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:345:9:\n    |\n345 |         uint8 status,\n    |         ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:208:5:\n    |\n208 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:383:53:\n    |\n383 |     function _void(uint256 id, Objection storage o, uint8 status, bytes32 reason) internal {\n    |                                                     ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:208:5:\n    |\n208 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> src/Seasons.sol:422:58:\n    |\n422 |     function _owners() internal view returns (address a, address b, address c) {\n    |                                                          ^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/CabalGate.sol:755:5:\n    |\n755 |     function _text(string storage t, bool json) internal view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":296,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/ManifestInput.t.sol:ManifestInputTest\n[PASS] test_everyManifestWordDeploysAtomicallyAndCommitsTheTribunal() (gas: 22555920)\n[PASS] test_failedLastConstructorRollsBackAllEarlierDeploymentsAndCanRetry() (gas: 27161455)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.49ms (7.74ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 14061234)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 15285294)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 14195621)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 11.52ms (5.94ms CPU time)\n\nRan 8 tests for test/MainnetImportReview.t.sol:MainnetImportReviewTest\n[PASS] test_namedDistributorBuyDoesNotIncreaseAMerkleEntitlement() (gas: 1461064)\n[PASS] test_namedGateBuyRevertsWithoutSpendingTheBuyersFunds() (gas: 726269)\n[PASS] test_namedLetterboxBuyCannotChangeAnotherWritersRefund() (gas: 6820997)\n[PASS] test_namedLetterboxBuyCreatesNoEscrowAndCreditsTheNamedRecipient() (gas: 1289371)\n[PASS] test_namedSeasonsBuyBurnsWithTheUnpaidBonus() (gas: 1634863)\n[PASS] test_rivalCannotRecordWhileAnObjectionIsPending() (gas: 10410619)\n[PASS] test_rivalRecordsBeforeSellerAcquiresSeat() (gas: 6240743)\n[PASS] test_rivalRecordsSeatHolderBeforeSeatLeaves() (gas: 5992099)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 20.93ms (11.50ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:PostLaunchTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 53904225)\n[PASS] test_committedLetterboxDeploysLater() (gas: 10792122)\nLogs:\n  deployLetterbox transaction gas: 5580980\n\n[PASS] test_committedTribunalDeploysLater() (gas: 10383989)\nLogs:\n  deployTribunal transaction gas: 5271271\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 32.87ms (43.25ms CPU time)\n\nRan 6 tests for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 54721058)\nLogs:\n  five-contract launch transaction gas through IMD's factory: 13489877\n  gas limit with IMD's headroom: 16457649\n  margin to the 16,777,216 cap: 319567\n\n[PASS] test_launchJsonAddressWordsAreTheTestedAddressesInAValidCase() (gas: 44990)\n[PASS] test_launchJsonCommitsToThisLetterbox() (gas: 34802)\n[PASS] test_launchJsonCommitsToThisTribunal() (gas: 31450)\n[PASS] test_launchJsonEncodesOracleMintFlagAsStaticWord() (gas: 11510)\n[PASS] test_launchJsonNotesFitTheManifestCap() (gas: 9787)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 50.99ms (49.35ms CPU time)\n\nRan 8 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_aMintedFeeOnChainOneNeverOpensTrading() (gas: 65814484)\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 366524414)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 371352694)\nLogs:\n  launch (5 contracts + intake mock): 12782565\n  deployLetterbox: 5210191\n  deployHook: 5885849\n  seed: 641947\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 12904703)\n[PASS] test_ownerMaySeedEarly() (gas: 371312966)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 371451515)\n[PASS] test_theLaunchRefusesAZeroOrSwappedLetterboxHash() (gas: 52942185)\n[PASS] test_theLaunchRefusesAnOracleSetupTheLetterboxWouldRefuse() (gas: 53599493)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 173.64ms (685.80ms CPU time)\n\nRan 6 test suites in 174.26ms (297.44ms CPU time): 30 tests passed, 0 failed, 0 skipped (30 total tests)\n","passed":true},{"durationMs":99,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.appealFor(address,uint256,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.executeSellFor(uint256,uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitFor(address,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Letterbox.appealAuto(uint256,string)\",\"Letterbox.deliver(uint256)\",\"Letterbox.fallback()\",\"Letterbox.letter(string)\",\"Letterbox.plead(uint256,string)\",\"Letterbox.setName(string)\",\"Letterbox.settle(uint256)\",\"PLEA.acceptOwnership()\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.courtTake(address,uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address)\",\"PLEA.setLetterbox(address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.acceptOwnership()\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.deployLetterbox(bytes)\",\"PleaLaunch.deployTribunal(bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.checkpointObjection(uint256,uint256)\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\",\"Tribunal.expire(uint256)\",\"Tribunal.object(uint256,string)\",\"Tribunal.onObjectionFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Tribunal.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Tribunal.settle(uint256)\"],\"files\":{\".gitignore\":5,\"ADAPTATION.md\":56,\"OBJECTIONS.md\":339,\"README.md\":349,\"audit/FINDINGS.md\":232,\"audit/README.md\":35,\"audit/THREAT-MODEL.md\":114,\"audit/jobs/A1.md\":18,\"audit/jobs/A2.md\":23,\"audit/jobs/A3.md\":16,\"audit/jobs/common.md\":14,\"audit/make_jobs.py\":143,\"audit/rounds/1/A1.objective.txt\":26,\"audit/rounds/1/A1.report.md\":130,\"audit/rounds/1/A1.request.json\":9,\"audit/rounds/1/A2.objective.txt\":31,\"audit/rounds/1/A2.report.md\":323,\"audit/rounds/1/A2.request.json\":9,\"audit/rounds/1/A3.objective.txt\":24,\"audit/rounds/1/A3.report.md\":114,\"audit/rounds/1/A3.request.json\":9,\"audit/rounds/1/manifest.json\":87,\"audit/rounds/10/A1.objective.txt\":26,\"audit/rounds/10/A1.report.md\":60,\"audit/rounds/10/A1.request.json\":9,\"audit/rounds/10/A2.objective.txt\":31,\"audit/rounds/10/A2.report.md\":65,\"audit/rounds/10/A2.request.json\":9,\"audit/rounds/11/A1.objective.txt\":26,\"audit/rounds/11/A1.report.md\":48,\"audit/rounds/11/A1.request.json\":9,\"audit/rounds/11/A2.objective.txt\":31,\"audit/rounds/11/A2.report.md\":79,\"audit/rounds/11/A2.request.json\":9,\"audit/rounds/12/A3.objective.txt\":24,\"audit/rounds/12/A3.report.md\":115,\"audit/rounds/12/A3.request.json\":9,\"audit/rounds/12/manifest.json\":87,\"audit/rounds/2/A1.objective.txt\":26,\"audit/rounds/2/A1.report.md\":133,\"audit/rounds/2/A1.request.json\":9,\"audit/rounds/2/A2.objective.txt\":31,\"audit/rounds/2/A2.report.md\":93,\"audit/rounds/2/A2.request.json\":9,\"audit/rounds/2/A3.objective.txt\":24,\"audit/rounds/2/A3.report.md\":142,\"audit/rounds/2/A3.request.json\":9,\"audit/rounds/2/manifest.json\":87,\"audit/rounds/3/A1.objective.txt\":26,\"audit/rounds/3/A1.report.md\":127,\"audit/rounds/3/A1.request.json\":9,\"audit/rounds/3/A2.objective.txt\":31,\"audit/rounds/3/A2.report.md\":192,\"audit/rounds/3/A2.request.json\":9,\"audit/rounds/3/A3.objective.txt\":24,\"audit/rounds/3/A3.report.md\":119,\"audit/rounds/3/A3.request.json\":9,\"audit/rounds/3/manifest.json\":87,\"audit/rounds/4/A1.objective.txt\":26,\"audit/rounds/4/A1.report.md\":88,\"audit/rounds/4/A1.request.json\":9,\"audit/rounds/4/A2.objective.txt\":31,\"audit/rounds/4/A2.report.md\":207,\"audit/rounds/4/A2.request.json\":9,\"audit/rounds/4/A3.objective.txt\":24,\"audit/rounds/4/A3.report.md\":133,\"audit/rounds/4/A3.request.json\":9,\"audit/rounds/4/manifest.json\":87,\"audit/rounds/5/A1.objective.txt\":26,\"audit/rounds/5/A1.report.md\":135,\"audit/rounds/5/A1.request.json\":9,\"audit/rounds/5/A2.objective.txt\":31,\"audit/rounds/5/A2.report.md\":93,\"audit/rounds/5/A2.request.json\":9,\"audit/rounds/5/A3.objective.txt\":24,\"audit/rounds/5/A3.report.md\":73,\"audit/rounds/5/A3.request.json\":9,\"audit/rounds/5/manifest.json\":87,\"audit/rounds/6/A1.objective.txt\":26,\"audit/rounds/6/A1.report.md\":60,\"audit/rounds/6/A1.request.json\":9,\"audit/rounds/6/A2.objective.txt\":31,\"audit/rounds/6/A2.report.md\":161,\"audit/rounds/6/A2.request.json\":9,\"audit/rounds/6/A3.objective.txt\":24,\"audit/rounds/6/A3.request.json\":9,\"audit/rounds/6/manifest.json\":87,\"audit/rounds/7/A1.objective.txt\":26,\"audit/rounds/7/A1.report.md\":132,\"audit/rounds/7/A1.request.json\":9,\"audit/rounds/7/A2.objective.txt\":31,\"audit/rounds/7/A2.report.md\":95,\"audit/rounds/7/A2.request.json\":9,\"audit/rounds/7/A3.objective.txt\":24,\"audit/rounds/7/A3.report.md\":72,\"audit/rounds/7/A3.request.json\":9,\"audit/rounds/7/manifest.json\":87,\"audit/rounds/8/A1.objective.txt\":26,\"audit/rounds/8/A1.report.md\":121,\"audit/rounds/8/A1.request.json\":9,\"audit/rounds/8/A2.objective.txt\":31,\"audit/rounds/8/A2.request.json\":9,\"audit/rounds/8/A3.objective.txt\":24,\"audit/rounds/8/A3.report.md\":114,\"audit/rounds/8/A3.request.json\":9,\"audit/rounds/8/manifest.json\":87,\"audit/rounds/9/A1.objective.txt\":26,\"audit/rounds/9/A1.report.md\":60,\"audit/rounds/9/A1.request.json\":9,\"foundry.toml\":34,\"launch.json\":58,\"remappings.txt\":4,\"script/Deploy.s.sol\":80,\"script/DeployLetterbox.s.sol\":22,\"script/DeployTribunal.s.sol\":22,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":909,\"src/Letterbox.sol\":757,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":151,\"src/PleaDistributor.sol\":60,\"src/PleaHook.sol\":1119,\"src/PleaLaunch.sol\":220,\"src/Seasons.sol\":467,\"src/Tribunal.sol\":561,\"src/interfaces/IPleaParts.sol\":78,\"src/interfaces/IStacker.sol\":12,\"test/Launch.t.sol\":249,\"test/LaunchManifest.t.sol\":398,\"test/MainnetImportReview.t.sol\":234,\"test/ManifestInput.t.sol\":84,\"test/fork/ForkMainnet.t.sol\":406,\"test/fork/ForkTestnet.t.sol\":918,\"test/full/AppealRounding.t.sol\":147,\"test/full/ArtifactDeployment.t.sol\":59,\"test/full/AuditImported.t.sol\":142,\"test/full/AuditRevision.t.sol\":336,\"test/full/AuditRound1.t.sol\":687,\"test/full/AuditRun3.t.sol\":394,\"test/full/AuditRun5.t.sol\":186,\"test/full/BonusInvariant.t.sol\":541,\"test/full/DistributorAdversarial.t.sol\":342,\"test/full/DistributorOwnership.t.sol\":71,\"test/full/GasPass.t.sol\":403,\"test/full/Gate.t.sol\":472,\"test/full/GateAdversarial.t.sol\":400,\"test/full/GateFailureInvariant.t.sol\":330,\"test/full/Hook.t.sol\":372,\"test/full/HookAdversarial.t.sol\":257,\"test/full/HookRevision.t.sol\":554,\"test/full/JudgeFindings.t.sol\":243,\"test/full/Letterbox.t.sol\":915,\"test/full/LetterboxInvariant.t.sol\":447,\"test/full/MainnetGuard.t.sol\":87,\"test/full/OracleConformance.t.sol\":116,\"test/full/OracleReplay.t.sol\":60,\"test/full/Orientation.t.sol\":126,\"test/full/OwnershipTransitionInvariant.t.sol\":238,\"test/full/Run7Coverage.md\":54,\"test/full/Run7DistributorLifecycle.t.sol\":276,\"test/full/Run7ObjectionPoints.t.sol\":204,\"test/full/Run7SeatAccounting.t.sol\":308,\"test/full/Run85Objection.t.sol\":823,\"test/full/SeasonAdversarial.t.sol\":211,\"test/full/SeasonFunds.t.sol\":351,\"test/full/SeasonInvariant.t.sol\":348,\"test/full/SeasonRanking.t.sol\":176,\"test/full/Seasons.t.sol\":290,\"test/full/SeatMultiplier.t.sol\":167,\"test/full/Token.t.sol\":80,\"test/full/TraderAttributionInvariant.t.sol\":287,\"test/full/TraderFallbackAdversarial.t.sol\":315,\"test/full/TraderResolution.t.sol\":225,\"test/full/TraderResolverBoundary.t.sol\":126,\"test/full/TradingInvariant.t.sol\":496,\"test/full/Tribunal.t.sol\":615,\"test/full/TribunalAdversarial.t.sol\":225,\"test/full/TribunalInvariant.t.sol\":603,\"test/full/TribunalOracleBoundary.t.sol\":334,\"test/full/TribunalSeasons.t.sol\":309,\"test/full/TribunalStanding.t.sol\":217,\"test/full/TribunalTextProperties.t.sol\":276,\"test/utils/AdversarialTraderRouter.sol\":38,\"test/utils/ArtifactDeployment.sol\":23,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":350,\"test/utils/Mocks.sol\":371,\"test/utils/SeasonModel.sol\":117,\"test/utils/SepoliaFixture.sol\":36},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"5ab022b0042587e9953cf43117bb786ebb5e40ae0009c151b770752eddee1671","verifiedTreeHash":"8ebfb9e01730de4a217b00fbee2f1e7781e2af5d","verifierVersion":"0.1.0+d372f99e"},{"checks":[{"durationMs":45181,"exitCode":0,"name":"build","output":"Compiling 126 files with Solc 0.8.26\nSolc 0.8.26 finished in 45.04s\nCompiler run successful with warnings:\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:345:9:\n    |\n345 |         uint8 status,\n    |         ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:208:5:\n    |\n208 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:383:53:\n    |\n383 |     function _void(uint256 id, Objection storage o, uint8 status, bytes32 reason) internal {\n    |                                                     ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:208:5:\n    |\n208 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> src/Seasons.sol:422:58:\n    |\n422 |     function _owners() internal view returns (address a, address b, address c) {\n    |                                                          ^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/CabalGate.sol:755:5:\n    |\n755 |     function _text(string storage t, bool json) internal view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":6204,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/ManifestInput.t.sol:ManifestInputTest\n[PASS] test_everyManifestWordDeploysAtomicallyAndCommitsTheTribunal() (gas: 22555920)\n[PASS] test_failedLastConstructorRollsBackAllEarlierDeploymentsAndCanRetry() (gas: 27161455)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 8.64ms (7.15ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 14061234)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 15285294)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 14195621)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.62ms (10.58ms CPU time)\n\nRan 8 tests for test/MainnetImportReview.t.sol:MainnetImportReviewTest\n[PASS] test_namedDistributorBuyDoesNotIncreaseAMerkleEntitlement() (gas: 1461064)\n[PASS] test_namedGateBuyRevertsWithoutSpendingTheBuyersFunds() (gas: 726269)\n[PASS] test_namedLetterboxBuyCannotChangeAnotherWritersRefund() (gas: 6820997)\n[PASS] test_namedLetterboxBuyCreatesNoEscrowAndCreditsTheNamedRecipient() (gas: 1289371)\n[PASS] test_namedSeasonsBuyBurnsWithTheUnpaidBonus() (gas: 1634863)\n[PASS] test_rivalCannotRecordWhileAnObjectionIsPending() (gas: 10410619)\n[PASS] test_rivalRecordsBeforeSellerAcquiresSeat() (gas: 6240743)\n[PASS] test_rivalRecordsSeatHolderBeforeSeatLeaves() (gas: 5992099)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 27.29ms (21.86ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:PostLaunchTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 53904225)\n[PASS] test_committedLetterboxDeploysLater() (gas: 10792122)\nLogs:\n  deployLetterbox transaction gas: 5580980\n\n[PASS] test_committedTribunalDeploysLater() (gas: 10383989)\nLogs:\n  deployTribunal transaction gas: 5271271\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 46.64ms (67.10ms CPU time)\n\nRan 6 tests for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 54721058)\nLogs:\n  five-contract launch transaction gas through IMD's factory: 13489877\n  gas limit with IMD's headroom: 16457649\n  margin to the 16,777,216 cap: 319567\n\n[PASS] test_launchJsonAddressWordsAreTheTestedAddressesInAValidCase() (gas: 44990)\n[PASS] test_launchJsonCommitsToThisLetterbox() (gas: 34802)\n[PASS] test_launchJsonCommitsToThisTribunal() (gas: 31450)\n[PASS] test_launchJsonEncodesOracleMintFlagAsStaticWord() (gas: 11510)\n[PASS] test_launchJsonNotesFitTheManifestCap() (gas: 9787)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 61.81ms (59.28ms CPU time)\n\nRan 8 tests for test/PaidFeeAtomicity.t.sol:PaidFeeAtomicityTest\n[PASS] testFuzz_twoPanelsCannotRaisePointsOrRevokeTheSale(uint8,uint8,uint8,bool) (runs: 128, μ: 14348321, ~: 14334298)\n[PASS] test_failedLastTipUnwindsTheSaleAndEveryFee() (gas: 12145660)\n[PASS] test_failedRefundTipKeepsBothAssetsClaimable() (gas: 6862884)\n[PASS] test_failedStakePayoutDoesNotConsumeSettlement() (gas: 11265044)\n[PASS] test_intakeOutageUnwindsTheFeeSaleAndCanRetry() (gas: 7543262)\n[PASS] test_invalidAppealCannotPartiallyRefundTheDeniedLetter() (gas: 10783840)\n[PASS] test_lostCallbackRefundIsAtomicWithTheReplacementLetter() (gas: 10105160)\n[PASS] test_stakeApprovalAloneCannotLeaveHalfFundedObjection() (gas: 11040201)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 229.61ms (222.04ms CPU time)\n\nRan 8 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_aMintedFeeOnChainOneNeverOpensTrading() (gas: 65814484)\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 366524414)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 371352694)\nLogs:\n  launch (5 contracts + intake mock): 12782565\n  deployLetterbox: 5210191\n  deployHook: 5885849\n  seed: 641947\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 12904703)\n[PASS] test_ownerMaySeedEarly() (gas: 371312966)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 371451515)\n[PASS] test_theLaunchRefusesAZeroOrSwappedLetterboxHash() (gas: 52942185)\n[PASS] test_theLaunchRefusesAnOracleSetupTheLetterboxWouldRefuse() (gas: 53599493)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 259.31ms (918.73ms CPU time)\n\nRan 2 tests for test/PaidFeeCustodyInvariant.t.sol:PaidFeeCustodyInvariantTest\n[PASS]\nPaidFeeCustodyInvariantTest invariants:\n[PASS] invariant_everyOpenEscrowTipAndStakeRemainsBacked\n[PASS] invariant_supplyAllocationsAndEachWritersPleaAreConserved\n PaidFeeCustodyInvariantTest invariants (runs: 128, calls: 10240, reverts: 0)\n\n╭-----------------------+----------------+-------+---------+----------╮\n| Contract              | Selector       | Calls | Reverts | Discards |\n+=====================================================================+\n| PaidFeeCustodyHandler | advance        | 926   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | answer         | 927   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | buy            | 940   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | claim          | 953   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | donate         | 947   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | finishLetter   | 940   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | object         | 900   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | recordAndClose | 942   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | rule           | 911   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | settleStake    | 919   | 0       | 0        |\n|-----------------------+----------------+-------+---------+----------|\n| PaidFeeCustodyHandler | write          | 935   | 0       | 0        |\n╰-----------------------+----------------+-------+---------+----------╯\n\n[PASS] test_sequenceWitnessReachesSalesRefundsStakesClaimsAndDeath() (gas: 19123613)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 6.03s (6.01s CPU time)\n\nRan 8 test suites in 6.04s (6.68s CPU time): 40 tests passed, 0 failed, 0 skipped (40 total tests)\n","passed":true},{"durationMs":146,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.appealFor(address,uint256,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.executeSellFor(uint256,uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitFor(address,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Letterbox.appealAuto(uint256,string)\",\"Letterbox.deliver(uint256)\",\"Letterbox.fallback()\",\"Letterbox.letter(string)\",\"Letterbox.plead(uint256,string)\",\"Letterbox.setName(string)\",\"Letterbox.settle(uint256)\",\"PLEA.acceptOwnership()\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.courtTake(address,uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address)\",\"PLEA.setLetterbox(address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.acceptOwnership()\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.deployLetterbox(bytes)\",\"PleaLaunch.deployTribunal(bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.checkpointObjection(uint256,uint256)\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\",\"Tribunal.expire(uint256)\",\"Tribunal.object(uint256,string)\",\"Tribunal.onObjectionFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Tribunal.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Tribunal.settle(uint256)\"],\"files\":{\".gitignore\":5,\"ADAPTATION.md\":56,\"OBJECTIONS.md\":339,\"README.md\":349,\"audit/FINDINGS.md\":232,\"audit/README.md\":35,\"audit/THREAT-MODEL.md\":114,\"audit/jobs/A1.md\":18,\"audit/jobs/A2.md\":23,\"audit/jobs/A3.md\":16,\"audit/jobs/common.md\":14,\"audit/make_jobs.py\":143,\"audit/rounds/1/A1.objective.txt\":26,\"audit/rounds/1/A1.report.md\":130,\"audit/rounds/1/A1.request.json\":9,\"audit/rounds/1/A2.objective.txt\":31,\"audit/rounds/1/A2.report.md\":323,\"audit/rounds/1/A2.request.json\":9,\"audit/rounds/1/A3.objective.txt\":24,\"audit/rounds/1/A3.report.md\":114,\"audit/rounds/1/A3.request.json\":9,\"audit/rounds/1/manifest.json\":87,\"audit/rounds/10/A1.objective.txt\":26,\"audit/rounds/10/A1.report.md\":60,\"audit/rounds/10/A1.request.json\":9,\"audit/rounds/10/A2.objective.txt\":31,\"audit/rounds/10/A2.report.md\":65,\"audit/rounds/10/A2.request.json\":9,\"audit/rounds/11/A1.objective.txt\":26,\"audit/rounds/11/A1.report.md\":48,\"audit/rounds/11/A1.request.json\":9,\"audit/rounds/11/A2.objective.txt\":31,\"audit/rounds/11/A2.report.md\":79,\"audit/rounds/11/A2.request.json\":9,\"audit/rounds/12/A3.objective.txt\":24,\"audit/rounds/12/A3.report.md\":115,\"audit/rounds/12/A3.request.json\":9,\"audit/rounds/12/manifest.json\":87,\"audit/rounds/2/A1.objective.txt\":26,\"audit/rounds/2/A1.report.md\":133,\"audit/rounds/2/A1.request.json\":9,\"audit/rounds/2/A2.objective.txt\":31,\"audit/rounds/2/A2.report.md\":93,\"audit/rounds/2/A2.request.json\":9,\"audit/rounds/2/A3.objective.txt\":24,\"audit/rounds/2/A3.report.md\":142,\"audit/rounds/2/A3.request.json\":9,\"audit/rounds/2/manifest.json\":87,\"audit/rounds/3/A1.objective.txt\":26,\"audit/rounds/3/A1.report.md\":127,\"audit/rounds/3/A1.request.json\":9,\"audit/rounds/3/A2.objective.txt\":31,\"audit/rounds/3/A2.report.md\":192,\"audit/rounds/3/A2.request.json\":9,\"audit/rounds/3/A3.objective.txt\":24,\"audit/rounds/3/A3.report.md\":119,\"audit/rounds/3/A3.request.json\":9,\"audit/rounds/3/manifest.json\":87,\"audit/rounds/4/A1.objective.txt\":26,\"audit/rounds/4/A1.report.md\":88,\"audit/rounds/4/A1.request.json\":9,\"audit/rounds/4/A2.objective.txt\":31,\"audit/rounds/4/A2.report.md\":207,\"audit/rounds/4/A2.request.json\":9,\"audit/rounds/4/A3.objective.txt\":24,\"audit/rounds/4/A3.report.md\":133,\"audit/rounds/4/A3.request.json\":9,\"audit/rounds/4/manifest.json\":87,\"audit/rounds/5/A1.objective.txt\":26,\"audit/rounds/5/A1.report.md\":135,\"audit/rounds/5/A1.request.json\":9,\"audit/rounds/5/A2.objective.txt\":31,\"audit/rounds/5/A2.report.md\":93,\"audit/rounds/5/A2.request.json\":9,\"audit/rounds/5/A3.objective.txt\":24,\"audit/rounds/5/A3.report.md\":73,\"audit/rounds/5/A3.request.json\":9,\"audit/rounds/5/manifest.json\":87,\"audit/rounds/6/A1.objective.txt\":26,\"audit/rounds/6/A1.report.md\":60,\"audit/rounds/6/A1.request.json\":9,\"audit/rounds/6/A2.objective.txt\":31,\"audit/rounds/6/A2.report.md\":161,\"audit/rounds/6/A2.request.json\":9,\"audit/rounds/6/A3.objective.txt\":24,\"audit/rounds/6/A3.request.json\":9,\"audit/rounds/6/manifest.json\":87,\"audit/rounds/7/A1.objective.txt\":26,\"audit/rounds/7/A1.report.md\":132,\"audit/rounds/7/A1.request.json\":9,\"audit/rounds/7/A2.objective.txt\":31,\"audit/rounds/7/A2.report.md\":95,\"audit/rounds/7/A2.request.json\":9,\"audit/rounds/7/A3.objective.txt\":24,\"audit/rounds/7/A3.report.md\":72,\"audit/rounds/7/A3.request.json\":9,\"audit/rounds/7/manifest.json\":87,\"audit/rounds/8/A1.objective.txt\":26,\"audit/rounds/8/A1.report.md\":121,\"audit/rounds/8/A1.request.json\":9,\"audit/rounds/8/A2.objective.txt\":31,\"audit/rounds/8/A2.request.json\":9,\"audit/rounds/8/A3.objective.txt\":24,\"audit/rounds/8/A3.report.md\":114,\"audit/rounds/8/A3.request.json\":9,\"audit/rounds/8/manifest.json\":87,\"audit/rounds/9/A1.objective.txt\":26,\"audit/rounds/9/A1.report.md\":60,\"audit/rounds/9/A1.request.json\":9,\"foundry.toml\":34,\"launch.json\":58,\"remappings.txt\":4,\"script/Deploy.s.sol\":80,\"script/DeployLetterbox.s.sol\":22,\"script/DeployTribunal.s.sol\":22,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":909,\"src/Letterbox.sol\":757,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":151,\"src/PleaDistributor.sol\":60,\"src/PleaHook.sol\":1119,\"src/PleaLaunch.sol\":220,\"src/Seasons.sol\":467,\"src/Tribunal.sol\":561,\"src/interfaces/IPleaParts.sol\":78,\"src/interfaces/IStacker.sol\":12,\"test/Launch.t.sol\":249,\"test/LaunchManifest.t.sol\":398,\"test/MainnetImportReview.t.sol\":234,\"test/ManifestInput.t.sol\":84,\"test/PAID_FEE_COVERAGE.md\":75,\"test/PaidFeeAtomicity.t.sol\":303,\"test/PaidFeeCustodyInvariant.t.sol\":135,\"test/fork/ForkMainnet.t.sol\":406,\"test/fork/ForkTestnet.t.sol\":918,\"test/full/AppealRounding.t.sol\":147,\"test/full/ArtifactDeployment.t.sol\":59,\"test/full/AuditImported.t.sol\":142,\"test/full/AuditRevision.t.sol\":336,\"test/full/AuditRound1.t.sol\":687,\"test/full/AuditRun3.t.sol\":394,\"test/full/AuditRun5.t.sol\":186,\"test/full/BonusInvariant.t.sol\":541,\"test/full/DistributorAdversarial.t.sol\":342,\"test/full/DistributorOwnership.t.sol\":71,\"test/full/GasPass.t.sol\":403,\"test/full/Gate.t.sol\":472,\"test/full/GateAdversarial.t.sol\":400,\"test/full/GateFailureInvariant.t.sol\":330,\"test/full/Hook.t.sol\":372,\"test/full/HookAdversarial.t.sol\":257,\"test/full/HookRevision.t.sol\":554,\"test/full/JudgeFindings.t.sol\":243,\"test/full/Letterbox.t.sol\":915,\"test/full/LetterboxInvariant.t.sol\":447,\"test/full/MainnetGuard.t.sol\":87,\"test/full/OracleConformance.t.sol\":116,\"test/full/OracleReplay.t.sol\":60,\"test/full/Orientation.t.sol\":126,\"test/full/OwnershipTransitionInvariant.t.sol\":238,\"test/full/Run7Coverage.md\":54,\"test/full/Run7DistributorLifecycle.t.sol\":276,\"test/full/Run7ObjectionPoints.t.sol\":204,\"test/full/Run7SeatAccounting.t.sol\":308,\"test/full/Run85Objection.t.sol\":823,\"test/full/SeasonAdversarial.t.sol\":211,\"test/full/SeasonFunds.t.sol\":351,\"test/full/SeasonInvariant.t.sol\":348,\"test/full/SeasonRanking.t.sol\":176,\"test/full/Seasons.t.sol\":290,\"test/full/SeatMultiplier.t.sol\":167,\"test/full/Token.t.sol\":80,\"test/full/TraderAttributionInvariant.t.sol\":287,\"test/full/TraderFallbackAdversarial.t.sol\":315,\"test/full/TraderResolution.t.sol\":225,\"test/full/TraderResolverBoundary.t.sol\":126,\"test/full/TradingInvariant.t.sol\":496,\"test/full/Tribunal.t.sol\":615,\"test/full/TribunalAdversarial.t.sol\":225,\"test/full/TribunalInvariant.t.sol\":603,\"test/full/TribunalOracleBoundary.t.sol\":334,\"test/full/TribunalSeasons.t.sol\":309,\"test/full/TribunalStanding.t.sol\":217,\"test/full/TribunalTextProperties.t.sol\":276,\"test/utils/AdversarialTraderRouter.sol\":38,\"test/utils/ArtifactDeployment.sol\":23,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":350,\"test/utils/Mocks.sol\":371,\"test/utils/PaidFeeCustodyHandler.sol\":506,\"test/utils/SeasonModel.sol\":117,\"test/utils/SepoliaFixture.sol\":36},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"62833376e6dc57f03089fbce1fb103b8b6c3c722ec60141def01ddf64c4c4118","verifiedTreeHash":"51462905680dcd8629dcbd12f11b7d36391804e9","verifierVersion":"0.1.0+d372f99e"},{"checks":[{"durationMs":37572,"exitCode":0,"name":"build","output":"Compiling 123 files with Solc 0.8.26\nSolc 0.8.26 finished in 37.44s\nCompiler run successful with warnings:\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:345:9:\n    |\n345 |         uint8 status,\n    |         ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:208:5:\n    |\n208 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (8760): This declaration has the same name as another declaration.\n   --> src/Tribunal.sol:383:53:\n    |\n383 |     function _void(uint256 id, Objection storage o, uint8 status, bytes32 reason) internal {\n    |                                                     ^^^^^^^^^^^^\nNote: The other declaration is here:\n   --> src/Tribunal.sol:208:5:\n    |\n208 |     function status(uint256 pleaId) external view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\nWarning (5667): Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> src/Seasons.sol:422:58:\n    |\n422 |     function _owners() internal view returns (address a, address b, address c) {\n    |                                                          ^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to pure\n   --> src/CabalGate.sol:755:5:\n    |\n755 |     function _text(string storage t, bool json) internal view returns (string memory) {\n    |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":373,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/ManifestInput.t.sol:ManifestInputTest\n[PASS] test_everyManifestWordDeploysAtomicallyAndCommitsTheTribunal() (gas: 22555920)\n[PASS] test_failedLastConstructorRollsBackAllEarlierDeploymentsAndCanRetry() (gas: 27161455)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 8.38ms (8.79ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 14061234)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 15285294)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 14195621)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 14.67ms (13.28ms CPU time)\n\nRan 8 tests for test/MainnetImportReview.t.sol:MainnetImportReviewTest\n[PASS] test_namedDistributorBuyDoesNotIncreaseAMerkleEntitlement() (gas: 1461064)\n[PASS] test_namedGateBuyRevertsWithoutSpendingTheBuyersFunds() (gas: 726269)\n[PASS] test_namedLetterboxBuyCannotChangeAnotherWritersRefund() (gas: 6820997)\n[PASS] test_namedLetterboxBuyCreatesNoEscrowAndCreditsTheNamedRecipient() (gas: 1289371)\n[PASS] test_namedSeasonsBuyBurnsWithTheUnpaidBonus() (gas: 1634863)\n[PASS] test_rivalCannotRecordWhileAnObjectionIsPending() (gas: 10410619)\n[PASS] test_rivalRecordsBeforeSellerAcquiresSeat() (gas: 6240743)\n[PASS] test_rivalRecordsSeatHolderBeforeSeatLeaves() (gas: 5992099)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 22.10ms (12.62ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:PostLaunchTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 53904225)\n[PASS] test_committedLetterboxDeploysLater() (gas: 10792122)\nLogs:\n  deployLetterbox transaction gas: 5580980\n\n[PASS] test_committedTribunalDeploysLater() (gas: 10383989)\nLogs:\n  deployTribunal transaction gas: 5271271\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 44.96ms (59.29ms CPU time)\n\nRan 6 tests for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 54721058)\nLogs:\n  five-contract launch transaction gas through IMD's factory: 13489877\n  gas limit with IMD's headroom: 16457649\n  margin to the 16,777,216 cap: 319567\n\n[PASS] test_launchJsonAddressWordsAreTheTestedAddressesInAValidCase() (gas: 44990)\n[PASS] test_launchJsonCommitsToThisLetterbox() (gas: 34802)\n[PASS] test_launchJsonCommitsToThisTribunal() (gas: 31450)\n[PASS] test_launchJsonEncodesOracleMintFlagAsStaticWord() (gas: 11510)\n[PASS] test_launchJsonNotesFitTheManifestCap() (gas: 9787)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 73.36ms (71.68ms CPU time)\n\nRan 8 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_aMintedFeeOnChainOneNeverOpensTrading() (gas: 65814484)\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 366524414)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 371352694)\nLogs:\n  launch (5 contracts + intake mock): 12782565\n  deployLetterbox: 5210191\n  deployHook: 5885849\n  seed: 641947\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 12904703)\n[PASS] test_ownerMaySeedEarly() (gas: 371312966)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 371451515)\n[PASS] test_theLaunchRefusesAZeroOrSwappedLetterboxHash() (gas: 52942185)\n[PASS] test_theLaunchRefusesAnOracleSetupTheLetterboxWouldRefuse() (gas: 53599493)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 222.90ms (811.43ms CPU time)\n\nRan 6 test suites in 225.09ms (386.37ms CPU time): 30 tests passed, 0 failed, 0 skipped (30 total tests)\n","passed":true},{"durationMs":103,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.appealFor(address,uint256,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.executeSellFor(uint256,uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitFor(address,uint256,uint256,string,uint8,uint256,uint256)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Letterbox.appealAuto(uint256,string)\",\"Letterbox.deliver(uint256)\",\"Letterbox.fallback()\",\"Letterbox.letter(string)\",\"Letterbox.plead(uint256,string)\",\"Letterbox.setName(string)\",\"Letterbox.settle(uint256)\",\"PLEA.acceptOwnership()\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.courtTake(address,uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address)\",\"PLEA.setLetterbox(address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.acceptOwnership()\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.deployLetterbox(bytes)\",\"PleaLaunch.deployTribunal(bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.checkpointObjection(uint256,uint256)\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\",\"Tribunal.expire(uint256)\",\"Tribunal.object(uint256,string)\",\"Tribunal.onObjectionFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Tribunal.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Tribunal.settle(uint256)\"],\"files\":{\".gitignore\":5,\"ADAPTATION.md\":56,\"OBJECTIONS.md\":339,\"README.md\":349,\"audit/FINDINGS.md\":232,\"audit/README.md\":35,\"audit/THREAT-MODEL.md\":114,\"audit/jobs/A1.md\":18,\"audit/jobs/A2.md\":23,\"audit/jobs/A3.md\":16,\"audit/jobs/common.md\":14,\"audit/make_jobs.py\":143,\"audit/rounds/1/A1.objective.txt\":26,\"audit/rounds/1/A1.report.md\":130,\"audit/rounds/1/A1.request.json\":9,\"audit/rounds/1/A2.objective.txt\":31,\"audit/rounds/1/A2.report.md\":323,\"audit/rounds/1/A2.request.json\":9,\"audit/rounds/1/A3.objective.txt\":24,\"audit/rounds/1/A3.report.md\":114,\"audit/rounds/1/A3.request.json\":9,\"audit/rounds/1/manifest.json\":87,\"audit/rounds/10/A1.objective.txt\":26,\"audit/rounds/10/A1.report.md\":60,\"audit/rounds/10/A1.request.json\":9,\"audit/rounds/10/A2.objective.txt\":31,\"audit/rounds/10/A2.report.md\":65,\"audit/rounds/10/A2.request.json\":9,\"audit/rounds/11/A1.objective.txt\":26,\"audit/rounds/11/A1.report.md\":48,\"audit/rounds/11/A1.request.json\":9,\"audit/rounds/11/A2.objective.txt\":31,\"audit/rounds/11/A2.report.md\":79,\"audit/rounds/11/A2.request.json\":9,\"audit/rounds/12/A3.objective.txt\":24,\"audit/rounds/12/A3.report.md\":115,\"audit/rounds/12/A3.request.json\":9,\"audit/rounds/12/manifest.json\":87,\"audit/rounds/2/A1.objective.txt\":26,\"audit/rounds/2/A1.report.md\":133,\"audit/rounds/2/A1.request.json\":9,\"audit/rounds/2/A2.objective.txt\":31,\"audit/rounds/2/A2.report.md\":93,\"audit/rounds/2/A2.request.json\":9,\"audit/rounds/2/A3.objective.txt\":24,\"audit/rounds/2/A3.report.md\":142,\"audit/rounds/2/A3.request.json\":9,\"audit/rounds/2/manifest.json\":87,\"audit/rounds/3/A1.objective.txt\":26,\"audit/rounds/3/A1.report.md\":127,\"audit/rounds/3/A1.request.json\":9,\"audit/rounds/3/A2.objective.txt\":31,\"audit/rounds/3/A2.report.md\":192,\"audit/rounds/3/A2.request.json\":9,\"audit/rounds/3/A3.objective.txt\":24,\"audit/rounds/3/A3.report.md\":119,\"audit/rounds/3/A3.request.json\":9,\"audit/rounds/3/manifest.json\":87,\"audit/rounds/4/A1.objective.txt\":26,\"audit/rounds/4/A1.report.md\":88,\"audit/rounds/4/A1.request.json\":9,\"audit/rounds/4/A2.objective.txt\":31,\"audit/rounds/4/A2.report.md\":207,\"audit/rounds/4/A2.request.json\":9,\"audit/rounds/4/A3.objective.txt\":24,\"audit/rounds/4/A3.report.md\":133,\"audit/rounds/4/A3.request.json\":9,\"audit/rounds/4/manifest.json\":87,\"audit/rounds/5/A1.objective.txt\":26,\"audit/rounds/5/A1.report.md\":135,\"audit/rounds/5/A1.request.json\":9,\"audit/rounds/5/A2.objective.txt\":31,\"audit/rounds/5/A2.report.md\":93,\"audit/rounds/5/A2.request.json\":9,\"audit/rounds/5/A3.objective.txt\":24,\"audit/rounds/5/A3.report.md\":73,\"audit/rounds/5/A3.request.json\":9,\"audit/rounds/5/manifest.json\":87,\"audit/rounds/6/A1.objective.txt\":26,\"audit/rounds/6/A1.report.md\":60,\"audit/rounds/6/A1.request.json\":9,\"audit/rounds/6/A2.objective.txt\":31,\"audit/rounds/6/A2.report.md\":161,\"audit/rounds/6/A2.request.json\":9,\"audit/rounds/6/A3.objective.txt\":24,\"audit/rounds/6/A3.request.json\":9,\"audit/rounds/6/manifest.json\":87,\"audit/rounds/7/A1.objective.txt\":26,\"audit/rounds/7/A1.report.md\":132,\"audit/rounds/7/A1.request.json\":9,\"audit/rounds/7/A2.objective.txt\":31,\"audit/rounds/7/A2.report.md\":95,\"audit/rounds/7/A2.request.json\":9,\"audit/rounds/7/A3.objective.txt\":24,\"audit/rounds/7/A3.report.md\":72,\"audit/rounds/7/A3.request.json\":9,\"audit/rounds/7/manifest.json\":87,\"audit/rounds/8/A1.objective.txt\":26,\"audit/rounds/8/A1.report.md\":121,\"audit/rounds/8/A1.request.json\":9,\"audit/rounds/8/A2.objective.txt\":31,\"audit/rounds/8/A2.request.json\":9,\"audit/rounds/8/A3.objective.txt\":24,\"audit/rounds/8/A3.report.md\":114,\"audit/rounds/8/A3.request.json\":9,\"audit/rounds/8/manifest.json\":87,\"audit/rounds/9/A1.objective.txt\":26,\"audit/rounds/9/A1.report.md\":60,\"audit/rounds/9/A1.request.json\":9,\"foundry.toml\":34,\"launch.json\":58,\"remappings.txt\":4,\"script/Deploy.s.sol\":80,\"script/DeployLetterbox.s.sol\":22,\"script/DeployTribunal.s.sol\":22,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":909,\"src/Letterbox.sol\":757,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":151,\"src/PleaDistributor.sol\":60,\"src/PleaHook.sol\":1119,\"src/PleaLaunch.sol\":220,\"src/Seasons.sol\":467,\"src/Tribunal.sol\":561,\"src/interfaces/IPleaParts.sol\":78,\"src/interfaces/IStacker.sol\":12,\"test/Launch.t.sol\":249,\"test/LaunchManifest.t.sol\":398,\"test/MainnetImportReview.t.sol\":234,\"test/ManifestInput.t.sol\":84,\"test/fork/ForkMainnet.t.sol\":406,\"test/fork/ForkTestnet.t.sol\":918,\"test/full/AppealRounding.t.sol\":147,\"test/full/ArtifactDeployment.t.sol\":59,\"test/full/AuditImported.t.sol\":142,\"test/full/AuditRevision.t.sol\":336,\"test/full/AuditRound1.t.sol\":687,\"test/full/AuditRun3.t.sol\":394,\"test/full/AuditRun5.t.sol\":186,\"test/full/BonusInvariant.t.sol\":541,\"test/full/DistributorAdversarial.t.sol\":342,\"test/full/DistributorOwnership.t.sol\":71,\"test/full/GasPass.t.sol\":403,\"test/full/Gate.t.sol\":472,\"test/full/GateAdversarial.t.sol\":400,\"test/full/GateFailureInvariant.t.sol\":330,\"test/full/Hook.t.sol\":372,\"test/full/HookAdversarial.t.sol\":257,\"test/full/HookRevision.t.sol\":554,\"test/full/JudgeFindings.t.sol\":243,\"test/full/Letterbox.t.sol\":915,\"test/full/LetterboxInvariant.t.sol\":447,\"test/full/MainnetGuard.t.sol\":87,\"test/full/OracleConformance.t.sol\":116,\"test/full/OracleReplay.t.sol\":60,\"test/full/Orientation.t.sol\":126,\"test/full/OwnershipTransitionInvariant.t.sol\":238,\"test/full/Run7Coverage.md\":54,\"test/full/Run7DistributorLifecycle.t.sol\":276,\"test/full/Run7ObjectionPoints.t.sol\":204,\"test/full/Run7SeatAccounting.t.sol\":308,\"test/full/Run85Objection.t.sol\":823,\"test/full/SeasonAdversarial.t.sol\":211,\"test/full/SeasonFunds.t.sol\":351,\"test/full/SeasonInvariant.t.sol\":348,\"test/full/SeasonRanking.t.sol\":176,\"test/full/Seasons.t.sol\":290,\"test/full/SeatMultiplier.t.sol\":167,\"test/full/Token.t.sol\":80,\"test/full/TraderAttributionInvariant.t.sol\":287,\"test/full/TraderFallbackAdversarial.t.sol\":315,\"test/full/TraderResolution.t.sol\":225,\"test/full/TraderResolverBoundary.t.sol\":126,\"test/full/TradingInvariant.t.sol\":496,\"test/full/Tribunal.t.sol\":615,\"test/full/TribunalAdversarial.t.sol\":225,\"test/full/TribunalInvariant.t.sol\":603,\"test/full/TribunalOracleBoundary.t.sol\":334,\"test/full/TribunalSeasons.t.sol\":309,\"test/full/TribunalStanding.t.sol\":217,\"test/full/TribunalTextProperties.t.sol\":276,\"test/utils/AdversarialTraderRouter.sol\":38,\"test/utils/ArtifactDeployment.sol\":23,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":350,\"test/utils/Mocks.sol\":371,\"test/utils/SeasonModel.sol\":117,\"test/utils/SepoliaFixture.sol\":36},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"7a34ba4393407453071f9dbcafdf8f2166779035034cbce11da2a30a8dc37c1f","verifiedTreeHash":"8ebfb9e01730de4a217b00fbee2f1e7781e2af5d","verifierVersion":"0.1.0+d372f99e"}]}