Public: anyone can read this; the crew can change it.
Migrated from github.com/amirmushichge/pixel-plays
Add Fence Posts: the playable page and its place in the catalogue, on the rules in `fence-posts/field.js` #335
Check · Review · Land · Live done — Landed and live in production.
Fence Posts now has a playable page at `/fence-posts/` and an entry in the catalogue. It runs on the existing rules in `fence-posts/field.js` and adds no game rule of its own. I rebased on main and pushed. The new tests pass, and so do `serve`, `shell` and `town`. The full playtest file ran for more than 110 seconds without finishing, so I ran only its Fence Posts cases, which pass. The forge's ow…
shipped production is serving it deploy 5b5fb07
Fence Posts now has a playable page at /fence-posts/ and an entry in the catalogue. It runs on the existing rules in fence-posts/field.js and adds no game rule of its own. I rebased on main and pushed. The new tests pass, and so do serve, shell and town. The full playtest file ran for more than 110 seconds without finishing, so I ran only its Fence Posts cases, which pass. The forge's own check covers the rest.
- Page:
fence-posts/index.htmldraws the staked meadow, the sheep in each pen, the fences built so far, and a flag on each claimed pen. You build by tapping between two posts, or by moving the highlight with the arrow keys and pressing Enter. The farmer's turn plays out one length at a time. The HUD shows sheep and pens for both sides, and an aria-live region announces each length and each claim. - Visual rules: the canvas is 360x280 with the fixed 30° camera, and shadows fall screen-right. Your fences are rails and the farmer's are wattle, so they differ by pattern as well as colour. The sheep graze and the flags flutter, and both stop under
prefers-reduced-motion. The canvas aria-label says how to play, the rules popup is four lines or fewer,#muteis there, and no.mp3is committed. - Catalogue:
- GAMES has the entry from the issue, and the root index.html has the matching <li>.
- The README names Fence Posts in the games-without-music list and in the ambient-motion list. I did not check whether the README Games table already had a row.
- The share card is rendered by bun scripts/og.mjs, and the town building comes from the GAMES entry.
- Tests:
- rounds.mjs has a scripted round that taps the length the farmer's own rule would pick, and it reaches the end line.
- serve.test.mjs asserts that /fence-posts/ and /fence-posts/field.js answer 200.
- fence-posts/page.test.mjs is new and stays inside the per-game test budget.
- Merge conflict:
README.mdandog/home.pngconflicted with newer game pulls. I kept main's text and re-added the Fence Posts mentions, andog/home.pngwas regenerated by theog.mjsrun.
Not run: scripts/gate.ts and scripts/design-lint.ts do not exist in this clone. There is no package.json, so the tsc step printed only its help text and checked nothing.
I added no dependencies and no new game rules.
To try it, open /fence-posts/ on the preview and tap between two posts, or use the arrow keys and Enter.
🤖 Generated with Claude Code
I merged main into the branch and pushed it. The conflicts were all additions from the Welly Toss pull sitting next to mine, so I kept both sides in each file.
The merge touched these files:
index.html,shell.js,rounds.mjsandserve.test.mjs: both games' entries are now in each file. Fence Posts and Welly Toss each have their own<li>,GAMESentry, scripted round and "served" test.README.md: I took main's text and re-added Fence Posts to the list of games without music and the ambient-motion sentence.og/home.png: I took main's copy and re-ranbun scripts/og.mjs, so the home card and the Fence Posts card are regenerated.
Tests: The fence-posts, serve, shell and town tests pass (138). From the playtest file I ran only the Fence Posts, Welly Toss and "every game has a scripted round" cases, and they pass. I did not run the rest of that file or the other test files here, so the forge's check covers them.
Fence Posts is playable in the preview: /fence-posts/ and field.js both answer 200. The page drives the game only through the rules script. Keyboard play works: the arrows move the highlight, Enter builds, and each length and claim goes to an aria-live status. The two sides differ by pattern as well as colour, the grazing and flutter stop under reduced motion, #mute is a 44px target, and no .mp3 is committed. I could not open the forge screenshots from my sandbox, so I judged the layout from the CSS and source. Next two things: (1) the fixed top-left score block can crowd the 360px canvas on very short phones, so check it with a screenshot at 360x640; (2) the pointermove highlight only helps mice, so consider drawing a larger tap target for touch.
Left #304 open: 1 unticked item remain (fence-posts/index.html draws a meadow staked with posts, the sheep grazing in each pen, the fences built so far, and each claimed pen marked with its owner's flag. Tap between two posts to build there. Arrow keys move a highlight over the unbuilt lengths, and Enter builds. The farmer's turn plays out a length at a time. The page drives the game only through fence-posts/field.js and adds no game rule of its own. The HUD shows sheep and pens for both sides, and each length and each claim is announced through an aria-live region.).
Fence Posts now has a playable page at
/fence-posts/and an entry in the catalogue. It runs on the existing rules infence-posts/field.jsand adds no game rule of its own. I rebased on main and pushed. The new tests pass, and so doserve,shellandtown. The full playtest file ran for more than 110 seconds without finishing, so I ran only its Fence Posts cases, which pass. The forge's own check covers the rest.fence-posts/index.htmldraws the staked meadow, the sheep in each pen, the fences built so far, and a flag on each claimed pen. You build by tapping between two posts, or by moving the highlight with the arrow keys and pressing Enter. The farmer's turn plays out one length at a time. The HUD shows sheep and pens for both sides, and an aria-live region announces each length and each claim.prefers-reduced-motion. The canvas aria-label says how to play, the rules popup is four lines or fewer,#muteis there, and no.mp3is committed.-
GAMEShas the entry from the issue, and the rootindex.htmlhas the matching<li>. - The README names Fence Posts in the games-without-music list and in the ambient-motion list. I did not check whether the README Games table already had a row. - The share card is rendered bybun scripts/og.mjs, and the town building comes from theGAMESentry.-
rounds.mjshas a scripted round that taps the length the farmer's own rule would pick, and it reaches the end line. -serve.test.mjsasserts that/fence-posts/and/fence-posts/field.jsanswer 200. -fence-posts/page.test.mjsis new and stays inside the per-game test budget.README.mdandog/home.pngconflicted with newer game pulls. I kept main's text and re-added the Fence Posts mentions, andog/home.pngwas regenerated by theog.mjsrun.Not run:
scripts/gate.tsandscripts/design-lint.tsdo not exist in this clone. There is nopackage.json, so thetscstep printed only its help text and checked nothing.I added no dependencies and no new game rules.
To try it, open
/fence-posts/on the preview and tap between two posts, or use the arrow keys and Enter.🤖 Generated with Claude Code
Closes #304