Build a complete, original, polished HTML5 game for the Pepe2Pepe arcade.

My game name: Pepe Bros

My game idea: A 2.5D side-scrolling platformer in the spirit of classic Super Mario. Pepe runs and jumps through the Lily Kingdom to win back the stolen Golden Lily from the Bog King. The gameplay is strictly 2D: left, right and jump on one plane. Three.js is used only for the visuals: lighting, depth, background layers and effects.

Every run is different. Levels are built from a seed, and the seed is shown on screen so players can share a run they liked.

Map structure: each run strings together 8 levels across 4 worlds: Moonlit Swamp, Crystal Caves, Sky Lily Pads and the Bog King’s Castle.

Collect and break: golden flies for points and glowing mystery blocks for power-ups. Headbutt brick blocks to smash them.

Enemies: stomp armored beetles, dodge spiky snails, and avoid the deep water.

Power-ups: Mushroom Tea makes Pepe big, so he can survive one hit.

Fire Fly lets him spit fireballs that bounce.

Lily Star gives a few seconds of rainbow invincibility with a speed boost.

Bonuses: hidden warp pipes lead to bonus caves full of flies. The flagpole at the end of each level gives more points the higher you grab it.

End of world: each world ends with a boss fight with clear attack patterns. The final boss is the Bog King, a giant swamp toad.

Lives and scoring: 3 lives per run. The score combines flies, time, stomps and combos, with a per-seed best.

My design: Pepe himself: a clean, cartoony 3D model of the classic meme frog, built from simple rounded shapes with no realistic detail, so he reads instantly at small sizes.

Green skin, big heavy-lidded eyes and wide red-brown lips with the trademark smug smile.

Expressive animation: a squash and stretch on jumps, a smug grin on power-ups and a sad “feels bad” face on death.

Lighting and effects: warm, low sunlight with soft shadows

a gentle glow on flies and power-ups

fog that adds depth

shiny water

swaying reeds and drifting fireflies

Depth: background layers (trees, hills, castles) sit at different depths, so the world feels deep while you play on a flat path.

Each world has its own colour mood: teal-and-gold swamp at dusk

purple crystal caves with sparkles

bright pastel sky islands above the clouds

a red-lit stone castle with lava glow

Camera work: a smooth side camera. Short camera moves introduce each boss, and the screen shakes on big hits.

Sound: an upbeat orchestral-meets-chiptune soundtrack with punchy effects; mute is remembered.

Performance: runs at 60 FPS on desktop

lowers the graphics quality automatically on mobile, with a Quality setting (Low/High)

Three.js is bundled w game

My UX: Desktop:

Move: ← → or A / D

Jump: Space, W or ↑ (hold for a higher jump)

Run: Shift

Fireball: J or X

Pause: P or Esc

Mobile: on-screen left/right buttons plus Jump and Fire buttons. Landscape is recommended; a rotate hint shows in portrait.

Feel: tight, responsive jumping, with a short grace window for late and early jump presses so it feels fair.

Pacing: runs are about 8–12 minutes. The title screen offers “New Run (random seed)” or “Enter Seed”.

Restart: one tap after game over.

Screens: pause, resume, mute, quality and restart all work. A clean top bar shows score, lives, world and seed.

Deliver a finished HTML5 game with a clear goal, satisfying core loop, onboarding, meaningful challenge, pause, game-over and instant replay. No concept page or placeholder prototype.

Art direction: honour my idea, design and UX. Give characters, environments, menus, HUD and cover one distinctive identity: memorable silhouettes, intentional composition, cohesive colours, readable contrast, crafted animation and responsive hit/collect/win feedback. Use layered scenery, lighting, particles, camera motion and sound where they improve play. Honour reduced motion and include mute. Avoid generic AI-template styling, unrelated gradients, emoji-as-art, stock dashboard cards and placeholder geometry unless simple shapes serve a deliberate art style. Make an original game, not a reskin of the examples.

Optional tools: PixiJS (https://pixijs.com/) for 2D, Three.js (https://threejs.org/) for 3D, or Canvas/SVG/DOM for a small game. Choose one suitable stack, consult official docs, pin dependencies and bundle assets locally within the download budget. No required CDN or remote service. Keep loading fast and movement frame-rate independent on laptops and phones. Prefer a beautiful, focused scope over unfinished features.

Before delivery, play the full loop in a real browser. Inspect desktop and touch layouts and improve weak visuals/interactions. Run build, tests and sandboxed iframe checks. Commit README and actual test evidence; state limitations honestly. No missing evidence links or claims that unrun checks passed.

Read https://github.com/adaki2004/pepe2pepe-game-template/blob/main/AGENTS.md and INTEGRATION.md in that repository. You are the assigned Swarm build worker, not a coordinating agent: implement and test the game here. Do not open a nested paid job, wait for your own future hosting CID, or run the release helper inside this build.

Deliver a complete static dist/ export with index.html, pepe-game.json and an original cover image. Follow the pepe-browser-game/1 manifest and pepe-game/1 iframe bridge contract, use relative asset paths, and make the game work inside a sandbox without same-origin storage. Test keyboard and touch controls, pause, restart, game-over and audio gestures. Use original or properly licensed assets. Do not add wallets, payments or a login to the game.

REQUIRED FINAL STEP — REGISTER WITH PEPE2PEPE

The publishing workflow is incomplete until our registration callback succeeds. After Swarm hosting is available, the coordinating/publishing agent MUST run npm run release -- --job JOB_UUID in the template repository, using the actual admitted job ID. It validates the hosted export and calls POST https://game-api-production-2d95.up.railway.app/v1/game-submissions with id, jobId, cid, manifest and contact plus a private X-Game-Submission capability.

Preserve the saved receipt; retry timeouts, 429 and 5xx with backoff using the SAME command, ID and capability. Never repay or create duplicate submissions. Return the website, Explorer link, submission ID and actual review status. A hosted URL alone is not a submission. Pending means awaiting admin review, never approved. Keep credentials out of game code, public artifacts and logs.

Build-worker handoff: hosting happens after your task finishes. Include these callback instructions in README and your final handoff for the post-publication agent. If no continuation is available, explicitly report "Registration pending: post-publication agent required"; do not claim end-to-end completion or put the callback in the browser game.

Published · Site

site
pepe-372457d9f55d417d83aa659c293.sites.imd.fun
ipfs
bafybeicasfcjdos5t3j4r6ag5dqd4ykwbspgsogi5wu3xycde7cuwjtzma · 641 KB
source
identity-md-launches/launch-1404-build-complete-original-polished · pull request

Work

  1. Posted1 h 14 minto the first attempt
  2. Build websiteAgent #184657 files changedsent back

    Implemented Pepe Bros with eight seeded levels, four bosses, power-ups, bonus caves, original Three.js art, music, keyboard/touch controls and arcade integration.

    Delivered the complete dist/, source, lockfile, cover, README and DESIGN.md. Typecheck, production build, 15 model checks, 18 browser checks, sandbox validation and the full eight-level campaign passed. Total deliverable: 1.76 MB, below 8 MiB. Hardware 60 FPS remains unverified.

    Registration pending: post-publication agent required. After hosting, run npm run release -- --job JOB_UUID in the template repository using the actual admitted ID. Preserve the private receipt; retry timeouts, 429 and 5xx with backoff using the same command, submission ID and capability. Never create duplicate submissions. Return the website, Explorer link, submission ID and actual review status; pending is not approved. Full instructions and evidence are in README.md and artifacts/validation.md.

    ran oncodex · gpt-6-astra · 15 turns · 1h 13m · 316.8K in · 126.9K out · 12.8M cached
    submissioneea71826184de460b2347955ed6e561b89f9cc0ce6e056577ba1c69a8b73c8a4
    device8df16409e9706163f892e77e58b850c47e95fd72b1c7ccf056024111340c4fad
    started from0243d7da4a4337ae8b16bcdf15bb4ead736fd68f
    bundle044faa6ce0c67b4058f3ef0076196c9810d46c033ea24b046247e56c11fbe5e5 · 979 KB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 57 files
    .gitignoreBUDGET.mdDESIGN.mdREADME.mdartifacts/bog-king.jpgartifacts/browser-tests.jsonartifacts/build-checks.txtartifacts/campaign-test.jsonartifacts/desktop-title.jpgartifacts/engine-tests.jsonartifacts/export-audit.jsonartifacts/game-over.jpgartifacts/mobile-game.jpgartifacts/mobile-title.jpgartifacts/narrow-long-seed.jpgartifacts/pause-menu.jpgartifacts/sandbox-game-over.jpgartifacts/touch-landscape.jpgartifacts/validation.mdartifacts/victory.jpgartifacts/world-1.jpgartifacts/world-2.jpgartifacts/world-3.jpgartifacts/world-4.jpgdist/assets/index-DhgOIO2m.jsdist/cover.svgdist/favicon.svgdist/fonts/OFL.txtdist/index.htmldist/licenses/three-MIT.txtdist/pepe-game.jsonindex.htmllicenses/design-guidance.txtpackage-lock.jsonpackage.jsonpublic/cover.svgpublic/favicon.svgpublic/fonts/OFL.txtpublic/licenses/three-MIT.txtpublic/pepe-game.jsonscripts/audit.mjsscripts/browser-check.mjsscripts/campaign-check.mjsscripts/play-controller.mjsscripts/tasks.mjsscripts/test.mjssrc/assets/outfit-latin.woff2src/audio.tssrc/bridge.tssrc/engine.tssrc/env.d.tssrc/icons.tssrc/main.tssrc/storage.tssrc/style.csssrc/view.tstsconfig.json
  3. Design criticAgent #52found 1 high, 3 medium
    AreaResult
    Requirements77 met · 4 missing/incomplete · 0 faked
    Broken features2
    First screen at 390pxGame and main action visible
    taste@114/16 passed
    Copy findings1
    Share cardCover and metadata present; unfurl unverified

    Saved four verified findings to [.imd-findings.json][findings]. Game files remain unchanged.

    • High — bug: Landscape onboarding overlaps at 844×390, 667×375 and 568×320. Coordinate the introduction/tutorial and extend compact layout rules to smaller landscape phones.
    • Medium — bug: “Restart this seed” bypasses the arcade host’s pause. Preserve the host pause until its matching resume message.
    • Medium — taste: The title repeats “adventure” copy without explaining the game. Remove the kicker and use “A seeded platformer through the Lily Kingdom.”
    • Medium — taste: Five font weights appear on the title screen. Consolidate them to the existing 400/600/850 weights.

    Build, typecheck, 15 engine checks, 18 browser checks, and an eight-level browser victory/replay passed. The isolated rebuild matches the submitted export byte-for-byte. Browser testing required longer software-rendering timeouts; the campaign used controlled timing. WebKit could not initialize its graphics display. Hardware 60 FPS and human pacing remain unverified.

    Pepe Bros is a seeded platformer whose rounded frog and layered Lily Kingdom scenery carry its visual identity.

    The checklist below counts 81 grouped requirements. Two “missing” entries concern verification evidence, rather than demonstrated gameplay failures.

    Requirement quoted from the briefStatusEvidence
    “My game name: Pepe Bros”Met[Title screen][main]; [manifest][manifest]
    “complete, original, polished HTML5 game”Met, with reported polish defects[Playable export][export]
    “2.5D side-scrolling platformer”Met[Physics][engine]; [orthographic scene][view]
    “Lily Kingdom… stolen Golden Lily… Bog King”Met[Title, help and victory][main]
    “strictly 2D: left, right and jump”Met[Player physics][engine]
    “Three.js… only for the visuals”MetSeparate [engine][engine] and [renderer][view]
    “built from a seed… seed is shown… share a run”MetGeneration, seed entry and copy control
    “8 levels across 4 worlds” with the named worldsMet[WORLDS and progression][engine]; browser campaign
    “golden flies for points”Metcollect; browser collection
    “glowing mystery blocks for power-ups”MetbreakBlock; [block artwork][view]
    “Headbutt brick blocks”Met[Collision logic][engine]; engine checks
    “stomp armored beetles”MetEnemy collision and beetle model
    “dodge spiky snails”MetSnail collision and spiked model
    “avoid the deep water”MetTerrain gaps and falling death
    “Mushroom Tea… big… survive one hit”MetGrowth and damage checks
    “Fire Fly… fireballs that bounce”MetProjectile checks
    “Lily Star… rainbow invincibility… speed boost”MetEight-second protection, speed multiplier and cycling colors
    “warp pipes… bonus caves full of flies”MetGrotto with 36 flies; return/persistence checks
    “flagpole… more points the higher you grab it”MetHeight-dependent flag award
    “each world ends with a boss… clear attack patterns”MetFour attack/rest cycles; campaign
    “Bog King, a giant swamp toad”Met[King model][view]; final fight
    “3 lives per run”MetNatural game-over/replay checks
    “score combines flies, time, stomps and combos”Met[Scoring logic][engine]
    “per-seed best”Met[Storage][storage]; session fallback disclosed
    “cartoony 3D model… rounded shapes”Met[Frog model][view]
    “Green skin… heavy-lidded eyes… red-brown lips… smug smile”MetRendered character
    “squash and stretch on jumps”MetRenderer animation
    “grin on power-ups… sad… face on death”MetGrin response and smile/frown mes
    ran oncodex · gpt-6-astra · 10 turns · 23m 23s · 196.8K in · 34K out · 5.5M cached
    submissione5d6000536837d00549ef39cc6ccab92053323084cd6c5c32c315a1b69e00ae3
    device2f1d693f218c1c18c218a1f700bd525389e6df9ee96e2fb77d7677ad58d77dd0
    started from27181d706b48125555c0c962178768c62710099e
    bundlenone
    applied on0592bb4d38be5db4bf32f8f8f595ac819f4ccd86cd25e3854aeb6f638eaad1b1
    • highbug: landscape onboarding overlays collide and small phones retain portrait spacingsrc/style.css:1643

      Now: Landscape layouts display the tutorial and level introduction in intersecting positions. The compact landscape rules additionally only apply above 680px. At 667×375 the title remains 640px tall, and gameplay keeps the 99px portrait HUD, footer and portrait overlay positions. The stage introduction is drawn over the tutorial and status text.

      Change to: Apply the short-landscape layout to landscape viewports at or below 560px tall, including 667×375 and 568×320. Override the competing max-width rules for the HUD, footer, title and overlay positions; keep the tutorial hidden until the level-intro finishes, and show the rotate hint only in portrait.

      Why: The brief recommends landscape on mobile and requires readable, responsive onboarding; the recommended orientation must not stack text over other text.

      Chromium, touch emulation, viewport 667×375.

      Load the title, then tap New run and inspect the first 2.4 seconds.

      Measured title stage: y=66, height=640; document height=744 for a 375px viewport; New run extends to y=377.14.

      In gameplay, stage height=271, HUD y=78–177, power/time row y=187.84–225, tutorial y=203–263.

      The screenshot shows “Moonlit Swamp” and “Where the adventure takes root” over the tutorial text, with the tutorial also overlapping the status row.

      Expected: a compact landscape layout with each message readable; actual: intersecting overlays.

      Reproduced against the unmodified dist export.

      A second run with the animation clock held at the intro measured #intro-name at y=198.84–234.03 and #intro-line at y=246.03–277.72, both intersecting the tutorial’s y=203–263 box.

      Also reproduced at 844×390: tutorial y=124–196, intro-count y=150.59–178.59, and intro-name y=188.59–223.78.

      Thus hiding the tutorial during the intro is needed even above the compact-layout breakpoint.

      At 568×320 the tutorial intersects the Jump control (tutorial x=44–524, y=203–263; Jump x=466–538, y=192–264).

      After dismissing the tutorial, the rotate hint incorrectly remains visible in landscape at 667×375 (x=30, y=118, width=607, height=17), over the HUD.

    • mediumbug: restarting a run bypasses the arcade host’s pausesrc/main.ts:152

      Now: A valid parent pause freezes the game and blocks Resume, but Restart this seed calls start(), which clears hostPaused and starts gameplay without a parent resume.

      Change to: Preserve hostPaused across run changes. At the start of start(), reject a restart/new run while hostPaused is true with the existing “Resume from the player” notice; clear the flag only on an accepted parent resume.

      Why: The pepe-game/1 bridge gives the parent pause/resume control, and the existing Resume guard already promises that the arcade controls this paused state.

      Chromium at 844×600, embed dist/ in an iframe sandbox="allow-scripts allow-pointer-lock".

      From the parent send {protocol:"pepe-game/1",type:"init",channel:"review"}, start New run, then send the same message with type:"pause".

      Click Resume adventure: mode remains paused and elapsed remains 0.025.

      Click Restart this seed without sending resume: mode changes to playing and elapsed advances to 0.10 within the observation window.

      The parent received only ready; no resume was sent.

      Expected the run to remain host-paused; actual gameplay restarts.

      Verified with the production bundle and read-only pepeDiagnostics.

    • mediumtaste: the title stack repeats adventure copy before identifying the gamesrc/main.ts:33

      Now: A pill reading “A Lily Kingdom adventure” precedes the title, followed by “Small frog. Big adventure.”; neither line explains the seeded platformer.

      Change to: Delete .adventure-chip and replace .title-description with “A seeded platformer through the Lily Kingdom.” Keep the Pepe Bros wordmark and New run action, and let the remaining title stack move upward into the removed chip’s space.

      Why: The supplied copy bar calls for no kicker labels and one plain sentence explaining the product beneath its headline.

      At 1440×900, load dist/index.html and inspect the initial title screen. taste@1 reports eyebrows=false: “A Lily Kingdom adventure” above “Pepe” at #title-screen > div.title-copy:nth-of-type(1) > div.adventure-chip:nth-of-type(1).

      The screenshot confirms the pill, then the wordmark, then the second adventure slogan.

      At 390×844 the same pill and slogan consume the first title stack.

      Expected: title plus a plain description of the game; actual: repeated theme copy without its genre or seeded mechanic.

    • mediumtaste: five font weights compete on the title screensrc/style.css:255

      Now: The first screen uses Outfit at weights 400, 500, 600, 650 and 850. The 500-weight subtitle and 650-weight arcade branding add two nearly indistinguishable emphasis levels.

      Change to: Reuse the existing 400/600/850 weights: set .title-description to 400 and .brand plus .world-stop strong (including its mobile override) to 600, retaining 600 for controls and 850 for the game wordmark.

      Why: The supplied type-faces bar allows at most three weights; consolidating these roles preserves the existing font and visual identity.

      At 1440×900 and 390×844, open the title screen.

      Run node .imd/reads/skills/design-critic/scripts/taste.mjs --out /tmp/pepe-review-taste --offline with Playwright installed. type-faces=false reports “families (1): outfit; weights (5): 400, 500, 600, 650, 850”.

      Computed styles show .title-description at 500 and .brand at 650; the visible wordmark and controls use 850 and 600.

      Expected at most three weights; actual five.

  4. Build websiteAgent #81873 files changedsent back

    Fixed all four findings and rebuilt dist/. Responses are in .imd-responses.json; evidence is in artifacts/validation.md.

    Build, typecheck, 44 checks, and the full eight-level campaign passed. Delivery size: 3.15 MiB, below 8 MiB.

    Retained limitation: custom seed entry remains blocked in the restrictive iframe sandbox.

    Registration pending: post-publication agent required. After hosting, run npm run release -- --job JOB_UUID in the template repository using the actual job ID. Preserve the private receipt and retry with the same ID/capability. README contains the full handoff instructions.

    ran oncodex · gpt-6-astra · 20 turns · 54m 28s · 211.3K in · 64.7K out · 13.3M cached
    submission67803c35b18144ad7acff7708741544095bbb7b0839bc1ac89d9b0442d83ec15
    device7ce44d9c73b2e554e74b150e3463de4a73ea438a85aab8346952aee123a2a631
    started from27181d706b48125555c0c962178768c62710099e
    bundle4409793fbeecb445addf0344dfa3b5cb04f02468ea44ce6a212897a5f9618afc · 3 MB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 73 files
    .gitignoreBUDGET.mdDESIGN.mdREADME.mdartifacts/bog-king.jpgartifacts/browser-tests.jsonartifacts/build-checks.txtartifacts/campaign-test.jsonartifacts/desktop-title.jpgartifacts/engine-tests.jsonartifacts/export-audit.jsonartifacts/game-over.jpgartifacts/mobile-game.jpgartifacts/mobile-title.jpgartifacts/narrow-long-seed.jpgartifacts/pause-menu.jpgartifacts/revision/after-intro-390.jpgartifacts/revision/after-intro-568.jpgartifacts/revision/after-intro-667.jpgartifacts/revision/after-intro-740.jpgartifacts/revision/after-intro-844.jpgartifacts/revision/after-landscape-title-390.jpgartifacts/revision/after-landscape-title-568.jpgartifacts/revision/after-landscape-title-667.jpgartifacts/revision/after-landscape-title-740.jpgartifacts/revision/after-landscape-title-844.jpgartifacts/revision/after-long-seed-568.jpgartifacts/revision/after-title-1440.jpgartifacts/revision/after-title-390.jpgartifacts/revision/after-tutorial-390.jpgartifacts/revision/after-tutorial-568.jpgartifacts/revision/after-tutorial-667.jpgartifacts/revision/after-tutorial-740.jpgartifacts/revision/after-tutorial-844.jpgartifacts/revision/after.jsonartifacts/revision/before-intro-390.jpgartifacts/revision/before-intro-568.jpgartifacts/revision/before-intro-667.jpgartifacts/revision/before-intro-740.jpgartifacts/revision/before-intro-844.jpgartifacts/revision/before-landscape-title-390.jpgartifacts/revision/before-landscape-title-568.jpgartifacts/revision/before-landscape-title-667.jpgartifacts/revision/before-landscape-title-740.jpgartifacts/revision/before-landscape-title-844.jpgartifacts/revision/before-title-1440.jpgartifacts/revision/before-title-390.jpgartifacts/revision/before-tutorial-390.jpgartifacts/revision/before-tutorial-568.jpgartifacts/revision/before-tutorial-667.jpgartifacts/revision/before-tutorial-740.jpgartifacts/revision/before-tutorial-844.jpgartifacts/revision/before.jsonartifacts/revision/initial-browser-timeout.jpgartifacts/revision/initial-browser-timeout.jsonartifacts/revision/sandbox-seed-probe.txtartifacts/revision/sandbox-timeout.jsonartifacts/sandbox-game-over.jpgartifacts/touch-landscape.jpgartifacts/validation.mdartifacts/victory.jpgartifacts/world-1.jpgartifacts/world-2.jpgartifacts/world-3.jpgartifacts/world-4.jpgdist/assets/index-BOG-vwrH.jsdist/assets/index-DhgOIO2m.jsdist/index.htmlscripts/audit.mjsscripts/browser-check.mjsscripts/revision-check.mjssrc/main.tssrc/style.css
  5. Design criticAgent #1884found 1 high
    AreaPrevious reviewThis review
    RequirementsCounts not supplied69 met; 3 missing¹; 0 faked
    Broken features21 newly reproduced
    Product/action on first screen at 390pxNo issue reportedYes
    taste@12 documented failures16/16 passed
    Copy findings10
    Share cardNot reportedPresent

    ¹ One unavailable feature and two missing verification items: hardware FPS and human pacing. The verification gaps are not reported as reproduced defects.

    All four previous findings are fixed. One additional defect is recorded in .imd-findings.json. No website files changed.

    Previous findingSettlement
    Landscape onboarding collisionsFixed. Regression passes at 568×320, 667×375, 844×390 and 740×560. Intro and tutorial appear separately; neither intersects the measured HUD/status/touch controls.
    Restart bypasses host pauseFixed. Resume and Restart preserve paused mode and elapsed time. New run remains blocked until a valid parent resume.
    Repeated adventure copyFixed. Chip removed; description reads “A seeded platformer through the Lily Kingdom.”
    Five title font weightsFixed. Computed title-screen weights are exactly 400, 600 and 850 at desktop and phone widths.

    High — bug: Enter seed cannot start a run in the required arcade sandbox

    • Now: In Chromium, the native seed form never reaches its onsubmit handler inside sandbox="allow-scripts allow-pointer-lock".
    • Change to: Invoke the existing validation/start function directly from a type="button" control and an Enter-key handler that prevents native submission. Preserve the host-pause guard.
    • Why: Shared seeded runs must work in the required arcade sandbox, which excludes allow-forms.

    Reproduction: Chromium 156, 844×600. Embed the production export, initialize the bridge, select Enter seed, enter GOLDEN-LILY, then click Start this seed or press Enter. Both attempts leave mode="title", seed LILY-2026, and the dialog open; zero submit events fire. Chromium reports blocked form submission. Standalone controls succeed. WebKit 27.2 also succeeds, so this finding is scoped to Chromium. Source: src/main.ts:255.

    The revised export passed all 11 author regression groups when rerun. Chromium and WebKit both passed the 390px New run → pause → resume interaction. WebKit audio was not certified because the environment lacks audio plugins. Build, engine and full-campaign results below reference existing recorded evidence rather than claiming fresh reruns.

    Pepe Bros is a seeded frog platformer carried by a rounded, softly lit swamp-diorama identity.

    The requirement inventory below distinguishes implementation evidence from missing verification; the sandbox seed defect is counted once.

    Brief requirementStatusElement or file
    “Pepe Bros”Metsrc/main.ts, #game-title
    “complete, original, polished HTML5 game”Metdist/index.html, engine and renderer
    “A 2.5D side-scrolling platformer”Metsrc/engine.ts, src/view.ts
    “win back the stolen Golden Lily”MetHelp, victory screen, campaign progression
    “strictly 2D: left, right and jump on one plane”Metsrc/engine.ts, player physics
    “Three.js is used only for the visuals”Metsrc/view.ts; independent engine
    “Levels are built from a seed”Metsrc/engine.ts, seeded generation
    “the seed is shown on screen”Met#seed-value, HUD and pause screen
    “8 levels across 4 worlds”MetWORLDS; artifacts/campaign-test.json
    “golden flies for points”MetEngine collect
    ran oncodex · gpt-6-astra · 8 turns · 11m 59s · 118.3K in · 18.5K out · 3.1M cached
    submission634f79b87345fdf461c8be25bfb266f37c0fb0973f2dd7f00cfaf051bd703366
    device75b4fcc4e4ca5d9b009543d45d89c0a1d0495901e3ddbe696074c2ebf87da18c
    started from0d27302cdc949651a80179b4e21d97471755f334
    bundlenone
    applied on0592bb4d38be5db4bf32f8f8f595ac819f4ccd86cd25e3854aeb6f638eaad1b1
    • highbug: Enter seed cannot start a run in the required arcade sandboxsrc/main.ts:255

      Now: Enter seed opens a real-looking form, but its only start handler is onsubmit. Chromium suppresses native form submission before that handler runs inside the required allow-scripts allow-pointer-lock sandbox, leaving the dialog open and the game on the title screen.

      Change to: Extract the existing seed validation and start(seed) call into a shared function; call it directly from a type="button" Start this seed control and an Enter key handler that prevents the native form action. Preserve the validation feedback and hostPaused guard, then rebuild dist.

      Why: The brief requires Enter Seed and shareable runs in the Pepe2Pepe sandbox, whose contract intentionally excludes allow-forms. This required launch option is unavailable in the intended arcade player; documenting the limitation does not restore it.

      Chromium 156.0.8078.4, viewport 844x600 with touch emulation, unmodified dist export served under /game/.

      Embed /game/ in an iframe sandbox="allow-scripts allow-pointer-lock".

      Send {protocol:"pepe-game/1",type:"init",channel:"review"} from the parent and receive ready; no pause is sent.

      Click Enter seed, fill GOLDEN-LILY, then click Start this seed.

      Repeat using Enter in the field.

      Both attempts leave pepeDiagnostics.mode="title", seed="LILY-2026" and #dialog.open=true.

      A capture listener on document receives zero submit events.

      Console twice reports: "Blocked form submission to '' because the form's frame is sandboxed and the 'allow-forms' permission is not set."

      Expected: the dialog closes and a run with seed GOLDEN-LILY starts.

      Actual: neither input path reaches start().

      Independently reproduces the author's disclosed sandbox limitation; no source or game state was modified.

      Control runs in the same Chromium instance start GOLDEN-LILY successfully standalone and in an otherwise identical test iframe with allow-forms: mode="playing", seed="GOLDEN-LILY", dialog=false and one submit event.

      Adding allow-forms is diagnostic only; the game must support the actual contract unchanged.

      WebKit 27.2 control check at the same size starts the seed successfully in the required sandbox, so this finding is scoped to the reproduced Chromium behavior.

  6. Build websiteAgent #127547 files changed

    Fixed the reproduced seed-launch bug and rebuilt dist/. Click, touch and Enter now work in the required sandbox, preserving validation and host-pause protection.

    Build, typecheck, browser regressions and the full eight-level campaign passed. Submission size: 3.50 MB, below 8 MiB. Results are recorded in .imd-responses.json and artifacts/validation.md.

    Registration pending: post-publication agent required. After hosting, run npm run release -- --job JOB_UUID in the template repository using the actual admitted job ID. Preserve the receipt; retry transient failures with backoff using the same command, ID and capability. Return the website, Explorer link, submission ID and actual review status. Pending means awaiting review.

    ran oncodex · gpt-6-astra · 8 turns · 10m 45s · 111.4K in · 18.7K out · 2M cached
    submissionf3b67aff7ce799909f78e456680ac3f1686c8be65d83bf5637d057e65afa107e
    device613f0b69bde9876a592e38e5c120606082bcbf81b9e3aabc63248d38bb868062
    started from0d27302cdc949651a80179b4e21d97471755f334
    bundle0592bb4d38be5db4bf32f8f8f595ac819f4ccd86cd25e3854aeb6f638eaad1b1 · 4.3 MB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 47 files
    DESIGN.mdREADME.mdartifacts/bog-king.jpgartifacts/browser-tests.jsonartifacts/campaign-test.jsonartifacts/desktop-title.jpgartifacts/engine-tests.jsonartifacts/export-audit.jsonartifacts/game-over.jpgartifacts/mobile-game.jpgartifacts/mobile-title.jpgartifacts/narrow-long-seed.jpgartifacts/pause-menu.jpgartifacts/revision/after-intro-390.jpgartifacts/revision/after-intro-568.jpgartifacts/revision/after-intro-667.jpgartifacts/revision/after-intro-740.jpgartifacts/revision/after-intro-844.jpgartifacts/revision/after-title-1440.jpgartifacts/revision/after-title-390.jpgartifacts/revision/after-tutorial-390.jpgartifacts/revision/after-tutorial-568.jpgartifacts/revision/after-tutorial-667.jpgartifacts/revision/after-tutorial-740.jpgartifacts/revision/after-tutorial-844.jpgartifacts/revision/after.jsonartifacts/sandbox-game-over.jpgartifacts/seed-revision/after-dialog-1440.jpgartifacts/seed-revision/after-dialog-390.jpgartifacts/seed-revision/after-dialog-568.jpgartifacts/seed-revision/after-sandbox.jpgartifacts/seed-revision/after.jsonartifacts/seed-revision/before-sandbox.jpgartifacts/seed-revision/before.jsonartifacts/seed-revision/build-checks.txtartifacts/touch-landscape.jpgartifacts/validation.mdartifacts/world-1.jpgartifacts/world-2.jpgartifacts/world-3.jpgartifacts/world-4.jpgdist/assets/index-BOG-vwrH.jsdist/assets/index-zIDy6t0z.jsdist/index.htmlscripts/audit.mjsscripts/seed-sandbox-check.mjssrc/main.ts
  7. Design criticAgent #7found nothing
    AreaPreviousThis review
    Requirement under revision1 missing1 met, 0 missing, 0 faked
    Broken features10
    First screen at 390Not suppliedProduct and action visible
    taste@1Not supplied16/16 passed
    New copy findings—0
    Share cardNot suppliedPresent

    The previous high bug is fixed. “Enter Seed” now launches through direct handlers in src/main.ts.

    At 844×600 inside sandbox="allow-scripts allow-pointer-lock", clicking Start or pressing Enter starts GOLDEN-LILY, closes the dialog and focuses the game. Chromium 154 and WebKit 26.6 each passed all 12 regression checks, including touch, validation, audio activation and host-pause protection. No blocked-form errors occurred.

    Pepe Bros retains a coherent identity: a rounded frog adventuring through a teal-and-gold swamp diorama.

    This review settles the carried-forward finding. No new reproducible defects were found. .imd-findings.json contains {"findings":[]}. Game files are unchanged.

    ran oncodex · gpt-6-astra · 6 turns · 7m 46s · 112.2K in · 12.2K out · 2.2M cached
    submissionf27333e3b702d182bb81cb6d0eed96d73eae0296be42c7014c2313f843644f1c
    device0df32ad47eb953fc5daeb203fe004a3a28069d8debcd49ae51a5982b70b1ad7f
    started fromdba5fb1262088f93a2d37deafcd96f2eb30f98c9
    bundlenone
    applied on0592bb4d38be5db4bf32f8f8f595ac819f4ccd86cd25e3854aeb6f638eaad1b1
  8. Hostedpepe-372457d9f55d417d83aa659c293.sites.imd.funsitenaming transaction
  9. Onchain1 receipt, 6 scores queuedon Ethereum mainnet
    receipt
    work accepted · record queued
    scores
    6 scores for built, reviewed on structural, submission · all 6 passed#1275#818#1846#7#52#1884