{"assessments":[],"deployments":[{"attestationHash":"5fbc2c0f856457869d3c784c76f6526c8054ed11b229c2acb52946505c1ebf70","chainId":1,"contracts":[{"address":"0x784ff9a3ac5d88a30bfff6f7f2a270161fbe6000","blockNumber":26207048,"name":"PoolInitializationGuard","role":"hook","txHash":"0xd1f8a55476652fb2073fff4597100aa4a8384203f7f23e0bb8ab9b32d4548009"},{"address":"0x37df1e461384eb72b709eee95449839a2806b3fa","blockNumber":26207048,"name":"MerkleDistributor","role":"distributor","txHash":"0xd1f8a55476652fb2073fff4597100aa4a8384203f7f23e0bb8ab9b32d4548009"},{"address":"0x0f240e3795d9491c877001ac2a654640c3f42456","blockNumber":26207048,"name":"BriefsToken","role":"token","txHash":"0xd1f8a55476652fb2073fff4597100aa4a8384203f7f23e0bb8ab9b32d4548009"}],"id":"ed9f5c64-2444-4686-9003-702b982e3453","manifestHash":"2e6811e16c0bdcb1f1b795d2035091dd72fbb4f5f8b315fbd32fc962f0f60b4f","status":"live"}],"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":"5aaa4130-32b4-4b4b-b4b7-d1e79d4d6218","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"87997b6f25242ea22d587ebf555e07d846a6c2067d6bff32cfa2b989628ea598","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"43bbb559781b32ffa44832dddc4e9551b0d27ebaeaa01cd753b59bab8d4ccf58","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"03242200c9ca6288b9b049b6c8c4883a678a6693889c60d33aa4132680552f04","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"e4e6e97403809147ced719e927e58c85570356cf56b71e2e02e28a4749100824","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"5b81ec33cd84a69527d96553dc49d47f3f8257cd2d987aae7a66f1610f4cbff2","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"0571d2149012d495ce6ff8464635e6b0ecd0befad50269ba10ab9d86e45bc09f","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"},{"acceptedSubmissionHash":"bc083a3c92125e3b6ec26e5abf40e589af4a083a3fb55276266743b701551d7c","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"da0d2ed2d326f7c4c340a7901d0df193702d696f346f366d33a2fa2fb5506a67","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: Briefs (BRIEFS).\nToken name: Briefs\nToken symbol: BRIEFS\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nWhat it does: Small entry. Big $IMD pots. An AI jury. Finish on top and take all\nThe court is cooked 🐸⚖️\nbriefs.fun\nx.com/Briefs_fun","parentJobId":null,"planHash":"b5c225fe44197c5d33adfc368028612f8eb9a82500498b7d2c7a02bb56ce5184","previousHash":"69e5e9f35df8ee6e412e88ee8c6f5f9de974caf1a92a4a1b93ea79ebb5c0a603","projectId":"5aaa4130-32b4-4b4b-b4b7-d1e79d4d6218","publication":{"commit":"f7d2c102fc641b30ae7c51e9d9814e453428bfc2","deliveredAt":"2026-10-16T18:58:59.383Z","repoUrl":"https://github.com/identity-md-launches/launch-2010-briefs"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"b0bef6093e65bb9411ea9afe7c3268399ab1b29e995c8159c256ee903caea5fc","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ea62f3bebece9304","findings":[],"hash":"03242200c9ca6288b9b049b6c8c4883a678a6693889c60d33aa4132680552f04","nodeId":"4a8a3537-ff99-4799-9915-36181ec31e3f","outcome":"completed","summary":"I found no defects in Briefs (BRIEFS). `.imd-findings.json` holds an empty findings list and a coverage record answering all 3 entry points.\n\n**What the code is:** `src/BriefsToken.sol` is a plain ERC-20 built on OpenZeppelin v5. It has no overrides, and its constructor takes no arguments and mints `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18` once to `msg.sender`. Nothing else can mint, burn, pause, change ownership or upgrade it. There are no transfer fees or exemptions, so every launch transfer moves exactly the amount sent: factory to distributor, distributor claims, the pool seed, and swaps both ways.\n\n**Specialist and tool leads:**\n- **Economics specialist's info item (the pots and AI jury run off-chain):** dropped. It's a scope note, not a code defect, and the README and manifest notes already say it.\n- **Aderyn's \"large numeric literal\" at line 12:** dropped. It's only a style flag; the value is the correct 1e27.\n- The permissions, flow and math specialists and the test writer reported nothing.\n\n**Checks I ran:**\n- **Library:** the vendored OpenZeppelin library has no local changes, and I read its internal `_update` transfer logic directly.\n- **Tests:** `forge test` passes all 56 repo tests, including the fuzz and invariant suites. I did not run the protected launch tests, because they import harness files that aren't in this tree.\n- **Size:** `forge build --sizes` gives 1,752 bytes deployed and 2,637 bytes of creation code, well under the limits. There are no constructor arguments, no linked libraries and no address-bit requirement, so the factory can deploy it.\n- **`launch.json`:**\n  - It uses only schema keys.\n  - The supply is 1000000000000000000000000000, decimals is 18 and `constructorArgs` is empty, matching the no-argument constructor.\n  - Addresses are lowercase and the notes are under 4,000 characters.\n\n**Coverage:** `approve`, `transfer` and `transferFrom` are each marked `holds`. I also recorded two extra rows: the supply is fixed, and the factory can deploy the contract. No files besides `.imd-findings.json` were changed.","treeHash":null,"usage":{"cachedInputTokens":183385,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2183,"runtime":"claude","turns":5,"wallClockMs":58183}},{"artifacts":[],"attempt":1,"bundleHash":"8cd2c823dc1aa89e4e349bdb4db55ec64ae39c67e5b1748e6a852398d553d0c6","device":"7ce44d9c73b2e554","findings":[],"hash":"0571d2149012d495ce6ff8464635e6b0ecd0befad50269ba10ab9d86e45bc09f","nodeId":"2719627c-1c6a-4b07-a1f9-e2aabca9d2ca","outcome":"completed","summary":"Implemented Briefs (BRIEFS): 1 billion tokens, 18 decimals, minted once to the deployer, with no admin powers or further minting.\n\nVendored dependencies and documented deployment parameters, assumptions, and responsibilities.\n\nVerified with Solidity 0.8.26:\n- `forge build` passes.\n- All 35 tests pass, including fuzzing with the supplied seed.\n- `forge fmt --check` passes.\n\nFull protected launch integration remains for the network verifier.","treeHash":"a0d9db4f8af2010d14cf0cea2f0dd9738c406ca0","usage":{"cachedInputTokens":298624,"inputTokens":61733,"model":"gpt-6-astra","outputTokens":14130,"runtime":"codex","turns":5,"wallClockMs":289577}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bdd9b74dce66953d","findings":[],"hash":"43bbb559781b32ffa44832dddc4e9551b0d27ebaeaa01cd753b59bab8d4ccf58","nodeId":"3f42ffc5-a53a-4155-9ada-573237fa8f3a","outcome":"completed","summary":"The review is complete and reported in `.imd-findings.json`. I found no defects in BriefsToken.\n\n**What I reviewed.** The token is a 17-line contract that inherits OpenZeppelin v5.0.2 ERC20 and mints one billion BRIEFS to the deployer in its constructor. The compiled ABI exposes three state-changing entry points: approve, transfer and transferFrom. I traced each through the vendored base against the Execution Trace, Periphery and First Principles guides, and read the Senior Auditor's Mindset first.\n\n**What held.**\n- **approve** writes only the caller's own allowance and rejects a zero spender. Replacing and revoking work as the standard specifies.\n- **transfer** rejects a zero recipient, reverts on insufficient balance and credits exactly the requested amount. There are no callbacks or external calls.\n- **transferFrom** spends allowance before moving tokens. A finite allowance decrements exactly, the max-uint sentinel stays unchanged, max-minus-one decrements normally, and any revert restores both balances and allowance.\n- **Supply** is minted exactly once in the constructor. No selector can grow or shrink it afterwards, and CREATE2 deployment from the factory credits the factory.\n- **Periphery** is sound. All five vendored OpenZeppelin files diff byte-identical to upstream v5.0.2, and the checksums match.\n- **Runtime** has no DELEGATECALL, CALLCODE or SELFDESTRUCT, no receive or fallback, and rejects truncated calldata and dirty address bits.\n- **Launch flows** move exact amounts because the token has no fee, burn, hook, blacklist, pause or exemption logic.\n\n**Checks I ran.** The build, all 35 existing tests, the formatter check, and eight scratch probes for edge paths succeeded. I removed the scratch tests afterwards and the tree is unchanged.\n\n**One note for the judge.** The brief's description of entries, pots and an AI jury is treated by the README as branding, and no application contract is delivered. This is a scope decision, not a code defect, so I recorded it as a coverage row rather than a finding.","treeHash":null,"usage":{"cachedInputTokens":756570,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":12847,"runtime":"claude","turns":27,"wallClockMs":210484}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c9743cd9807c4c3a","findings":[],"hash":"5b81ec33cd84a69527d96553dc49d47f3f8257cd2d987aae7a66f1610f4cbff2","nodeId":"5c529c74-8ea9-4a09-aec0-6060295f071e","outcome":"completed","summary":"The review is complete. The findings file is written with an empty findings list and a full coverage record. The working tree holds only the untracked findings file, which the task requires.\n\n**Result: no defects in the assigned area.** The Briefs token is a 17-line constant-supply ERC-20 inheriting unmodified OpenZeppelin v5.0.2. It has no owner, roles, initializer, mint, burn, pause, blacklist, hooks, receive, or fallback. The constructor mints the full supply to the deployer and grants nothing else.\n\nWhat I checked, against the Access Control, Trust Gap and Asymmetry guides:\n\n- **Permission map.** The compiled ABI has exactly three state-changing functions. Each is guarded only by the caller being the balance owner or an approved spender. There is no second writer to any storage slot, so no weakest-guard path exists.\n- **Deployer and factory authority.** After deployment the factory holds the supply and nothing else. A factory call to pull a holder's balance without allowance reverts and leaves the balance intact.\n- **Allowance confinement.** A caller can only write its own allowance row. A stranger approving itself the maximum gains no allowance over any other holder.\n- **Paired-function symmetry.** Both transfer paths reach the same internal update and deliver the exact amount for every caller class. Reverts restore balance and allowance atomically. The one asymmetry, max allowance not decrementing, is standard ERC-20 and documented in the README.\n- **Vendored dependency trust.** I fetched the five OpenZeppelin files from the upstream v5.0.2 tag and compared hashes. All five are identical.\n- **Launch floor.** The protected token test's privileged-selector list was replayed from the deployer and a stranger. Every call reverts and supply cannot grow.\n\nTooling that ran: forge build, the project's 35 tests, a scratch suite of 5 access and allowance probes which I removed afterward, forge inspect for ABI and storage layout, and forge fmt check. Slither and Mythril did not run beyond the verifier's attached output, which reported nothing at low or above. The aderyn large-literal note is style only and is not a defect.\n\nOut of my area and worth a line: the brief's jury, pots and payout mechanics are not implemented on chain, and the README states this. The token itself is not the place that behaviour would fail.","treeHash":null,"usage":{"cachedInputTokens":648095,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":10506,"runtime":"claude","turns":25,"wallClockMs":149370}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"11e4593175677f7e","findings":[{"citation":"resolved","description":"The job text describes the product as 'Small entry. Big $IMD pots. An AI jury. Finish on top and take all'. The delivered code is a plain OpenZeppelin v5.0.2 ERC-20 with a constructor-only mint and no application contracts; README.md lines 8-10 record that the earlier builder treated the jury/pot description as branding. From the Economic Security lens this means every economic promise in the brief (entry collection, IMD pot custody, jury adjudication, winner payout) rests on an off-chain operator the token cannot constrain: BRIEFS holders have no on-chain claim on any pot, and no contract enforces that entries or payouts happen. This is a trust assumption the requester should confirm they intend, not a defect in the Solidity, which does exactly what its README says. No fix is proposed; if the requester expected on-chain entry/pot/payout logic, that is a scope decision for them, since adding it would change the agreed design.","line":7,"path":"src/BriefsToken.sol","reproduction":"State: compile the project (forge build) and read out/BriefsToken.sol/BriefsToken.json. Expected if the brief's mechanics were on-chain: functions that accept an entry in IMD or BRIEFS, hold a pot, or pay a winner. Actual: the ABI contains only constructor(), INITIAL_SUPPLY(), allowance, approve, balanceOf, decimals, name, symbol, totalSupply, transfer, transferFrom. Any call such as address(token).call(abi.encodeWithSignature(\"enter(uint256)\", 1e18)) returns success=false (no fallback, no receive; see test_NativeCurrencyAndUnknownCallsAreRejected in test/BriefsToken.t.sol which already shows an unknown selector and native value are rejected). The pot/jury/payout economics therefore cannot be audited on-chain because they do not exist on-chain.","severity":"info","snippet":"/// @notice A fixed-supply, 18-decimal ERC-20, minted once to its deployer.","title":"Brief's entry/pot/jury economics are entirely off-chain; the token carries no on-chain economic mechanism (scope confirmation, not a code defect)"}],"hash":"87997b6f25242ea22d587ebf555e07d846a6c2067d6bff32cfa2b989628ea598","nodeId":"d9548eea-dc57-4dee-ad6a-957a0699ab1a","outcome":"completed","summary":"Review complete. The findings file is written and validated, the scratch directory is removed, and the working tree shows no stray files.\n\n**Outcome: no defects found in the assigned area.** The token at `src/BriefsToken.sol` is a 17-line, constructor-only extension of OpenZeppelin v5.0.2 ERC-20 with no overrides, and every Economic Security, Invariant and Flow Gap failure mode I checked either does not apply or holds.\n\nWhat I verified:\n- **Supply conservation and fixedness.** The only mint is in the constructor. The internal mint, burn and update helpers have no external wrapper in the compiled ABI, so neither the factory nor a stranger can grow or shrink the supply after launch.\n- **Launch flows arrive whole.** With no transfer override, the swarm share, pool seed, remainder and claims move exactly what is requested. A scratch test drained the distributor to exactly zero across 97 unequal claims and fuzzed round trips through a pool-like custodian for 1,024 runs.\n- **Factory trust.** After deployment the deployer holds no power. A transferFrom without allowance from the factory reverts and the holder's balance is untouched.\n- **Dependency integrity.** I fetched the five Solidity files and the license from the upstream v5.0.2 tag and diffed them against the vendored copies. They are byte-identical, so the self-attested checksums are genuine.\n- **Floor requirements.** Decimals are 18, the constructor takes no arguments, the runtime is 1,752 bytes with no DELEGATECALL, CALLCODE or SELFDESTRUCT, and native value or unknown selectors revert.\n- **Static-analysis lead.** The aderyn large-literal note is a compile-time constant equal to 10^27 with no arithmetic effect.\n\nThe one entry in the report is an info-level scope note, not a code defect. The brief describes entries, IMD pots, an AI jury and winner-takes-all payouts, but none of that exists on-chain. The earlier builder documented this as branding in the README. I flagged it so the judge and requester can confirm they intend every economic promise to rest on an off-chain operator.\n\nThe coverage record answers all three listed entry points as holding, plus six invariant and dependency rows. The project's own 35 tests pass on the current tree.","treeHash":null,"usage":{"cachedInputTokens":499352,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":12723,"runtime":"claude","turns":27,"wallClockMs":181032}},{"artifacts":[],"attempt":1,"bundleHash":"8fdad5f03ffd67d9834d2d61980d0b9ca7a744bcd7e756f93f85de31f4c5b19e","device":"723b11f958c65250","findings":[],"hash":"bc083a3c92125e3b6ec26e5abf40e589af4a083a3fb55276266743b701551d7c","nodeId":"db0b7cfd-1ba1-43eb-942e-c6cb4b3feeb3","outcome":"completed","summary":"Done. The manifest is written and verified, and nothing else in the tree changed.\n\n**What I wrote** in `launch.json`:\n\n- Kind \"custom_token\" with token contract BriefsToken, name Briefs, symbol BRIEFS, 18 decimals.\n- Empty constructorArgs, matching the accepted constructor, which takes no parameters and mints the whole supply to msg.sender.\n- totalSupply \"1000000000000000000000000000\", matching the INITIAL_SUPPLY constant in src/BriefsToken.sol.\n- An empty contracts list, since the accepted tree has no application contracts.\n- The pool block exactly as the reference gives it: IMD pair, fee 12500, tick spacing 60, the provenance initialPrice.\n- The requester's economics object copied verbatim.\n- Notes under 4000 characters describing the token's fixed supply, no privileged functions, and why there are no application contracts.\n\n**Verification**\n\n- A schema check confirmed only the allowed top-level keys, lowercase addresses, strings for uint256 values and integers for fee, tickSpacing and decimals.\n- `forge build` compiled cleanly and `forge test` passed all 35 tests with the assigned fuzz seed.\n- `git status` shows launch.json as the only new or changed file.","treeHash":"1c1acc78da543ea953dc513ec528db9f1b8e30a8","usage":{"cachedInputTokens":183621,"inputTokens":130,"model":"claude-fable-5-1","outputTokens":3228,"runtime":"claude","turns":8,"wallClockMs":64166}},{"artifacts":[],"attempt":1,"bundleHash":"c01e9bea2713f738e343147dbaed11db06f1dbe5d5032efaaab32af3d8a706e7","device":"e02bec63aa9dcaa5","findings":[],"hash":"da0d2ed2d326f7c4c340a7901d0df193702d696f346f366d33a2fa2fb5506a67","nodeId":"bf8644a0-cbe9-4087-9cfd-5b31bcfc2402","outcome":"completed","summary":"All 56 tests pass with the verifier's fuzz seed, and only test paths were touched.\n\n**What I found**\n\nThe token is a constructor-only extension of OpenZeppelin v5.0.2 ERC20. I verified the vendored ERC20 source is byte-identical to upstream and all vendored checksums match. There are no mint, burn, admin, or upgrade entry points. No defect was found, so there is no findings file to report.\n\n**What I added**\n\n- `test/invariant/BriefsTokenHandler.sol`: a handler that is also the deployer, driving the token from eight tracked accounts, including a contract holder and the token's own address. It keeps ghost balances, allowances and per-account sent/received flows. Success paths are bounded so they cannot trivially revert. Failure paths are driven on purpose and caught: overdraws, over-allowance spends under finite and infinite allowances, zero-address recipients and spenders, sixteen privileged selectors from every actor, and native-currency deposits. Each checks the exact ERC-6093 error and that state did not move.\n- `test/invariant/BriefsToken.invariant.t.sol`: nine invariants run with fail-on-revert, 256 runs at depth 64. Supply never changes, the ledger sums to the supply, balances and allowances equal the ghost model, nobody sends more than they received and net flow equals the mint, no privileged selector ever succeeds, the token holds no ETH, and the runtime code is unchanged. The coverage table showed every handler action called roughly 1,800 times with zero reverts.\n- `test/BriefsTokenProperties.t.sol`: twenty pinned edges and bounded fuzz properties the existing suite did not reach. Zero address as sender or approver, infinite allowance not bypassing recipient or balance checks, the one-below-infinite allowance staying finite, overdraw and over-allowance across the full uint256 range, round trips, order-independent splits, and direct-versus-delegated equivalence.\n- `test/helpers/TestBase.sol`: additive helpers only, a `bound` function with edge mapping plus reasoned assertions, so no forge-std vendoring was needed.\n\nOne test expectation of mine was wrong during development: a nonzero transferFrom sourced from the zero address reports insufficient allowance, since OpenZeppelin checks allowance before the approver. I corrected the test to the grounded behaviour rather than weakening it.\n\nThe changes are formatted and left uncommitted in the working tree for the submission step.","treeHash":"c938925c2052b3efd5e52c615f4fd3b8411034c6","usage":{"cachedInputTokens":852252,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":29289,"runtime":"claude","turns":29,"wallClockMs":496269}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"809ae05b6282abad","findings":[],"hash":"e4e6e97403809147ced719e927e58c85570356cf56b71e2e02e28a4749100824","nodeId":"0c143de9-0d69-4429-844e-685c718da4fd","outcome":"completed","summary":"Review complete. No substantiated defects in the assigned area, so the deliverable is an empty findings list with a full coverage record: `.imd-findings.json` (validated JSON, 7 coverage rows, all three entry points answered \"holds\").\n\nWhat was checked, and how:\n\n- **Whole math surface**: `src/BriefsToken.sol` contains one constant and one `_mint`; everything else is vendored OpenZeppelin. `1_000_000_000 * 10**18` constant-folds exactly to 10^27, matching the job's supply and 18 decimals with zero rounding, casts, or overflow.\n- **Vendor integrity**: SHA256SUMS pass, and a fresh download of OpenZeppelin v5.0.2 from GitHub diffs byte-identical against `lib/`. The unchecked blocks in `_update`/`_spendAllowance` are upstream's audited code, not project logic.\n- **Boundary matrix, executed**: 12 probes in `test/scratch/` covering zero, 1 wei, max uint, exact-fit allowance, allowance+1, max−1 allowance, max-allowance exemption, self-allowance spend, delegated self-transfer, 1-wei dust round trip, revert atomicity of the allowance write, and self-address transfer. All exact and as documented.\n- **Fuzz**: the 1024-run pinned suite plus two 20,000-run passes under fresh seeds; balance-conservation model holds everywhere. Full suite: 47 tests pass.\n- **Launch splits**: 10%/50%/40% of 1e27 are exact integers with zero truncation remainder, so no precision seam exists at this supply.\n- **Numerical-gap seams**: no division, rounding, narrowing cast, shift, or share pricing exists to reach, so none of the listed seam patterns applies.\n\nEntry points: `approve`, `transfer`, `transferFrom` each flagged `holds` with the checked checks and edges recorded in the coverage rows, alongside four invariant rows (supply conservation, manifest supply/decimals match, exact launch splits, vendored-library identity).\n\nTool leads: aderyn's `large-numeric-literal` on `src/BriefsToken.sol:12` is the intended exact supply constant with no failing input attached; slither reported nothing. Deployer-side pool price derivation is outside the reviewed tree and cannot be influenced by this token.\n\nNo files were changed. The findings file and the scratch probes are the only things written, both in paths the harness excludes.","treeHash":null,"usage":{"cachedInputTokens":1076864,"inputTokens":112617,"model":"claude-fable-5-1","outputTokens":36984,"runtime":"claude","turns":38,"wallClockMs":247695}}],"verification":[{"checks":[{"durationMs":392,"exitCode":0,"name":"build","output":"Compiling 9 files with Solc 0.8.26\nSolc 0.8.26 finished in 346.98ms\nCompiler run successful!\n","passed":true},{"durationMs":399,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/BriefsLaunch.t.sol:BriefsLaunchTest\n[PASS] test_ContractDeployerReceivesEntireSupply() (gas: 32399)\n[PASS] test_Create2DeploymentNeedsNoArgumentsOrExternalConfiguration() (gas: 51242)\n[PASS] test_LaunchAllocationsAndSubsequentTokenFlowsDeliverExactAmounts() (gas: 1219623)\n[PASS] test_NoMintUpgradeBurnOrHolderControlFromFactoryOrStranger() (gas: 2536506)\n[PASS] test_RuntimeFitsDeploymentLimitAndHasNoForbiddenOpcodes() (gas: 461739)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 344.71ms (2.56ms CPU time)\n\nRan 30 tests for test/BriefsToken.t.sol:BriefsTokenTest\n[PASS] testFuzz_ConstructorMintsOnlyToDeployer(address) (runs: 1024, μ: 12525, ~: 12525)\n[PASS] testFuzz_DelegatedTransferConservesSupply(uint256,uint256) (runs: 1024, μ: 137101, ~: 138842)\n[PASS] testFuzz_MixedTransferSequenceConservesEveryBalance(uint256[32]) (runs: 1024, μ: 4313892, ~: 4301262)\n[PASS] testFuzz_OverAllowanceRevertsWithoutChangingState(uint256) (runs: 1024, μ: 107187, ~: 107546)\n[PASS] testFuzz_OverBalanceRevertsWithoutChangingState(uint256) (runs: 1024, μ: 111812, ~: 112154)\n[PASS] testFuzz_SelfTransferCannotCreateTokens(uint256) (runs: 1024, μ: 42980, ~: 42977)\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 78036, ~: 78385)\n[PASS] test_ApprovalReplacementAndRevocation() (gas: 157043)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveBalance() (gas: 75071)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 34685)\n[PASS] test_CanTransferEntireSupplyAndReturnIt() (gas: 120585)\n[PASS] test_ConstructorEmitsFullSupplyMint() (gas: 5513)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 143758)\n[PASS] test_HolderWithoutBalanceCanApproveForFutureReceipts() (gas: 173422)\n[PASS] test_InfiniteAllowanceRemainsUntilRevoked() (gas: 200682)\n[PASS] test_InsufficientBalanceRevertsAtomically() (gas: 104101)\n[PASS] test_MaxUintTransferCannotOverflowOrMint() (gas: 52125)\n[PASS] test_MetadataAndInitialSupply() (gas: 73773)\n[PASS] test_NativeCurrencyAndUnknownCallsAreRejected() (gas: 57715)\n[PASS] test_TransferEmitsEventAndMovesExactAmount() (gas: 79841)\n[PASS] test_TransferFromInsufficientBalanceRestoresAllowance() (gas: 157585)\n[PASS] test_TransferFromSpendsExactAllowanceAndEmitsTransfer() (gas: 217897)\n[PASS] test_TransferFromToSameHolderConsumesAllowanceWithoutCreatingTokens() (gas: 101809)\n[PASS] test_TransferFromZeroRecipientRestoresAllowance() (gas: 102724)\n[PASS] test_TransferToZeroRevertsWithoutBurning() (gas: 41736)\n[PASS] test_UnapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 92310)\n[PASS] test_ZeroSenderRejectedEvenForZeroTransferFrom() (gas: 32956)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 57344)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 53173)\n[PASS] test_ZeroTransferToZeroStillReverts() (gas: 30361)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 350.55ms (2.35s CPU time)\n\nRan 2 test suites in 351.39ms (695.26ms CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":23,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"BriefsToken.approve(address,uint256)\",\"BriefsToken.transfer(address,uint256)\",\"BriefsToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":114,\"SECURITY.md\":33,\"foundry.toml\":19,\"src/BriefsToken.sol\":17,\"test/BriefsLaunch.t.sol\":162,\"test/BriefsToken.t.sol\":353,\"test/helpers/TestBase.sol\":37},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":380,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":236,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/BriefsToken.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"0571d2149012d495ce6ff8464635e6b0ecd0befad50269ba10ab9d86e45bc09f","verifiedTreeHash":"a0d9db4f8af2010d14cf0cea2f0dd9738c406ca0","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":387,"exitCode":0,"name":"build","output":"Compiling 9 files with Solc 0.8.26\nSolc 0.8.26 finished in 341.42ms\nCompiler run successful!\n","passed":true},{"durationMs":437,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/BriefsLaunch.t.sol:BriefsLaunchTest\n[PASS] test_ContractDeployerReceivesEntireSupply() (gas: 32399)\n[PASS] test_Create2DeploymentNeedsNoArgumentsOrExternalConfiguration() (gas: 51242)\n[PASS] test_LaunchAllocationsAndSubsequentTokenFlowsDeliverExactAmounts() (gas: 1219623)\n[PASS] test_NoMintUpgradeBurnOrHolderControlFromFactoryOrStranger() (gas: 2536506)\n[PASS] test_RuntimeFitsDeploymentLimitAndHasNoForbiddenOpcodes() (gas: 461739)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 10.67ms (8.70ms CPU time)\n\nRan 30 tests for test/BriefsToken.t.sol:BriefsTokenTest\n[PASS] testFuzz_ConstructorMintsOnlyToDeployer(address) (runs: 1024, μ: 12525, ~: 12525)\n[PASS] testFuzz_DelegatedTransferConservesSupply(uint256,uint256) (runs: 1024, μ: 137101, ~: 138842)\n[PASS] testFuzz_MixedTransferSequenceConservesEveryBalance(uint256[32]) (runs: 1024, μ: 4313892, ~: 4301262)\n[PASS] testFuzz_OverAllowanceRevertsWithoutChangingState(uint256) (runs: 1024, μ: 107187, ~: 107546)\n[PASS] testFuzz_OverBalanceRevertsWithoutChangingState(uint256) (runs: 1024, μ: 111812, ~: 112154)\n[PASS] testFuzz_SelfTransferCannotCreateTokens(uint256) (runs: 1024, μ: 42980, ~: 42977)\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 78036, ~: 78385)\n[PASS] test_ApprovalReplacementAndRevocation() (gas: 157043)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveBalance() (gas: 75071)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 34685)\n[PASS] test_CanTransferEntireSupplyAndReturnIt() (gas: 120585)\n[PASS] test_ConstructorEmitsFullSupplyMint() (gas: 5513)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 143758)\n[PASS] test_HolderWithoutBalanceCanApproveForFutureReceipts() (gas: 173422)\n[PASS] test_InfiniteAllowanceRemainsUntilRevoked() (gas: 200682)\n[PASS] test_InsufficientBalanceRevertsAtomically() (gas: 104101)\n[PASS] test_MaxUintTransferCannotOverflowOrMint() (gas: 52125)\n[PASS] test_MetadataAndInitialSupply() (gas: 73773)\n[PASS] test_NativeCurrencyAndUnknownCallsAreRejected() (gas: 57715)\n[PASS] test_TransferEmitsEventAndMovesExactAmount() (gas: 79841)\n[PASS] test_TransferFromInsufficientBalanceRestoresAllowance() (gas: 157585)\n[PASS] test_TransferFromSpendsExactAllowanceAndEmitsTransfer() (gas: 217897)\n[PASS] test_TransferFromToSameHolderConsumesAllowanceWithoutCreatingTokens() (gas: 101809)\n[PASS] test_TransferFromZeroRecipientRestoresAllowance() (gas: 102724)\n[PASS] test_TransferToZeroRevertsWithoutBurning() (gas: 41736)\n[PASS] test_UnapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 92310)\n[PASS] test_ZeroSenderRejectedEvenForZeroTransferFrom() (gas: 32956)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 57344)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 53173)\n[PASS] test_ZeroTransferToZeroStillReverts() (gas: 30361)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 384.51ms (1.91s CPU time)\n\nRan 2 test suites in 386.15ms (395.18ms CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":28,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"BriefsToken.approve(address,uint256)\",\"BriefsToken.transfer(address,uint256)\",\"BriefsToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":114,\"SECURITY.md\":33,\"foundry.toml\":19,\"launch.json\":24,\"src/BriefsToken.sol\":17,\"test/BriefsLaunch.t.sol\":162,\"test/BriefsToken.t.sol\":353,\"test/helpers/TestBase.sol\":37},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"bc083a3c92125e3b6ec26e5abf40e589af4a083a3fb55276266743b701551d7c","verifiedTreeHash":"1c1acc78da543ea953dc513ec528db9f1b8e30a8","verifierVersion":"0.1.0+d952fceb"},{"checks":[{"durationMs":737,"exitCode":0,"name":"build","output":"Compiling 12 files with Solc 0.8.26\nSolc 0.8.26 finished in 683.12ms\nCompiler run successful!\n","passed":true},{"durationMs":16255,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 20 tests for test/BriefsTokenProperties.t.sol:BriefsTokenPropertiesTest\n[PASS] testFuzz_AllowanceIsIsolatedPerPair(address,address,uint256) (runs: 1000, μ: 78884, ~: 79226)\n[PASS] testFuzz_AnyOverAllowanceRevertsExactly(uint256,uint256) (runs: 1000, μ: 100943, ~: 101157)\n[PASS] testFuzz_AnyOverdrawRevertsExactly(uint256,uint256) (runs: 1000, μ: 105018, ~: 105614)\n[PASS] testFuzz_ApproveStoresAnyAmountAndLatestWins(uint256,uint256) (runs: 1000, μ: 142661, ~: 142712)\n[PASS] testFuzz_DelegatedAndDirectTransfersAreEquivalent(uint256) (runs: 1000, μ: 186612, ~: 187483)\n[PASS] testFuzz_DeployerIsSoleInitialHolder(address,address) (runs: 1000, μ: 23347, ~: 23349)\n[PASS] testFuzz_FiniteAllowanceIsSpentExactlyOnce(uint256,uint256) (runs: 1000, μ: 153200, ~: 154562)\n[PASS] testFuzz_InfiniteAllowanceSpendsUpToBalanceOnly(uint256,uint256) (runs: 1000, μ: 220122, ~: 221492)\n[PASS] testFuzz_SplitTransfersAreOrderIndependent(uint256,uint256) (runs: 1000, μ: 202831, ~: 204311)\n[PASS] testFuzz_TransferRoundTripRestoresState(address,uint256) (runs: 1000, μ: 116384, ~: 116132)\n[PASS] test_AllowanceOneBelowInfiniteIsFinite() (gas: 116207)\n[PASS] test_EachDeploymentIsAnIndependentFixedSupply() (gas: 93777)\n[PASS] test_InfiniteAllowanceDoesNotBypassBalanceCheck() (gas: 147004)\n[PASS] test_InfiniteAllowanceDoesNotBypassZeroRecipientCheck() (gas: 92290)\n[PASS] test_OneWeiTransfersAreExact() (gas: 157853)\n[PASS] test_SupplyIsOneBillionWholeTokensAtEighteenDecimals() (gas: 51677)\n[PASS] test_TransferFromZeroSourceWithNonzeroAmountReverts() (gas: 52330)\n[PASS] test_ZeroAddressCannotApprove() (gas: 34982)\n[PASS] test_ZeroAddressCannotMintBySending() (gas: 42103)\n[PASS] test_ZeroAddressCannotSendEvenZero() (gas: 42021)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 377.01ms (2.79s CPU time)\n\nRan 5 tests for test/BriefsLaunch.t.sol:BriefsLaunchTest\n[PASS] test_ContractDeployerReceivesEntireSupply() (gas: 32399)\n[PASS] test_Create2DeploymentNeedsNoArgumentsOrExternalConfiguration() (gas: 51242)\n[PASS] test_LaunchAllocationsAndSubsequentTokenFlowsDeliverExactAmounts() (gas: 1219623)\n[PASS] test_NoMintUpgradeBurnOrHolderControlFromFactoryOrStranger() (gas: 2536506)\n[PASS] test_RuntimeFitsDeploymentLimitAndHasNoForbiddenOpcodes() (gas: 461739)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 377.16ms (3.10ms CPU time)\n\nRan 30 tests for test/BriefsToken.t.sol:BriefsTokenTest\n[PASS] testFuzz_ConstructorMintsOnlyToDeployer(address) (runs: 1024, μ: 12525, ~: 12525)\n[PASS] testFuzz_DelegatedTransferConservesSupply(uint256,uint256) (runs: 1024, μ: 137375, ~: 138854)\n[PASS] testFuzz_MixedTransferSequenceConservesEveryBalance(uint256[32]) (runs: 1024, μ: 4321028, ~: 4309944)\n[PASS] testFuzz_OverAllowanceRevertsWithoutChangingState(uint256) (runs: 1024, μ: 107210, ~: 107570)\n[PASS] testFuzz_OverBalanceRevertsWithoutChangingState(uint256) (runs: 1024, μ: 111820, ~: 112178)\n[PASS] testFuzz_SelfTransferCannotCreateTokens(uint256) (runs: 1024, μ: 42982, ~: 42977)\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 78083, ~: 78385)\n[PASS] test_ApprovalReplacementAndRevocation() (gas: 157043)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveBalance() (gas: 75071)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 34685)\n[PASS] test_CanTransferEntireSupplyAndReturnIt() (gas: 120585)\n[PASS] test_ConstructorEmitsFullSupplyMint() (gas: 5513)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 143758)\n[PASS] test_HolderWithoutBalanceCanApproveForFutureReceipts() (gas: 173422)\n[PASS] test_InfiniteAllowanceRemainsUntilRevoked() (gas: 200682)\n[PASS] test_InsufficientBalanceRevertsAtomically() (gas: 104101)\n[PASS] test_MaxUintTransferCannotOverflowOrMint() (gas: 52125)\n[PASS] test_MetadataAndInitialSupply() (gas: 73773)\n[PASS] test_NativeCurrencyAndUnknownCallsAreRejected() (gas: 57715)\n[PASS] test_TransferEmitsEventAndMovesExactAmount() (gas: 79841)\n[PASS] test_TransferFromInsufficientBalanceRestoresAllowance() (gas: 157585)\n[PASS] test_TransferFromSpendsExactAllowanceAndEmitsTransfer() (gas: 217897)\n[PASS] test_TransferFromToSameHolderConsumesAllowanceWithoutCreatingTokens() (gas: 101809)\n[PASS] test_TransferFromZeroRecipientRestoresAllowance() (gas: 102724)\n[PASS] test_TransferToZeroRevertsWithoutBurning() (gas: 41736)\n[PASS] test_UnapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 92310)\n[PASS] test_ZeroSenderRejectedEvenForZeroTransferFrom() (gas: 32956)\n[PASS] test_ZeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 57344)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 53173)\n[PASS] test_ZeroTransferToZeroStillReverts() (gas: 30361)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 377.17ms (1.14s CPU time)\n\nRan 1 test for test/invariant/BriefsToken.invariant.t.sol:BriefsTokenInvariantTest\n[PASS]\nBriefsTokenInvariantTest invariants:\n[PASS] invariant_AllowancesMatchGhostModel\n[PASS] invariant_BalancesMatchGhostModel\n[PASS] invariant_LedgerSumsToSupply\n[PASS] invariant_NoPrivilegedSelectorEverSucceeds\n[PASS] invariant_NobodySendsMoreThanReceived\n[PASS] invariant_SupplyNeverChanges\n[PASS] invariant_TokenHoldsNoNativeCurrency\n[PASS] invariant_TokenRuntimeIsImmutable\n[PASS] invariant_ZeroAddressHoldsNothing\n BriefsTokenInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+-----------------------+-------+---------+----------╮\n| Contract           | Selector              | Calls | Reverts | Discards |\n+=========================================================================+\n| BriefsTokenHandler | adminAttempt          | 1783  | 0       | 0        |\n|--------------------+-----------------------+-------+---------+----------|\n| BriefsTokenHandler | approve               | 1861  | 0       | 0        |\n|--------------------+-----------------------+-------+---------+----------|\n| BriefsTokenHandler | approveZeroSpender    | 1773  | 0       | 0        |\n|--------------------+-----------------------+-------+---------+----------|\n| BriefsTokenHandler | donateNative          | 1741  | 0       | 0        |\n|--------------------+-----------------------+-------+---------+----------|\n| BriefsTokenHandler | transfer              | 1910  | 0       | 0        |\n|--------------------+-----------------------+-------+---------+----------|\n| BriefsTokenHandler | transferFrom          | 1821  | 0       | 0        |\n|--------------------+-----------------------+-------+---------+----------|\n| BriefsTokenHandler | transferFromOverLimit | 1798  | 0       | 0        |\n|--------------------+-----------------------+-------+---------+----------|\n| BriefsTokenHandler | transferOverdraw      | 1831  | 0       | 0        |\n|--------------------+-----------------------+-------+---------+----------|\n| BriefsTokenHandler | transferToZero        | 1866  | 0       | 0        |\n╰--------------------+-----------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 16.20s (16.20s CPU time)\n\nRan 4 test suites in 16.20s (17.33s CPU time): 56 tests passed, 0 failed, 0 skipped (56 total tests)\n","passed":true},{"durationMs":28,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"BriefsToken.approve(address,uint256)\",\"BriefsToken.transfer(address,uint256)\",\"BriefsToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":114,\"SECURITY.md\":33,\"foundry.toml\":19,\"src/BriefsToken.sol\":17,\"test/BriefsLaunch.t.sol\":162,\"test/BriefsToken.t.sol\":353,\"test/BriefsTokenProperties.t.sol\":286,\"test/helpers/TestBase.sol\":99,\"test/invariant/BriefsToken.invariant.t.sol\":114,\"test/invariant/BriefsTokenHandler.sol\":330},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"da0d2ed2d326f7c4c340a7901d0df193702d696f346f366d33a2fa2fb5506a67","verifiedTreeHash":"c938925c2052b3efd5e52c615f4fd3b8411034c6","verifierVersion":"0.1.0+d952fceb"}]}