A duel server: rooms, seat tokens, ledgers, and resolution when all have moved

Plain HTTP for actions and a websocket that only says "fetch again". A
room is its append-only ledger replayed from the top; the engine is
deterministic given the seed and the recorded inputs. Each seat sees a
view filtered to what the rules let it know. Bot seats are filled at
resolution time.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Eric Wagoner
2026-09-22 16:54:29 -04:00
co-authored by Claude Fable 5.1
parent 95a1915cae
commit 8366c9d7ff
11 changed files with 1024 additions and 4 deletions
+7
View File
@@ -14,6 +14,13 @@ export default defineConfig({
adapter: adapter({ fallback: 'index.html' })
})
],
server: {
// In development the duel server runs beside Vite; in production Caddy does this.
proxy: {
'/api': 'http://localhost:8788',
'/ws': { target: 'ws://localhost:8788', ws: true }
}
},
test: {
include: ['src/**/*.test.ts']
}