{"workflow":null,"planning":null,"id":"2f166600-ba14-4659-9409-a70218d2e97e","state":"completed","template":"skill:build-contract-project","objective":"BLACKOUT v3.11: fork rehearsal of launch-v39.md (job 02efcae5, same repo). NO DEPLOY, NO BROADCAST. Do not change contract logic unless the rehearsal finds a bug.\n\nX: https://x.com/IMDBlackout | Site: playblackout.xyz\n\n1. On a local anvil fork of Robinhood Chain mainnet (4663), using the real IMD ProjectFactory, LaunchFactory, PoolManager, Intake and IntakeDelivery and the launch-toolchain artifacts (viaIR false, bytecode_hash none), execute runbook steps M1-M13 in order. Impersonate the platform where it would deploy or initialize. Use throw-away test roots and snapshot only.\n2. Prove on the fork: Desk.registry() equals the job A registry; module registration; bindFeeRouter; escrow.forward sends the full balance to the authenticated RewardPool; fundEndowment starts the drip; first pack purchase only after launch +1h; buys during 0-30 min pay 90/50/25% tax to rewards; after that exactly 1% to rewards per swap plus sell surcharge; an attested oracle answer relayed via SwarmDesk.submit (test attester on the fork only) changes a plan within 5000-7000; keeper pass advances epochs and reveals entropy; LaunchFactory.claimFees pays the paying wallet.\n3. Check what launch-v39.md marks as unproven: attested creation-code hashes vs real factory, afterInitialize sender, gas per 8-contract launch vs platform limits, constructor arg encoding through the real launcher.\n4. Commit the rehearsal script, a log with every address, call and check, and a short rehearsal section in report.md. Update launch-v39.md where reality differs. Replace the Sepolia section with the fork rehearsal.\n\nNo deploy, no broadcast, no token actions.\nRequires a Robinhood Chain (4663) RPC for the fork. If no RPC is available, stop and report it; do not substitute mocks or call it a rehearsal.\n\nUpgrades and pausing: Not upgradeable. All contracts are immutable; the hook has no owner. No admin keys, no proxy, no migration, no personal or team wallet with any game power. The only \"swarm role\" is the SwarmDesk contract, which acts solely on attested IMD oracle answers (verified attester signature, pinned questions, freshness, replay protection), delivered by Intake/IntakeDelivery or relayed permissionlessly via submit. Through those answers it can only: submit bounded event plans (severity 5000-7000, on-chain floor 3000); change Params within hard-coded ranges (max 10% per 24h); announce features, which anyone can enable after 48 hours and nothing can ever disable; raise the enhancement cap +8 to +12 to +16, upward only, at least 30 days apart; pause new pack purchases (incl. the ETH zap) and black market buys for at most 72 hours, with automatic expiry and at least 72 live hours between pauses. Never pausable: claims, withdrawals, sync, settlement, epochs, entropy, repairs, locks and unlocks, buybacks, season finalize, Desk.bind, bindFeeRouter, EndowmentEscrow.forward and endowment funding. Fixed at deploy, never changeable: pack profile (Balanced), free pack and Identity MD Merkle roots, snapshot block, endowment amount. EndowmentEscrow has no owner and one exit only: forward to the authenticated RewardPool. If oracle answers stop, the game keeps running on its fallback event table and current Params.","blockedReason":null,"createdAt":"2026-10-12T14:43:37.198Z","updatedAt":"2026-10-12T18:40:17.454Z","paidBy":"0x6d51cbe774aeae4dd40bca2560e9bc2695a0d007","via":"explorer.imd.fun","parentJobId":"02efcae5-19e5-40f5-93ff-75d51e57cd4e","project":{"id":"21248c45-9e6e-4e68-bf90-de66eeac77cd","head":"fd33a9d2-12a3-4561-abed-75803cb84e9a","running":null,"versions":[{"jobId":"21248c45-9e6e-4e68-bf90-de66eeac77cd","workflowId":null,"objective":"BLACKOUT: build contracts + Robinhood Chain fork tests + independent review. NO DEPLOY.\n\nCONTEXT\nBLACKOUT is a swarm-run pixel mining-farm game on Robinhood Chain (chain id 4663, Arbitrum Orbit). Players open ERC-1155 packs, place GPUs/PSUs/cooling/rooms in a farm, farms produce hashrate that mines the game token from a reward pool. The swarm is the Grid Operator. Spec = this swarm's BLACKOUT research reports v1 and v2; where this prompt differs, this prompt wins. X: @IMDBlackout.\n\nSCOPE\nWrite Solidity contracts, Foundry tests on a Robinhood Chain fork, re-run the economy sim, independent review. Do NOT deploy, do NOT launch the token, do NOT spend funds. Output: repo + report.md.\n\nTOKEN AND POOL\n- Standard IMD launch: 1B supply, 10% swarm, 1.25% swap fee (1% to fee recipient = FeeRouter, 0.25% network). Pair with ETH, poolBps 9000, no team tokens.\n- Opening cap: default 5.6 ETH, swarm may choose 3.3 to 5.6 with reasoning, never 20.\n- First check if the standard IMD univ4 hook can carry the v2 progressive sell fee (cap 15%). If not, do NOT write a custom hook: drop the sell tax, strengthen the in-game withdrawal tax instead, document it.\n- Token has no burn(): every burn goes to BurnVault (no exit function).\n\nCONTRACTS\n1. Params: every tunable value with hard min/max, max step 10% per 24h, event with reason string on change. Only the swarm role can change.\n2. FeeRouter: ETH splits per v2 (base and sell-tax). Team gets ETH only, each team stream capped at 20%. Team address: 0x6d51cBE774aeAe4dd40bCA2560E9bc2695A0d007 (changeable only by itself). Heartbeat share goes to the swarm wallet.\n3. FarmItems (ERC-1155): GPU, PSU, cooling, room. Rarity per v2. Starter items non-transferable.\n4. PackSale: ETH price 0.010, -15% per epoch, floor 0.006. Token-paid packs 1 per wallet per day. Beta caps per wallet 3/6/10/20, global per hour 75/150/300/none. Team share 15% of pack ETH. Randomness: commit, then resolve from future block hash (ArbSys 0x64 arbBlockHash), expiry and re-roll rules.\n5. FarmCore: place items, hashrate, claim, spend (+5% bonus for in-game spend), withdrawal tax max(5%, 20% - 15%*age/7d) redistributed to active farms. Referrals: inviter gets 5% of invitee mining, paid on top from the pool, one level, set once on first action, no self-referral, referrer must own a farm. Inspection bonus 1% of weekly emission.\n6. Generator (new): player locks game tokens into the farm for a hashrate boost, +10% per 50K tokens, max +30%, unlock delay 7 days, tokens stay the player's. Values in Params.\n7. GridOperator: districts, events every 12h (blackout, heat wave, audit, bonus surge). Two-key randomness: swarm number + future block hash, neither side alone decides. Lobbying with ETH: 85% buy and burn, 10% team, 5% heartbeat, weight min 0.40, 3-day half-life. Tariff 0.10 to 0.30.\n8. RewardPool: emission 3.5% of pool per day (bounded in Params). Anyone can donate tokens (the swarm can send part of its allocation).\n9. StarterClaim: merkle of Identity MD NFT holders on Ethereum. Snapshot at the Ethereum block when the game token launches. Find the Identity MD collection address yourself, write the snapshot script, do not publish a root now. Once per tokenId, window hour 48 to day 16, Rare 92 / Epic 8 (Epic 20 if the claimer has 50K+ in Generator), non-transferable, 50% hashrate until a paid pack is opened.\n10. Holder perks (merkle-verified NFT holders): token-paid packs 20% cheaper and 3 per day. Weekly inspection has a separate holder winner.\n11. Herald: grid-operator letters for every event and every Params change, with the reason.\n\nSWARM REGULATOR\nThe 12h heartbeat reads chain metrics: ETH inflow 12h/24h, net token sells, reward pool runway in days, active farms, new players. Target: runway at least 21 days.\n- Low inflow: tariff up, emission down, more blackouts, pack discount.\n- High inflow: bonus surge, fewer blackouts, softer withdrawal tax.\n- Heavy dumping: withdrawal tax up, Generator boost up.\nAll changes only through Params (bounds + step limit) plus a herald letter. Deliver regulator.md (rule table) and a script that computes recommended changes from chain data (dry run only).\n\nSECURITY\nNo admin mint of items, no admin withdrawal of pools or user funds. No upgradeability, or 7-day timelock if unavoidable. Pause only for pack sales, never for claims or unlocks. CEI, reentrancy guards, pull payments. Swarm role = swarm wallet, bounded powers only.\n\nTESTS (Foundry, Robinhood Chain fork)\n- Unit, fuzz, invariant: splits sum to 100%, team caps, Params bounds and step limits, beta caps, withdrawal tax curve, referral rules, one claim per tokenId, randomness cannot be resolved early or by one key, BurnVault has no exit, Generator unlock delay, pool never pays more than it holds.\n- Integration on the fork: IMD launch path and v4 swap if reachable (otherwise mock with the same interface and say so), full flow pack > farm > claim > spend/sell, event round, lobbying.\n- Gas cost per action on Robinhood Chain.\n\nSIMULATION (re-run v2 model, 35 days, hype/steady/weak)\nAdd: ~900 NFT holders receive the swarm 10% and sell 35/50/65% within 14 days; Generator adoption 20/40%; holder perks; regulator rules active vs off. Report stall day, payback by join week, team ETH.\n\nINDEPENDENT REVIEW\nA second agent with fresh context reviews contracts and tests, lists findings by severity. Fix all high and medium, re-run tests.\n\nDELIVERABLES\nRepo (contracts, tests, scripts, deploy script NOT executed). report.md: architecture and roles, param table with bounds, decisions (sell tax, opening cap), sim results, review findings and fixes, gas table, launch checklist, open questions.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"blocked","createdAt":"2026-10-10T19:59:41.100Z"},{"jobId":"80dc62dc-0e0b-42ea-bc28-5128fc6eff2a","workflowId":null,"objective":"Reports:\nv1: job b9e37680-814c-4f17-b4bc-68272b77304d\nhttps://api.imd.fun/artifacts/dfbd6842bdf572b684b09c4e56d150483da21ccc8dfb14d05fb01409c4441c0b\nhttps://github.com/Identity-md/research/tree/main/jobs/b9e37680-814c-4f17-b4bc-68272b77304d\nv2: job 10d225a6-92cb-4cde-9d4b-ec076b078f7d\nhttps://api.imd.fun/artifacts/cd34576baf9021fc2bd1d6f12da420599bc2bf0355465b7ab0796eabfe6be64a\nhttps://github.com/Identity-md/research/tree/main/jobs/10d225a6-92cb-4cde-9d4b-ec076b078f7d\nUse the fee splits, rarity and sim assumptions from these reports. If the v2 sim code is not in the repo, rebuild the model from the assumptions stated in report v2 and say so in the report.\n\nSwarm wallet: not known yet, the token is not launched. Make swarmWallet, heartbeatRecipient and token address constructor params. Use placeholder addresses in tests, deploy script reads them from env. Do not invent real addresses.\n\nAlso add item sets: 6 types GPU, ASIC, Power Supply, Cooling, Motherboard, Router (plus Room keys). Every item mines alone, room = 6 slots one per type. Set bonuses: all 6 in a room +25% hashrate, GPU+ASIC +10%, Power Supply+Cooling -15% electricity, Motherboard+Router -25% blackout damage, 3+ same rarity in a room +5/10/20% (Rare/Epic/Legendary). Total cap +40%, values in Params. Include in the sim.\n\nWho can call what: No owner. Swarm role (swarmWallet, constructor param) can only: change Params within hard bounds and max 10% step per 24h, submit grid event numbers, post herald letters. Team address can only change itself. Players: buy and open packs, place items, claim, spend, lock and unlock Generator, lobby, set referrer once, claim starter pack with merkle proof. Anyone: resolve pack and event randomness after the target block, donate tokens to RewardPool, trigger emission and inspection payout. Nobody can mint items outside PackSale and StarterClaim, withdraw pools or move user funds.\nUpgrades and pausing: Not upgradeable. Only PackSale can be paused, by the swarm role, auto-unpause after max 72h. Claims, unlocks and withdrawals can never be paused.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-10T20:12:21.409Z"},{"jobId":"5ce56cbc-1158-455f-9c37-453120687a3a","workflowId":null,"objective":"BLACKOUT v3: rework the contracts from job 80dc62dc (repo identity-md-launches/launch-1269-reports-v1-job-b9e37680-814c-4f17-b4bc-6) to the v3 design below. Build + tests + Robinhood fork + re-run sim. NO DEPLOY. Where v3 differs from the current code, v3 wins. Keep: no owner, no upgrades, bounded Params (max 10% step per 24h), pull payments, CEI, reentrancy guards, constructor-param addresses, team address 0x6d51cBE774aeAe4dd40bCA2560E9bc2695A0d007.\n\n1. EPOCHS (autonomous)\n- Epoch = 6h. A new epoch starts only when anyone calls advanceEpoch(); no mining accrues between epoch end and the call. Caller gets a bounty (default 0.001 ETH, Params 0.0005-0.003) from the heartbeat balance.\n- Swarm submits plans for the next 2 epochs: event type, severity within bounds, swarm random number, letter. Event randomness = hash(swarm number, block hash after the shift). No plan = contract picks the event from a fixed fallback table. Swarm never picks a player or district.\n- Claims available every epoch. Regulator script (dry run) + rule table: keep reward pool runway >= 14 days by tuning emission, tariff, pack pace and event mix within bounds.\n\n2. NO BURNS. Remove BurnVault. Every token spend (token packs, repair, electricity, overclock, merge, inventory expansion, token lobby) goes 100% to the reward pool. Withdrawal tax goes 100% to active farms next epoch.\n\n3. ETH SPLITS (fixed): packs 85% reward-pool buy / 13% team / 2% heartbeat. ETH lobby and progressive sell surcharge: same 85/13/2. Heartbeat balance capped at 1 ETH, excess to reward-pool buy. Generator removed.\n\n4. SWAP FEE. Preferred (if IMD launch allows a custom hook): 2% project fee = 1% team + 1% reward-pool buy, plus 0.25% network, plus the progressive sell surcharge (total cap 15%). Fallback (standard IMD hook): 1% split 0.5% team / 0.5% reward-pool buy, no surcharge. Build both paths, document which applies.\n\n5. PACKS. No quantity limits at all (remove wallet, global, token-pack daily limits). VRGDA price: start 0.010 ETH, floor 0.006, ceiling 0.03, target ~20 packs/hour, +1% per pack above pace at launch, ~2%/hour decay below pace (all Params). Token pack = current ETH price converted by 30-min TWAP with 10% discount. 3 items per pack, future block hash N+2, expiry fallback 3 Common GPUs.\nRarity: Common 70, Rare 22, Epic 6.7, Legendary 1, Mythic 0.3 (Mythic only for account level 10+, else that 0.3 goes to Common). Hash 10/28/80/250/800.\n\n6. ITEMS: 12 soulbound types (no transfers except into/out of own farm). Compute (100% of rarity hash): GPU 16%, ASIC 15%, FPGA 12%. Others mine at 60%: Power Supply 9, Battery 7, Solar Panel 7 (power); Fan 9, Liquid Cooling 6 (cooling); Router 6 (network); Motherboard 5, Server Rack 4, Surge Protector 4 (infra).\nRoom = 6 slots, any items, no duplicate type. Combos per room (hash bonuses add, cap +40%, values in Params):\nCompute Duo GPU+ASIC +10%; Triple Core GPU+ASIC+FPGA +20% (replaces Duo); Full Stack all 5 tags +15%; Airflow Fan+Server Rack +5% and fire halved; Cold Power PSU+Liquid Cooling electricity -15% and fire immune; Off-grid Solar+Battery electricity -20% and outage loses 50% not 100%; Clean Power Surge Protector+PSU surge immune; Locked Rack Router+Server Rack cable theft immune; rarity set 3+ same rarity +5/10/20/30% (R/E/L/M, highest only).\n\n7. INVENTORY, ROOMS, LEVELS\n- Inventory 15 slots; full inventory blocks opening packs. Exits: scrap item for ~1h of its yield (from pool), merge 3 identical into next rarity (up to Legendary), expand +5 slots for rising token price (to pool).\n- Items only in rooms. Room 1 at start, room 2 when farm is 3 days old, room 3 at level 7, room 4 at level 10. Remove room keys.\n- Account XP from active epochs, packs bought, tokens spent in game. Targets: level 3 ~1 day, level 5 ~48h, level 10 ~1 week. Equip gates: Epic level 3, Legendary level 5, Mythic level 10.\n\n8. MINING: emission from pool only (start 3.5%/day, sim picks bounds), per epoch by hashrate. Remove the 2% whale soft cap. Internal balance per player; in-game spend no tax +5% bonus; withdraw tax max(5%, 20% - 15%*age/7d). Durability 100, -0.5 per epoch, yield x durability, repair with tokens anytime. Overclock +10%/level up to 5. Electricity tariff start 15% of yield, bounds 10-30%.\n\n9. EVENTS (one per epoch or Calm; per-20-epoch caps: each negative <= 4, positives >= 4; same district outage cooldown 2 days):\nOutage: 30% of district farms get 0 this epoch. Power surge: 10% of district farms, random item -50 durability, 2% chance destroyed (never Legendary/Mythic). Server fire: rooms without cooling yield 0 this epoch, items -30 durability. Cable theft: 20% of district farms lose Router effects for 2 epochs or until token repair. Tax audit: top 10% farms by hash give 10% of this epoch's mining to the pool. Green wave: district +10% mining. Cheap tariff: city electricity -50% this epoch.\nAutomatic supply drop: if epoch pack sales >= 2x target pace, 5% random active farms get a free Common or Rare item (minted).\nLobby: ETH or token for own district lowers negative odds (min weight 0.40, 3-day half-life) and raises Green wave odds. Herald letter for every event and Params change.\n\n10. WEEKLY SEASON (permissionless finalize): best district by spend (packs+lobby+repairs) -> every active farm there gets a free Rare-guaranteed pack; lottery: 3 random active farms (tickets = active epochs) get an Epic+ item; best farm (in-game spend / yield) gets 1% of weekly emission.\n\n11. KEEP: referrals 5% of invitee mining on top, one level, set once, no self. Identity MD holders: only 1 free starter pack per tokenId, snapshot at token launch block, window hour 48 to day 16, Rare 92 / Epic 8, 50% mining until a paid pack. Remove all other holder perks.\n\n12. SIM (35 days, 6h steps, steady/hype/weak; ~900 NFT holders sell 35/50/65% of the swarm 10% in 14 days). Tune to: week-1 joiner payback <= 10 days in steady; game alive >= 3 weeks in steady and hype; event losses <= 10% of average farm weekly yield. Report payback by join week, stall day, team and heartbeat ETH, both swap-fee paths.\n\n13. TESTS: unit, fuzz, invariants (token conservation, no burns, splits, caps, level gates, inventory limit, soulbound, epoch cannot advance early, bounty paid once, fallback events, VRGDA bounds), Robinhood fork smoke, gas per action incl. advanceEpoch with many farms (must stay bounded).\n\n14. Ask a second contributor with fresh context to review; fix high and medium.\n\nDeliver: updated repo, report.md (what changed vs 80dc62dc, Params table with bounds, sim results, review findings, open questions), regulator.md.","baseCommit":"620092c8713ccd46ecda72a32994cd547ab692cb","state":"completed","createdAt":"2026-10-11T05:09:42.768Z"},{"jobId":"14e753f9-5e78-4130-84d0-17d862a4ad7d","workflowId":null,"objective":"BLACKOUT v3.1: update the v3 contracts from job 5ce56cbc (same repo, branch with the v3 report) and re-run the sim. NO DEPLOY. Keep everything in v3 unless changed below.\n\n1. REWARD POOL ENDOWMENT IN TOKENS (no ETH capital is available)\n- At launch a share of the token supply goes to the game RewardPool instead of the AMM (poolBps lowered). These are not team tokens: no owner, no withdrawal, they can only be emitted to players by the normal mining rules.\n- Endowment drips into the available pool linearly (Params: drip period 14-56 days, default 42), so early emission does not front-load it. Compare with instant availability.\n- Sweep endowment 10 / 15 / 20 / 25% of supply (AMM share 80 / 75 / 70 / 65%, swarm 10% unchanged), same opening cap in ETH. Pick the best share for payback in ETH terms without killing price from emission sell pressure.\n\n2. KEEPER BOUNTIES (game must run with nobody online)\n- Besides advanceEpoch, pay small bounties for real work only: farm settlement batch, pool buyback, plan/entropy resolution, weekly season finalize. Bounties from the heartbeat balance, each bounded in Params, paid only when the call does useful work (no spam, no empty batches, one bounty per unit of work).\n- Size them so a public bot is profitable at Robinhood Chain gas. Check in the sim that the 2% heartbeat share covers all bounties plus swarm runs in every scenario. If not, propose the smallest change (higher heartbeat share or cap) and show its effect on team and rewards.\n\n3. LAUNCH FACTS (from the IMD worker code) AND DEPLOY ORDER\n- Custom univ4_hook launches are allowed (own hook + token). Use the custom fee path. The hook must fit that format: a single hook contract file, constructor up to 16 args, no owner.\n- Supply below poolBps 9000 must go to remainderTo, a plain address: team wallet 0x6d51cBE774aeAe4dd40bCA2560E9bc2695A0d007, which transfers the endowment to RewardPool publicly right after the game deploys. Design and document that step.\n- The swarm 10% goes to ~900 contributor agents with a claim lock, not to NFT holders. Model them as sellers (35 / 50 / 65% in 14 days).\n- Game contracts deploy after the token as evm_contracts launches: max 8 contracts and 16 constructor args each. Split into 2 launches or merge contracts, and document the exact deploy order and constructor args.\n- The hook launches before FeeRouter/RewardPool exist. Make the hook hold its ETH fees until a one-time bind to FeeRouter (callable once by the team address, immutable after), or a better trustless design.\n- Heartbeat runs are paid in $IMD by whoever adds runs. Check if a contract can fund heartbeat runs from the heartbeat ETH balance; if not, document the manual top-up and its cost.\n\n4. SIM\nRe-run steady / hype / weak, custom fee path, unfunded (0 ETH) for every endowment option. Targets: week-1 joiner whole-cohort payback <= 14 days in steady (10 ideal), steady and hype alive >= 21 days, event losses <= 10% of weekly yield, team ETH reported. Say clearly which option meets the targets, or what still misses and why.\n\n5. TESTS AND REVIEW\nTests for endowment drip (conservation, no withdrawal path, cannot be emitted faster than the drip), every bounty (paid once, only for useful work, bounded by heartbeat balance), hook fee holding and one-time bind, and the full suite. A second contributor with fresh context reviews the changes; fix high and medium.\n\nDeliver: updated repo, report.md with the endowment comparison table, recommended launch parameters (poolBps, endowment %, drip days, bounty sizes), the step-by-step launch and deploy order, regulator.md update.\n\nUpgrades and pausing: Not upgradeable. Only PackSale can be paused, by the swarm role, auto-unpause after max 72h. Claims, withdrawals, advanceEpoch and keeper calls can never be paused. The hook has no owner; its only privileged action is the one-time bind to FeeRouter by the team address.","baseCommit":"4d7cd188b932722e40d0453f65005f05bbc2f932","state":"completed","createdAt":"2026-10-11T06:59:27.923Z"},{"jobId":"9c938888-9ff8-4a30-9337-3bd742175193","workflowId":null,"objective":"BLACKOUT v3.2: update the v3.1 contracts from job 14e753f9 (same repo) and re-run the sim. NO DEPLOY. Keep v3.1 unless changed below.\n\nGOAL: remove the keeper cost problem. v3.1 needs ~9 ETH of bounties per 35 days because farms are measured and credited by keepers every epoch, which forced a 31% heartbeat share and slowed payback.\n\n1. LAZY ACCOUNTING (no per-farm keeper work)\n- advanceEpoch only snapshots global state: emission, total effective hash, event type/district/seed, tariff. O(1), no farm loops.\n- Each farm settles itself lazily when its owner (or anyone, optional) interacts: claim, install, repair, pack, withdraw. Use a global reward-per-hash accumulator per epoch (MasterChef style) with per-district and per-event adjustments.\n- Event effects on a farm are derived on settle from the epoch seed and the farm id (e.g. hit = hash(seed, farmId) < threshold), so no keeper selects farms. Durability and combo protections apply at settle.\n- Tax audit: replace \"top 10% by hash\" with a hash threshold Param (farms above it pay 10% of that epoch's mining), computed on settle.\n- Cap lazy catch-up: a farm idle for many epochs settles in bounded batches; the owner can settle stale epochs in chunks.\n- Weekly season: scores accumulate on settle; finalize uses bounded work with a small bounty.\n\n2. HEARTBEAT back to 2% (cap 1 ETH, excess to reward pool). Only bounties left: advanceEpoch, entropy capture, buyback, season finalize. Confirm 2% covers them in all scenarios; if not, give the smallest share that does.\n\n3. KEEP: 20% endowment (poolBps 7000), 42-day drip, custom hook with one-time FeeRouter bind, 2 launches (8+4) with GameRegistry, team address 0x6d51cBE774aeAe4dd40bCA2560E9bc2695A0d007.\n\n4. SIM: steady/hype/weak, 20% and 25% endowment, 42-day drip. Report week-1 payback, stall day, price drawdown, team ETH, bounty cost vs heartbeat income. Then list the 3 strongest remaining levers to shorten payback (with numbers), without adding ETH capital.\n\n5. TESTS AND REVIEW: equivalence tests (lazy result == eager reference model for random farms/events), gas per action incl. long idle catch-up, invariants (conservation, no double credit), full suite. A second contributor with fresh context reviews; fix high and medium.\n\nDeliver: updated repo, report.md, updated launch-v31.md deploy steps.\n\nUpgrades and pausing: Not upgradeable. Only PackSale can be paused, by the swarm role, auto-unpause after max 72h. Claims, withdrawals, advanceEpoch and keeper calls can never be paused. The hook has no owner; its only privileged action is the one-time bind to FeeRouter by the team address.","baseCommit":"5dc6f98baf0d2508e5551dc700f685b9eef60e14","state":"completed","createdAt":"2026-10-11T08:52:37.240Z"},{"jobId":"46fe87c6-3ec1-48f0-9da4-d9277c73ecaf","workflowId":null,"objective":"BLACKOUT v3.3: update the v3.2 contracts from job 9c938888 (same repo) and re-run the sim. NO DEPLOY. Keep v3.2 unless changed below.\nProject X: https://x.com/IMDBlackout\nPublic site: playblackout.xyz\n\n1. IDLE FARMS STOP DILUTING\n- A farm with no owner action for 12 epochs (3 days) drops out of the global hash denominator automatically (O(1) via per-epoch expiry buckets in advanceEpoch, no farm loops).\n- Rewards earned before expiry are never lost. Any owner action (sync, claim, install, repair, pack) re-commits the farm from the next epoch.\n- Report how many tokens this returns to active players vs v3.2 (v3.2 had ~176M stuck at day 35).\n\n2. ANTI-RUSH (whales welcome, but no instant max)\n- Level age gates: level 5 needs farm age >= 1 day, level 7 >= 3 days, level 10 >= 5 days. Paid XP cannot bypass them.\n- Paid XP (packs + spending) capped at 400 XP per day per farm; activity XP (100 per active epoch) uncapped.\n- Remove merging completely. Spare items: install, scrap or keep after inventory expansion. Legendary and Mythic only from packs and season prizes.\n- Weekly best district: score = average per active farm, one wallet counts for at most 10% of its district score.\n\n3. TEAM SHARE: packs, lobbying and sell surcharge split 88% reward pool / 10% team / 2% heartbeat (cap 1 ETH, excess to pool). Swap base fee stays 1% team / 1% reward pool.\n\n4. LAUNCH PROTECTION (custom hook):\n- Decaying buy tax: 90% at launch, linear decay by timestamp to the normal fee over 30 minutes. Sells use the normal fee + progressive surcharge.\n- All launch tax goes to the reward pool (no team share).\n- Max buy 0.5 ETH per swap for the first 60 minutes after launch.\n- PackSale opens 60 minutes after token launch (immutable timestamp).\n- View functions for the site: current tax, time left, max buy.\n\n5. KEEP: lazy accounting, 2% heartbeat, 20% endowment (poolBps 7000), 42-day drip, one-time FeeRouter bind, 2 launches (8+4) with GameRegistry, team address 0x6d51cBE774aeAe4dd40bCA2560E9bc2695A0d007.\n\n6. SIM: steady/hype/weak, 20% endowment, 42-day drip. Players sync once a day (not every epoch). Report week-1 payback, stall day, price drawdown, team ETH, heartbeat coverage. Scenarios: whale (one wallet buys 300 packs on day 1, its emission share on days 1, 3, 7) and snipers (bots buy 5 ETH in the first minute: their cost, tax collected to the pool, price after 30 and 60 minutes).\n\n7. TESTS AND REVIEW: tests for idle expiry (no reward loss, re-commit, O(1) advance), every anti-rush rule, the new split, launch tax curve, max buy expiry, PackSale open time; full suite and invariants. A second contributor with fresh context reviews; fix high and medium.\n\nDeliver: updated repo, report.md, updated launch steps.\n\nUpgrades and pausing: Not upgradeable. Only new PackSale purchases can be paused, by the swarm role, for at most 72 hours with automatic expiry and a 72-hour live interval before another pause. Claims, withdrawals, sync, advanceEpoch, entropy, buybacks and season finalize can never be paused. The hook has no owner; its only privileged action is the one-time FeeRouter bind by the team address. Launch tax, max buy window and PackSale open time are immutable at deploy.","baseCommit":"1a0e7a40a26b0143550aa433b385dcbea0a533c4","state":"completed","createdAt":"2026-10-11T11:04:24.639Z"},{"jobId":"3470cfdb-98c6-42dd-87c4-547701799dc9","workflowId":null,"objective":"BLACKOUT v3.4: fix the independent review findings (research job c4b50745) on top of v3.3 (job 46fe87c6, same repo). NO DEPLOY. Keep v3.3 unless changed below.\nProject X: https://x.com/IMDBlackout\nPublic site: playblackout.xyz\n\n1. PACKS NEVER LOSE VALUE (H-1): if pack or starter entropy expires (256 block window), re-arm to a new future block like Season.rearm. Never mint fallback Commons for a paid pack. One-click reveal flow and a tested bot path that captures entropy within seconds.\n\n2. LAUNCH PROTECTION (H-2):\n- Anchor the launch clock only to the official pool initialization by the IMD launcher (check sender) or to the first liquidity add, so nobody can start it early.\n- Stepped buy tax by time: 90% for minutes 0-10, 50% for 10-20, 25% for 20-30, then the normal fee. All launch tax goes to the reward pool. Sells use the normal fee + progressive surcharge.\n- No buy size limits at all: remove the max buy. Volume is welcome; the tax makes early sniping unprofitable and funds the pool.\n- PackSale reads its open time from the hook (initializedAt + 60 min), not from a constructor input.\n\n3. NO PACKS BEFORE THE GAME IS READY (H-3): openPack and tokenPack require RewardPool endowed AND the hook bound to this FeeRouter.\n\n4. TRUSTLESS HOOK BIND (H-4): bindFeeRouter accepts only the FeeRouter registered in GameRegistry with the pinned code hash and CREATE2 address from the pinned factory, and the registry must point back to this hook. Nobody, including the team, can bind a look-alike.\n\n5. ENDOWMENT (M-1 and custody):\n- Remove activateEndowment; only count tokens actually transferred.\n- Make RewardPool's address predictable (CREATE2 via the launch factory) and use it as the IMD remainderTo, so the 20% goes straight to the pool at token launch and never touches the team wallet. If remainderTo cannot be a not-yet-deployed address, keep fundEndowment and document the exact public steps.\n\n6. FAIRNESS FIXES: best-farm prize ranked by capped absolute spend with at least 20 active epochs (M-3); lottery tickets weighted by committed hash with a cap, district free packs only for farms that paid (L-1); district score counts only paying farms, soft rule: one wallet counts for at most 10% of the district's total spend (L-2); buyback slippage max 1.5% and a minimum interval (L-4); Mythic eligibility checked at reveal, not purchase (L-5). Referrals stay as they are.\n\n7. ECONOMY IMPROVEMENTS (propose and test):\n- Emission follows inflow: regulator rule ties daily emission to the 7-day pack sales trend within bounds.\n- Compare 42 vs 56 day drip.\n- First reward faster: new hash mines from the current epoch pro rata instead of waiting for the next one.\n- Any other lever that helps week-2/3 joiners without ETH capital.\n\n8. SIM: arrivals respond to price and payback (not fixed), 5+ seeds, report median and range. Payback by join week 1/2/3, stall day, drawdown, team ETH. Sniper scenario: bots buying 5 ETH at minutes 1, 15 and 25 under the stepped tax.\n\n9. TESTS AND REVIEW: tests for every fix, full suite, invariants. A second contributor with fresh context reviews; fix high and medium.\n\nDeliver: updated repo, report.md (each finding: fixed / how), updated launch steps.\n\nUpgrades and pausing: Not upgradeable. Only new PackSale purchases can be paused, by the swarm role, for at most 72 hours with automatic expiry and a 72-hour live interval before another pause. Claims, withdrawals, sync, advanceEpoch, entropy, buybacks and season finalize can never be paused. The hook has no owner; its only privileged action is the one-time FeeRouter bind, which accepts only the registry-verified FeeRouter. Launch tax steps and PackSale open time are immutable.","baseCommit":"b208e8397e62ef4224a4d9f12653b6689c204998","state":"completed","createdAt":"2026-10-11T12:18:41.810Z"},{"jobId":"b29c69c8-bd5b-477b-bed1-9fceed0f35b5","workflowId":null,"objective":"BLACKOUT v3.5: extend v3.4 (job 3470cfdb, same repo). NO DEPLOY. Keep v3.4 unless changed below.\nX: https://x.com/IMDBlackout | Site: playblackout.xyz | Free pack claim (live): https://playblackout.xyz/freepack\n\nGOAL: token-first economy. Maintaining a farm stays profitable from mining alone; growing it (enhance, rooms, locks, lobby) costs more tokens than it mines, so growers buy the token. All token prices scale with mining (hours/days of yield at the last settled rate, with floors), never fixed amounts.\n\n1. TOKEN-ONLY\n- Packs only for the token (remove ETH packs). VRGDA in tokens, no ETH peg.\n- PACK PRICE RESEARCH: 2-3 parameter sets (start/floor/ceiling/decay/target), each as \"pack = N days of average farm mining, pays back in X days\". Simulate hype/steady/weak and a 50% token drop: week 1/2/3 cohort payback, team ETH, drawdown. Recommend one; requester picks; easy to switch before deploy.\n- \"Buy with ETH\" zap: one tx swaps ETH via the official pool (min-out) and buys the pack.\n- Packs and lobby split: 88% reward pool (tokens), 10% team, 2% heartbeat. Team/heartbeat shares sold to ETH by FeeRouter in small batches (max once per 5 min, 150 bps slippage, vs 30-min average, size adapts to depth). System sells pay normal fee only. Heartbeat cap 1 ETH, excess stays in pool.\n- Other token spends 100% to the reward pool. No burns. Swap fees unchanged.\n- Rooms: room 1 free; 2/3/4 cost 2/5/10 days of the farm's mining. Age/level gates stay.\n\n2. REPAIR\n- Wear 1%/active epoch; idle farms don't wear. Output tiers: 100-80% =100%, 80-60 =85%, 60-40 =65%, 40-20 =40%, <20 =0 (overheated). Event damage uses tiers.\n- Each 10% restored costs N hours of that item's mining (N default 6, swarm range 4-8). Optional auto-repair below a player threshold (default 80%) at settlement.\n- Targets: repair returns >=2x cost; sink ~10% of active mining; repairers net 85-90% vs <60% for non-repairers over 25 days.\n\n3. ENHANCEMENT (replaces overclock)\n- success / on failure / hash bonus / cost in item yield days:\n+1 95% none +3% 0.25 | +2 90% none +6% 0.5 | +3 80% none +10% 1 | +4 70% -1 lvl +14% 1.5 | +5 60% -1 +19% 2.5 | +6 50% -1, 10% burn +25% 4 | +7 40% -1, 25% burn +32% 6 | +8 30% -1, 50% burn +40% 9\n- Build up to +16, cap +8 at launch; swarm may raise to +12 then +16, upward only, >=30 days apart, announced. +9..+16 (success/burn on fail/bonus/days): 25/55/44/12, 22/60/48/15, 20/65/52/19, 18/70/56/24, 15/75/60/30, 12/80/64/37, 10/85/67/45, 8/90/70/55.\n- Commit + future block randomness, re-arm on expiry, no retry. +6..+8 need level 7, +9+ need level 10. One global cap for enhance+combos+sets. Simulate +12/+16 unlocks.\n\n4. LOCKS AND DISTRICT STAKE\n- Lock 7d (>=5 days of farm mining) =+5% hash, 14d (>=10) =+10%, 30d (>=20) =+20%. No early unlock. Redistribution within emission, capped.\n- Locked tokens = district grid stake. By district share of city stake: largest = negative events x0.5, positive x1.5; average x1; near zero = negative x1.5, positive x0.5. Never immune. Wallet max 10% of district stake.\n- Lobby token-only (split as above), 3-day boost, combined with stake into one \"grid stability\" per district. Fix: Green wave AND Cheap tariff favor stable districts.\n\n5. SEASON PRIZES\n- 50% of sell surcharge ETH buys tokens into a weekly pot. Best farm 40% + existing 1% weekly mining (minimum). Lottery 3 winners 30% + Epic/Legendary item. Best district 30% to paying farms + Rare pack. Unclaimed rolls over after 4 weeks. Prize items unscrappable until first paid purchase.\n\n6. FREE PACK ALLOWLIST (https://playblackout.xyz/freepack, max 500)\n- Merkle claim, one starter pack per wallet. Swarm sets root once within 7 days after launch, then immutable. 30-day claim window.\n- All starter-flagged items (allowlist + Identity MD) unscrappable until the farm's first paid purchase; mining normal.\n- ui/: \"Claim your free pack\" for listed wallets, link to the claim page for others.\n\n7. METADATA: FarmItems.uri(id) on-chain JSON (e.g. \"+7 ASIC\", rarity, durability, tier, starter) + on-chain pixel SVG per kind/rarity (navy/purple, #39E6FF, #FFE600, #FF3DF2), glow at +12. Still soulbound.\n\n8. BILLBOARDS: 8 (one per district), weekly token auction, 32-char text + X handle, no links, swarm may blank offensive text, 100% to pool. Views for site and letters.\n\n9. EXTENSIBILITY\n- buyPackFor(recipient) for future gifting add-ons.\n- Reserved events, weight 0: Heatwave (extra cooling wear; Airflow/Cold Power protected), Festival (+5-15% district output).\n- Once per season the swarm may give one district 0-15% output for a week.\n- Documented read API: farms, items by owner, tiers, repair/enhance quotes, locks, stability, events, season and pot, billboards, launch status.\n\n10. DORMANT MODULES (deployed off, not in public docs/site). Swarm enables each once with 48h notice. Tested now.\n- District war: 48h, two districts, token war chests (wallet max 10%), score = chest + active hash. Winner +10% output a week, chest back + half of loser chest pro-rata; other half to pool.\n- Grid collapse: city-wide 24h token goal. Met = Green wave for all for a day; missed = one city-wide outage epoch. Tokens to pool.\n- Black market: weekly descending-price auction of 1-3 rare items for tokens, limited supply, to pool.\n\n11. PACKAGING: max 8 contracts per IMD contract job. Propose merged modules or a third launch via GameRegistry. Keep v3.4 binding/readiness guarantees.\n\n12. SIMULATION: maintain-only players profitable; growers spend 1.3-1.5x what they mine (report share bought on market). Report pack options, repair groups, enhance outcomes, sinks by type, locked supply, season pot (target 0.3-1 ETH value/week steady), team ETH after token sales, system sell pressure, cohort payback, drawdown, vs v3.4.\n\n13. GENERAL: no upgrades. Pause only new pack purchases (incl. zap) and black market buys, 72h max, auto-expiry. Update ui/ (not dormant modules). forge build/test/fmt pass; invariants for token conservation, pricing, locks, allowlist, pot. Second contributor adversarial review; fix high/medium. Report: changes, tests, sim tables, pack options with recommendation, open questions. No deploy, no broadcast, no token actions.","baseCommit":"b0843580b01d5ebcc0c8426eb9ea8dbcaa7a901f","state":"completed","createdAt":"2026-10-11T14:46:03.035Z"},{"jobId":"c379f49a-7caf-4f26-a669-d9e39ad160f2","workflowId":null,"objective":"BLACKOUT v3.6: extend v3.5 (job b29c69c8, same repo). NO DEPLOY. Keep v3.5 unless changed below. Launch is planned within ~24 hours, so keep changes minimal and safe.\nX: https://x.com/IMDBlackout | Site: playblackout.xyz | Free pack claim: https://playblackout.xyz/freepack\nPack profile decision: Balanced (profile 1).\n\n1. PHASED RELEASE (simple first, so players get used to the game)\n- Active at launch (core): token packs, ETH zap, gift packs, rooms, mining, repair (incl. auto-repair), events (no reserved ones), scrap, free pack claim, Identity MD starter, referrals, season best district + lottery, existing 1% best-farm mining prize.\n- Built but disabled at launch: enhancement, locks + district stake + lobby, billboards, season token pot, reserved events, dormant modules (unchanged).\n- The swarm role enables each feature once (on only, never off), with a 48-hour notice in its letter. Suggested order: enhancement (week 2), locks/stake/lobby (weeks 3-4), billboards + season pot (month 2), then +12/+16 caps and the rest. While the pot is disabled, its sell-surcharge share follows the v3.4 routing.\n- FarmCore has only ~246 bytes of headroom: put feature flags and checks in existing modules (Params, Economy, Civic or Enhancement), not in FarmCore. All sizes must stay under EIP-170.\n- Simulate the launch core alone (Balanced): maintain-only players profitable, payback, team ETH, drawdown; then after each phase.\n- ui/: show only enabled features; disabled ones as \"Coming soon\" teasers without details (dormant modules never shown).\n\n2. LAUNCH KIT\n- Keeper bot for a Linux VPS (Node 22+, no new dependencies if possible): advance epochs, capture/resolve entropy for packs, starters, enhancement and seasons, run FeeRouter system sells and reward/pot buys within the enforced limits, settle seasons and billboards. Reads RPC URL and keeper key only from an env file outside the repo; never commits keys. Include a systemd unit, README, dry-run mode and a status command.\n- launch-v36.md: one ordered checklist from token launch to packs opening: IMD token launch (univ4_hook with the custom hook, 70% pool / 20% endowment to the predicted RewardPool / 10% swarm, with the documented fallback), application jobs A and B, registration, binding, endowment funding, selectProfile(1), keeper start, free pack root within 7 days. For each IMD job, draft the exact objective text (under 8000 characters, including the X link).\n\n3. GENERAL\n- forge build/test/fmt pass; invariants kept; tests for every flag (disabled paths revert cleanly, enable once, no disable).\n- Second contributor reviews the v3.6 diff.\n- Report: changes, tests, launch-core simulation, open questions. No deploy, no broadcast, no token actions.","baseCommit":"c17b29da88de8331a29292be21769c759d7fd3d2","state":"completed","createdAt":"2026-10-11T16:25:30.193Z"},{"jobId":"03cb04ff-fd74-4349-85fa-6e4701b5cdd2","workflowId":null,"objective":"BLACKOUT v3.7: extend v3.6 (job c379f49a, same repo). NO DEPLOY. Keep v3.6 unless changed below.\nX: https://x.com/IMDBlackout | Site: playblackout.xyz | Free pack: https://playblackout.xyz/freepack\n\nPROBLEM: the IMD swarm has no signing wallet. Its only on-chain voice is the IMD oracle: Intake (Robinhood Chain 0xa43e6f75ee006411f79ac1c84120606c2330de82), IntakeDelivery for results bought on Ethereum (0xce0e6a670aa75e161d02aca3c7f00b94ca428ccb), answers attested by the IMD Intake writer (EIP-712, OracleAttestationConsumer pattern, requestWithFailure). Follow the current IMD docs (imd.fun/docs) exactly; verify addresses and interfaces from the docs, do not guess.\n\nGOAL: no admin wallet anywhere. The swarm role in every module is a new contract, SwarmDesk, driven only by attested oracle answers.\n\n1. SWARMDESK\n- Is the swarmWallet for Params, GridOperator, Civic, Enhancement, StarterClaim, Billboards and the dormant modules. No owner, no key, not upgradeable.\n- Accepts only attested IMD oracle results (direct Intake callbacks and IntakeDelivery from Ethereum schedules). Verifies the attestation, request id, expected question id and freshness; ignores duplicates and stale answers.\n- Every value is clamped to the existing hard-coded ranges; existing limits (10%/24h Params steps, 48h notice for features, 30-day enhancement cap steps, once-only actions) still apply.\n\n2. QUESTIONS (paid by IMD schedules = the heartbeat)\n- Event plan, every epoch (6h): answer as numbers (event kind, severity, district hint, random number). Applied to the next epochs exactly like submitPlan today. No answer = existing fallback table. Letters stay off-chain; the answer may carry a letter hash stored on-chain.\n- Weekly regulator: numeric answers for bounded Params, feature announcements (feature id to announce) and enhancement cap steps. Applied only through the existing announce/notice paths.\n- Document the exact oracle and schedule bodies (question text, answer format, cadence, cost) in launch-v37.md so the requester can create the schedules. Keep cost low: about 4 event questions per day plus 1 weekly regulator.\n- Option for a keeper to trigger a paid ask from Robinhood Chain via Intake using an IMD balance held by SwarmDesk (topped up by anyone), as a backup to the Ethereum schedules.\n\n3. REMOVE ADMIN ACTIONS AT LAUNCH\n- Pack profile fixed to Balanced (1) at deploy; remove selectProfile.\n- Free pack Merkle root and Identity MD starter root/snapshot passed as constructor arguments (the list is frozen before deploy); remove setFreeRoot. Keep the 30-day claim window.\n- Billboard moderation: remove, or allow only via an oracle answer with the slot id.\n- Endowment fallback must not rely on any swarm wallet; keep predicted RewardPool funding only, and document what to do if the launcher cannot pre-fund it.\n\n4. GENERAL\n- FarmCore headroom is ~246 bytes: keep SwarmDesk logic out of FarmCore.\n- Tests: forged or wrong-signer attestations rejected, replay rejected, stale answers ignored, clamping, no-answer fallback, schedule delivery path, phased release via oracle, no remaining admin path anywhere (grep and test).\n- Update keeper/ (trigger backup asks, show oracle status) and ui/ (show the last swarm answer and next epoch plan).\n- Second contributor reviews the v3.7 diff. Report: changes, tests, oracle costs per day, launch-v37.md with ordered steps and job A/B objective drafts, open questions. No deploy, no broadcast, no token actions.","baseCommit":"23bcc49e37c53410f5300c03bb9c70b9bf68e9c0","state":"completed","createdAt":"2026-10-11T17:39:54.242Z"},{"jobId":"b5d8b2ab-fb37-4d3a-95d6-e13c5d09b1bb","workflowId":null,"objective":"BLACKOUT v3.8: extend v3.7 (job 03cb04ff, same repo). NO DEPLOY. Fix every blocker found by the platform research job b94e6839 (read its report: github.com/Identity-md/research/tree/main/jobs/b94e6839-f641-492c-a43e-48ccf6eb4674). Keep v3.7 unless changed below.\nX: https://x.com/IMDBlackout | Site: playblackout.xyz | Free pack: https://playblackout.xyz/freepack\n\n1. NO PRE-KNOWN LAUNCH COORDINATES\n- IMD launch numbers cannot be reserved. Remove every constructor dependency on future launch numbers. Modules, Registry, Params, SwarmDesk and the hook must discover and authenticate each other at bind time using on-chain proofs (ProjectFactory predictContract + its registry isRecorded + pinned creation-code hashes), supplied permissionlessly after deployment.\n- EndowmentEscrow: new ownerless contract deployed first (its own evm_contracts launch), used as remainderTo for the 20% in the token launch. One permissionless forward() sends its whole balance once to the authenticated RewardPool of the canonical game. No other exit. RewardPool.fundEndowment must accept it.\n\n2. HOOK MATCHES THE IMD POOL\n- The platform pool always uses LP fee 12500 (1% to the paying wallet, 0.25% network). V4Market must accept that PoolKey fee, not charge its own network fee, and authenticate initialization by the LaunchFactory on Robinhood Chain. Constructor args static only, using $poolManager, $token, $factory.\n- Our extra fees go on top through the hook: +1% to the reward pool on every swap, the stepped launch buy tax (90/50/25 by 10-minute steps, 100% to rewards), the progressive sell surcharge (pot share as in v3.6). Total buy fee after launch about 2.25% as before.\n- Team swap income is the platform's 1% to the paying wallet (the team's project wallet). Remove the team swap share from FeeRouter; keep the team 10% of packs/lobby sold to ETH and sent to the team address. No setRequester dependency.\n\n3. HEARTBEAT THAT WORKS\n- Add a permissionless SwarmDesk.submit(attestation, signature, answer) with exactly the same checks as onOracleResult (attester signature, pinned question hash, consumer = Desk on 4663, slot/epoch freshness, once per UUID). Schedules are bought on Ethereum with consumer {4663, Desk} and no deliver; the keeper fetches attestations over HTTP and relays them.\n- Keep askBackup (Robinhood Intake, donated IMD) as backup.\n- Event policy: let the swarm choose event kind and severity within a safe range (e.g. severity 3000-7000) instead of the fixed table at 9000; keep positive event quotas.\n\n4. TOOLCHAIN\n- Build and pin with the IMD verifier settings (viaIR false, bytecode_hash none, pinned solc). Re-pin all creation-code hashes. All runtimes under 24,576 bytes; split modules if FarmCore no longer fits. At most 8 contracts per launch.\n\n5. ECONOMY CHECK\n- Initial market cap is fixed by IMD policy at 10 ETH FDV (ETH pair). The swarm 10% (100M) is claimable by contributors 1 hour after launch. Re-run the launch-core simulation (Balanced) with these facts: launch tax, drawdown, payback, team ETH.\n- Identity MD snapshot: Ethereum mainnet IDMD NFT (2000 tokens, see the research report); document snapshotBlock as an Ethereum block everywhere.\n\n6. LAUNCH KIT\n- Sepolia rehearsal manifests for every step, then mainnet runbook: escrow + Desk bootstrap, token launch (univ4_hook, poolBps 7000, remainderTo = escrow), job A, job B (as workflow.open with the site), then wiring by keeper/any wallet: register modules, Desk.bind, bindFeeRouter, escrow.forward, fundEndowment, start keeper and schedules. Exact objective text for each paid step (under 8000 chars, X link included). Gas check against the 0.01 ETH per-launch ceiling.\n- Update keeper/ (attestation relay, wiring commands, LaunchFactory claimFees) and ui/.\n\n7. GENERAL: forge build/test/fmt pass under the verifier settings; tests for bind-time proofs, escrow forward, hook fee 12500 path, submit relay, replay and staleness. Second contributor reviews the diff. Report changes, tests, simulation, blockers left. No deploy, no broadcast, no token actions.\n\nUpgrades and pausing: Not upgradeable. All contracts are immutable; the hook has no owner. No admin keys, no proxy, no migration, no personal or team wallet with any game power.  The only \"swarm role\" is the SwarmDesk contract, which acts solely on attested IMD oracle answers (verified attester signature, pinned questions, freshness, replay protection). Through those answers it can only: submit bounded event plans; change Params within hard-coded ranges (max 10% per 24h); announce features, which anyone can enable after 48 hours and nothing can ever disable; raise the enhancement cap +8 to +12 to +16, upward only, at least 30 days apart; pause new pack purchases (incl. the ETH zap) and black market buys for at most 72 hours, with automatic expiry and at least 72 live hours between pauses.  Never pausable: claims, withdrawals, sync, settlement, epochs, entropy, repairs, locks and unlocks, buybacks, season finalize, escrow forward and endowment funding.  Fixed at deploy, never changeable: pack profile (Balanced), free pack and Identity MD Merkle roots, snapshot block, endowment amount. If oracle answers stop, the game keeps running on its fallback event table and current Params.","baseCommit":"0410ef2cb90d141bff2500e0f9ac085c3fffaf4e","state":"completed","createdAt":"2026-10-12T06:33:18.697Z"},{"jobId":"14aa1d96-3c67-4b18-af80-481cf2b92ea8","workflowId":null,"objective":"BLACKOUT v3.9: extend v3.8 (job b5d8b2ab, same repo). NO DEPLOY. Finish every \"Not done\" item from the v3.8 report. You MAY change foundry.toml in this job.\nX: https://x.com/IMDBlackout | Site: playblackout.xyz | Free pack: https://playblackout.xyz/freepack\n\n1. Hook fees: remove the hook's own 0.25% network share; after the launch tax window the hook adds exactly 1% to rewards on every swap; remove the team half of FeeRouter._base (team swap income is the platform 1% to the paying wallet). Keep the stepped launch tax and the progressive sell surcharge. Update all fee assertions.\n2. Toolchain: set via_ir = false and bytecode_hash = \"none\" (the IMD verifier settings), rebuild, re-pin all ModuleCode/SwarmCode hashes, keep every runtime under 24,576 bytes (split FarmCore into an existing module if needed). Keep max 8 contracts per launch.\n3. Severity: keep the Desk band 5000-7000 and add an on-chain floor of 3000 in GridOperator.\n4. Re-run the Balanced launch-core simulation with 10 ETH initial FDV and the swarm 10% claimable 1 hour after launch; report payback, drawdown, team ETH vs v3.6.\n5. Keeper: attestation relay (fetch from the IMD oracle API, submit to Desk), wiring commands in order (register, Desk.bind right after job A with a check of Desk.registry(), bindFeeRouter, escrow.forward, fundEndowment), LaunchFactory claimFees. UI: same changes.\n6. launch-v39.md: final ordered runbook with Sepolia rehearsal first, exact objective texts for every paid step (under 8000 chars, X link included).\n7. forge build/test/fmt pass under the new settings. Second contributor reviews the diff. Report changes, tests, simulation, anything still open. No deploy, no broadcast, no token actions.\n\nUpgrades and pausing: Not upgradeable. All contracts are immutable; the hook has no owner. No admin keys, no proxy, no migration, no personal or team wallet with any game power.  The only \"swarm role\" is the SwarmDesk contract, which acts solely on attested IMD oracle answers (verified attester signature, pinned questions, freshness, replay protection), delivered by Intake/IntakeDelivery or relayed permissionlessly via submit. Through those answers it can only: submit bounded event plans (severity 5000-7000, on-chain floor 3000); change Params within hard-coded ranges (max 10% per 24h); announce features, which anyone can enable after 48 hours and nothing can ever disable; raise the enhancement cap +8 to +12 to +16, upward only, at least 30 days apart; pause new pack purchases (incl. the ETH zap) and black market buys for at most 72 hours, with automatic expiry and at least 72 live hours between pauses.  Never pausable: claims, withdrawals, sync, settlement, epochs, entropy, repairs, locks and unlocks, buybacks, season finalize, Desk.bind, bindFeeRouter, EndowmentEscrow.forward and endowment funding.  Fixed at deploy, never changeable: pack profile (Balanced), free pack and Identity MD Merkle roots, snapshot block, endowment amount. EndowmentEscrow has no owner and one exit only: forward to the authenticated RewardPool. If oracle answers stop, the game keeps running on its fallback event table and current Params.","baseCommit":"73ec53ec91bb0f36a26f8a88cfc92ed5f07405a9","state":"completed","createdAt":"2026-10-12T09:06:36.834Z"},{"jobId":"02efcae5-19e5-40f5-93ff-75d51e57cd4e","workflowId":null,"objective":"BLACKOUT v3.10: finish v3.9 (job 14aa1d96, same repo). NO DEPLOY. Do not change contract logic unless a test or review finds a bug.\n\nX: https://x.com/IMDBlackout | Site: playblackout.xyz | Free pack: https://playblackout.xyz/freepack\n\n1. Launch toolchain tests: make the full forge test suite compile and pass under the IMD verifier settings (FOUNDRY_VIA_IR=false FOUNDRY_BYTECODE_HASH=none). Fix stack-too-deep in tests (EndowmentEscrowV38.t.sol and any other) by refactoring tests only (structs, helpers, scoped blocks). Contracts must stay byte-identical to v3.9 launch pins; if a source change is unavoidable, re-pin and explain. Report both toolchains: forge build, forge test counts, fmt, pins check.\n2. launch-v39.md in repo root: final ordered runbook. Sepolia rehearsal first, then mainnet: EndowmentEscrow and SwarmDesk bootstrap, token launch univ4_hook fee 12500 with remainderTo = escrow, job A, Desk.bind right after job A with a Desk.registry() check, job B, bindFeeRouter, escrow.forward, fundEndowment, schedules (event 4/day, regulator weekly), keeper start, LaunchFactory claimFees. For every paid step give the exact objective text (under 8000 chars each, X link included), the inputs it needs, and the on-chain check that proves it worked. Mark which inputs the requester supplies (Merkle roots, snapshot block, keeper wallet).\n3. Second contributor reviews the full v3.8 to v3.9 diff (fees, toolchain pins, severity floor, keeper relay and wiring, escrow, Desk bind twin front-run). Write docs/review-v39-independent.md, fix high and medium findings with regression tests.\n4. report.md: replace with the v3.9/v3.10 report (changes, tests on both toolchains, simulation table vs v3.6, review result, anything still open). Archive the v3.8 report to docs/report-v38.md.\n\nNo deploy, no broadcast, no token actions.\n\nUpgrades and pausing: Not upgradeable. All contracts are immutable; the hook has no owner. No admin keys, no proxy, no migration, no personal or team wallet with any game power. The only \"swarm role\" is the SwarmDesk contract, which acts solely on attested IMD oracle answers (verified attester signature, pinned questions, freshness, replay protection), delivered by Intake/IntakeDelivery or relayed permissionlessly via submit. Through those answers it can only: submit bounded event plans (severity 5000-7000, on-chain floor 3000); change Params within hard-coded ranges (max 10% per 24h); announce features, which anyone can enable after 48 hours and nothing can ever disable; raise the enhancement cap +8 to +12 to +16, upward only, at least 30 days apart; pause new pack purchases (incl. the ETH zap) and black market buys for at most 72 hours, with automatic expiry and at least 72 live hours between pauses. Never pausable: claims, withdrawals, sync, settlement, epochs, entropy, repairs, locks and unlocks, buybacks, season finalize, Desk.bind, bindFeeRouter, EndowmentEscrow.forward and endowment funding. Fixed at deploy, never changeable: pack profile (Balanced), free pack and Identity MD Merkle roots, snapshot block, endowment amount. EndowmentEscrow has no owner and one exit only: forward to the authenticated RewardPool. If oracle answers stop, the game keeps running on its fallback event table and current Params.","baseCommit":"5cc9f59d31e94356566309c5bf615ac3d5642945","state":"completed","createdAt":"2026-10-12T12:23:20.017Z"},{"jobId":"2f166600-ba14-4659-9409-a70218d2e97e","workflowId":null,"objective":"BLACKOUT v3.11: fork rehearsal of launch-v39.md (job 02efcae5, same repo). NO DEPLOY, NO BROADCAST. Do not change contract logic unless the rehearsal finds a bug.\n\nX: https://x.com/IMDBlackout | Site: playblackout.xyz\n\n1. On a local anvil fork of Robinhood Chain mainnet (4663), using the real IMD ProjectFactory, LaunchFactory, PoolManager, Intake and IntakeDelivery and the launch-toolchain artifacts (viaIR false, bytecode_hash none), execute runbook steps M1-M13 in order. Impersonate the platform where it would deploy or initialize. Use throw-away test roots and snapshot only.\n2. Prove on the fork: Desk.registry() equals the job A registry; module registration; bindFeeRouter; escrow.forward sends the full balance to the authenticated RewardPool; fundEndowment starts the drip; first pack purchase only after launch +1h; buys during 0-30 min pay 90/50/25% tax to rewards; after that exactly 1% to rewards per swap plus sell surcharge; an attested oracle answer relayed via SwarmDesk.submit (test attester on the fork only) changes a plan within 5000-7000; keeper pass advances epochs and reveals entropy; LaunchFactory.claimFees pays the paying wallet.\n3. Check what launch-v39.md marks as unproven: attested creation-code hashes vs real factory, afterInitialize sender, gas per 8-contract launch vs platform limits, constructor arg encoding through the real launcher.\n4. Commit the rehearsal script, a log with every address, call and check, and a short rehearsal section in report.md. Update launch-v39.md where reality differs. Replace the Sepolia section with the fork rehearsal.\n\nNo deploy, no broadcast, no token actions.\nRequires a Robinhood Chain (4663) RPC for the fork. If no RPC is available, stop and report it; do not substitute mocks or call it a rehearsal.\n\nUpgrades and pausing: Not upgradeable. All contracts are immutable; the hook has no owner. No admin keys, no proxy, no migration, no personal or team wallet with any game power. The only \"swarm role\" is the SwarmDesk contract, which acts solely on attested IMD oracle answers (verified attester signature, pinned questions, freshness, replay protection), delivered by Intake/IntakeDelivery or relayed permissionlessly via submit. Through those answers it can only: submit bounded event plans (severity 5000-7000, on-chain floor 3000); change Params within hard-coded ranges (max 10% per 24h); announce features, which anyone can enable after 48 hours and nothing can ever disable; raise the enhancement cap +8 to +12 to +16, upward only, at least 30 days apart; pause new pack purchases (incl. the ETH zap) and black market buys for at most 72 hours, with automatic expiry and at least 72 live hours between pauses. Never pausable: claims, withdrawals, sync, settlement, epochs, entropy, repairs, locks and unlocks, buybacks, season finalize, Desk.bind, bindFeeRouter, EndowmentEscrow.forward and endowment funding. Fixed at deploy, never changeable: pack profile (Balanced), free pack and Identity MD Merkle roots, snapshot block, endowment amount. EndowmentEscrow has no owner and one exit only: forward to the authenticated RewardPool. If oracle answers stop, the game keeps running on its fallback event table and current Params.","baseCommit":"45131782f44c00209b209f5cff7fadc08aa6fb43","state":"completed","createdAt":"2026-10-12T14:43:37.198Z"},{"jobId":"6dae9de8-feb1-451d-a139-dc6839bc5333","workflowId":null,"objective":"BLACKOUT v3.12: launch-ready source (job 2f166600, same repo). NO DEPLOY, NO BROADCAST. Do not change contract logic. Research job 4e478378 (artifacts/report.md) is the input.\n\nX: https://x.com/IMDBlackout | Site: playblackout.xyz\n\n1. foundry.toml (you MAY change it in this job): root profile solc 0.8.26, evm cancun, optimizer true, optimizer_runs 200, via_ir = false, bytecode_hash = \"none\". This is required by the IMD imported-launch check, which currently blocks the repo on bytecode_hash, and the launch adapter cannot edit it.\n2. Rebuild everything with the new profile. Every SwarmCode/ModuleCode launch pin and the EndowmentEscrow and V4Market creation hashes must stay exactly as listed in research 4e478378 section 3 (GameRegistry 0xee08039e…, Params 0x26c9f36a…, SwarmDesk 0x9e0cf571…, EndowmentEscrow 0xeeb7a2c1…, V4Market 0x758e2ab5…, ModuleCode.launchHash 0..13 unchanged). If any differs, stop and report. Keep the old via-IR repo pins only if removing them would change any contract bytecode.\n3. forge build, full forge test (including the fork rehearsal against a 4663 RPC), forge fmt --check, pin checks, Node tests: all pass with the plain foundry.toml, no env overrides.\n4. Run the free IMD public check (/requests/check) for the imported launches M1, M2, M3, M4, M7 against the new commit with steps audit-imported-code, adapt-contract-project, adversarial-review (no extra paths), and record blockers: [] for each, or the exact blocker.\n5. M-2 twin front-run: write docs/m2-trust-assumption.md for the audit judge. Show concretely what a twin capture can and cannot do: the attacker must pay a full 8-contract launch; the escrow can forward only to a canonical RewardPool with pinned code, never to an attacker wallet; no tokens or ETH become withdrawable by the attacker; the effect is griefing (the honest modules are orphaned). Give the severity argument (low, platform trust assumption) and the operational mitigation (keeper binds right after job A, Desk.registry() checked before forward). No code change.\n6. launch-v39.md: apply the research corrections: $contract:Params / $contract:GameRegistry named references in M4, ProjectFactory registry 0xf52b…8406 for proofs, M3 request fields (onchain univ4_hook, chainId 4663, pairWith eth, economics poolBps 7000 + remainderTo escrow, no owner, no initialMarketCapWei), the research's recommended objective texts for M1, M2, M4, M7 with the common paragraph, and a pointer to docs/m2-trust-assumption.md in M4 and M1. Add realistic timing (1-contract median about 63 min; 8-contract unknown, budget 2h).\n7. report.md: short v3.12 section (config change, pins unchanged, tests, check results, open items).\n\nNo deploy, no broadcast, no token actions.","baseCommit":"8cd615252481e025cca0b225437056467ddf5405","state":"completed","createdAt":"2026-10-13T06:57:25.734Z"},{"jobId":"fd33a9d2-12a3-4561-abed-75803cb84e9a","workflowId":null,"objective":"X: https://x.com/IMDBlackout\n\nBLACKOUT v3.14: make the source launch-ready in one change. Source changes only, nothing on chain. Base: this repo at 24bfb1d. Inputs: pre-launch audit job a8730286 (files/AUDIT.md in Identity-md/research) and the deploy-gate refusal of launch 1557.\n\nA. Audit fixes\n1. HIGH V4Market: quote() applies the pool LP fee: netInput = netInput * (1_000_000 - poolFee) / 1_000_000 before the mulDiv; quoteSell() applies gross = gross * (1_000_000 - poolFee) / 1_000_000 before subtracting PROJECT_BPS. Tests: on a 10 ETH full-range pool at spot == TWAP, executeBuys(0.05 ether, quote * 9850 / 10000) succeeds and lowers rewardETH; same for the sell side.\n2. MEDIUM SwarmDesk.bind: after proving the registry require IBoundHook h = IBoundHook(r.market()); h.desk() == address(this), h.token() == r.token(), h.gameConfigHash() == the Desk's gameConfigHash, else revert InvalidProof (an EOA market must revert). Tests: twin with a foreign market and with a foreign token both fail; the honest registry binds. Fix the \"Change the token or the pool\" row of docs/m2-trust-assumption.md.\n3. FeeRouter.executeSells: amount = Math.min(total, market.maxSellBatch()); revert only if 0; keep minOut against quoteSell(amount).\n4. FarmCore.retire: if (msg.sender != p) revert Unauthorized().\n5. SwarmDesk._regulate: if (key == 0 || key > 45) continue.\n6. FarmRewards._credit: keep the earlier vintage timestamp (if (v.amount == 0 || at < v.at) v.at = uint64(at)).\n7. Season.claimLottery: commit the item through PackSale.rewardPack like claimDistrict.\n8. Economy lock insertion: bound the walk (32 steps, or a caller hint checked against both neighbours).\n\nB. Deploy gate (blocking): the IMD manifest gate refuses any constructor argument equal to an IMD protocol address. Move every IMD protocol address into compile-time constants for Robinhood Chain 4663: ProjectFactory 0x9c9d2fcb75c2c132c0ac0c42df3819a42347265e, its registry 0xf52bbe066b7ad2d28c2195d066ea08dcbca88406, Intake 0xa43e6f75ee006411f79ac1c84120606c2330de82, IntakeDelivery 0xce0e6a670aa75e161d02aca3c7f00b94ca428ccb, attester 0x5598aa9146215bc13eb26f2c692ad1461fd32982, Robinhood IMD 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127, LaunchFactory 0xa25b02a1e93903b790e6aaf7da1b8b8d50294645, PoolManager 0x8366a39cc670b4001a1121b8f6a443a643e40951. Platform placeholders ($poolManager, $token, $factory, $contract:Name) stay allowed. Apply to SwarmDesk, EndowmentEscrow, GameRegistry, V4Market and any module. Add tools/check_deploy_gate.mjs that fails if any constructor word of any launch equals one of these addresses, and run it.\n\nC. Four launches instead of five: L1 deploys SwarmDesk then EndowmentEscrow in one evm_contracts launch, the escrow taking the Desk via $contract:SwarmDesk. L2 token + V4Market hook (univ4_hook, pairWith eth, poolBps 7000, remainderTo the L1 escrow). L3 job A, L4 job B (named $contract: references).\n\nD. Re-pin everything under the repo foundry.toml (solc 0.8.26, optimizer 200, cancun, viaIR false, bytecode_hash none). Keep GAME_CONFIG_HASH 0x11ed7438974e96ecc962201e9c46422c7bf239d725876863fa25a56c734b20d3 unchanged (roots and snapshot unchanged). Run full forge test, fmt, both pin checks, Node and Python tests, and the fork rehearsal (tools/rehearse_v311.sh with https://robinhood.drpc.org or https://robinhood-rpc.publicnode.com) through L1-L4 with the new constructors.\n\nE. docs/accepted-v314.md with one-line accepted wording for every remaining low/info: RewardPool shortfall repaired by plain transfer, exact-input swaps only, spot() bounds, fixed oracle signer/endpoints, answers between job A and job B not executable, future-block randomness, reserved Params keys, the M-2 twin (griefing only after fix 2).\n\nF. launch-v39.md: final objective text for L1-L4, each with the exact constructor words, the expected creation hashes, \"NO SOURCE CHANGES\", and the accepted list pasted in. report.md: v3.14 section with the new hash table and results.","baseCommit":"2ca21ed34bc4d8e2a6744928ef3d1cda131e1f50","state":"completed","createdAt":"2026-10-13T12:23:30.279Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":false,"kind":null,"id":null,"status":null,"chainId":null},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-1269-reports-v1-job-b9e37680-814c-4f17-b4bc-6","pullRequestUrl":"https://github.com/identity-md-launches/launch-1269-reports-v1-job-b9e37680-814c-4f17-b4bc-6/pull/13","commit":"8cd615252481e025cca0b225437056467ddf5405","deliveredAt":"2026-10-12T18:40:43.722Z","media":null},"media":null,"nodes":[{"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-12T18:40:17.454Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+7ff5db2c","verifiedTreeHash":"bb846986ec04db8c38cff37fcc12007d8f02dd50","at":"2026-10-12T18:40:17.456Z","failedChecks":[]},"seat":{"tokenId":"368","agentId":"51891"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0xf146d77e74ffec78ca35b3d9fb1bbcd9f4047fe6ca108796de629007e8e8a5b7","blockNumber":26207073,"sentAt":"2026-10-16T19:04:38.339Z","entries":[]},{"status":"sent","chainId":1,"txHash":"0xea278f5692d9195bd5ec8b7b934aeca8272c96ea16a70ac2a637e2a8979cf81c","blockNumber":26189756,"sentAt":"2026-10-14T09:11:17.002Z","entries":[{"nodeKey":"build_contract_project","agentId":"51891","value":1,"role":"verification:checks"}]}]}