Eric Wagoner and Claude Fable 5.1
c6366853cd
The root address is rewritten to index.html, since try_files passes the root over as a directory and served the shell in place of the hall
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
2026-10-29 11:22:35 -04:00
Eric Wagoner and Claude Fable 5.1
647e8cb2bf
The hall's game cards no longer lift on hover or end in "Play X →" and a domain line, and the first game, the one newcomers are pointed at, takes the whole width with its art beside the words, so five games fill the grid without an orphan; the template renders the hall, the rules and the guide at build time behind a fallback named shell.html, and its deploy renders the Caddy site file from the template each time; the family list carries Wyrm and Dip's larger maps; the tally heading and the hosting line are said plainly; and the writing checklist names one sentence shape for a whole list as a tell
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
2026-10-29 10:37:40 -04:00
Eric Wagoner and Claude Fable 5.1
40a52dfe37
The hall's Wyrm card is the glass board at the opening, seen from a corner, as a JPEG; its alt text says what the picture shows
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
2026-10-27 17:36:19 -04:00
Eric Wagoner and Claude Fable 5.1
75428b5a9b
The template's room server guards a stale room once, by name; the test's tick helper is named for what it waits on; the port list and the hall's tally lose a set that was always empty
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
2026-10-26 22:38:08 -04:00
Eric Wagoner and Claude Fable 5.1
62cb00be33
The template's bots move once the player's request is answered: a slow bot no longer holds up the reply to the move it is answering
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
2026-10-26 17:32:23 -04:00
Eric Wagoner and Claude Fable 5.1
dcd2293b42
The template's lobby reads well with no KEEPER set: challenge the keeper, not the keeper, the keeper
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
2026-10-26 17:20:02 -04:00
Eric Wagoner and Claude Fable 5.1
cbe85d2d31
The template no longer links a favicon.ico it does not ship, which failed a new game's first build at prerender
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
2026-10-26 16:56:18 -04:00
Eric Wagoner and Claude Fable 5.1
5e7ac999db
Wyrm joins the family: its card in the hall, its line in family.json, and the hall's visitor count follows the people it sends there
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
2026-10-26 16:41:29 -04:00
Eric Wagoner and Claude Opus 5.5
e91d209cbe
The keeper can say a word at a table through the keeper's door, signed as the keeper and heard whether or not the gallery may talk, so a call answered too late, after the game began, can still be answered; <slug>-say.sh sends it
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
2026-10-20 13:21:24 -04:00
Eric Wagoner and Claude Opus 5.5
8c37cc5210
The host is asked before beginning while a seat is still held for someone on their way, since the seat goes once the game begins; and the gallery says the game began before they arrived, so whoever was called and finds the table under way knows why there is no seat
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
2026-10-20 13:04:28 -04:00
Eric Wagoner and Claude Opus 5.5
09a8b675ad
The host has a hand on the other seats: once the game begins, Seats makes a transfer phrase for another person's seat, which gives it a new token when claimed, and gives the seat of a player who cannot go on to a bot, which plays the move the seat owes at once and speaks nothing in their name; the person's token opens nothing while it stands in, their page goes to the gallery with the reason and a claim box, and a rematch holds their seat without the stand-in; the server pings every socket and closes one a dead browser left open
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
2026-10-16 19:04:33 -04:00
Eric Wagoner and Claude Opus 5.5
c439c15e36
A seat link replaces a held seat only when the server refuses the held token, not when the connection drops, so a link cannot take a working seat away on a bad connection
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MbtUPJ24P6vc6tE1x6RS3m
2026-10-13 18:31:36 -04:00
Eric Wagoner and Claude Opus 5.5
7b4080c91f
The keeper's door asks for a key only root and the game's user can read, so another service on the host cannot re-seat anyone; the deploy makes the key once and the reseat script sends it from a file descriptor; and a seat link is taken out of the address bar with the browser's own call, since the page reads it before the router starts
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MbtUPJ24P6vc6tE1x6RS3m
2026-10-13 18:27:13 -04:00
Eric Wagoner and Claude Opus 5.5
4721b0e97b
A seat a link carries is kept only once the server takes it, and never over a seat this browser holds that still opens, so a link someone else sends cannot take a working seat away
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MbtUPJ24P6vc6tE1x6RS3m
2026-10-13 18:22:54 -04:00
Eric Wagoner and Claude Opus 5.5
ecab471122
The keeper can bring back a seat a browser lost: a new token on the ledger, the old one refused, and a link that carries it in the fragment, minted by <slug>-reseat.sh through a /keeper door Caddy does not proxy; a spectator at a game in play is told both ways back, and the hall asks before forgetting a game in play
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MbtUPJ24P6vc6tE1x6RS3m
2026-10-13 18:20:36 -04:00
Eric Wagoner and Claude Opus 5.5
98e61dc756
The hosting line says what it promises: chipping in unlocks nothing, and nothing is held back without it
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MbtUPJ24P6vc6tE1x6RS3m
2026-10-13 09:23:44 -04:00
Eric Wagoner and Claude Fable 5.1
60435fef84
The hall keeps the night on the shared host: one job runs every game's rollup and backup and checks in with Sentry once for each
...
Eight cron monitors, two per game, watched eight scripts that run on the
same box at the same two minutes. hall-nightly.sh now runs the hall's own
rollup and every game's rollup at 00:12, and every game's backup at 07:23,
finding the games by their scripts in /usr/local/bin, and checks in once
for each job to the gamehall project's hall-rollup and hall-backup
monitors. The template's rollup and backup say by their exit status
whether they managed, the skipped backup included, and its deploy leaves
the game's own cron file off a host the hall schedules.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-12 10:07:05 -04:00
Eric Wagoner and Claude Fable 5.1
87c2215e5f
The hall's cards say who plays on one line and where the game came from on a quieter one, with a word for newcomers under the intro
...
Each card's players and origin are two lines, the origin a step
smaller. Dip's description is shorter and its players line says "2 to
10, depending on the map". The intro says "start a table" like the list
beneath it, and a line under it points newcomers at Wiz-War. The Waving
Hands picture is re-cropped from the same capture, the grid centered
and the stray edge gone.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-11 20:59:53 -04:00
Eric Wagoner and Claude Fable 5.1
7301e98802
The hall's Waving Hands card shows the duel in hands, not letters
...
The lobby's four-turn grid, captured from the game with each letter
replaced by the game's own hand silhouette, mirrored for the right hand
as the picker draws it. The game itself still writes the grid in letters.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-11 20:48:25 -04:00
Eric Wagoner and Claude Fable 5.1
c162625d51
The hall's cards name each game's house player and lead with "Play Dip →", Waving Hands shows its gesture grid, and the small text reads at 4.5:1
...
The intro says how to start before the cards. Each card's metadata line
names the house player, the call to action is "Play [Game] →" with the
game's address beneath, and an empty length line waits, hidden, for real
play data. Waving Hands' card shows the lobby's gesture grid instead of
the share card. "How a table works" says Start a table and how a seat
crosses devices, and the credits run in the cards' order. The faint bone
is gone: the metadata lines and the footer use the dimmed bone, 6.5:1
and 7.2:1 where they were 3.7:1 and 4.0:1, and the ko-fi link no longer
wraps.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-11 20:41:55 -04:00
Eric Wagoner and Claude Opus 5.5
c2582a4822
The hall's Dip card shows the board as it is drawn now, real coastlines and each power's lands in its color, cropped so all seven powers fit
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MbtUPJ24P6vc6tE1x6RS3m
2026-10-11 11:39:32 -04:00
Eric Wagoner and Claude Opus 5.5
0456ac39f1
Dip's new tagline in the family, and the writing rules learned from the Dip and Wiz-War passes
...
A deliberate tagline triplet may stay (Wiz-War's), a button may name its
action and its cost, a game may voice a template line its own way, and
the list of load-bearing words grows: client-matched errors, replay
goldens, stored shares, and bot lines told apart by shape. Bots should
not share scaffolding.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
2026-10-11 11:31:20 -04:00
Eric Wagoner and Claude Opus 5.5
bbbe8ec312
Writing for players: the editing passes' lessons, and the template written by them
...
The conventions gain a list of the habits players read as generated text
(a semicolon in every paragraph, statement-colon-explanation, "The" plus
an abstract noun as a heading, clipped fragments in threes, closing
aphorisms, "X, not Y", the page talking about itself), and of the errors
that come from inherited text: hidden information where there is none,
points where there are none, "both" at a larger table, unchecked claims,
and ledger-stored words reworded. new-game.sh points at the list.
The template follows it: the about link loses 'a labor of love', the
tabs are Origins and Games so far, and the hall, lobby, room, report
slip, table talk, guide and demo board read as Waving Hands' and
Hnefatafl's now do. The landing page and family.json carry the two
games' new taglines and lose their semicolons and the tip jar's aphorism.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
2026-10-11 10:34:08 -04:00
Eric Wagoner and Claude Opus 5.5
f5b7416a9e
From Hnefatafl's second credibility pass: traffic.py parses each request once and counts visits one way, the rollup's check-in has one comment, and the hall's tally drops its leftovers
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GwFKMuQnPAEHJ5yA1q4orh
2026-10-11 10:18:10 -04:00
Eric Wagoner and Claude Opus 5.5
169ec4ad55
Conventions: plain chrome, and how a move is made
...
From feedback on Waving Hands' BoardGameGeek thread: no label-and-colon
lines or abstract headings around the game; histories read oldest
first; the move and its button stay together and in view; warn before
a wasted move rather than after; let a move be typed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
2026-10-10 18:30:25 -04:00
Eric Wagoner and Claude Opus 5.5
f0d7237c2b
The rollup and the backup check in once, when they end, with the run's duration
...
A start and a finish sent seconds apart can reach Sentry in either order,
and a start that lands second is never closed, so a fast rollup was
reported as a timeout on nights it succeeded. Hnefatafl's monitor did so
nine nights in fifteen. One check-in at the end cannot race; a run that
hangs sends nothing and is marked missed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GwFKMuQnPAEHJ5yA1q4orh
2026-10-10 17:44:43 -04:00
Eric Wagoner and Claude Opus 5.5
567590464e
hall-announce --clear leaves an empty notice rather than no file, so no page's check is a failed request
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-10-05 21:55:28 -04:00
Eric Wagoner and Claude Opus 5.5
96ec6861d5
A notice the whole hall shows: hall-announce on the host, served by every game's site, shown at the top of each page
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 13:03:15 -04:00
Eric Wagoner and Claude Opus 5.5
294b1d5460
The drift check compares the contract, the room store and view, the tally, and the shared dialogs too
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:27:48 -04:00
Eric Wagoner and Claude Opus 5.5
59494aa29f
A settled move may be taken back as a draft while the round still waits on others
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:26:32 -04:00
Eric Wagoner and Claude Opus 5.5
af25b672f1
The README names the optional hooks a game may implement
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:25:49 -04:00
Eric Wagoner and Claude Opus 5.5
60b3c0e60a
A deploy waits for the game server to answer and fails with its journal if it does not; a report id is checked whole; the backup's notes say what it keeps
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:25:38 -04:00
Eric Wagoner and Claude Opus 5.5
f78ff3ef8c
The hall puts games in play first for someone coming back, finished ones further down, and reads a game looking up as looking, not unreachable
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:25:07 -04:00
Eric Wagoner and Claude Opus 5.5
f131f292ae
A dialog in a short window scrolls within it, the tabbed one stays put as its tabs change, and the report slip closes with Escape
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:21:27 -04:00
Eric Wagoner and Claude Opus 5.5
8ba02006ca
The server's doors hold: a ceiling on a seat's actions, twenty sockets an address, silent sockets closed, slow requests cut off, and rooms kept beside the project wherever it is started
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:20:55 -04:00
Eric Wagoner and Claude Opus 5.5
d97d709212
A game may count its own lines from every game begun, not only those finished
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:20:03 -04:00
Eric Wagoner and Claude Opus 5.5
403232087d
Bots that play on alone do it at a pace to watch, a round every two seconds after the first few, and a seat may hurry them to the end
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:19:38 -04:00
Eric Wagoner and Claude Opus 5.5
99a0b23f59
A game may give its bots words: they speak as a round opens and when spoken to, remember by notes nobody sees, and read the talk when they move
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:18:46 -04:00
Eric Wagoner and Claude Opus 5.5
8c99126aee
A table may ask each seat to rank its choices before the deal, in secret; the start line keeps the rankings and create reads them
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:17:18 -04:00
Eric Wagoner and Claude Opus 5.5
eca8c92964
Table talk may be private, to the seats named and never the gallery, and a line says the round it was said in
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:16:08 -04:00
Eric Wagoner and Claude Opus 5.5
8e35d3a3a6
A seat's view carries its own move in waiting and its move in the last round it played
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:15:05 -04:00
Eric Wagoner and Claude Opus 5.5
927e49cf79
A game may take drafts: an input it does not call settled can be replaced, and the round waits for settled ones
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:14:33 -04:00
Eric Wagoner and Claude Opus 5.5
6133a2469a
A table's options and its size are read one way, in spec.ts, by the server, the tally and the replay; a game may seat fewer for some options
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:13:54 -04:00
Eric Wagoner and Claude Opus 5.5
faa2845e70
A room whose ledger cannot be read is logged and left unloaded, not the server down; the server has tests of its own
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-29 12:13:11 -04:00
Eric Wagoner and Claude Opus 5.5
2810076677
The template's about panel is a TabbedDialog, opened by its address
...
About.svelte goes; #about opens the panel through the router, so it
closes and reopens cleanly and a tab can be linked to.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-28 14:49:39 -04:00
Eric Wagoner and Claude Opus 5.5
c3fca6c5c7
TabbedDialog and the boxed tab strip, as Dip has them; the tally's comment describes the tally
...
TabbedDialog keeps its own backdrop here, since the template has no
shared one; a game that has one may drop it. The template's hall still
opens its about panel with About.svelte.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-28 14:47:11 -04:00
Eric Wagoner and Claude Opus 5.5
6039b6c248
Tabs.svelte: the about panel's strip, shared with long reading pages
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-28 13:52:15 -04:00
Eric Wagoner and Claude Opus 5.5
c55534dbd6
dev:all stops both sides when the server's port is taken
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-28 13:43:15 -04:00
Eric Wagoner and Claude Opus 5.5
cf5af67505
npm run dev:all starts the server and the site together
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-28 12:37:56 -04:00
Eric Wagoner and Claude Opus 5.5
d10c17da9b
The about panel no longer credits its making
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-27 20:58:53 -04:00