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
main
Eric WagonerandClaude Opus 5.52026-10-13 18:31:36 -04:00
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
Eric WagonerandClaude Opus 5.52026-10-13 18:27:13 -04:00
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
Eric WagonerandClaude Opus 5.52026-10-13 18:22:54 -04:00
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
Eric WagonerandClaude Opus 5.52026-10-13 18:20:36 -04:00
98e61dc756
The hosting line says what it promises: chipping in unlocks nothing, and nothing is held back without it
Eric WagonerandClaude Opus 5.52026-10-13 09:23:44 -04:00
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
Eric WagonerandClaude Fable 5.12026-10-12 10:07:05 -04:00
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
Eric WagonerandClaude Fable 5.12026-10-11 20:59:53 -04:00
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
Eric WagonerandClaude Fable 5.12026-10-11 20:41:55 -04:00
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
Eric WagonerandClaude Opus 5.52026-10-11 11:39:32 -04:00
0456ac39f1
Dip's new tagline in the family, and the writing rules learned from the Dip and Wiz-War passes
Eric WagonerandClaude Opus 5.52026-10-11 11:31:20 -04:00
bbbe8ec312
Writing for players: the editing passes' lessons, and the template written by them
Eric WagonerandClaude Opus 5.52026-10-11 10:34:08 -04:00
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
Eric WagonerandClaude Opus 5.52026-10-11 10:18:10 -04:00
567590464e
hall-announce --clear leaves an empty notice rather than no file, so no page's check is a failed request
Eric WagonerandClaude Opus 5.52026-10-05 21:55:28 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 13:03:15 -04:00
294b1d5460
The drift check compares the contract, the room store and view, the tally, and the shared dialogs too
Eric WagonerandClaude Opus 5.52026-09-29 12:27:48 -04:00
59494aa29f
A settled move may be taken back as a draft while the round still waits on others
Eric WagonerandClaude Opus 5.52026-09-29 12:26:32 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 12:25:38 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 12:25:07 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 12:21:27 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 12:20:55 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 12:19:38 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 12:18:46 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 12:17:18 -04:00
eca8c92964
Table talk may be private, to the seats named and never the gallery, and a line says the round it was said in
Eric WagonerandClaude Opus 5.52026-09-29 12:16:08 -04:00
8e35d3a3a6
A seat's view carries its own move in waiting and its move in the last round it played
Eric WagonerandClaude Opus 5.52026-09-29 12:15:05 -04:00
927e49cf79
A game may take drafts: an input it does not call settled can be replaced, and the round waits for settled ones
Eric WagonerandClaude Opus 5.52026-09-29 12:14:33 -04:00
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
Eric WagonerandClaude Opus 5.52026-09-29 12:13:54 -04:00
faa2845e70
A room whose ledger cannot be read is logged and left unloaded, not the server down; the server has tests of its own
Eric WagonerandClaude Opus 5.52026-09-29 12:13:11 -04:00
c3fca6c5c7
TabbedDialog and the boxed tab strip, as Dip has them; the tally's comment describes the tally
Eric WagonerandClaude Opus 5.52026-09-28 14:47:01 -04:00
7207cd9c29
The tally is told as Wiz-War tells it: the game's own story on cards, then the ledgers in detail
Eric WagonerandClaude Opus 5.52026-09-27 20:48:05 -04:00
ae904aa88c
Traffic counts what matters: rooms opened from the site, where links were shared, scanners and monitors as bots
Eric WagonerandClaude Opus 5.52026-09-27 09:59:36 -04:00
1dbf5763e1
The hall counts its visitors: a digest, a nightly rollup, and the games it sends people to
Eric WagonerandClaude Opus 5.52026-09-26 12:41:55 -04:00
8ab1e0b794
The hall seats Dip: a card of its own chart, four games two by two, and a new share image
Eric WagonerandClaude Opus 5.52026-09-26 12:15:35 -04:00
bce01a013a
The family list knows the hall: about panels link to gamehall.kestrelsnest.social, and a new game gets a card there
Eric WagonerandClaude Fable 5.12026-09-23 21:04:28 -04:00
33ac0ec808
The credibility pass on Hnefatafl, ported to the template: the ops scripts count traffic through one parser, the reports digest is one program, the plaintext-token fallback and its migration are gone, and the stylesheet holds each shared rule once
Eric WagonerandClaude Fable 5.12026-09-23 20:12:37 -04:00
baab21a0a7
The guide and the rules page keep the room they were opened from, and carry it to each other and back
Eric WagonerandClaude Fable 5.12026-09-23 19:13:11 -04:00
c0254e3fe9
The hall's table selectors read from and write to the preferences, so the panel and the hall agree
Eric WagonerandClaude Fable 5.12026-09-23 18:58:18 -04:00
74df9a253a
Every table option is also a preference: the choice a new table starts with, shown in the panel
Eric WagonerandClaude Fable 5.12026-09-23 18:57:25 -04:00
3825dfb44c
Preferences: a panel of what the browser remembers about its player, with the kit's motion and confirm-move settings, a game's own declarations, and the host's last table options as defaults
Eric WagonerandClaude Fable 5.12026-09-23 18:54:22 -04:00
de430c3794
A note under each table option while it is chosen, and the rules page offers the way back to the game it was opened from
Eric WagonerandClaude Fable 5.12026-09-23 18:48:57 -04:00
7aa05536c2
The tally: what the ledgers add up to, in every game's about panel, with the game's own lines through GameSpec.tally
Eric WagonerandClaude Fable 5.12026-09-23 18:16:41 -04:00
151bc81aeb
new-game.sh names the share card and touch icon a game must add
Eric Wagoner2026-09-23 15:46:58 -04:00
ef617a50c2
A bot whose move opens the game, or is owed after a restore, plays it at once; the over line is written once
Eric WagonerandClaude Fable 5.12026-09-23 14:37:39 -04:00
23b72ddc6d
The ledger gate replays with the table's options, and takes the site from SITE for a machine whose DNS lags
Eric WagonerandClaude Fable 5.12026-09-23 13:42:02 -04:00
b92c7db4b6
setup-droplet.sh hands the validated access log to Caddy and restarts it; the kit's first droplet found the log owned by root
Eric WagonerandClaude Fable 5.12026-09-23 13:16:02 -04:00
63bd154798
Table options: the host's choices when opening a table, declared by the game, recorded on the room line
Eric WagonerandClaude Fable 5.12026-09-23 12:45:42 -04:00
e846ddedc4
The family list: every game of the Kestrel's Nest in one file, shown in each game's about panel
Eric WagonerandClaude Fable 5.12026-09-23 12:26:46 -04:00
6dce3b82f0
Rematches, seats that travel by phrase, the keeper's bell with the hour where they live, the host's leave for the gallery to talk, and seats doubted before they are dropped
Eric WagonerandClaude Fable 5.12026-09-23 12:19:03 -04:00