{"workflow":null,"planning":null,"id":"7a11a0dc-b264-453b-ad51-5817f6f3b0a1","state":"executing","template":"shape:chain","objective":"[SIMD-LAUNCH]\nToken name: SpongeBot\nToken symbol: SPONGEBOT\n\nSpongeBotHook (the launch pool's hook) implements two immutable fees applied on swaps paired with IMD: 1) Anti-snipe fee starting at 3000 bps (30%) on the paired currency side, linearly decaying to 0 over the first 10 blocks after pool opening.\n\nMechanics specification (authoritative: where anything above differs, follow these exactly):\nM1. Anti-snipe: during the first 10 blocks after the pool opens, the hook adds a swap fee in the paired currency, collected through beforeSwap/afterSwap return deltas, that starts at 30% and decays linearly to 0%. That fee accrues in the hook and an anyone-callable sweep() sends it to the SIMD Hackathon vault 0x3dd5f73dd1a4e62630fad3909673f130ad429985, fixed at construction; it is never swapped, burned or donated inside the pool.\nM2. Staking rewards: the hook takes an extra 1% of every swap in the paired currency through beforeSwap/afterSwap return deltas; it accrues in the hook and is never spent inside a swap callback. A staking vault contract is created by the hook's constructor (its address is immutable). An anyone-callable sweep() in its own transaction moves the accrued fee to the vault and calls notifyReward(amount) on it. The vault uses the reward-per-token accumulator pattern: holders stake the launched token, earn the paired currency pro rata to stake and time, and can stake, unstake and claim at any time; rewards that arrive while nothing is staked are kept for the next stakers. No owner, no admin, no withdrawal of staked tokens by anyone but the staker. Views: earned(address), totalStaked(), pending() on the hook.\n\nBuild requirements (mandatory):\n- Context: an ordinary, legitimate token launch on Ethereum. The coin's name, story and theme are branding only; nothing here is real-world harm or offensive security work.\n- A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = \"none\", so the build is reproducible and verifiable: deployed contracts live in src/ and every import resolves to a committed file.\n- Contracts: SpongeBotHook, SpongeBotVault. The hook is the hook of this launch's pool; keep its creation code within the EIP-3860 size limit.\n- No selfdestruct and no delegatecall anywhere in runtime code. No proxies, no owner, no upgradeability.\n- Chain: Ethereum mainnet (set by the order, not a launch.json field). Uniswap v4 PoolManager: 0x000000000004444c5dc75cB358380D2e3dE08A90 (pass it to the hook constructor).\n- launch.json top-level keys, exactly: kind (\"univ4_hook\"), token {contract, name, symbol, decimals}, hook {contract, constructorArgs, permissions}, pool, notes (one string). No chainId, economics or other keys.\n- Paired currency: IMD, the ERC-20 at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 on Ethereum mainnet (18 decimals).\n- Every address the hook needs is known now and fixed at deployment; nothing may require an owner or a setter after launch.\n- Supply distribution is done by the launch factory: it mints the supply, seeds the pool, sends the swarm's 10% through its Merkle distributor and any remainder to remainderTo. No contract here sends the swarm allocation, and the token always mints the entire 1,000,000,000 (1e27 units) to its deployer: never subtract the swarm's 10% (IMD's protected invariants park any launch whose deployer holds less).\n- Hook fees are collected through beforeSwap/afterSwap return deltas, on top of the pool's static 1.25% LP fee (fee tier 12500). Never use the dynamic-fee flag, never call updateDynamicLPFee, never override the LP fee. The hook never reverts a real swap; the exceptions are a swap whose specified amount is so large that adding the hook fee would overflow int256 (for example type(int256).max requests): it may revert with UnrepresentableFee. That is the accepted swap domain.\n- The hook is a plain immutable contract deployed directly at a CREATE2-mined address with the right permission bits, and launch.json names the hook itself (no wrapper or proxy between the manifest and the hook).\n- Tests: Foundry unit, fuzz and mainnet-fork tests that swap through the real PoolManager with the hook (exact-input and exact-output, buys and sells), plus permission bits matching the hook address.\n- Every hook fee is proportional to what actually filled. Prefer taking it in afterSwap from the real BalanceDelta on the unspecified currency (afterSwapReturnDelta). If a fee is reserved on the specified side in beforeSwap, afterSwap must reconcile it against the actual fill and refund the excess to the swapper as an ERC-6909 claim, so a price-limited partial fill never pays more than the fee rate on what filled. Test exact-input and exact-output partial fills with a price limit.\n- launch.json pool: pairedCurrency 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tickSpacing 60, initialPrice \"79228162514264337593543950336\" (provenance only; the launch factory sets the opening price from the economics). Manifest shape as in live launch #1009: kind \"univ4_hook\"; token {contract, name, symbol, decimals} and hook {contract, ...} where each contract is a bare Solidity contract name like \"SPONGEBOT\" or \"SpongeBotHook\" (never a path or \"File.sol:Name\"); hook {contract, constructorArgs (e.g. [\"$poolManager\", \"$token\"]), permissions: an ARRAY of callback names such as [\"beforeInitialize\", \"beforeSwap\", \"afterSwap\", \"beforeSwapReturnDelta\", \"afterSwapReturnDelta\"]}; pool {...}; notes: a string explaining constructor args, permission bits and fees.","blockedReason":null,"createdAt":"2026-10-09T05:47:17.742Z","updatedAt":"2026-10-09T05:47:17.742Z","paidBy":"0x9fadab91f6fa03dbd7f4f8a08a338704baacf63f","parentJobId":null,"project":{"id":"7a11a0dc-b264-453b-ad51-5817f6f3b0a1","head":null,"running":"7a11a0dc-b264-453b-ad51-5817f6f3b0a1","versions":[{"jobId":"7a11a0dc-b264-453b-ad51-5817f6f3b0a1","workflowId":null,"objective":"[SIMD-LAUNCH]\nToken name: SpongeBot\nToken symbol: SPONGEBOT\n\nSpongeBotHook (the launch pool's hook) implements two immutable fees applied on swaps paired with IMD: 1) Anti-snipe fee starting at 3000 bps (30%) on the paired currency side, linearly decaying to 0 over the first 10 blocks after pool opening.\n\nMechanics specification (authoritative: where anything above differs, follow these exactly):\nM1. Anti-snipe: during the first 10 blocks after the pool opens, the hook adds a swap fee in the paired currency, collected through beforeSwap/afterSwap return deltas, that starts at 30% and decays linearly to 0%. That fee accrues in the hook and an anyone-callable sweep() sends it to the SIMD Hackathon vault 0x3dd5f73dd1a4e62630fad3909673f130ad429985, fixed at construction; it is never swapped, burned or donated inside the pool.\nM2. Staking rewards: the hook takes an extra 1% of every swap in the paired currency through beforeSwap/afterSwap return deltas; it accrues in the hook and is never spent inside a swap callback. A staking vault contract is created by the hook's constructor (its address is immutable). An anyone-callable sweep() in its own transaction moves the accrued fee to the vault and calls notifyReward(amount) on it. The vault uses the reward-per-token accumulator pattern: holders stake the launched token, earn the paired currency pro rata to stake and time, and can stake, unstake and claim at any time; rewards that arrive while nothing is staked are kept for the next stakers. No owner, no admin, no withdrawal of staked tokens by anyone but the staker. Views: earned(address), totalStaked(), pending() on the hook.\n\nBuild requirements (mandatory):\n- Context: an ordinary, legitimate token launch on Ethereum. The coin's name, story and theme are branding only; nothing here is real-world harm or offensive security work.\n- A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = \"none\", so the build is reproducible and verifiable: deployed contracts live in src/ and every import resolves to a committed file.\n- Contracts: SpongeBotHook, SpongeBotVault. The hook is the hook of this launch's pool; keep its creation code within the EIP-3860 size limit.\n- No selfdestruct and no delegatecall anywhere in runtime code. No proxies, no owner, no upgradeability.\n- Chain: Ethereum mainnet (set by the order, not a launch.json field). Uniswap v4 PoolManager: 0x000000000004444c5dc75cB358380D2e3dE08A90 (pass it to the hook constructor).\n- launch.json top-level keys, exactly: kind (\"univ4_hook\"), token {contract, name, symbol, decimals}, hook {contract, constructorArgs, permissions}, pool, notes (one string). No chainId, economics or other keys.\n- Paired currency: IMD, the ERC-20 at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 on Ethereum mainnet (18 decimals).\n- Every address the hook needs is known now and fixed at deployment; nothing may require an owner or a setter after launch.\n- Supply distribution is done by the launch factory: it mints the supply, seeds the pool, sends the swarm's 10% through its Merkle distributor and any remainder to remainderTo. No contract here sends the swarm allocation, and the token always mints the entire 1,000,000,000 (1e27 units) to its deployer: never subtract the swarm's 10% (IMD's protected invariants park any launch whose deployer holds less).\n- Hook fees are collected through beforeSwap/afterSwap return deltas, on top of the pool's static 1.25% LP fee (fee tier 12500). Never use the dynamic-fee flag, never call updateDynamicLPFee, never override the LP fee. The hook never reverts a real swap; the exceptions are a swap whose specified amount is so large that adding the hook fee would overflow int256 (for example type(int256).max requests): it may revert with UnrepresentableFee. That is the accepted swap domain.\n- The hook is a plain immutable contract deployed directly at a CREATE2-mined address with the right permission bits, and launch.json names the hook itself (no wrapper or proxy between the manifest and the hook).\n- Tests: Foundry unit, fuzz and mainnet-fork tests that swap through the real PoolManager with the hook (exact-input and exact-output, buys and sells), plus permission bits matching the hook address.\n- Every hook fee is proportional to what actually filled. Prefer taking it in afterSwap from the real BalanceDelta on the unspecified currency (afterSwapReturnDelta). If a fee is reserved on the specified side in beforeSwap, afterSwap must reconcile it against the actual fill and refund the excess to the swapper as an ERC-6909 claim, so a price-limited partial fill never pays more than the fee rate on what filled. Test exact-input and exact-output partial fills with a price limit.\n- launch.json pool: pairedCurrency 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tickSpacing 60, initialPrice \"79228162514264337593543950336\" (provenance only; the launch factory sets the opening price from the economics). Manifest shape as in live launch #1009: kind \"univ4_hook\"; token {contract, name, symbol, decimals} and hook {contract, ...} where each contract is a bare Solidity contract name like \"SPONGEBOT\" or \"SpongeBotHook\" (never a path or \"File.sol:Name\"); hook {contract, constructorArgs (e.g. [\"$poolManager\", \"$token\"]), permissions: an ARRAY of callback names such as [\"beforeInitialize\", \"beforeSwap\", \"afterSwap\", \"beforeSwapReturnDelta\", \"afterSwapReturnDelta\"]}; pool {...}; notes: a string explaining constructor args, permission bits and fees.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"executing","createdAt":"2026-10-09T05:47:17.742Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"univ4_hook","id":null,"status":null,"chainId":1},"oracleRequestId":null,"delivery":null,"media":null,"nodes":[{"key":"audit_economics","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T07:24:15.838Z","verdict":null,"seat":{"tokenId":"1581","agentId":"51083"},"live":null},{"key":"audit_flow","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T07:27:51.342Z","verdict":null,"seat":{"tokenId":"470","agentId":"51216"},"live":null},{"key":"audit_judge","role":"review","state":"waiting","attempt":0,"revisions":1,"judgeRevisions":1,"dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T07:38:54.348Z","verdict":null,"seat":{"tokenId":"1314","agentId":"51285"},"live":null},{"key":"audit_math","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T07:23:34.882Z","verdict":null,"seat":{"tokenId":"1059","agentId":"51425"},"live":null},{"key":"audit_permissions","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T07:24:32.385Z","verdict":null,"seat":{"tokenId":"826","agentId":"52180"},"live":null},{"key":"build_contract_project","role":"implement","state":"accepted","attempt":1,"revisions":2,"judgeRevisions":1,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T07:57:12.426Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+c4d32abc","verifiedTreeHash":"28c6de7c35c1855465713a2fc0b2084abbb394fa","at":"2026-10-09T07:57:12.427Z","failedChecks":[]},"seat":{"tokenId":"1484","agentId":"51367"},"live":null},{"key":"manifest","role":"integrate","state":"waiting","attempt":0,"revisions":1,"judgeRevisions":1,"dependsOn":["build_contract_project","write_foundry_tests"],"allowedPaths":["launch.json"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T07:38:54.348Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+c4d32abc","verifiedTreeHash":"33bff7888fb9e6adeb532ad11e176d5ee2669f51","at":"2026-10-09T07:10:16.200Z","failedChecks":[]},"seat":{"tokenId":"467","agentId":"52121"},"live":null},{"key":"write_foundry_tests","role":"tests","state":"working","attempt":1,"revisions":2,"judgeRevisions":1,"dependsOn":["build_contract_project"],"allowedPaths":["test","test/**"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-09T07:57:19.636Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+c4d32abc","verifiedTreeHash":"290f151744c7a09473af2ca06e53c4242f0ade3b","at":"2026-10-09T07:04:20.399Z","failedChecks":[]},"seat":{"tokenId":"1327","agentId":"52480"},"live":{"seat":{"tokenId":"172","agentId":"52479"},"runtime":"claude","model":"claude-fable-5-1","state":"accepted","since":"2026-10-09T07:57:12.838Z"}}],"reviews":[]}