{"workflow":null,"planning":null,"id":"23fd9e94-639b-46f1-a465-d6f1a449b049","state":"completed","template":"shape:chain","objective":"Launch \"imdDRONE\" (token name: imdDRONE, symbol: DRONE) on Ethereum mainnet, paired with IMD: the launch's standard token, whose Uniswap v4 launch pool uses a custom fee hook, DroneHook. DRONE is the reward coin of imdDRONES, a proof-of-work NFT collection that is deployed separately after this launch: its contract pays a fixed amount of DRONE to a holder who burns a drone, out of the supply this launch leaves to the requester. Nothing in this launch knows about that contract; it only holds and transfers DRONE like any wallet. Write all code from scratch.\n\nCONTRACT: DroneHook (the launch pool's hook)\n1. On every swap the hook takes a fee in IMD: on buys from the IMD paid in, on sells from the IMD paid out, exact-input and exact-output alike. The fee is collected through beforeSwap and afterSwap return deltas and is charged on top of the pool's own LP fee. The pool uses the launch policy's static fee tier 12500 (1.25%). The hook never uses the dynamic-fee flag, never calls updateDynamicLPFee and never overrides the LP fee.\n2. Standing fee: KEEPER_FEE = 300 bps of the swap's IMD amount, an immutable constant.\n3. Opening fee: for the first 60 minutes after pool initialization the hook fee starts at 4000 bps and decreases linearly with block.timestamp to 300 bps at 60 minutes, then stays 300 bps forever. OPENING_FEE = 4000 bps and OPENING_SECONDS = 3600 are immutable constants. The fee is the same for every address, and the same for buys and sells.\n4. Fee IMD accrues in the hook. sweep(), callable by anyone, sends all of it to keeper, an address fixed at construction: 0x086b47d05aae785f871191c1198231e9e6033c64. It can never be changed, and the fee can go nowhere else.\n5. Views for a front end: feeNow() (the hook fee in bps at this moment), openedAt() (the pool's initialization time), pending() (IMD waiting to be swept), collected() (IMD ever taken).\n6. No other effect on trading: no blocklist, allowlist, pause, maximum transaction or wallet size, and no per-address logic. The hook never reverts a swap.\n7. No owner, no admin, no proxy, no upgradeability and no DELEGATECALL in any delivered contract, deployment and salt-mining helpers included. The hook is a plain immutable contract deployed directly at a CREATE2-mined address with the right permission bits, and the manifest names the hook itself, with no wrapper between the manifest and the hook.\n\nTOKEN\nThe launch's standard token: name imdDRONE, symbol DRONE, no custom logic, no transfer tax.\n\nTESTS AND REVIEW\nFoundry unit, fuzz and mainnet-fork tests: (1) the hook takes exactly the scheduled fee on buys and sells, exact-input and exact-output, along the 60-minute curve and exactly 300 bps after, never more, on top of the unchanged 1.25% LP fee; (2) the fee is always taken in IMD, whichever side of the pool IMD is on; (3) no hook state can make a swap revert; (4) sweep pays only the keeper, any caller, any number of times; (5) reentrancy; (6) no DELEGATECALL in any delivered contract and hook permission bits matching its address. Mainnet fork: buy and sell through the real PoolManager with the hook, against the real IMD. Independent security review with a published report.","blockedReason":null,"createdAt":"2026-10-07T12:43:01.951Z","updatedAt":"2026-10-07T14:25:35.028Z","paidBy":"0x086b47d05aae785f871191c1198231e9e6033c64","parentJobId":null,"project":{"id":"23fd9e94-639b-46f1-a465-d6f1a449b049","head":"23fd9e94-639b-46f1-a465-d6f1a449b049","running":null,"versions":[{"jobId":"23fd9e94-639b-46f1-a465-d6f1a449b049","workflowId":null,"objective":"Launch \"imdDRONE\" (token name: imdDRONE, symbol: DRONE) on Ethereum mainnet, paired with IMD: the launch's standard token, whose Uniswap v4 launch pool uses a custom fee hook, DroneHook. DRONE is the reward coin of imdDRONES, a proof-of-work NFT collection that is deployed separately after this launch: its contract pays a fixed amount of DRONE to a holder who burns a drone, out of the supply this launch leaves to the requester. Nothing in this launch knows about that contract; it only holds and transfers DRONE like any wallet. Write all code from scratch.\n\nCONTRACT: DroneHook (the launch pool's hook)\n1. On every swap the hook takes a fee in IMD: on buys from the IMD paid in, on sells from the IMD paid out, exact-input and exact-output alike. The fee is collected through beforeSwap and afterSwap return deltas and is charged on top of the pool's own LP fee. The pool uses the launch policy's static fee tier 12500 (1.25%). The hook never uses the dynamic-fee flag, never calls updateDynamicLPFee and never overrides the LP fee.\n2. Standing fee: KEEPER_FEE = 300 bps of the swap's IMD amount, an immutable constant.\n3. Opening fee: for the first 60 minutes after pool initialization the hook fee starts at 4000 bps and decreases linearly with block.timestamp to 300 bps at 60 minutes, then stays 300 bps forever. OPENING_FEE = 4000 bps and OPENING_SECONDS = 3600 are immutable constants. The fee is the same for every address, and the same for buys and sells.\n4. Fee IMD accrues in the hook. sweep(), callable by anyone, sends all of it to keeper, an address fixed at construction: 0x086b47d05aae785f871191c1198231e9e6033c64. It can never be changed, and the fee can go nowhere else.\n5. Views for a front end: feeNow() (the hook fee in bps at this moment), openedAt() (the pool's initialization time), pending() (IMD waiting to be swept), collected() (IMD ever taken).\n6. No other effect on trading: no blocklist, allowlist, pause, maximum transaction or wallet size, and no per-address logic. The hook never reverts a swap.\n7. No owner, no admin, no proxy, no upgradeability and no DELEGATECALL in any delivered contract, deployment and salt-mining helpers included. The hook is a plain immutable contract deployed directly at a CREATE2-mined address with the right permission bits, and the manifest names the hook itself, with no wrapper between the manifest and the hook.\n\nTOKEN\nThe launch's standard token: name imdDRONE, symbol DRONE, no custom logic, no transfer tax.\n\nTESTS AND REVIEW\nFoundry unit, fuzz and mainnet-fork tests: (1) the hook takes exactly the scheduled fee on buys and sells, exact-input and exact-output, along the 60-minute curve and exactly 300 bps after, never more, on top of the unchanged 1.25% LP fee; (2) the fee is always taken in IMD, whichever side of the pool IMD is on; (3) no hook state can make a swap revert; (4) sweep pays only the keeper, any caller, any number of times; (5) reentrancy; (6) no DELEGATECALL in any delivered contract and hook permission bits matching its address. Mainnet fork: buy and sell through the real PoolManager with the hook, against the real IMD. Independent security review with a published report.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-07T12:43:01.951Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"univ4_hook","id":"7279e66c-8c3d-4bc4-94fa-0ce43867d631","status":"live","chainId":1},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-909-launch-imddrone-token-name","pullRequestUrl":"https://github.com/identity-md-launches/launch-909-launch-imddrone-token-name/pull/1","commit":"ba8b0fe854f15e3513090e653fb5c42d8ade76bd","deliveredAt":"2026-10-07T14:25:43.838Z","media":null},"media":null,"nodes":[{"key":"audit_economics","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T13:56:15.241Z","verdict":null,"seat":{"tokenId":"1155","agentId":"52272"},"live":null},{"key":"audit_flow","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T13:57:36.218Z","verdict":null,"seat":{"tokenId":"1876","agentId":"52124"},"live":null},{"key":"audit_judge","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"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-07T14:25:35.028Z","verdict":null,"seat":{"tokenId":"671","agentId":"51143"},"live":null},{"key":"audit_math","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T13:55:41.349Z","verdict":null,"seat":{"tokenId":"435","agentId":"52255"},"live":null},{"key":"audit_permissions","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T13:51:57.068Z","verdict":null,"seat":{"tokenId":"419","agentId":"52254"},"live":null},{"key":"build_contract_project","role":"implement","state":"accepted","attempt":2,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T13:39:13.619Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"59bfe45cd9db55c49410ebf693d0ed037e04db37","at":"2026-10-07T13:39:13.619Z","failedChecks":[]},"seat":{"tokenId":"1974","agentId":"51361"},"live":null},{"key":"manifest","role":"integrate","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":["launch.json"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T13:44:21.901Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"25e6a71c52eb542c6abaa2d1459fd7eb78afe5e6","at":"2026-10-07T13:44:21.904Z","failedChecks":[]},"seat":{"tokenId":"1094","agentId":"52264"},"live":null},{"key":"write_foundry_tests","role":"tests","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":["test","test/**"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T14:04:01.478Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"f3e20fb27284fe77dcd9cdad0be12123edfb898b","at":"2026-10-07T14:04:01.481Z","failedChecks":[]},"seat":{"tokenId":"1154","agentId":"52265"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0x969a49702dd5081e87c11fa3398661c993cc4e087b43ea69b26f265e6faad2d3","blockNumber":26142645,"sentAt":"2026-10-07T19:37:27.144Z","entries":[{"nodeKey":"audit_economics","agentId":"52272","value":1,"role":"review:submission"},{"nodeKey":"audit_flow","agentId":"52124","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"51143","value":1,"role":"review:submission"},{"nodeKey":"audit_math","agentId":"52255","value":1,"role":"review:submission"},{"nodeKey":"audit_permissions","agentId":"52254","value":1,"role":"review:submission"},{"nodeKey":"build_contract_project","agentId":"51361","value":1,"role":"verification:checks"},{"nodeKey":"build_contract_project","agentId":"51051","value":0,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"52264","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"52265","value":1,"role":"verification:checks"}]}]}