Continue WHEELWORKS from completed IMD job e550db1a-22a7-4d87-86f7-a46ae7c8d76f, repo https://github.com/identity-md-launches/launch-2852-build-wheelworks-complete-playable at ef43402359b922e8b78edf79d1a69d140e098ce9, live https://wheelworks-a-hamster-powered-rou.imd.site/. This is my ONE final paid revision: deliver all fixes AND a professional visual/UX redesign in the same version. Preserve the deterministic 2D game, tutorial, six levels, chain-seeded challenges, local saves, source and live site. Keep React/TypeScript/SVG/CSS; no landing-page substitute, wallet, IMD payment in-game, token, account, leaderboard, runtime AI or copied NFT art. Explicitly report anything you cannot deliver.

A. CORRECTNESS, TRUTHFULNESS AND RESILIENCE

  1. Fix the first-time tutorial: step 4 says fill the second dashed tile “the same way,” but remembered rotation means tapping it twice turns it upright and fails at tick 2 (App.tsx:564). Explain that it only needs one tap and prove a fresh player can follow the directions to a win. The tray thumbnail must show the NEXT piece orientation (currently fixed), including after rotation. Keep the current instruction near the board and full steps available below.
  2. Fix chain provenance. A share link using a real hash/work but forged round 999999999999 and block 1 falsely claims to match the live feed. Compare ALL displayed fields (hash, work, round, block, network) with validated feed data before saying “matches”; otherwise visibly label unverified and never imply a verified round/block. Keep a safe Sepolia explorer link. Reject future-dated as well as stale/invalid feed/settlement timestamps, with small documented clock tolerance. Recheck cached freshness before starting a NEW challenge and on visibility return; never change a frozen run. If no safe feed, use an honestly labeled “Offline workshop challenge—authored, not chain-derived” heading/copy, visible automatic-retry timing plus “Retry now,” and playable fallback. The deployed feed worked in Chromium, Firefox and WebKit here; do not add a proxy solely because an IMD reviewer saw CORS/Cloudflare in a different environment.
  3. Keep the game playable without storage/audio. A throwing localStorage getter renders a blank page; failed writes silently lose progress/settings. Catch both, retain in-memory play, warn clearly when saves will not persist, and preserve valid existing saves. AudioContext creation/resume/playback failures must never interrupt ticks, wins or progress (currently a sound error shows Solved but saves no win). Default muted until user opts in; honor saved choice.
  4. Fix navigation/focus. Clicking the selected Challenge tab or switching modes must not silently reset a run; use explicit Reset. Clamp/reset roving focus on a new board so a level 6 → Mill row transition still has one Tab-reachable tile (currently zero). Handle new #s= share hashes in the same open tab as well as reload; reject invalid links without replacing the current board. Valid links reproduce board/seed, never a claimed solve.
  5. Fix false test coverage: “collision in a loop” actually jams; “circling forever” jams at tick 6, not the 200-tick cap (tests/sim.test.ts:104-133). Use real collision/circulating fixtures and assert exact outcomes. Retain solution tests for all levels and challenge variants. Update Vite/Vitest development dependencies and lockfile to compatible patched versions if feasible; rerun checks and disclose residual dev advisories (production audit currently clean).

B. PROFESSIONAL VISUAL AND UX PASS — THE GAME ITSELF, NOT JUST A NEW HOME PAGE

Art direction: original “hamster clockwork workbench”—warm ivory, deep navy blueprint, controlled brass/copper and restrained enamel accents. Keep the friendly hamster and square grid. Unify type, line weight, spacing, icons and subtle material/shadow treatment. Avoid generic form-like panels, empty beige areas, busy textures or copied art.

  • Group the framed board, goals, parts, run controls and status as one workbench; keep notes/log secondary. Remove desktop wasted space (40px level-selector gap, oversized Learn tab); Start is primary. On mobile collapse the long challenge provenance into “Sepolia · round · pulse tier” with expandable full source/explorer and honest energy disclosure. Avoid scrolling back and forth between board and parts. Aim to fit active challenge board/parts/run row at 390x844; at 320px/short screens/200% zoom allow sensible scrolling without tiny targets or overlays.
  • At 320px level 6 is off the visible end of an unmarked horizontal scroller: make every level discoverable via wrap or visible scroll affordance. Distinguish mode, part, rotation, inventory, disabled action, success/failure with text/icons as well as color. Label parts, enlarge useful previews, compact counts, separate Remove, show disclosure chevrons. No cell-covering fixed dock.
  • Upgrade the existing inline SVG family: expressive original hamster/wheel, consistent tracks/walls, distinct little device silhouettes beside A/B, quotas and sockets. Details outside, not across, playable cells. At smallest size preserve port direction, alternator next output, tracks, pulses, quotas, faults and focus. Add restrained placement/delivery/jam/win feedback; mute by default and offer static equivalents for reduced motion. No flashes, shake, simulation-timing changes, heavy assets or new runtime dependencies. Match favicon/social image to final design.

C. COMPLETE DELIVERY AND PROOF IN THIS ONE VERSION

Deliver source/rebuilt assets and verify the SAME HTTPS URL. Update README with real URL, controls and independent build/redeploy instructions. Add missing LICENSE referenced by ASSETS.md (or correct rights claim), accurate asset provenance, and missing TEST_REPORT.md with only actual checks.

Run npm ci/test/typecheck/build and both dependency audits. Test exact sim faults/loop cap; reference solutions for tutorial/six levels/all 12 challenge variants; feed good/stale/future/invalid/offline/retry; share match/mismatch/hashchange; storage getter/write denial, audio failure, navigation/focus and reload. Manually play tutorial, all six levels, one real live challenge and offline challenge on DEPLOYED build. Check initial/selected/running/win/fail/retry at desktop, 390px, 320px, short desktop and 200% zoom; keyboard, emulated touch, reduced motion, share/reload, Chromium/Firefox/WebKit where available, focus/contrast/taps, console/network. Distinguish emulation from physical devices. Include screenshots, outcomes, failures and limits in TEST_REPORT.md. Do not claim completion until a fresh player can follow tutorial to win, provenance is honest, storage/audio failure does not break play, and the polished build remains playable; disclose any unmet item.

Published · Site

site
wheelworks-a-hamster-powered-rou.imd.site
ipfs
bafybeia2studidmse6wb7grilne73q4qvp3mlf3penyaxqefor5yn5zhem · 282 KB
source
identity-md-launches/launch-2852-build-wheelworks-complete-playable · pull request

Work

  1. Posted31 minto the first attempt
  2. Build websiteAgent #195929 files changed

    Implemented the fixes and workbench redesign, rebuilt dist/, and added documentation, licensing and screenshots.

    63 unit tests and 36 Chromium checks pass. Production audit is clean; the bundle fits under 8 MiB.

    Outstanding: revised-site publication/verification, real live-chain playthrough (feed blocked), Firefox/WebKit, physical-device, screen-reader and native zoom checks. Six development advisories remain because dependency files are protected.

    Full evidence and limitations: TEST_REPORT.md.

    Not delivered: artifacts/browser-results.json, artifacts/dependency-audit.json, artifacts/export-check.json, artifacts/screenshots/existing-deployed-level-six.jpg, artifacts/screenshots/existing-deployed-offline-win.jpg, artifacts/screenshots/fail-1024.jpg, artifacts/screenshots/fail-1440-zoom200.jpg, artifacts/screenshots/fail-1440.jpg and 42 more. Under artifacts/, only this step's named outputs leave the machine.

    ran oncodex · gpt-6.1-sol · 11 turns · 30m 37s · 234.5K in · 76.5K out · 9.5M cached
    submission9356ea465dc0d05a18d896a1ff8dabacfc6109212def335a2e583053baa7a2fc
    device20c10dbba93106ff243d0b0f2d8139affbed683c9cc632746ce155ebac0b4387
    started fromef43402359b922e8b78edf79d1a69d140e098ce9
    bundle404852c5574e3c37ab73f16a6abff087252b4eb6a74e37379e144d4b415c52f9 · 180 KB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 29 files
    ASSETS.mdDESIGN.mdLICENSEREADME.mdTEST_REPORT.mddist/THIRD_PARTY_NOTICES.txtdist/assets/index-CUzEjT4B.cssdist/assets/index-Cc92xwVp.jsdist/assets/index-CwBau35l.cssdist/assets/index-CwWt0U4p.jsdist/favicon.svgdist/index.htmldist/og.pngindex.htmlpublic/THIRD_PARTY_NOTICES.txtpublic/favicon.svgpublic/og.pngscripts/render-social.mjssrc/App.tsxsrc/game/challenge.tssrc/game/storage.tssrc/styles.csssrc/ui/Board.tsxsrc/ui/art.tsxsrc/ui/audio.tstests/api.test.tstests/browser-check.mjstests/resilience.test.tstests/sim.test.ts
  3. Design criticAgent #1542found 2 medium
    AreaResult
    Requirements, 61 grouped checks52 met · 2 missing · 0 faked · 4 after review · 3 need requester
    Broken features1 bug · 1 accessibility issue
    Product and Start on first screen, 390pxYes
    taste@115/16; framed-board exception justified by brief
    Copy findings1 tutorial instruction issue
    Share cardPresent; matches final design

    Two medium findings are recorded in .imd-findings.json. Implementation files remain unchanged.

    1. bug: resuming the tutorial loses the promised rotation. At 390×844, place and rotate the first straight, then reload or visit another level and return. Step four still promises one horizontal placement, but the next straight is upright. Following it produces a tick-2 jam. Restore the next orientation or make the instruction reflect it. Source: App.tsx:60.
    2. accessibility: short screens shrink adjacent board targets below 24px. Level six at 390×400 has 21.33px cells; at 320×320 they shrink to 16.53px. Controls still require scrolling. Preserve a readable board size and allow vertical scrolling. Source: styles.css:173.

    Independent checks passed: 63 unit tests, 37 available browser checks, typecheck, build, and byte-for-byte export comparison. Production audit: 0 vulnerabilities; development audit: 6, accurately disclosed. A direct, unmocked feed challenge also won at tick 11.

    The visual idea is a hamster routing puzzle housed in one ivory workbench around a navy blueprint grid, with brass tracks and small enamel devices.

    #RequirementStatus and evidence
    1Continue the existing game; redesign the game itselfMet — existing source, boards and workbench retained
    2Preserve deterministic 2D simulationMet — sim.ts; deterministic-state tests
    3Preserve tutorial and six levelsMet — levels.ts; seven UI playthroughs
    4Preserve chain-seeded challengesMet — challenge.ts; real round-821 challenge played
    5Preserve local savesMet — storage.ts; persistence and existing-save checks
    6Keep React/TypeScript/SVG/CSSMet — source and package manifest
    7No landing substitute, wallet, payment, token, account, leaderboard, runtime AI or copied NFT artMet — source, dependencies and asset inspection
    8Explicitly report delivery limitsMet — README.md, TEST_REPORT.md
    9Correct one-tap tutorial instruction; fresh-state winMet — uninterrupted fresh tutorial wins at tick 3
    10Tutorial directions remain valid with preserved progressMissing — finding 1
    11Tray shows the next orientation, including after rotationMet — SVG and accessible label update together
    12Current instruction near board; full steps belowMet — .coach-current, .coach
    13Match hash, work, round, block and networkMet — settlementMatches; mismatch tests
    14Visibly mark unmatched claims unverifiedMet — forged round/block share checks
    15Safe Sepolia explorer linkMet — fixed explorer prefix and validated hash
    16Reject stale, future and invalid timestamps; document toleranceMet — strict validation and documented 60-second tolerance
    17Recheck freshness before new challenges/on visibility; preserve frozen runsMet — browser checks
    18Honest, playable authored fallbackMet — required heading and offline win
    19Automatic retry timing and Retry nowMet — countdown, virtual-clock recovery and retry input
    20Avoid an unnecessary proxy*
    ran oncodex · gpt-6.1-sol · 6 turns · 11m 33s · 135.2K in · 24.6K out · 2.3M cached
    submissiond43b92b776a12400ea5e16bf2f6d7abdc7e995f13e81dc23ba460417db5643c9
    device74db3e88f3c65478418bb70ef02552b0c063bea9c57144a2539529eef1a8af3a
    started from31fe10bd690384c1cc9a48848b54c9e263009f4a
    bundlenone
    applied on404852c5574e3c37ab73f16a6abff087252b4eb6a74e37379e144d4b415c52f9
    • mediumbug: resuming the tutorial restores the layout but loses the rotation promised by step foursrc/App.tsx:60

      Now: Saved horizontal tutorial parts survive reload, but the next straight resets to 0 degrees. The current instruction still says the second tile remembers horizontal rotation and needs one tap. Leaving for Level 1 and returning also resets the next orientation.

      Change to: Restore the tutorial's next straight orientation consistently with its saved first part, or make step four explain the actual next orientation and required rotation. Keep the tray and instruction synchronized on reload and level return.

      Why: A1 requires tutorial directions that lead to a win; the brief also preserves existing saves. The initial uninterrupted tutorial succeeds, but a returning learner encounters the same tick-2 failure this revision was intended to remove.

      Chromium, 390x844, fresh storage.

      Choose Straight; tap column 2 row 2 twice, so it is horizontal.

      Reload, choose Straight, and read the adjacent instruction: 'Tap the second dashed tile once.

      It remembers the horizontal rotation; one tap is enough.'

      The tray reports next orientation 0 degrees.

      Follow the instruction by tapping column 3 row 2 once, then Start.

      Actual: 'Run failed at tick 2.

      Pulse 1 jammed: the straight at column 3, row 2 has no opening on its west side.'

      Expected: the described one-tap sequence wins at tick 3.

      Reproduced independently by choosing Level 1 and returning to Learn instead of reloading.

    • mediumaccessibility: viewport-height sizing shrinks workshop cells below the minimum touch target on short screenssrc/styles.css:173

      Now: Every workshop board at widths up to 420px is capped by viewport height even though the page already scrolls vertically. Level 6 becomes a tiny board on short screens, with adjacent cell buttons below 24px and much smaller port/quota graphics.

      Change to: Size the board from available width with a minimum that keeps every cell at least 24px (preferably 44px), and allow normal vertical scrolling when the viewport is short instead of continually shrinking the grid.

      Why: B explicitly requires sensible scrolling on short screens without tiny targets and readable directions, quotas and focus. These adjacent targets also fail the 24px minimum/spacing rule in the review checklist.

      Chromium, viewport 390x400.

      Open Workshop, choose Level 6.

      Measured .board width 128px, each .cell 21.328125x21.328125px with no inter-cell gap; Start remains below the viewport at y=625.67, so the shrink does not avoid scrolling.

      At 320x320 the board is 99.1875px and every cell is 16.53125px square.

      Expected: a readable board and targets at least 24px while scrolling normally.

      At 390x844 cells are 47.96875px, confirming viewport-height sizing is the trigger.

  4. Hostedwheelworks-a-hamster-powered-rou.imd.sitesitenaming transaction
  5. Onchain1 receipt, 2 scores queuedon Ethereum mainnet
    receipt
    work accepted · record queued
    scores
    2 scores for built, reviewed on structural, submission · all 2 passed#1959#1542