{"workflow":{"id":"dc212460-0a28-4e3f-9485-2340b7051f1e","objective":"Swarm Harvester (HARVEST), second launch attempt. START FROM EXISTING CODE: reuse https://github.com/identity-md-launches/launch-1018-workflow-contract-stage-context at commit 6e3d9177c615c7dc9854b32076d9d48405be60a8. That code was built, tested and audited; its only blocker was a wording conflict about the launch pool pair.\n\nPOOL PAIR (decided): the HARVEST launch pool pairs with native ETH, the launch route's default, exactly as that repository's launch.json already says. Any earlier wording that the HARVEST pool pairs with IMD is withdrawn. Update README.md and docs so they say the HARVEST pool pairs with native ETH. SwarmSeller is unrelated to the HARVEST pool: it still sells claimed launch tokens into IMD.\n\nDO NOT CHANGE the logic of src/SwarmHarvester.sol or src/SwarmSeller.sol, their constructor arguments (Uniswap v4 PoolManager 0x000000000004444c5dc75cB358380D2e3dE08A90, IMD 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7), or their tests. Token: name \"Swarm Harvester\", symbol \"HARVEST\", the launch's standard token.\n\nWHAT IT DOES. SwarmHarvester.claimMany submits many identity.md launch-reward Merkle claims in one transaction (distributor claim(uint256 round, address account, uint256 amount, bytes32[] proof)); tokens always go to the named account and the harvester never holds tokens. SwarmSeller.sellMany sells the caller's approved launch tokens into IMD through Uniswap v4 (token/IMD, or token/ETH then ETH/IMD) with per-sale and total minimums, and burns 0.5% of the IMD output to 0x000000000000000000000000000000000000dEaD. No owner, not upgradeable, not pausable.\n\nWEBSITE (site name swarm-harvester): one page. Connect a wallet (or paste any address), list its claimable launches from https://explorer.imd.fun/api/earned?wallet=ADDR, fetch each proof from https://explorer.imd.fun/api/claim?launch=ID&wallet=ADDR, and offer one button \"Claim all\" that calls SwarmHarvester.claimMany. Then show the wallet's balances of those tokens and a \"Sell all to IMD\" flow (approve each token, then SwarmSeller.sellMany with a quoted minimum). Read every contract address from the deployment.\n\nDECISIONS: Ethereum mainnet. HARVEST pool paired with native ETH. GitHub and IPFS approved.","status":"completed","brief":"# Approved workflow\n\nSwarm Harvester (HARVEST), second launch attempt. START FROM EXISTING CODE: reuse https://github.com/identity-md-launches/launch-1018-workflow-contract-stage-context at commit 6e3d9177c615c7dc9854b32076d9d48405be60a8. That code was built, tested and audited; its only blocker was a wording conflict about the launch pool pair.\n\nPOOL PAIR (decided): the HARVEST launch pool pairs with native ETH, the launch route's default, exactly as that repository's launch.json already says. Any earlier wording that the HARVEST pool pairs with IMD is withdrawn. Update README.md and docs so they say the HARVEST pool pairs with native ETH. SwarmSeller is unrelated to the HARVEST pool: it still sells claimed launch tokens into IMD.\n\nDO NOT CHANGE the logic of src/SwarmHarvester.sol or src/SwarmSeller.sol, their constructor arguments (Uniswap v4 PoolManager 0x000000000004444c5dc75cB358380D2e3dE08A90, IMD 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7), or their tests. Token: name \"Swarm Harvester\", symbol \"HARVEST\", the launch's standard token.\n\nWHAT IT DOES. SwarmHarvester.claimMany submits many identity.md launch-reward Merkle claims in one transaction (distributor claim(uint256 round, address account, uint256 amount, bytes32[] proof)); tokens always go to the named account and the harvester never holds tokens. SwarmSeller.sellMany sells the caller's approved launch tokens into IMD through Uniswap v4 (token/IMD, or token/ETH then ETH/IMD) with per-sale and total minimums, and burns 0.5% of the IMD output to 0x000000000000000000000000000000000000dEaD. No owner, not upgradeable, not pausable.\n\nWEBSITE (site name swarm-harvester): one page. Connect a wallet (or paste any address), list its claimable launches from https://explorer.imd.fun/api/earned?wallet=ADDR, fetch each proof from https://explorer.imd.fun/api/claim?launch=ID&wallet=ADDR, and offer one button \"Claim all\" that calls SwarmHarvester.claimMany. Then show the wallet's balances of those tokens and a \"Sell all to IMD\" flow (approve each token, then SwarmSeller.sellMany with a quoted minimum). Read every contract address from the deployment.\n\nDECISIONS: Ethereum mainnet. HARVEST pool paired with native ETH. GitHub and IPFS approved.\n\nThe requester chose this release: source code published to GitHub, website hosted on IPFS, contracts deployed on chain.\n\nSwarm Harvester (HARVEST), second launch attempt. START FROM EXISTING CODE: reuse https://github.com/identity-md-launches/launch-1018-workflow-contract-stage-context at commit 6e3d9177c615c7dc9854b32076d9d48405be60a8. That code was built, tested and audited; its only blocker was a wording conflict about the launch pool pair.\n\nPOOL PAIR (decided): the HARVEST launch pool pairs with native ETH, the launch route's default, exactly as that repository's launch.json already says. Any earlier wording that the HARVEST pool pairs with IMD is withdrawn. Update README.md and docs so they say the HARVEST pool pairs with native ETH. SwarmSeller is unrelated to the HARVEST pool: it still sells claimed launch tokens into IMD.\n\nDO NOT CHANGE the logic of src/SwarmHarvester.sol or src/SwarmSeller.sol, their constructor arguments (Uniswap v4 PoolManager 0x000000000004444c5dc75cB358380D2e3dE08A90, IMD 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7), or their tests. Token: name \"Swarm Harvester\", symbol \"HARVEST\", the launch's standard token.\n\nWHAT IT DOES. SwarmHarvester.claimMany submits many identity.md launch-reward Merkle claims in one transaction (distributor claim(uint256 round, address account, uint256 amount, bytes32[] proof)); tokens always go to the named account and the harvester never holds tokens. SwarmSeller.sellMany sells the caller's approved launch tokens into IMD through Uniswap v4 (token/IMD, or token/ETH then ETH/IMD) with per-sale and total minimums, and burns 0.5% of the IMD output to 0x000000000000000000000000000000000000dEaD. No owner, not upgradeable, not pausable.\n\nWEBSITE (site name swarm-harvester): one page. Connect a wallet (or paste any address), list its claimable launches from https://explorer.imd.fun/api/earned?wallet=ADDR, fetch each proof from https://explorer.imd.fun/api/claim?launch=ID&wallet=ADDR, and offer one button \"Claim all\" that calls SwarmHarvester.claimMany. Then show the wallet's balances of those tokens and a \"Sell all to IMD\" flow (approve each token, then SwarmSeller.sellMany with a quoted minimum). Read every contract address from the deployment.\n\nDECISIONS: Ethereum mainnet. HARVEST pool paired with native ETH. GitHub and IPFS approved.\n","briefDigest":"39a827a49517a065f4149474b30f9aa15902fb32fd5fd6e8e158095fa33b5930"},"planning":null,"id":"46726879-5de6-4379-8e15-4b219a662c16","state":"completed","template":"shape:chain","objective":"WORKFLOW CONTRACT STAGE CONTEXT: the stage produces implemented and tested contracts, ABI documentation and an independently reviewed launch.json. Each assignment contributes only within its own role and write scope. Source-producing assignments own implementation, tests and ABI exports at docs/abi/<Contract>.json where their scope permits. The generated manifest assignment writes only launch.json. Review assignments inspect accepted source and manifest and return findings without editing files; they do not implement contracts or generate ABI files. Use the supplied canonical manifest guidance: policy and signed artifact linkage belong to services, while concrete source, constructor, policy or authorization conflicts remain review findings. Services publish source, attest, admit and deploy after this stage, then start the frontend. Read .imd/reads/workflow.md for the complete approved requirements and apply them to your assigned contribution; later service outcomes are not prerequisites of this assignment.","blockedReason":null,"createdAt":"2026-10-08T08:30:06.363Z","updatedAt":"2026-10-08T08:58:42.041Z","paidBy":"0xb1292411d17f540e7b7bcb9928b4a62fc3d8a22e","parentJobId":null,"project":{"id":"46726879-5de6-4379-8e15-4b219a662c16","head":"05845669-aace-4f6e-ba42-9d6410b6a0c4","running":null,"versions":[{"jobId":"46726879-5de6-4379-8e15-4b219a662c16","workflowId":"dc212460-0a28-4e3f-9485-2340b7051f1e","objective":"Swarm Harvester (HARVEST), second launch attempt. START FROM EXISTING CODE: reuse https://github.com/identity-md-launches/launch-1018-workflow-contract-stage-context at commit 6e3d9177c615c7dc9854b32076d9d48405be60a8. That code was built, tested and audited; its only blocker was a wording conflict about the launch pool pair.\n\nPOOL PAIR (decided): the HARVEST launch pool pairs with native ETH, the launch route's default, exactly as that repository's launch.json already says. Any earlier wording that the HARVEST pool pairs with IMD is withdrawn. Update README.md and docs so they say the HARVEST pool pairs with native ETH. SwarmSeller is unrelated to the HARVEST pool: it still sells claimed launch tokens into IMD.\n\nDO NOT CHANGE the logic of src/SwarmHarvester.sol or src/SwarmSeller.sol, their constructor arguments (Uniswap v4 PoolManager 0x000000000004444c5dc75cB358380D2e3dE08A90, IMD 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7), or their tests. Token: name \"Swarm Harvester\", symbol \"HARVEST\", the launch's standard token.\n\nWHAT IT DOES. SwarmHarvester.claimMany submits many identity.md launch-reward Merkle claims in one transaction (distributor claim(uint256 round, address account, uint256 amount, bytes32[] proof)); tokens always go to the named account and the harvester never holds tokens. SwarmSeller.sellMany sells the caller's approved launch tokens into IMD through Uniswap v4 (token/IMD, or token/ETH then ETH/IMD) with per-sale and total minimums, and burns 0.5% of the IMD output to 0x000000000000000000000000000000000000dEaD. No owner, not upgradeable, not pausable.\n\nWEBSITE (site name swarm-harvester): one page. Connect a wallet (or paste any address), list its claimable launches from https://explorer.imd.fun/api/earned?wallet=ADDR, fetch each proof from https://explorer.imd.fun/api/claim?launch=ID&wallet=ADDR, and offer one button \"Claim all\" that calls SwarmHarvester.claimMany. Then show the wallet's balances of those tokens and a \"Sell all to IMD\" flow (approve each token, then SwarmSeller.sellMany with a quoted minimum). Read every contract address from the deployment.\n\nDECISIONS: Ethereum mainnet. HARVEST pool paired with native ETH. GitHub and IPFS approved.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-08T08:30:06.363Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"evm_project","id":"e3c2f693-9f28-46d0-af84-865a8e9f995a","status":"live","chainId":1},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-1029-workflow-contract-stage-context","pullRequestUrl":"https://github.com/identity-md-launches/launch-1029-workflow-contract-stage-context/pull/1","commit":"388f84e9ee292e9a411c0d80c14e8f5f506640eb","deliveredAt":"2026-10-08T08:58:53.907Z","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-08T08:44:15.385Z","verdict":null,"seat":{"tokenId":"250","agentId":"52131"},"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-08T08:50:00.816Z","verdict":null,"seat":{"tokenId":"1710","agentId":"52129"},"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-08T08:58:42.041Z","verdict":null,"seat":{"tokenId":"527","agentId":"51043"},"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-08T08:44:57.661Z","verdict":null,"seat":{"tokenId":"866","agentId":"51232"},"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-08T08:47:01.871Z","verdict":null,"seat":{"tokenId":"863","agentId":"51225"},"live":null},{"key":"build_contract_project","role":"implement","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-08T08:38:04.651Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+ad90ce4c","verifiedTreeHash":"11d4a2f84df9c48969e6378e204a7ecd7a3faf4a","at":"2026-10-08T08:38:04.652Z","failedChecks":[]},"seat":{"tokenId":"1080","agentId":"51165"},"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-08T08:41:28.892Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+ad90ce4c","verifiedTreeHash":"75d9eb0a4e1b1155a0bf3cb42da0d3b49e39e8af","at":"2026-10-08T08:41:28.893Z","failedChecks":[]},"seat":{"tokenId":"921","agentId":"51311"},"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-08T08:46:12.865Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+ad90ce4c","verifiedTreeHash":"eb0c2f302187f49a034b4db105464e5b9d98ffd1","at":"2026-10-08T08:46:13.441Z","failedChecks":[]},"seat":{"tokenId":"160","agentId":"52371"},"live":null}],"reviews":[{"status":"queued","chainId":1,"txHash":null,"blockNumber":null,"sentAt":null,"entries":[{"nodeKey":"audit_economics","agentId":"52131","value":1,"role":"review:submission"},{"nodeKey":"audit_flow","agentId":"52129","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"51043","value":1,"role":"review:submission"},{"nodeKey":"audit_math","agentId":"51232","value":1,"role":"review:submission"},{"nodeKey":"audit_permissions","agentId":"51225","value":1,"role":"review:submission"},{"nodeKey":"build_contract_project","agentId":"51165","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"51311","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"52371","value":1,"role":"verification:checks"}]}]}