From 6d9ebc7d7baac276db24556623e72390d2fa499f Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 16 Apr 2026 10:44:57 +0000 Subject: [PATCH] docs: add docs/pong.gif demo to README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Record a 6-second gif of examples/pong.nes running in jsnes and embed it alongside docs/platformer.gif and docs/war.gif as the third project demo. The gif opens on Pong's title menu (CPU VS CPU / 1 PLAYER / 2 PLAYERS) — warmup = 4 frames keeps the menu as the thumbnail the way war's recording does, and then the headless autopilot advances to gameplay partway through the clip. - docs/pong.gif committed (128 KB) - README.md links it under the war demo - scripts/pre-commit rebuilds it when examples/pong* or the recorder/harness change - .github/workflows/ci.yml fails if the committed copy is stale - CLAUDE.md and tests/emulator/record_gif.mjs reference the new gif in the "how to regenerate" sections https://claude.ai/code/session_0134F5uwDEVTes2Ee9S7JeXy --- .github/workflows/ci.yml | 13 +++++++++++++ CLAUDE.md | 35 ++++++++++++++++++---------------- README.md | 4 ++++ docs/pong.gif | Bin 0 -> 131999 bytes scripts/pre-commit | 5 +++++ tests/emulator/record_gif.mjs | 12 +++++++----- 6 files changed, 48 insertions(+), 21 deletions(-) create mode 100644 docs/pong.gif diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 59355c8..da2ca95 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -176,6 +176,19 @@ jobs: echo "::error file=docs/war.gif::committed docs/war.gif is stale; rerun \`node tests/emulator/record_gif.mjs war 360 2 docs/war.gif 4\` and commit the new gif" exit 1 fi + - name: Verify docs/pong.gif is up to date + # Same contract as the platformer and war gifs: the README + # embeds docs/pong.gif as the third project demo. Pong's + # title screen (CPU VS CPU / 1 PLAYER / 2 PLAYERS menu) is + # the gif thumbnail, so warmup = 4 keeps it in frame before + # the autopilot advances to gameplay. + working-directory: tests/emulator + run: | + node record_gif.mjs pong 360 2 /tmp/pong.gif 4 + if ! cmp -s ../../docs/pong.gif /tmp/pong.gif; then + echo "::error file=docs/pong.gif::committed docs/pong.gif is stale; rerun \`node tests/emulator/record_gif.mjs pong 360 2 docs/pong.gif 4\` and commit the new gif" + exit 1 + fi - name: Upload actual + diff PNGs on failure if: failure() uses: actions/upload-artifact@v4 diff --git a/CLAUDE.md b/CLAUDE.md index 40ef459..8fe317f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -22,28 +22,31 @@ re-derive the project conventions from scratch. tmp path and fails if the committed version differs, pointing at the exact `cargo run -- build examples/.ne` to run. The pre-commit hook under `scripts/pre-commit` catches this locally. -- **`docs/platformer.gif` and `docs/war.gif` are committed** and - embedded in the top-level README as the project demos. `gifenc` + - `jsnes` are deterministic, so each gif's bytes are a function of - the compiler, the runtime, the harness, and the underlying `.ne` - source(s). Any change to those that affects the first ~6 seconds - of observable gameplay must be followed by regenerating the - affected gif: +- **`docs/platformer.gif`, `docs/war.gif`, and `docs/pong.gif` are + committed** and embedded in the top-level README as the project + demos. `gifenc` + `jsnes` are deterministic, so each gif's bytes + are a function of the compiler, the runtime, the harness, and + the underlying `.ne` source(s). Any change to those that affects + the first ~6 seconds of observable gameplay must be followed by + regenerating the affected gif: ```bash node tests/emulator/record_gif.mjs platformer 360 2 docs/platformer.gif node tests/emulator/record_gif.mjs war 360 2 docs/war.gif 4 + node tests/emulator/record_gif.mjs pong 360 2 docs/pong.gif 4 ``` - (The trailing `4` on the war command is the warmup-frames - override — war's title menu is the gif thumbnail, so we don't - skip past it the way the platformer recording does.) Commit the - regenerated gif in the same change. CI's `emulator` job renders - fresh gifs and fails if either committed copy doesn't byte-match. - The pre-commit hook rebuilds whichever gif is affected when - `platformer.ne`, `platformer.nes`, any file under `examples/war/`, - `war.ne`, `war.nes`, `record_gif.mjs`, or `harness.html` is - staged (and `tests/emulator/node_modules` is installed). + (The trailing `4` on the war and pong commands is the + warmup-frames override — both open on a title menu that we want + as the gif thumbnail, so we don't skip past it the way the + platformer recording does.) Commit the regenerated gif in the + same change. CI's `emulator` job renders fresh gifs and fails if + any committed copy doesn't byte-match. The pre-commit hook + rebuilds whichever gif is affected when `platformer.ne`, + `platformer.nes`, any file under `examples/war/`, `war.ne`, + `war.nes`, any file under `examples/pong/`, `pong.ne`, + `pong.nes`, `record_gif.mjs`, or `harness.html` is staged (and + `tests/emulator/node_modules` is installed). - `docs/future-work.md` lists the remaining gaps. If you implement something from that file, update the doc in the same PR. diff --git a/README.md b/README.md index 4ce0c97..99027cf 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ _Source: [`examples/platformer.ne`](examples/platformer.ne)_ _Source: [`examples/war.ne`](examples/war.ne)_ +![Pong demo](docs/pong.gif) + +_Source: [`examples/pong.ne`](examples/pong.ne)_ + ## Quick Start ```bash diff --git a/docs/pong.gif b/docs/pong.gif new file mode 100644 index 0000000000000000000000000000000000000000..652cd7e84bbafd0978a95be2368ba7deeb019043 GIT binary patch literal 131999 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