{"workflow":null,"planning":null,"id":"c8817c12-4404-4060-b05c-6a72b014eef3","state":"completed","template":"skill:build-website","objective":"WEBSITE TASK: Sorphera - budget enforcement, continuous globe reveal, accurate NFT prizes\n\nContinue the existing website from merged PR #5:\nhttps://github.com/identity-md-launches/launch-961-build-sorphera-smart-contracts/pull/5\nBaseline: cc450384ecf7ddbf5cb49b8a2aba62921c0a2e62\nDemo: https://sorphera-a-world-of-possibility.sites.imd.fun/\n\nInspect the current branch and preserve newer work. Implement and verify this focused WEBSITE iteration with three requirements. No contracts work or general redesign.\n\nRetain the ice-blue wordmark, pink accents, charcoal/cream palette and exact tagline:\n\"Weekly ETH & NFT lottery ball jackpots. Powered by FWA.\"\nUse existing assets in web/public/brand/. No new owner uploads should be necessary. Use USD throughout.\n\nENFORCE THE PURCHASE BUDGET\n\nObserved bug: a US$30 limit correctly says two tickets fit, but generating three entries creates a US$38.50 basket. Despite the warning, Review and Confirm allow the demo purchase.\n\nLabel the control \"Budget for this purchase\" or equivalent. It applies to the active checkout, not a cumulative account limit. Preserve the chosen budget across navigation and game switches. Keep ETH/NFT baskets independent.\n\nShare one affordability calculation across budget, basket, review and confirmation. Derive costs from exact wei and the illustrative quote with consistent currency rounding. Show the fee, all-in USD/ETH total and remaining budget.\n\nBlock review and confirmation when the all-in total exceeds the budget. Enforce this inside handlers AND button states. Recheck before accepting entries; changing the budget or basket must not bypass an earlier check.\n\nExplain the remedy: \"This purchase is US$8.50 over your US$30.00 budget. Remove an entry or change your budget.\"\n\nNever automatically increase the budget, delete entries, add tickets or buy anything.\n\nStart the multi-entry generator with a count that fits. If no ticket fits, explain why and disable the suggested batch action. Users may retain over-budget drafts, but cannot confirm them.\n\nBlank, zero, negative or invalid budget values must not bypass the guard. Handle input editing gracefully.\n\nDisable confirmation while pending and guard against duplicate submission. Rejection/failure must retain the basket and budget.\n\nPreserve transaction-size limits and round-closed checks. Do not add a weekly ticket cap.\n\nKeep the fixed rate and fee labelled as illustrative demo values. No live pricing integration.\n\nAcceptance fixture: ETH = US$2,500; ticket = 0.005 ETH / US$12.50; estimated fee = 0.0004 ETH / US$1.00 per checkout. US$30 permits two tickets for US$26.00, leaving US$4.00. Three cost US$38.50 and cannot be confirmed. Two fit US$26.00 but not US$25.99; US$10 buys no ticket. Cover both games, basket switching, lowering the budget after opening review, and repeated confirmation attempts.\n\nONE PLUSH GLOBE THROUGH THE ENTIRE REVEAL\n\nThe current animated globe looks smooth, then switches to photographed plush artwork in its resting slot. Remove that visual swap. Make the globe the signature visual: recognisable Earth continents, depth and a soft plush/felt appearance matching Sorphera.\n\nCreate a reusable unnumbered globe with a dynamic cream number badge attached to its surface. Use the same design, geography, material, lighting and proportions during reveal, travel and resting draw slots. Main balls are ice blue; the bonus has its distinct pink treatment. Do not use baked-in photographed numbers that conflict with results.\n\nFor each ball:\n\nEnter facing away: show the back of the globe with no readable number.\n\nRotate globe and badge together. Continents visibly move around a curved surface; do not just flip a number over a stationary ball.\n\nDecelerate, stop facing the viewer, then hold for readability. Keep approximately 1.5 seconds turning and 0.85 seconds hold unless a small adjustment improves clarity.\n\nReveal/announce the number only when the ball stops. Move that same-looking ball into its slot, maintaining appearance and orientation as it scales down.\n\nGive the pink bonus its own reveal and stopping moment.\n\nChoose a lightweight mobile-friendly implementation. A textured sphere or convincing equivalent is fine. Avoid a flat spinning disc, mirrored numbers, unrecognisable continent blobs and changing globe designs at landing. If needed, create an original unnumbered texture matched to the existing branding.\n\nAnimation presents confirmed results; it never generates outcomes. Preserve the existing result feed and gate numbers, matches, payouts, winners and assistive announcements to the appropriate reveal stage. Preserve the separate NFT tie-break and its winner gating.\n\nKeep pause/resume, replay, skip and muted-by-default optional sound. Reduced motion uses the same globe design in brief static reveals. Pausing must hold the visual sequence and its state together. Replay and skip retain the same outcome.\n\nREMOVE THE FICTIONAL \"LITTLE WORLDS\" COLLECTION\n\nRemove the bottom homepage \"Meet the little worlds.\" gallery, its \"Demo collection\" framing, named World Study cards and associated detail modals. Do not replace it with another invented collection or promotional gallery.\n\nSorphera's globes are branding and lottery balls, NOT a separate NFT prize collection. Every NFT in the NFT jackpot will come from FWA pulls.\n\nAdd this explanation to the existing NFT jackpot section:\n\"NFT jackpot prizes come from FWA pulls.\"\nKeep demo status adjacent and clear. Do not imply actual NFTs have been pulled, secured or won in this demo.\n\nCheck jackpot, draw, ticket and claim screens for the same confusion. Remove \"World study\" prize names and globe artwork presented as prize NFTs. Where fixtures are needed, use clearly labelled neutral placeholders such as \"Demo NFT 1\", without invented collection affiliations, valuations or ownership claims. Keep the NFT claim demo usable. A live inventory/feed integration is outside this task.\n\nBOUNDARIES AND VERIFICATION\n\nPreserve basket separation, saved drafts, receipts, personal results and accessibility. Keep the demo usable without a funded wallet and real transactions disabled. Do not modify contracts, ABIs, deployment settings or protected configuration.\n\nRun existing typecheck, tests and build, plus focused regression checks. Exercise the actual review/confirm UI, not only calculation helpers. Check desktop and narrow mobile layouts, keyboard operation, reduced motion, readable badges and overflow.\n\nProvide before/after screenshots for the budget guard and homepage. Capture the globe facing away, mid-turn, stopped and landed. If recording is available, provide a continuous normal-speed clip with enough frames to judge rotation and landing. The previous roughly 2.5 fps screenshot GIF was insufficient. If recording is unavailable, disclose that and provide screenshots plus an accessible preview. Do not claim smooth motion was verified from sparse stills alone.\n\nDeliver updated source, static export, concise validation evidence and a short change summary. Publish/update through the available IMD Website workflow and report the actual resulting URL. If worker-side publishing is unavailable, distinguish that limitation from any later platform publication. Do not label this work production or launch readiness.","blockedReason":null,"createdAt":"2026-10-10T01:58:17.454Z","updatedAt":"2026-10-10T02:24:43.840Z","paidBy":"0xea18227840e0b7de103a6756020168c5bb7b13d2","parentJobId":"33c60eb2-04fb-40d5-b967-916853940f07","project":{"id":"a3707b79-51b8-4d04-9e32-3e786d91c1d9","head":"c8817c12-4404-4060-b05c-6a72b014eef3","running":null,"versions":[{"jobId":"a3707b79-51b8-4d04-9e32-3e786d91c1d9","workflowId":null,"objective":"Build Sorphera smart contracts on Ethereum Sepolia.\nTagline: Weekly ETH & NFT lottery ball jackpots. Powered by FWA.\nUse Sorphera branding throughout. Deliver contracts, Foundry tests and docs; website later. No new ERC20 or liquidity pool.\n\nGAMES\n\nSorphera ETH Jackpot and Sorphera NFT Jackpot each draw weekly (two draws total), with separate rounds, tickets, schedules and accounting.\nEach nontransferable ticket enters one game/round. Default: 0.005 Sepolia ETH. Players pick 3 distinct unordered numbers from 1-20 and 1 bonus from 1-5. Duplicate combinations and multiple tickets per wallet are allowed.\nUncapped sales; bounded transaction batches. Configure seven-day windows, separate initial cutoffs and earliest draw-request times. Freeze price, fees, number format and deadlines before first sale; changes affect future rounds only.\n\nMONEY\n\nSplit new sales: 10% operator fee, 90% round-specific FWA acquisition budget, including FWA acquisition/VRF charges. Operator resources separately fund lottery VRF and gas.\nIsolate fees, budgets, pending requests, refunds, carryovers and winner liabilities by game/round. No cross-subsidies or spending reserved assets. Charge fees once on new sales, never on prizes, refunds or carryovers.\nBuilder rewards belong to the company. Purchaser rewards/refunds are prizes. Late recoveries follow the originating round's winner, rollover or refund entitlements. Operator withdrawals cannot consume player assets.\n\nFWA\n\nVerify Sepolia addresses, ABIs and dependencies using:\n[Sepolia](https://www.fwa.fun/docs/v2-sepolia)\n[Builder rewards](https://www.fwa.fun/docs/builder-revenue)\n[Settlement](https://www.fwa.fun/docs/winning)\n[Reference contracts](https://github.com/adamlizek/fwa-examples)\nMake a builder router the immediate caller of FWAV2.acquire and a separate prize vault the purchaser. Preserve builder attribution and purchaser rights.\nRead live quotes, fees, settings and settlement windows; never hardcode 0.06 ETH/spin. Enforce budgets, slippage limits and deadlines. Attribute all requests, allocations, settlements and recoveries to game/round.\nRecover expired requests and overpayments. Claim builder rewards only against actual allowances; assume no fixed emissions or guaranteed revenue.\nPermissionless settlement enforces the game's fixed outcome. Document keepers, deadlines, missed windows and pending delivery. Verify NFT custody, not just notifications.\n\nETH JACKPOT\n\nUse its acquisition budget for FWA pulls; settle successful allocations to ETH.\nPrize = actual cashouts + unused budget + refunds + ETH carryover. Prize value is not guaranteed.\nAfter cutoff and reconciliation, draw numbers. Match all 3 main numbers and the bonus to qualify.\nOne match wins everything. Multiple matches split equally per winning ticket, including repeats per wallet. No match rolls the prize into the next ETH round. Old tickets expire; never buy pulls with carryover.\nUse claim-based payouts, reserve unpaid winnings and carry division dust forward.\n\nNFT JACKPOT\n\nUse its acquisition budget for FWA pulls; always choose \"keep the NFT\" and secure assets promptly in the vault. No voluntary cashouts, sales, relisting, substitution or cherry-picking. Track collection, token ID, acquisition, round and custody.\nUse the same selected numbers and exact-match rule:\n\n- No match: roll all inventory and residual prize funds into the next NFT round; old tickets expire.\n- One match: that ticket wins all inventory and residual prize funds.\n- Multiple matches: uniformly select ONE matching ticket to win everything, using a domain-separated stream of verified round randomness. Each matching ticket has equal probability, including repeats per wallet. Disclose the tie-break.\n\nAdd acquisitions to carryover; never respin or re-fee carryover. Freeze secured inventory before requesting lottery randomness.\nAllow individual/batched claims to the winner's nominated compatible recipient. Isolate transfer failures, prevent double claims and reserve unclaimed assets.\nUnexpected ETH recoveries remain incidental NFT-round prize funds; never label them NFTs or guarantee resale value.\nIf no NFT, including carryover, is secured by the published settlement deadline, cancel BEFORE requesting lottery randomness. Refund available unspent/recovered funds plus reserved operator fees pro rata to ticket holders; preserve late-recovery entitlements. Do not guarantee full refunds after third-party charges/losses. Hold this round's operator fees until success/cancellation is established.\n\nRANDOMNESS AND REPLAY\n\nUse independent Chainlink VRF for lottery draws, separate from FWA randomness. Bind callbacks to game, round and request ID. Uniformly sample 3 distinct main balls and 1 bonus. Store ordered balls for replay and normalized combinations for matching.\nClose sales and reconcile required prize accounting before requesting randomness, never before the published earliest request time. Specify settlement/VRF delay handling.\nNo rerolls, replacement requests, admin-selected results, post-cutoff purchases or outcome-dependent cancellation. Store randomness in callbacks; finalize and claim separately.\nExpose persistent state/events for schedules, closure, prizes, randomness, ordered results, match counts, tie-breaks, rollovers and claims for replay/reconnection.\nFrontend globe-ball animations show recorded results, never determine outcomes. Document that onchain results may be readable before animation ends; no secret per-ball releases.\nWith zero tickets, skip randomness and retain carryover.\n\nSECURITY AND DELIVERY\n\nIndex combinations/matching tickets so finalization and selection never scan all sales. Never require transferring the full NFT inventory in one transaction.\nPrevent reentrancy, stale/duplicate callbacks, double claims, rejected-transfer losses and cross-round accounting errors. Admins cannot seize prizes or change active-round rules. Pausing sales preserves claims.\nTest zero/one/multiple matches, duplicates, both rollovers, NFT tie-break, large ticket/inventory counts, failed acquisitions, delayed settlement, custody recovery, late refunds, partial claims, rounding and conservation of funds.\nProvide reproducible mocks and separate FWA Sepolia integration tests. Distinguish verified behavior, assumptions and mocks; never silently substitute mocks.\nDeploy with sales disabled until dependencies, configuration and randomness funding are validated.\nExport source, ABIs, addresses, deployment blocks, configuration and frontend interfaces; document setup, remaining dependencies and both lifecycles.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-08T01:35:15.425Z"},{"jobId":"76506bc8-6d8a-4fe0-95cb-6384a0801040","workflowId":null,"objective":"Sorphera - contract hardening, integration tests and deployment preparation\n\nTagline: Weekly ETH & NFT lottery ball jackpots. Powered by FWA.\nRepo: Sorphera repository\nIMD launch: 961\nParent job: a3707b79-51b8-4d04-9e32-3e786d91c1d9\nReviewed commit: b06997d42012b7ad7ffe943b3acdd816b2092c4e\n\nContinue from the current repo head; check changes since the reviewed commit. Keep this contracts-only: implement contracts, tests, deployment scripts, docs and integration artifacts. Target Ethereum mainnet, testing FWA on a pinned mainnet fork. Do not broadcast mainnet transactions, spend real funds or enable public sales.\n\nPRESERVE PRODUCT RULES\n\nTwo separate weekly lottery-ball games:\n\nETH Jackpot: settle FWA acquisitions to ETH. Winning tickets split distributable ETH equally; no winners means rollover.\n\nNFT Jackpot: take the NFTs. No winners means inventory rollover; one winning ticket receives all inventory. Multiple winning tickets trigger a separate verifiable random tie-break selecting ONE winning ticket for all inventory.\n\nKeep three distinct unordered main numbers 1-20 plus bonus 1-5, existing ticket ownership, 0.005 ETH default tickets and 10% operator fee / 90% acquisition defaults.\n\nTotal ticket sales remain uncapped; transaction batches and processing remain bounded.\n\nCompany builder rewards stay separate from purchaser reward entitlements, prizes and refunds.\n\nPreserve custody/refund/claim/rollover guarantees and economics; explain necessary changes.\n\nUse verifiable randomness and expose draw/tie-break events for future animations. No website work.\n\nFIX THE FAILED DEPLOYMENT REHEARSAL\n\nLaunch was parked after 6/7 gates passed. protected_invariants failed with \"application constructor failed\" in setUp(), gas 0. Sorphera checks for code at the factory and VRF coordinator; the factory checks router code.\n\nCapture the failing contract, resolved constructor arguments, chain state and revert trace. Check dependency order, $owner/$contract substitutions and coordinator code. Match IMD compiler/optimizer/EVM settings. Local tests passed 64/64 on Forge 1.7.1; IMD reported 1.8.3. Investigate, rather than assume, the cause.\n\nFix the cause without weakening safeguards or mocking production dependencies. If IMD's private harness is unavailable, supply a public reproduction and exact platform follow-up. Never claim its gate passed without evidence.\n\nVERIFY MAINNET INTEGRATION AND NETWORK CONFIGURATION\n\nPrimary references:\n\nFWA deployments\n\nBuilder revenue\n\nFWA testing\n\nBuilder examples\n\nChainlink networks\n\nPublished mainnet pool: 0x958C41181182e76F221331b2755b77D9e1426A98\nPublished mainnet rewards: 0xA54b44C7a894AA19C49734A753D01f9B8C5f6516\n\nReviewed Sepolia lacked builder attribution. Mainnet source/ABI includes it; an explorer read reported builderRewardBps() = 1500. Reverify compatibility and current settings; the rate can change.\n\nRecord chain/block, bytecode, ABIs and pool/rewards/token/randomness bindings. Verify the transfer helper, Permit2, distributor/deposit permissions and liquidity. Prove router builder attribution as immediate acquire caller, with round vaults retaining purchaser rights.\n\nReplace the Sepolia-only restriction with validated network configuration: chain ID, dependencies, coordinator, key hash and subscription. Fail closed on wrong chains/incompatible dependencies. Separate production and test-only simulation.\n\nRead live quotes, VRF charges, gas-price assumptions, slippage limits and settlement windows. Do not hardcode 0.06 ETH pulls or source defaults.\n\nTEST COMPLETE LIFECYCLES AND FAILURE PATHS\n\nRun existing tests and add pinned mainnet-fork tests using deployed FWA code unchanged. Record commands/RPC requirements; disclose fork-only balances, impersonation and oracle simulation.\n\nCover both games: tickets -> FWA requests -> allocation -> ETH/NFT settlement -> draw -> finalization -> claims. Verify real builder allowance accounting, eligible acquisition/settlement credits, reward purchase, transfer-helper queueing and next-block treasury delivery. Test purchaser rewards separately.\n\nRequired coverage:\n\nETH prize splits, duplicate winning tickets, no-winner rollover and rounding dust.\n\nNFT single winner, multiwinner tie-break, rollover and bounded delivery/recovery.\n\nFailed/expired acquisitions, immediate/deferred refunds, stale/slipping quotes, unavailable inventory, delayed allocation and missed settlement windows.\n\nCross-round isolation, conservation of funds/inventory, locked liabilities, correct fee accounting and prevention of operator withdrawal of prizes/refunds/purchaser rewards.\n\nNumber validation/canonical ordering, quick-pick/draw sampling bias, bonus independence, cutoff boundaries and immutable terms for sold tickets.\n\nUnauthorized, duplicate, delayed and out-of-order VRF callbacks; request-to-round binding and separate tie-break requests.\n\nReentrancy, reverting recipients, NFT receiver failures, unauthorized administration, paused paths and changed dependency/helper permissions.\n\nLarge ticket/inventory counts: demonstrate bounded gas and progress without processing every ticket in one transaction.\n\nForks receive no automatic live Chainlink callbacks. Document test-only fulfillment for FWA and lottery VRF. Separately test lottery VRF on Sepolia with controlled FWA test dependencies and the real coordinator if test funding/access exists. Otherwise deliver scripts, exact prerequisites and a NOT RUN result. Never label simulation as live VRF verification.\n\nReview lockups from permanent VRF failure, pending acquisitions and missed settlement windows. Document fair recovery options; prohibit discretionary rerolls, winner replacement and post-sale rule changes.\n\nPREPARE DEPLOYMENT AND OPERATIONS\n\nDeliver build/deployment rehearsals, owner/treasury inputs, dependency order, factory binding, router setup, company VRF subscription/consumer setup and funding/preflight checks. Sales default to disabled.\n\nSeparate mainnet/Sepolia/fork artifacts. Check current IMD rules: a continuation may update code without redeploying or retargeting the parked Sepolia launch. Document the supported mainnet route and any new launch/platform action required.\n\nProvide keeper/operations scripts and a runbook for acquisitions, allocation processing, timely settlement, closing rounds, randomness requests, finalization and reward claims. Specify permissions, funding, monitoring and safe retries.\n\nDELIVER EVIDENCE\n\nCommit fixes/tests to the existing project and summarize the changes. Update dependency records, test reports, manifests, ABIs, events and configuration schemas. Leave undeployed addresses null and label simulated/example artifacts.\n\nReport:\n\nRoot cause, fix, files changed and protected-gate status.\n\nExact commands and passed/failed/skipped test counts.\n\nMainnet fork block/dependencies and real vs simulated oracle coverage.\n\nGas/scaling results and supported deployment procedure.\n\nRemaining blockers, each with the exact external input/action required.\n\nComplete all unblocked work. Distinguish verified, unrun and blocked steps. State readiness for independent security review/deployment rehearsal; passing tests is not an audit or approval for public sales.","baseCommit":"b06997d42012b7ad7ffe943b3acdd816b2092c4e","state":"completed","createdAt":"2026-10-08T04:15:44.059Z"},{"jobId":"85e58ec1-1ee5-4b04-8133-d8bb9ae15f1c","workflowId":null,"objective":"Sorphera - contract review, executable testing and operations\n\nSelect CONTRACTS and continue the latest Sorphera project.\nRepo: Sorphera\nReviewed PR: #2, merged.\nReviewed commit: 6a6b3e57adcbfac8063aaa0d734c055c4fcff940\nLatest completed job: 76506bc8-6d8a-4fe0-95cb-6384a0801040\n\nName: Sorphera\nTagline: Weekly ETH & NFT lottery ball jackpots. Powered by FWA.\n\nUse the current project head. Implement fixes, tests and contract execution tools in this repo. Supporting docs belong with the code; this is not a website or standalone report assignment.\n\nMainnet is the production target. Do not broadcast mainnet transactions, spend real funds, open a new paid launch or enable public sales. Complete local/fork work despite missing external access.\n\nPRESERVE THE BASELINE\n\nRead the existing test evidence, deployment docs and interfaces before editing. Preserve the passing mainnet integration and separate NFT tie-break VRF.\n\nKeep two weekly games, uncapped total ticket sales, bounded transactions, three distinct unordered main numbers 1-20 plus bonus 1-5, default 0.005 ETH tickets and fixed 10% operator fee / 90% acquisition allocation. ETH matches split equally; no matches roll over. NFT no-match inventory rolls; one matching ticket wins all; multiple matches use a separate VRF request to select one ticket for all inventory. Separate company builder rewards from purchaser prizes/rewards/refunds.\n\nADVERSARIAL CONTRACT REVIEW AND FIXES\n\nReview the latest code, especially tie states, callbacks, accounting and external dependencies. Use a separate reviewer if supported and disclose reviewer roles. Automated review is not a professional audit.\n\nFor reproducible bugs, add a failing regression test and a minimal fix. Cover:\n\nRound isolation, immutable sold terms, fee release, rounding, rollovers and late recoveries.\n\nDraw/tie request binding, replay/out-of-order callbacks, subscription changes, funding depletion and callback gas.\n\nFWA settlement deadlines, forced outcomes, stuck NFTs, helper permissions and reward delivery.\n\nUnauthorized withdrawals, reentrancy and bounded processing at large ticket/inventory counts.\n\nPreserve economics and safeguards; avoid unrelated rewrites.\n\nHANDLE ORACLE FAILURE WITHOUT COMPROMISING FAIRNESS\n\nCurrent draw/tie VRF failure can lock funds indefinitely. Review against Chainlink security guidance.\n\nTest underfunding followed by top-up, delayed callbacks, insufficient gas, legitimate callback completion without external payouts and permanent nonfulfillment. Distinguish a reverted request transaction from an accepted request awaiting fulfillment.\n\nImplement compatible reserve checks, monitoring and safeguards where justified. Do not silently add cancellation, new randomness, fallback seeds, winner replacement or operator-selected results after a successful request. A timeout must not let anyone discard unfavorable randomness.\n\nIf a remedy changes refund/payout rights or trust assumptions, leave it out of the production candidate and present the exact proposed rule, attack analysis and decision required. Do not mark the lockup resolved merely because it is documented.\n\nDELIVER AN EXECUTABLE LIVE SEPOLIA VRF WORKFLOW\n\nSepoliaCanary.s.sol currently simulates deployment. Add a resumable CLI/script with explicit dry-run and live-Sepolia modes, controlled FWA test dependencies, the real coordinator and production lottery callbacks.\n\nSupport deployment, factory/router binding, company subscription creation or supplied ID, consumer registration, funding/configuration checks, test tickets, both draws, independent NFT tie-break, finalization and claims. Persist addresses/receipts for restart. Clearly label mock dependencies.\n\nUse a small pre-sale test ticket price and coverage of all 5,700 combinations when needed to guarantee winners/ties. Never assume the random result or impersonate the coordinator in a live test.\n\nExecute live transactions only with company test-wallet authorization/access and test funds supplied for this task. Use secure signers; never request, print or commit secrets. Otherwise finish/test the workflow locally and mark live execution NOT RUN with exact missing inputs. Prank-only simulation is not an executable live workflow.\n\nLive evidence must include actual coordinator request/fulfillment receipts, callback success, billing, distinct draw/tie request IDs and claims. Keep it separate from simulated evidence.\n\nBUILD A RUNNABLE CONTRACT KEEPER\n\nOperations.s.sol only returns unsigned calldata. Add a minimal restart-safe keeper CLI/worker, defaulting to dry-run with live submission explicitly gated.\n\nSupport opening rounds, bounded purchases, FWA processing, urgent settlement, reconciliation/refunds, closing, draw/tie requests and finalization. Prioritize settlement deadlines. Enforce frozen budgets/slippage bounds and never replace accepted VRF requests.\n\nReconcile chain state before retries; persist cursors/checkpoints; prevent unsafe duplicate-worker/nonce behavior. Handle RPC outages, pending/replaced/reverted transactions and chain reorganizations. Add gas/spend ceilings, funding alerts, structured logs and a supervisor/container configuration.\n\nSeparate permissionless maintenance from owner-only treasury/configuration actions; do not give the keeper unrestricted ownership. Test both game lifecycles on a local fork, including restart and delayed callbacks. Supply start/dry-run/stop/recovery commands. Hosting and real operating funds remain external prerequisites.\n\nADDRESS THE IMD GATE WITH AVAILABLE ACCESS\n\nLaunch 961 remains parked on the original code. Empty-chain constructor rejection and genuine-fork success are already documented in docs/REHEARSAL.md.\n\nIf the private runner is accessible, rerun against the latest source and correct chain/manifest. Capture resolved arguments, dependency order/code, chain/block and inner revert. Fix demonstrated application faults while preserving dependency checks.\n\nIf unavailable, retain the public reproduction and provide one concise support-request draft listing the necessary evidence. Do not repeatedly probe inaccessible endpoints or claim local tests cleared the private gate. Do not contact support on my behalf.\n\nKeep the historical Sepolia manifest separate from mainnet preparation. A continuation must not silently deploy or retarget the old launch.\n\nVERIFY AND HAND OFF THE CONTRACT VERSION\n\nRun build/format checks, regression/invariant tests, relevant mainnet/Sepolia fork tests and new tooling tests. Record exact commands, source commit, toolchain, fork blocks and pass/fail/skip counts. Distinguish live oracle results from simulation.\n\nUpdate ABIs, events/status mappings, configuration schemas and deployment/setup commands after fixes. Leave undeployed addresses null. Identify interface/policy decisions affecting future website integration.\n\nPublish through IMD's supported artifact mechanism to the existing repo/PR. Respect worker git restrictions; distinguish those from the platform's final publication status.\n\nFinish with a concise summary of code changes, actual test results, unresolved findings, private-gate status, live-VRF status and one external-action checklist naming who must supply each item. State whether interfaces are ready for website integration. Complete all unblocked implementation; do not stop at recommendations or claim public-launch readiness.","baseCommit":"6a6b3e57adcbfac8063aaa0d734c055c4fcff940","state":"completed","createdAt":"2026-10-08T14:57:18.250Z"},{"jobId":"bebfac54-d7fa-46fe-accb-c9fb9c66aaf6","workflowId":null,"objective":"Name: Sorphera\nExact tagline: Weekly ETH & NFT lottery ball jackpots. Powered by FWA.\n\nSOURCE\nRepo: https://github.com/identity-md-launches/launch-961-build-sorphera-smart-contracts\nContract baseline: merged PR #3, ed68e960dc3b9f0847caa637b5d3ea0c082bcfe3.\nRead README.md, frontend/README.md, frontend/configuration.json, frontend/deployment.json, frontend/abi/* and docs/OPERATIONS.md. Preserve contracts/tests/ABI exports. Build in web/ or the website workspace. No contract deployments, tokens/pools, keepers, fund spending or public sales. Deliver a working website, preview and source.\n\nBRAND FILES\nDownload and extract this public ZIP:\nhttps://drive.google.com/uc?export=download&id=1V7yG0VSd3ljKTaqaFYuJO6kH3XQobj7W\nUse its four branding/ PNGs listed below. This prompt supersedes the bundled prompt/README; no GitHub asset upload is needed.\n- sorphera-brand-board-ice-blue.png: art direction/palette.\n- sorphera-wordmark-ice-blue.png: primary wordmark.\n- sorphera-banner-ice-blue.png: campaign/social art.\n- sorphera-globe-icon-ice-blue.png: primary icon/favicon.\nThe ice-blue icon supersedes the board's pink badge. Pink remains prominent. Inspect all four images; preserve proportions/transparency and bundle optimized copies. No emoji substitutes or redrawn wordmark. The board is a reference; omit \"BRAND CONCEPT 01\". Identify inaccessible files and continue unblocked work without claiming they were used.\n\nDESIGN\nFWA-inspired plush ice-blue lettering, tactile 3D globe lottery balls, pink continents, cream number badges, charcoal backgrounds and restrained iridescent crystals. Context: https://www.fwa.fun/ ; supplied Sorphera art controls the design.\nIce-blue wordmark/headlines; prominent pink accents/bonus balls; readable cream text, restrained lavender, clean UI typography. Blue/pink globes identify ETH; pink/cream identify NFT. Reuse globe-ball components across tickets, results and draws. Premium, playful, spacious and mobile-first; avoid generic crypto dashboards, excessive neon and repetitive cards.\n\nCONTRACT RULES\nIndependent weekly ETH (game 0) and NFT (game 1) jackpots. A ticket enters ONE game/round. Pick 3 distinct UNORDERED numbers 1-20 plus bonus 1-5; match all four. 1-in-5,700 is the number-match chance, not necessarily sole NFT victory.\nUncapped total sales; maximum 100 tickets per transaction. Duplicate combinations allowed; tickets nontransferable. Default price 0.005 ETH; live price/status/deadlines come from the round.\n90% of new sales funds that round's FWA acquisitions; 10% is held as operator fees under contract rules. ETH pulls normally cash out; NFT pulls normally retain NFTs; read the documented exceptions. Do not hardcode a 0.06 ETH spin price, returns or FWA emissions.\nETH matches split equally; no matches roll over. NFT: one match wins all inventory; multiple matches need a SEPARATE VRF tie-break selecting ONE ticket for all inventory. No matches roll over. Old tickets expire.\nCount secured NFTs only. Separate pending pulls, actual/incidental ETH, purchaser rewards and company revenue. Exclude company rewards from jackpots; NFT valuations need estimate labels and source/time.\nAn empty NFT round can cancel BEFORE lottery randomness is requested; actual refunds may be below ticket cost. Accepted draw/tie requests cannot be cancelled or replaced. Permanent oracle nonfulfillment remains an unresolved lockup risk. Do not promise automatic refunds or redraws.\n\nEXPERIENCES\nHome: globe hero, exact tagline, two prominent jackpots with cutoff/countdown and ETH amount/NFT count, play/watch actions, three-step explanation, recent results and NFT gallery.\nPlay: ETH/NFT views, accessible globe number picker, Quick Pick, editable ticket lines, quantity, ETH total and round identity. Review before signing; show wallet rejection/pending/confirmed/failed states. Quick Pick chooses entries only. Enforce transaction limits and recheck round eligibility/price before submission.\nDraw room: theatrical globe-ball chamber, countdown, settlement/oracle progress, three main-ball reveals and distinct bonus reveal, result and replay. Give NFT ties their own sequence ending at the confirmed winning ticket. Include mute, reduced motion and skip-to-results; sound needs user interaction. Lazy-load heavy graphics with a lightweight fallback.\nMy tickets: game/round filters, numbers, status and actual entitlements. Implement ABI-based ETH/NFT/purchaser-reward/refund claims. NFT claims: compatible recipient, batches up to 20, per-asset success/retry. Paused sales must preserve valid claims.\nHistory: numbers, matches, rollover, tie result, prizes, explorer links. FAQ: rules, fees, custody, randomness, delays, refunds, claims, FWA relationship. Technical proofs belong in expandable details. No invented audits, licensing, endorsements or testimonials.\n\nDEMO AND INTEGRATION\nClickable demo by default, persistently labelled \"Demo - no real tickets or prizes\", with \"Watch demo draw\". Label synthetic data; use owned/licensed art. Exercise ETH splits, both rollovers, NFT ties, cancellation review, oracle delays and failed claims. Demo never signs/broadcasts; wallet connection alone cannot activate purchases.\nUse typed contract and fixture adapters. Addresses remain null until supplied; missing configuration gives demo/unavailable UI, never guessed deployments. Separate read-only and transaction-enabled modes. Transactions need verified chain/addresses/ABI, an explicit deployment activation setting and action-specific onchain checks. Production target is Ethereum mainnet; any isolated Sepolia mode must say TESTNET and identify synthetic FWA dependencies.\nPage/cache/deduplicate logs from deployment block and recover from reorgs. Key data by chain/lottery/game/round/request ID. Handle wallet/network changes and RPC failures; bound ticket/inventory reads. Support static/IPFS hosting, reload-safe routes and relative assets; no embedded secrets or assumed backend. Document optional indexers.\n\nDRAW ACCURACY\nReveal confirmed contract results; physics/timers/client randomness never choose winners. At cutoff show settlement/oracle progress. Synchronize viewers to confirmed events and label replays.\nFollow frontend/README.md: DrawRequested -> RandomnessStored -> Result. An NFT Result with multiple matches and winningTicket 0 is provisional. Wait for TieBreakRequired -> TieBreakRequested -> TieBreakRandomnessStored -> TieBreakResult before announcing its winner/claims.\nMap statuses explicitly: only Won, Rolled, Cancelled are terminal; numeric >= Won is WRONG because tie states were appended. requestDraw can advance CancellationReviewed while remaining Closed: show review progress and wait for actual DrawRequested/Cancelled evidence. Requested/TieBreakRequested can wait indefinitely; never offer replacement randomness or invented refund deadlines. Reward queueing is not delivery; reflect actual delivery.\n\nDELIVERY\nPrefer platform-supported React/TypeScript with an EVM wallet library. Ensure keyboard/focus/contrast, accessible numeric results, alt text, reduced motion and optimized assets. Treat NFT metadata as untrusted.\nRun build/type checks and tests for number validation, value/batch calculations, demo isolation, activation, statuses, NFT ties, replay and claims. Exercise mobile/desktop flows; provide screenshots. Publish the labelled demo via the Website workflow. Return preview/source, assets used, checks, missing integration inputs and setup instructions. Hide operational/debug controls from customers. Do not claim launch readiness.","baseCommit":"ed68e960dc3b9f0847caa637b5d3ea0c082bcfe3","state":"completed","createdAt":"2026-10-08T20:41:52.118Z"},{"jobId":"33c60eb2-04fb-40d5-b967-916853940f07","workflowId":null,"objective":"BASELINE AND SCOPE\nRepo: https://github.com/identity-md-launches/launch-961-build-sorphera-smart-contracts\nContinue from merged PR #4. Read web/README.md, DESIGN.md and relevant web/src/ code.\nDemo: https://sorphera-a-world-of-possibility.sites.imd.fun/\nKeep existing web/public/brand/ assets, ice-blue wordmark, pink accents, charcoal background and tactile globes.\nName: Sorphera\nExact tagline: Weekly ETH & NFT lottery ball jackpots. Powered by FWA.\nPreserve contracts, canonical ABIs, protected configuration and activation safeguards. No deployments, funding, signatures, real purchases or live activation. Keep \"Demo - no real tickets or prizes\" prominent.\n\nGOAL\nDesign for an adult with US$30 for entertainment: What does my budget buy? What can I win? When should I return? Did my ticket win? Use USD throughout, not CAD.\n\nPRICE AND BUDGET\nShow ETH and approximate USD ticket prices on Home, Play, basket and review. Add an editable total spending limit, e.g. US$30, calculating affordable whole tickets after estimated network fees. Show subtotal, estimated fees, all-in USD total and remaining budget; explain when one ticket is unaffordable. Never automatically add or purchase entries.\nLabel demo ETH/USD conversion and fees as illustrative; use them consistently. No invented live quotes. Preserve exact wei arithmetic.\nKeep prize amount/inventory, ticket price, closing countdown and local date/time with timezone above the picker. Sales close is not guaranteed draw completion; settlement/randomness can delay results.\nExplain ETH prize sharing versus one NFT winner near the selector. Put full-match rules, 1-in-5,700 number-match odds and no partial-match prizes beside purchase; keep details expandable.\n\nBASKET AND PICKS\nFix: adding an ETH ticket then selecting NFT silently changes the existing basket's game. Save separate game/round baskets with independent checkouts and clear labels. Switching views must never retarget tickets. Retain drafts across navigation; flag expired rounds.\nKeep manual picks, Quick Pick, Edit/Remove. Add \"Generate N different entries\" with distinct combinations, separately from \"Repeat these numbers\". Repeats do not improve the chance those numbers are drawn. Duplicates remain allowed; maximum 100 tickets per transaction. Quick Pick never purchases/signs.\nRemove \"game 0/1\" and developer identifiers from customer copy. Review shows game, round, entries and USD/ETH total, with one explicit demo-confirm action. Keep failure demonstrations optional.\n\nRECEIPT AND RETURN\nAfter confirmation show \"Your demo entries are in\", globe numbers, game/round, ticket count, amount, local closing time and countdown. Offer \"View your draw\", \"My tickets\" and optional calendar download. No promised result deadline.\nSeparate newly created demo entries from labelled sample winners/refunds/rewards. Let customers explicitly advance their own demo game/round into a clearly labelled fixture replay. Use fixed outcomes independent of picks; never force a win. Preserve game/round identity and label simulated time/results.\n\nSIGNATURE GLOBE REVEAL - REQUIRED\nThe globe itself must be the visual attraction:\n\nBring each ball into the reveal position with its number badge facing AWAY. Initially show continents and the unnumbered back of the sphere.\n\nRotate the globe in 3D so continents visibly travel around its curved surface. Ease/decelerate to a complete stop with the badge facing the camera.\n\nHold the stopped ball so its number is easily read, then move it into its result slot. Repeat for three main balls; give the contrasting pink bonus globe its own pause and reveal.\nUse a mesh/decal or equivalent convincing sphere treatment. Attach the badge to the sphere, correctly oriented and readable at rest. No flat image/card flip, spinning text overlay, fade-only number swap or fixed printed number conflicting with the result. Preserve plush styling, continents, lighting and cream badges.\nStart with 1.2-1.8 seconds turning/decelerating and a 0.7-1 second readable hold; tune on mobile.\nFix the spoiler: the current ETH replay announces the prize split while unrevealed balls show question marks. Do not expose final numbers, match counts, payouts or winners before their reveals finish, including screen-reader announcements.\nAnnounce each number accessibly after its globe stops. Optional spoken callouts follow the same timing and require user-enabled sound; muted by default, no autoplay audio.\nRetain pause/resume, replay, skip and reduced motion. Reduced motion uses quick static reveals without forced spinning/delays. Lazy-load heavier graphics and provide a lightweight fallback with identical results and controls.\nAnimation presents supplied results only. Physics, timers and client randomness never select or change winners. Preserve confirmed-event and independent NFT tie-break requirements.\n\nPERSONAL RESULTS AND NFT FINALE\nShow the customer's relevant entries alongside/below the draw, highlighting main/bonus matches as balls stop. Finish with clear per-ticket win/no-win, entitlement and next action. Partial matches must not suggest paid wins.\nFor multiple NFT matches, transition to a distinct finale: \"One of these matching tickets wins the whole collection.\" Show matching ticket IDs, then prominently reveal the confirmed winning ticket. Keep ticket IDs visually distinct from 1-20 ball numbers. Paginate large finalist lists.\nDo not announce a winner or enable NFT claims from the provisional matching-number result. Wait for the separate tie-break result. Show secured NFT count and actual incidental ETH separately.\nExplain ETH splits, no-match rollovers and delayed results plainly. Old tickets do not enter later rounds.\n\nCOPY, PRIZES AND CLAIMS\nUse customer statuses such as \"Preparing the draw\", \"Waiting for confirmed numbers\" and \"Selecting the winning ticket\". Keep technical terms, contract methods and proofs in expandable verification details. Preserve honest delay/refund disclosures.\nShow NFT thumbnails/details so prizes feel tangible. Clearly distinguish illustrative artwork from actual inventory; no invented floor prices or guaranteed resale values.\nMake the default demo claim succeed with a clear receipt. Put failed delivery, rejection, refunds and fault cases in an optional demo-scenarios area. Preserve per-asset retry, prior successes, claim limits and claims during paused sales. Reward queueing is not delivery.\n\nVALIDATION AND DELIVERY\nPreserve static/IPFS export, relative assets, routes and typed fixture/contract boundaries. Reuse draw components accepting validated data; no duplicate result logic.\nRun build/typecheck and regression tests for basket switching, USD/budget math, distinct/repeated picks, game/round identity, premature spoilers, NFT ties, replay/skip/reduced-motion equivalence and demo isolation.\nExercise US$30 budget -> pick game -> several entries -> review -> receipt -> same-round replay -> personal outcome -> claim. Check desktop/narrow mobile, keyboard/focus, contrast, readable stopped numbers and reduced motion.\nProvide screenshots and a short recording/GIF showing back-facing globe -> rotation -> stopped badge -> bonus -> NFT tie finale. Include concise change/test notes and any recording limitations.\nDeliver source and static export. Publish the labelled demo through the Website workflow if available and return its actual URL; otherwise provide the export and state publication is incomplete. Do not enable public sales.","baseCommit":"1dde47a665e571d7c9a8eca9ae2cae5f7234616e","state":"completed","createdAt":"2026-10-09T02:48:21.672Z"},{"jobId":"c8817c12-4404-4060-b05c-6a72b014eef3","workflowId":null,"objective":"WEBSITE TASK: Sorphera - budget enforcement, continuous globe reveal, accurate NFT prizes\n\nContinue the existing website from merged PR #5:\nhttps://github.com/identity-md-launches/launch-961-build-sorphera-smart-contracts/pull/5\nBaseline: cc450384ecf7ddbf5cb49b8a2aba62921c0a2e62\nDemo: https://sorphera-a-world-of-possibility.sites.imd.fun/\n\nInspect the current branch and preserve newer work. Implement and verify this focused WEBSITE iteration with three requirements. No contracts work or general redesign.\n\nRetain the ice-blue wordmark, pink accents, charcoal/cream palette and exact tagline:\n\"Weekly ETH & NFT lottery ball jackpots. Powered by FWA.\"\nUse existing assets in web/public/brand/. No new owner uploads should be necessary. Use USD throughout.\n\nENFORCE THE PURCHASE BUDGET\n\nObserved bug: a US$30 limit correctly says two tickets fit, but generating three entries creates a US$38.50 basket. Despite the warning, Review and Confirm allow the demo purchase.\n\nLabel the control \"Budget for this purchase\" or equivalent. It applies to the active checkout, not a cumulative account limit. Preserve the chosen budget across navigation and game switches. Keep ETH/NFT baskets independent.\n\nShare one affordability calculation across budget, basket, review and confirmation. Derive costs from exact wei and the illustrative quote with consistent currency rounding. Show the fee, all-in USD/ETH total and remaining budget.\n\nBlock review and confirmation when the all-in total exceeds the budget. Enforce this inside handlers AND button states. Recheck before accepting entries; changing the budget or basket must not bypass an earlier check.\n\nExplain the remedy: \"This purchase is US$8.50 over your US$30.00 budget. Remove an entry or change your budget.\"\n\nNever automatically increase the budget, delete entries, add tickets or buy anything.\n\nStart the multi-entry generator with a count that fits. If no ticket fits, explain why and disable the suggested batch action. Users may retain over-budget drafts, but cannot confirm them.\n\nBlank, zero, negative or invalid budget values must not bypass the guard. Handle input editing gracefully.\n\nDisable confirmation while pending and guard against duplicate submission. Rejection/failure must retain the basket and budget.\n\nPreserve transaction-size limits and round-closed checks. Do not add a weekly ticket cap.\n\nKeep the fixed rate and fee labelled as illustrative demo values. No live pricing integration.\n\nAcceptance fixture: ETH = US$2,500; ticket = 0.005 ETH / US$12.50; estimated fee = 0.0004 ETH / US$1.00 per checkout. US$30 permits two tickets for US$26.00, leaving US$4.00. Three cost US$38.50 and cannot be confirmed. Two fit US$26.00 but not US$25.99; US$10 buys no ticket. Cover both games, basket switching, lowering the budget after opening review, and repeated confirmation attempts.\n\nONE PLUSH GLOBE THROUGH THE ENTIRE REVEAL\n\nThe current animated globe looks smooth, then switches to photographed plush artwork in its resting slot. Remove that visual swap. Make the globe the signature visual: recognisable Earth continents, depth and a soft plush/felt appearance matching Sorphera.\n\nCreate a reusable unnumbered globe with a dynamic cream number badge attached to its surface. Use the same design, geography, material, lighting and proportions during reveal, travel and resting draw slots. Main balls are ice blue; the bonus has its distinct pink treatment. Do not use baked-in photographed numbers that conflict with results.\n\nFor each ball:\n\nEnter facing away: show the back of the globe with no readable number.\n\nRotate globe and badge together. Continents visibly move around a curved surface; do not just flip a number over a stationary ball.\n\nDecelerate, stop facing the viewer, then hold for readability. Keep approximately 1.5 seconds turning and 0.85 seconds hold unless a small adjustment improves clarity.\n\nReveal/announce the number only when the ball stops. Move that same-looking ball into its slot, maintaining appearance and orientation as it scales down.\n\nGive the pink bonus its own reveal and stopping moment.\n\nChoose a lightweight mobile-friendly implementation. A textured sphere or convincing equivalent is fine. Avoid a flat spinning disc, mirrored numbers, unrecognisable continent blobs and changing globe designs at landing. If needed, create an original unnumbered texture matched to the existing branding.\n\nAnimation presents confirmed results; it never generates outcomes. Preserve the existing result feed and gate numbers, matches, payouts, winners and assistive announcements to the appropriate reveal stage. Preserve the separate NFT tie-break and its winner gating.\n\nKeep pause/resume, replay, skip and muted-by-default optional sound. Reduced motion uses the same globe design in brief static reveals. Pausing must hold the visual sequence and its state together. Replay and skip retain the same outcome.\n\nREMOVE THE FICTIONAL \"LITTLE WORLDS\" COLLECTION\n\nRemove the bottom homepage \"Meet the little worlds.\" gallery, its \"Demo collection\" framing, named World Study cards and associated detail modals. Do not replace it with another invented collection or promotional gallery.\n\nSorphera's globes are branding and lottery balls, NOT a separate NFT prize collection. Every NFT in the NFT jackpot will come from FWA pulls.\n\nAdd this explanation to the existing NFT jackpot section:\n\"NFT jackpot prizes come from FWA pulls.\"\nKeep demo status adjacent and clear. Do not imply actual NFTs have been pulled, secured or won in this demo.\n\nCheck jackpot, draw, ticket and claim screens for the same confusion. Remove \"World study\" prize names and globe artwork presented as prize NFTs. Where fixtures are needed, use clearly labelled neutral placeholders such as \"Demo NFT 1\", without invented collection affiliations, valuations or ownership claims. Keep the NFT claim demo usable. A live inventory/feed integration is outside this task.\n\nBOUNDARIES AND VERIFICATION\n\nPreserve basket separation, saved drafts, receipts, personal results and accessibility. Keep the demo usable without a funded wallet and real transactions disabled. Do not modify contracts, ABIs, deployment settings or protected configuration.\n\nRun existing typecheck, tests and build, plus focused regression checks. Exercise the actual review/confirm UI, not only calculation helpers. Check desktop and narrow mobile layouts, keyboard operation, reduced motion, readable badges and overflow.\n\nProvide before/after screenshots for the budget guard and homepage. Capture the globe facing away, mid-turn, stopped and landed. If recording is available, provide a continuous normal-speed clip with enough frames to judge rotation and landing. The previous roughly 2.5 fps screenshot GIF was insufficient. If recording is unavailable, disclose that and provide screenshots plus an accessible preview. Do not claim smooth motion was verified from sparse stills alone.\n\nDeliver updated source, static export, concise validation evidence and a short change summary. Publish/update through the available IMD Website workflow and report the actual resulting URL. If worker-side publishing is unavailable, distinguish that limitation from any later platform publication. Do not label this work production or launch readiness.","baseCommit":"cc450384ecf7ddbf5cb49b8a2aba62921c0a2e62","state":"completed","createdAt":"2026-10-10T01:58:17.454Z"}]},"deliver":true,"host":true,"site":{"id":"6559dbb1-e25f-4730-939e-10989e6554d0","jobId":"c8817c12-4404-4060-b05c-6a72b014eef3","kind":"launch","tokenId":null,"agentId":null,"url":"https://sorphera-a-world-of-possibility.site.identitymd.eth.limo","status":"named","holdReason":null,"takenDownAt":null,"takenDownReason":null,"label":"sorphera-a-world-of-possibility","cid":"bafybeid67zyofmcgxullyzhbeu4wykenf4txjkztns5em32ykqurcoavge","bytes":1096179,"ensName":"sorphera-a-world-of-possibility.site.identitymd.eth","txHash":"0x2ce37a46c5668408ae9749a4d83f0db31724fbc15aafdc408a97df1ab54d1135","blockNumber":26159026,"attempts":0,"failure":null,"pinnedAt":"2026-10-10T02:24:57.197Z","namedAt":"2026-10-10T02:25:14.080Z","supersededBy":null,"supersededAt":null,"createdAt":"2026-10-10T02:24:43.840Z","updatedAt":"2026-10-10T02:25:14.080Z"},"launch":{"requested":false,"kind":null,"id":null,"status":null,"chainId":null},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-961-build-sorphera-smart-contracts","pullRequestUrl":"https://github.com/identity-md-launches/launch-961-build-sorphera-smart-contracts/pull/6","commit":"ebd87a3a2787339b2838485a0384d25040bbc44f","deliveredAt":"2026-10-10T02:25:17.585Z","media":null},"media":null,"nodes":[{"key":"build_website","role":"implement","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-10T02:24:43.840Z","verdict":{"status":"accepted","profile":"none","evaluation":"structural","rejectionCode":null,"detail":"paths and tree verified; no suite was run for this kind of work","verifierVersion":"0.1.0+fdeb4d4a","verifiedTreeHash":"7074f88b0e5064393428d429de4ea114d9fb9491","at":"2026-10-10T02:24:43.842Z","failedChecks":[]},"seat":{"tokenId":"294","agentId":"51044"},"live":null}],"reviews":[{"status":"queued","chainId":1,"txHash":null,"blockNumber":null,"sentAt":null,"entries":[{"nodeKey":"build_website","agentId":"51044","value":1,"role":"verification:structural"}]}]}