{"workflow":{"id":"fc3809bb-054e-4e98-bdc6-5044325a3236","objective":"Release Swarmlings ($LING) on Sepolia through IMD: a Unipeg-style DN404 token where every 300,000 LING held is one of 3,333 fully onchain riso-printed robots, and a Uniswap v4 hook that charges 1.25% in ETH on every swap and pays all of it to Swarmling holders. Build, test and independently review the token and hook, deploy them as a univ4_hook launch paired with ETH, then build and publish the Swarmlings website against the live deployment. Access: nobody can change anything after deployment; anyone may call distribute(); holders call claim() for their own ETH; any wallet may opt in to NFTs with setSkipNFT(false). Site pages: home with live stats, the full 3,333 collection with trait filters, a page per Swarmling, a wallet page and an about page with every address. A connected wallet can see its LING and Swarmlings, claim its ETH, enable NFTs, push waiting fees with distribute(), and follow a link to buy LING; the site does no swaps itself.","status":"blocked","brief":"# Approved workflow\n\nRelease Swarmlings ($LING) on Sepolia through IMD: a Unipeg-style DN404 token where every 300,000 LING held is one of 3,333 fully onchain riso-printed robots, and a Uniswap v4 hook that charges 1.25% in ETH on every swap and pays all of it to Swarmling holders. Build, test and independently review the token and hook, deploy them as a univ4_hook launch paired with ETH, then build and publish the Swarmlings website against the live deployment. Access: nobody can change anything after deployment; anyone may call distribute(); holders call claim() for their own ETH; any wallet may opt in to NFTs with setSkipNFT(false). Site pages: home with live stats, the full 3,333 collection with trait filters, a page per Swarmling, a wallet page and an about page with every address. A connected wallet can see its LING and Swarmlings, claim its ETH, enable NFTs, push waiting fees with distribute(), and follow a link to buy LING; the site does no swaps itself.\n\nSepolia only; a mainnet IMD-paired release follows if this works. GitHub publication and IPFS hosting under the site label swarmlings are approved. No owner, admin, proxy, pause or upgrade anywhere. The art renderer is already deployed by the requester and must not be rewritten. The website must follow the visual system stated in its step exactly.\n\nSPEC. Release 'Swarmlings' (LING) + SwarmlingsHook as univ4_hook on Sepolia, paired with native ETH. A Unipeg-style token: every whole 300,000 LING a wallet holds is one fully onchain Swarmling NFT (a hand-drawn risograph portrait, rendered fully onchain), minted and burned automatically by balance; the hook takes a fixed 1.25% ETH fee on every swap, all of it for NFT holders, on top of the IMD pool's own 1.25% LP fee. No owner, no admin, no proxy, no pause, no upgrade. Prior art to study, not copy: Unipeg (uPEG), Claus NFT vaults, and the ManumissionHook fee path in github.com/identity-md-launches/launch-775-ransom-for-seat-1376.\n\n1) Token Swarmlings: Solady DN404 (ERC-20 base) + DN404Mirror (ERC-721), vendored under lib/ or src/ with license. Zero-arg constructor deploys its own DN404Mirror and calls _initializeDN404 minting EXACTLY 1e27 (1,000,000,000 * 1e18) to msg.sender; 18 decimals; name \"Swarmlings\", symbol \"LING\". _unit() = 300_000e18, so at most 3,333 NFTs (the last 100,000 LING never form one). No mint after construction, no burnFrom by others, no owner, no blacklist, no fee or burn on transfer: every transfer moves exactly the amount stated. Keep DN404's default skipNFT for contracts so the factory, PoolManager, MerkleDistributor and hook never receive NFTs; any wallet may call setSkipNFT(false). If creating the mirror inside the constructor is refused by the launch floor, stop and report that blocker; do not switch to a proxy or an initializer.\n\n2) Art lives in a separate, already deployed renderer: public constant RENDERER = 0x07C6380C3Aab0208c7cDd76791530c4d2A2d389F. tokenURI(id) on the mirror returns exactly IRenderer(RENDERER).tokenURI(id) via staticcall (RENDERER also has logoSVG() for the site; the token never calls it); the token stores no art and never calls RENDERER outside tokenURI, so the renderer can never affect balances, transfers, fees or rewards. If RENDERER has no code or reverts, tokenURI returns a minimal valid data:application/json placeholder instead of reverting. Do not write, change or redeploy the renderer; treat it as a fixed external dependency and test against a mock with the same interface. For README only: the renderer is immutable with no owner, derives 7 traits (Background, Chassis, Head, Visor, Signal, Headgear, Accessory) from seed = uint256(keccak256(abi.encode(uint256 id, bytes32 SALT, uint8 nonce))) with nonce 0 except a fixed table of 21 ids, and SALT = 0x011ecad7d0b8a52e4b5e3edd97a38fa83743a5db7ab4446105af4dd40086eacd, and together they make all 3,333 ids distinct; traits are cosmetic and never change rewards. Every contract must fit EIP-170 at optimizer runs 200.\n\n4) README and NatSpec state plainly: the hook fee is 1.25% per swap in ETH and all of it goes to NFT holders, on top of the IMD pool's 1.25% LP fee (1% to the launch payer, 0.25% to IMD), 2.5% in total; no admin can change anything; traits are cosmetic, fixed per id and rendered fully onchain by the immutable RENDERER; smart-contract wallets get no NFTs unless they opt in; this Sepolia release is a test of the mechanism before an IMD-paired mainnet version.\n\nSections A-C (hook, distribution, rewards) are in the contracts and review steps; section D (tests) is in the tests step.\n","briefDigest":"0779cef70bcac708ca00f4121e573256741abff7491a66b5252621689ec9d722"},"planning":null,"id":"c211c39f-5a78-42ac-a92e-3fedc56dca72","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-07T14:42:05.184Z","updatedAt":"2026-10-07T16:41:19.020Z","paidBy":"0x92cef4823119f3332a85a39023eeba01a06890c4","parentJobId":null,"project":{"id":"c211c39f-5a78-42ac-a92e-3fedc56dca72","head":"c211c39f-5a78-42ac-a92e-3fedc56dca72","running":null,"versions":[{"jobId":"c211c39f-5a78-42ac-a92e-3fedc56dca72","workflowId":"fc3809bb-054e-4e98-bdc6-5044325a3236","objective":"Release Swarmlings ($LING) on Sepolia through IMD: a Unipeg-style DN404 token where every 300,000 LING held is one of 3,333 fully onchain riso-printed robots, and a Uniswap v4 hook that charges 1.25% in ETH on every swap and pays all of it to Swarmling holders. Build, test and independently review the token and hook, deploy them as a univ4_hook launch paired with ETH, then build and publish the Swarmlings website against the live deployment. Access: nobody can change anything after deployment; anyone may call distribute(); holders call claim() for their own ETH; any wallet may opt in to NFTs with setSkipNFT(false). Site pages: home with live stats, the full 3,333 collection with trait filters, a page per Swarmling, a wallet page and an about page with every address. A connected wallet can see its LING and Swarmlings, claim its ETH, enable NFTs, push waiting fees with distribute(), and follow a link to buy LING; the site does no swaps itself.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-07T14:42:05.184Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"univ4_hook","id":"aa97fc16-15a2-44a7-a5fc-c1f9d0e73039","status":"parked","chainId":11155111},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-916-workflow-contract-stage-context","pullRequestUrl":"https://github.com/identity-md-launches/launch-916-workflow-contract-stage-context/pull/1","commit":"1f937c80fae35111f8ccf61561bdb3ef0f57058a","deliveredAt":"2026-10-07T16:41:44.469Z","media":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-07T15:51:13.498Z","verdict":null,"seat":{"tokenId":"866","agentId":"51232"},"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-07T15:47:02.192Z","verdict":null,"seat":{"tokenId":"250","agentId":"52131"},"live":null},{"key":"audit_judge","role":"review","state":"accepted","attempt":1,"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-07T16:41:19.020Z","verdict":null,"seat":{"tokenId":"115","agentId":"51131"},"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-07T15:49:59.680Z","verdict":null,"seat":{"tokenId":"863","agentId":"51225"},"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-07T15:50:09.747Z","verdict":null,"seat":{"tokenId":"1710","agentId":"52129"},"live":null},{"key":"build_contract_project","role":"implement","state":"accepted","attempt":1,"revisions":1,"judgeRevisions":1,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T16:13:54.764Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"accd656f0fd7b8a23f3bca22f6d6c3ad351a382c","at":"2026-10-07T16:13:54.767Z","failedChecks":[]},"seat":{"tokenId":"1689","agentId":"51003"},"live":null},{"key":"manifest","role":"integrate","state":"accepted","attempt":1,"revisions":1,"judgeRevisions":1,"dependsOn":["build_contract_project","write_foundry_tests"],"allowedPaths":["launch.json"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T16:32:56.845Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"60d05b116ef53a130f51818d315caba9942cf345","at":"2026-10-07T16:32:56.846Z","failedChecks":[]},"seat":{"tokenId":"510","agentId":"51454"},"live":null},{"key":"write_foundry_tests","role":"tests","state":"accepted","attempt":1,"revisions":1,"judgeRevisions":1,"dependsOn":["build_contract_project"],"allowedPaths":["test","test/**"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T16:22:07.865Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"373c91a8b0c40f01edf0065fac0045dc8a33d32e","at":"2026-10-07T16:22:07.937Z","failedChecks":[]},"seat":{"tokenId":"649","agentId":"51037"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0xf4e9d9a1221fa70c2d75c97aaf15069722d02fae48e5544d43ae3ee769af7eac","blockNumber":26142680,"sentAt":"2026-10-07T19:44:25.202Z","entries":[{"nodeKey":"audit_economics","agentId":"51232","value":1,"role":"review:submission"},{"nodeKey":"audit_flow","agentId":"52131","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"51131","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"51214","value":1,"role":"review:submission"},{"nodeKey":"audit_math","agentId":"51225","value":1,"role":"review:submission"},{"nodeKey":"audit_permissions","agentId":"52129","value":1,"role":"review:submission"},{"nodeKey":"build_contract_project","agentId":"51075","value":1,"role":"verification:checks"},{"nodeKey":"build_contract_project","agentId":"51003","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"50972","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"51454","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"51209","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"51037","value":1,"role":"verification:checks"}]}]}