Commit Graph

  • 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 main Eric WagonerandClaude Fable 5.1 2026-10-29 11:22:35 -04:00
  • 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 Eric WagonerandClaude Fable 5.1 2026-10-29 10:37:40 -04:00
  • 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 Eric WagonerandClaude Fable 5.1 2026-10-27 17:36:19 -04:00
  • 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 Eric WagonerandClaude Fable 5.1 2026-10-26 22:38:08 -04:00
  • 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 Eric WagonerandClaude Fable 5.1 2026-10-26 17:32:23 -04:00
  • dcd2293b42 The template's lobby reads well with no KEEPER set: challenge the keeper, not the keeper, the keeper Eric WagonerandClaude Fable 5.1 2026-10-26 17:20:02 -04:00
  • cbe85d2d31 The template no longer links a favicon.ico it does not ship, which failed a new game's first build at prerender Eric WagonerandClaude Fable 5.1 2026-10-26 16:56:18 -04:00
  • 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 Eric WagonerandClaude Fable 5.1 2026-10-26 16:41:29 -04:00
  • 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 Eric WagonerandClaude Opus 5.5 2026-10-20 13:21:24 -04:00
  • 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 Eric WagonerandClaude Opus 5.5 2026-10-20 13:04:28 -04:00
  • 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 Eric WagonerandClaude Opus 5.5 2026-10-16 19:04:33 -04:00
  • 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 Eric WagonerandClaude Opus 5.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.1 2026-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.1 2026-10-11 20:59:53 -04:00
  • 7301e98802 The hall's Waving Hands card shows the duel in hands, not letters Eric WagonerandClaude Fable 5.1 2026-10-11 20:48:25 -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.1 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-10-11 10:18:10 -04:00
  • 169ec4ad55 Conventions: plain chrome, and how a move is made Eric WagonerandClaude Opus 5.5 2026-10-10 18:30:25 -04:00
  • f0d7237c2b The rollup and the backup check in once, when they end, with the run's duration Eric WagonerandClaude Opus 5.5 2026-10-10 17:44:43 -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.5 2026-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.5 2026-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.5 2026-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.5 2026-09-29 12:26:32 -04:00
  • af25b672f1 The README names the optional hooks a game may implement Eric WagonerandClaude Opus 5.5 2026-09-29 12:25:49 -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.5 2026-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.5 2026-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.5 2026-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.5 2026-09-29 12:20:55 -04:00
  • d97d709212 A game may count its own lines from every game begun, not only those finished Eric WagonerandClaude Opus 5.5 2026-09-29 12:20:03 -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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-09-29 12:13:11 -04:00
  • 2810076677 The template's about panel is a TabbedDialog, opened by its address Eric WagonerandClaude Opus 5.5 2026-09-28 14:49:39 -04:00
  • c3fca6c5c7 TabbedDialog and the boxed tab strip, as Dip has them; the tally's comment describes the tally Eric WagonerandClaude Opus 5.5 2026-09-28 14:47:01 -04:00
  • 6039b6c248 Tabs.svelte: the about panel's strip, shared with long reading pages Eric WagonerandClaude Opus 5.5 2026-09-28 13:52:15 -04:00
  • c55534dbd6 dev:all stops both sides when the server's port is taken Eric WagonerandClaude Opus 5.5 2026-09-28 13:43:15 -04:00
  • cf5af67505 npm run dev:all starts the server and the site together Eric WagonerandClaude Opus 5.5 2026-09-28 12:37:56 -04:00
  • d10c17da9b The about panel no longer credits its making Eric WagonerandClaude Opus 5.5 2026-09-27 20:58:53 -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.5 2026-09-27 20:48:05 -04:00
  • 813d111bbd The about panel is a dialog of tabs, as Wiz-War's is, not a wall of text Eric WagonerandClaude Opus 5.5 2026-09-27 20:40:39 -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.5 2026-09-27 09:59:36 -04:00
  • 5f11bec96d Dip joins the family Eric WagonerandClaude Opus 5.5 2026-09-27 01:29:26 -04:00
  • e521a66f5c A socket's own error closes that socket, not the server Eric WagonerandClaude Opus 5.5 2026-09-27 01:21:44 -04:00
  • 1dbf5763e1 The hall counts its visitors: a digest, a nightly rollup, and the games it sends people to Eric WagonerandClaude Opus 5.5 2026-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.5 2026-09-26 12:15:35 -04:00
  • 7268c3f1ae Kestrel's Hall moves into the kit and onto the shared host Eric WagonerandClaude Opus 5.5 2026-09-26 12:11:00 -04:00
  • a9c0f68cb1 Conventions: create receives the table options Eric WagonerandClaude Opus 5.5 2026-09-26 00:35:35 -04:00
  • 6aac3f9068 The space after Back to your game is kept Eric WagonerandClaude Opus 5.5 2026-09-25 22:56:48 -04:00
  • 7f340698d5 A move names the round it was made for; a stale one is refused Eric WagonerandClaude Opus 5.5 2026-09-25 22:19:43 -04:00
  • af5a8518c7 The Slack alert script carries the workspace's Slack integration id Eric WagonerandClaude Opus 5.5 2026-09-25 17:19:23 -04:00
  • bc5f93c2fa The kit sets games up on the shared hall host Eric WagonerandClaude Opus 5.5 2026-09-25 16:49:03 -04:00
  • cd9d14ec35 The voice: every game speaks in its own world Eric WagonerandClaude Opus 5.5 2026-09-24 23:57:59 -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.1 2026-09-23 21:04:28 -04:00
  • 2d78ab6b3f The about panel says the games are free and where the hosting tip jar is Eric WagonerandClaude Fable 5.1 2026-09-23 20:25:02 -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.1 2026-09-23 20:12:37 -04:00
  • 6c42e55f59 The collection is Kestrel's Hall Eric WagonerandClaude Fable 5.1 2026-09-23 19:50:27 -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.1 2026-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.1 2026-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.1 2026-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.1 2026-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.1 2026-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.1 2026-09-23 18:16:41 -04:00
  • 1f412a2440 app.html links the touch icon Eric Wagoner 2026-09-23 15:48:39 -04:00
  • 151bc81aeb new-game.sh names the share card and touch icon a game must add Eric Wagoner 2026-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.1 2026-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.1 2026-09-23 13:42:02 -04:00
  • e8b6510bf0 Hnefatafl joins the family Eric Wagoner 2026-09-23 13:38:55 -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.1 2026-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.1 2026-09-23 12:45:42 -04:00
  • 2ab6dc4b5f A favicon in the HTML itself, with the file in static Eric WagonerandClaude Fable 5.1 2026-09-23 12:32:58 -04:00
  • d4a2b2a84e The keeper's hour reads with a space, and noon and midnight by name Eric WagonerandClaude Fable 5.1 2026-09-23 12:27:50 -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.1 2026-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.1 2026-09-23 12:19:03 -04:00
  • 65d62f2ab3 deploy.sh ships the token migration Eric Wagoner 2026-09-23 12:08:26 -04:00
  • c934bbe434 Hashed seat tokens, ledgered inputs, refusable moves, disk-checked codes, host-only bots, and a drift script Eric WagonerandClaude Fable 5.1 2026-09-23 12:07:53 -04:00
  • ddb18cb08a The host begins at every table size and may send a bot away Eric WagonerandClaude Fable 5.1 2026-09-23 11:21:42 -04:00
  • 457a536f58 The demo bot draws from the seed, the round and the seat Eric Wagoner 2026-09-23 11:01:32 -04:00
  • f1c9b29e66 new-game.sh installs the server's packages too Eric Wagoner 2026-09-23 11:00:52 -04:00
  • 69b7273627 A plain favicon for the template Eric Wagoner 2026-09-23 11:00:18 -04:00
  • 1cd24e3ddd The game kit: the shared infrastructure of Wiz-War and Waving Hands as a template Eric WagonerandClaude Fable 5.1 2026-09-23 11:00:05 -04:00