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
This commit is contained in:
Eric Wagoner
2026-09-29 12:20:55 -04:00
co-authored by Claude Opus 5.5
parent d97d709212
commit 8ba02006ca
+5 -2
View File
@@ -170,8 +170,11 @@ One Node process per game, on its own port, run from source with `tsx` as
a sandboxed systemd service, behind Caddy `handle` blocks that route `/api` a sandboxed systemd service, behind Caddy `handle` blocks that route `/api`
and `/ws` before the static files. Rooms in memory are evicted after a week and `/ws` before the static files. Rooms in memory are evicted after a week
idle and come back from disk on the next visit. Rate limits sit on the doors idle and come back from disk on the next visit. Rate limits sit on the doors
a stranger can knock on (rooms, seats, talk, the desk); a table of friends a stranger can knock on (rooms, seats, talk, the desk), and a looser one
never nears them. A seat token is minted once, sent once, and compared by on a seat's own actions, each a ledger line; a table of friends never nears
them. An address holds at most twenty sockets, a socket that stops
answering pings is closed, and a request has seconds, not minutes, to
arrive. A seat token is minted once, sent once, and compared by
hash in constant time ever after; a shared link carries none. Room codes hash in constant time ever after; a shared link carries none. Room codes
are checked against the disk as well as memory, so an evicted room's code are checked against the disk as well as memory, so an evicted room's code
is never reissued over its ledger. A game may refuse a move with a reason is never reissued over its ledger. A game may refuse a move with a reason