{"assessments":[],"deployments":[],"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":"b94e6839-f641-492c-a43e-48ccf6eb4674","kind":"skill:research-report","nodes":[{"acceptedSubmissionHash":"e99e987f7019f9b5f008c8e1f38dc5d3f5d3006918514ed6e18465ed3dbd6f08","dependsOn":[],"execution":{"network":true,"profile":"none","requires":["network"],"skillHash":"3ddca93330036359dd721585e58e67820336a0398b7927b3c89369d6134f30f6","skillId":"research-report","tools":[]},"key":"research_report","kind":"code","role":"implement","skillHash":"3ddca93330036359dd721585e58e67820336a0398b7927b3c89369d6134f30f6","skillId":"research-report","state":"accepted"}],"objective":"Research for the BLACKOUT launch on Robinhood Chain via IMD: answer exactly how the IMD platform supports our launch plan. Use the current IMD docs (imd.fun/docs and docs/llms.txt), the public worker and launch repositories, live read-only chain data on Robinhood Chain and Ethereum, and past IMD launches as evidence. Do not deploy, pay or sign anything. Cite the source for every answer (doc section, contract address + function, or a past job/launch id). If something is unknown, say so and propose the safest workaround.\nX: https://x.com/IMDBlackout | Site: playblackout.xyz\nContracts and plan: repo of jobs c379f49a and 03cb04ff (read launch-v37.md, src/SwarmDesk.sol, script/PredictGame.s.sol).\n\nQuestions:\n1. ENDOWMENT (critical): in a univ4_hook token launch with poolBps 7000, can remainderTo (or any allocation) be an address that has no code yet (our predicted RewardPool, deployed later by an application job)? Are there checks (code size, EOA only, allowlist) that block it? Can the allocation be split (20% to one address, 10% to the swarm share)? If not possible, what is the safest supported alternative that never routes the 20% through a personal or swarm wallet?\n2. ADDRESS PREDICTION: how are launch numbers/indices reserved and how is the CREATE2 address of each application contract derived (LaunchFactory / ProjectFactory)? Can we know the RewardPool, FeeRouter and SwarmDesk addresses before the token launch, and is each coordinate guaranteed single-use (NotDeployer / AlreadyLaunched)?\n3. CUSTOM HOOK: how does a univ4_hook launch take our hook (V4Market) with constructor data that commits Params and the game config hash? Fee settings (1% project to the predicted FeeRouter + 0.25% network), tick spacing, initial price, who initializes the pool (official initializer address for our authenticated-initialization check).\n4. ORDER AND JOB TYPES: what is the correct order and job type for: SwarmDesk bootstrap (1 contract), token launch, application job A (8 contracts), application job B (8 contracts), then the site. Can workflow.open chain all of them (contracts, review, deployment, site against live addresses)? Limits: contracts per launch, constructor args per contract (16 words?), bytecode size, gas, cost in IMD per step.\n5. POST-DEPLOY CALLS: who can call permissionless steps (register 14 modules, Desk.bind, bindFeeRouter, fundEndowment)? Can the launch job itself perform them, or must a keeper/any wallet do it? Exact sequence.\n6. ORACLE HEARTBEAT: confirm schedule.create can deliver attested results from Ethereum to a Robinhood Chain contract via IntakeDelivery; the exact schedule and oracle body format for numeric multi-field answers; the attester address vs transport writer; panel size/agreement; typical latency; what happens on failure; real cost per run and how refills work.\n7. SWARM SHARE: is the 10% swarm allocation fixed, how and when is it distributed to contributor agents, and does it interact with our allocations?\n8. IDENTITY MD SNAPSHOT: how to produce the holder snapshot (block, contract address, chain) for our starter-pack Merkle root.\n9. Anything in our launch-v37.md that conflicts with how IMD actually works.\n\nOutput: a clear yes/no + evidence table for questions 1-3, a numbered launch runbook that matches the real platform, and a list of blockers.","parentJobId":null,"planHash":"c7384c12db66d13bb48efb870eb8b05d5a016cc2aed360c64d30bac76e1184fa","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"b94e6839-f641-492c-a43e-48ccf6eb4674","publication":{"commit":null,"deliveredAt":null,"repoUrl":null},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52585","feedbackHash":"c0c44c3a4e549225d5e4d2b8637be120f9ba9bbc283fe56d9c56e713e563b94f","nodeKey":"research_report","submissionHash":"e99e987f7019f9b5f008c8e1f38dc5d3f5d3006918514ed6e18465ed3dbd6f08","tag1":"verification:structural","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"bda93c2a64755a2ad1ae4e713b0ab142ad64fa7e124eee33eb6153115bb69c0b","state":"completed","submissions":[{"artifacts":[{"bytes":38909,"hash":"e1bdfd9eeb5f7e636c0f01d54d53d66c2cc210cbb9f107324cc858d16fbb4e9c","mediaType":"text/markdown","name":"report","path":"artifacts/report.md"}],"attempt":1,"bundleHash":null,"device":"3c1226d190150ef0","findings":[],"hash":"e99e987f7019f9b5f008c8e1f38dc5d3f5d3006918514ed6e18465ed3dbd6f08","nodeId":"5cd98665-1771-427a-aed1-82ec1523a34d","outcome":"completed","summary":"The report is in `artifacts/report.md`, with a short README beside it. Both are left untracked, as required. Short answer: the BLACKOUT v3.7 plan can't launch on IMD as written. I found five blockers, three of them hard.\n\nEverything was read-only: nothing deployed, paid, signed or quoted. The only writes to the IMD API were two free `POST /requests/check` preflights, which create nothing. Every claim in the report is labelled FACT, INFERENCE, UNKNOWN or PROPOSAL and cites a doc section, a contract address and function, or a past launch.\n\n**Q1 – Endowment.**\n- **Codeless address: yes.** The 20% `remainderTo` can be an address with no code. Launch 1316 sent its remainder to `0x…dEaD` (no code, never used), and no code-size, EOA-only or allowlist check exists in the launch schema.\n- **Amounts at poolBps 7000:** 10% to the swarm, 70% to the pool, 20% to `remainderTo`. I confirmed this on-chain with launches 1015 and 1300.\n- **No split:** the remainder goes to exactly one address.\n- **The real blocker is the address itself.** The predicted RewardPool address depends on launch numbers that IMD assigns from one global counter, and nobody can reserve them. If the prediction misses, the 20% is lost for good.\n- **Safest alternative:** deploy an ownerless escrow contract first and use its real address as `remainderTo`. Afterwards anyone can call it to forward the tokens once to a RewardPool it checks on-chain. The 20% never touches a personal or swarm wallet.\n\n**Q2 – Address prediction.**\n- **Derivation:** I confirmed the formula on-chain. Application contract addresses are a CREATE2 hash of the launch number and the contract's index (0–7). Predicted and actual addresses match for launches 1271 and 1316.\n- **Single use: yes.** Only IMD's launch wallet can deploy (`NotDeployer`), and each launch number is recorded once.\n- **The exact `AlreadyLaunched` error name** doesn't appear in the deployed bytecode, so that name is unconfirmed.\n\n**Q3 – Custom hook.**\n- **Your hook with constructor data: yes.** It takes up to 16 static arguments plus the platform placeholders.\n- **Pool initializer:** the LaunchFactory `0xa25b…4645` initializes the pool. That is the address your authenticated-initialization check should expect.\n- **Fee, price, tick spacing:**\n  - The pool fee is fixed by policy at 1.25%.\n  - The opening price is fixed by policy: 10 ETH valuation for an ETH pair.\n  - Tick spacing was 60 in a past launch.\n- **Blocker:** `V4Market`'s constructor reverts unless the pool fee is 0. It also charges its own 0.25% network fee on top of the platform's.\n- **The 1% project fee goes to the paying wallet, not a predicted FeeRouter.** Anyone can trigger payout with `claimFees`, but only the paying wallet can later point the fee at the FeeRouter, with `setRequester`.\n\n**Other findings.**\n- **Oracle heartbeat:** `schedule.create` rejects `deliver` (\"Unrecognized key\"), and `SwarmDesk` only accepts answers delivered by IMD's two on-chain oracle contracts. Scheduled answers can never reach it. The fix is either a public relay function on the Desk or running on the paid on-chain backup asks alone.\n- **Workflow:** `workflow.open` covers one launch plus a site, not all five steps. The sequence is five separate 0.5 IMD actions (2.5 IMD total, plus 0.5 IMD per oracle run). Contracts-only launches call nothing after deployment, so registering, binding and funding must come from a keeper or any wallet.\n- **Build settings:** your `foundry.toml` uses `via_ir = true` and lacks `bytecode_hash = \"none\"`. The docs require that setting, and IMD's verifier built launch 1316 without via_ir. Rebuilding would invalidate your pinned code hashes and predictions.\n- **Holder snapshot:** use the identity.md NFT on Ethereum (chain 1, `0x0000ec93…ec1d`, token ids 0–1999). Pin a finalized Ethereum block, read `ownerOf` for every id, then build the Merkle root.\n\n**Not confirmed:**\n- whether an 8-contract launch fits the 0.01 ETH gas ceiling on Robinhood Chain;\n- whether a tick spa","treeHash":"4b825dc642cb6eb9a060e54bf8d69288fbee4904","usage":{"cachedInputTokens":7707704,"inputTokens":104,"model":"claude-opus-5-5","outputTokens":58457,"runtime":"claude","turns":56,"wallClockMs":876568}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"e99e987f7019f9b5f008c8e1f38dc5d3f5d3006918514ed6e18465ed3dbd6f08","verifiedTreeHash":"4b825dc642cb6eb9a060e54bf8d69288fbee4904","verifierVersion":"0.1.0+fb8278c5"}]}