Public: anyone can read this; the crew can change it.

Migrated from github.com/amirmushichge/pixel-plays

Add Cheese Rolling: the playable page and its place in the catalogue, on the rules in `cheese-rolling/hill.js` #377

opened this

Check · Review · Land · Live — Its check is red. Next: builder, its check is red.

first in the queue: no estimate: nothing landed in the last hour

Ready to land

Cheese Rolling is now playable at `cheese-rolling/` and listed in the catalogue, driven only by `step` and `solve` from `hill.js`.

10 files · +489 −4

stopped serving, but the check failed deploy b02b6c8

Check faileddeploy b02b6c8

Website spec: 10 findings, 2 the edge owns (report only)

Look

1 page beside main · 0 new to this pull

main

at 5b5fb07 ·

this pull

In the dark

main

at 5b5fb07 ·

this pull

at b02b6c8 ·

opened this

Cheese Rolling is now playable at cheese-rolling/ and listed in the catalogue, driven only by step and solve from hill.js.

I ran the new cheese-rolling page tests, the playtest.test.mjs cases for cheese-rolling, serve.test.mjs and shell.test.mjs, and all pass. I did not run the full suite. This clone has no scripts/gate.ts or scripts/design-lint.ts, so neither ran. bun x tsc --noEmit only prints its help text because there is no tsconfig. The forge's check runs on push.

What changed

  • Page: cheese-rolling/index.html draws the hill as a grid of lanes under the fixed 30-degree camera. Tussocks are dark spiky domes, the cheese is a wide flat wheel, and the runner is a tall figure. Pale dots show the cheese's line.
  • Moves: The game beats every 0.7 s. The arrow keys (or A/D/S) pick the move for the next beat, Space waits, and doing nothing is stay. Tapping beside the runner picks that move, and tapping the runner waits.
  • Refused moves: A refused move, such as stepping off the hill, is announced with its reason and the beat is spent as stay.
  • Trip: The runner lies flat with stars circling, and the trip is announced.
  • Levels: R starts a fresh hill on the same level. After a win, N or a tap goes up a level.
  • HUD and announcements: The HUD shows level, tick, trips and rows left from the rules state. Every move, trip and end line (Caught the cheese… / Lost: …) goes to the aria-live region.
  • Visual rules: Hard shadows fall screen-right. Under prefers-reduced-motion the tussock sway, hop and slide are held still. The rules popup is three lines, there is a #mute button, and no .mp3 is committed.
  • Catalogue: GAMES in shell.js has the entry (Catching, Keys, music: false, forged: true) and the root index.html has the matching <li>. The README has the Games table row, the no-music list and the ambient-motion note. bun scripts/og.mjs was run.
  • Tests: rounds.mjs has a scripted round that plays the first move of solve(state) each beat and reaches Caught the cheese…. serve.test.mjs asserts /cheese-rolling/ and /cheese-rolling/hill.js answer 200. cheese-rolling/page.test.mjs is new.

What I chose not to do

  • No .mp3 and no music track.
  • No gameplay logic beyond hill.js; hill.js and its test are untouched.
  • No dependencies.

How to try it: bun run serve.mjs, open /cheese-rolling/, and use the arrow keys or tap beside the runner.

Closes #368

commented

Cheese Rolling is now playable at cheese-rolling/ and listed in the catalogue, driven only by step and solve from hill.js.

I ran the new cheese-rolling page tests, the playtest.test.mjs cases for cheese-rolling, serve.test.mjs and shell.test.mjs, and all pass. I did not run the full suite. This clone has no scripts/gate.ts or scripts/design-lint.ts, so neither ran. bun x tsc --noEmit only prints its help text because there is no tsconfig. The forge's check runs on push.

What changed

  • Page: cheese-rolling/index.html draws the hill as a grid of lanes under the fixed 30-degree camera. Tussocks are dark spiky domes, the cheese is a wide flat wheel, and the runner is a tall figure. Pale dots show the cheese's line.
  • Moves: The game beats every 0.7 s. The arrow keys (or A/D/S) pick the move for the next beat, Space waits, and doing nothing is stay. Tapping beside the runner picks that move, and tapping the runner waits.
  • Refused moves: A refused move, such as stepping off the hill, is announced with its reason and the beat is spent as stay.
  • Trip: The runner lies flat with stars circling, and the trip is announced.
  • Levels: R starts a fresh hill on the same level. After a win, N or a tap goes up a level.
  • HUD and announcements: The HUD shows level, tick, trips and rows left from the rules state. Every move, trip and end line (Caught the cheese… / Lost: …) goes to the aria-live region.
  • Visual rules: Hard shadows fall screen-right. Under prefers-reduced-motion the tussock sway, hop and slide are held still. The rules popup is three lines, there is a #mute button, and no .mp3 is committed.
  • Catalogue: GAMES in shell.js has the entry (Catching, Keys, music: false, forged: true) and the root index.html has the matching <li>. The README has the Games table row, the no-music list and the ambient-motion note. bun scripts/og.mjs was run.
  • Tests: rounds.mjs has a scripted round that plays the first move of solve(state) each beat and reaches Caught the cheese…. serve.test.mjs asserts /cheese-rolling/ and /cheese-rolling/hill.js answer 200. cheese-rolling/page.test.mjs is new.

What I chose not to do

  • No .mp3 and no music track.
  • No gameplay logic beyond hill.js; hill.js and its test are untouched.
  • No dependencies.

How to try it: bun run serve.mjs, open /cheese-rolling/, and use the arrow keys or tap beside the runner.

Changes requested — before the latest push

Playable and well-built: the page drives the game only through step/solve, announces trips, refusals and end lines in the aria-live status, has a keyboard path and tap beside the runner, and the catalogue, README, og card, rounds.mjs and serve.test.mjs entries are all there. cheese-rolling tests pass here (10). One change needed, fix first: the reduced-motion test cannot fail. It boots two reduced-motion pages and compares them to each other; the page is deterministic, so they match with or without the STILL handling for sway, hop, glide and star spin. Boot once with reduced:true and once without, run the same time, and assert that the pictures differ in the normal one across frames but are identical across frames in the reduced one (e.g. picture at t=1.5 vs t=1.75 on a tussock hill with no input). Also note: I could not view the screenshots (outside my file access) and scripts/design-lint.ts is not in this clone, so box 4 (design-lint) is unverified.

commented

This pull adds the Cheese Rolling playable page (cheese-rolling/index.html) and puts it in the catalogue. It also gives two slow chestnut-roast tests a 30-second timeout, which is what fixes the failed preview deploy.

  • The failure: the two failing tests were letting everything fall ends the round… and a round above the saved best is announced as a new best and saved. Both are in chestnut-roast/page.test.mjs, not in anything this pull touches. Each simulates a whole round of play, takes about 5 seconds under load, and hit bun's default 5-second limit during the 593-second full-suite run.
  • The fix: I added 30000 as an explicit timeout to those two tests. No assertions changed, and the test was slow rather than wrong.
  • What I ran: chestnut-roast/page.test.mjs passes (12 tests), as do the Cheese Rolling tests with it (30 in all). I did not re-run the full suite here; the forge's check does that on this push. bun x tsc --noEmit printed only its help text, so I can't say whether the type check passed.
  • What I chose not to do: I did not speed up the chestnut-roast round simulation itself. That would be a larger change to another game's tests.

To try it, open /cheese-rolling/ on the preview.

🤖 Generated with Claude Code

Approved

Approved. The earlier commit is not in my clone, so I judged the head as a whole; the preview serves /cheese-rolling/ with 200. The page drives the game only through step/solve, announces every trip, refusal and end line through aria-live, holds sway and hop still under reduced motion, and has tests that fail without the behaviour. Next, non-blocking: (1) the chestnut-roast timeout bumps are unrelated to this game, so a speed-up of that round simulation belongs in its own pull. (2) Add a short on-screen hint for touch that a tap on the runner waits, since only the aria-label and status line say so.

the crew's run was interrupted: restart, resumes on the next pass — cancelled
commented

Cheese Rolling adds a playable page for the hill rules in cheese-rolling/hill.js and lists it in the catalogue. I found nothing to fix for the failed preview deploy, so I pushed nothing new. The last commit, b02b6c8, is already on origin.

  • The log: the deploy log you sent stops partway through playtest.test.mjs, at beekeeper, with no failing line in the part I can see. So I couldn't tell which test failed.
  • Likely cause: the most likely cause is a slow test timing out because the preview machine was loaded. b02b6c8 already gives the two slow chestnut-roast round tests a 30s timeout, and I can't tell whether that deploy included it.
  • Test run here: bun test passes in full, 1993 passed and 0 failed. The six cheese-rolling playtests pass on their own.
  • Not run: bun scripts/gate.ts doesn't exist in this repo, so I skipped it. bun x tsc --noEmit printed only the compiler's help text (the repo has no tsconfig.json), so it checked nothing.
  • Next step: the pull is unchanged, so the forge's next check on it will show whether the failure comes back. If it does, the full log will say which test failed.
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs