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
This commit is contained in:
Eric Wagoner
2026-10-13 18:27:13 -04:00
co-authored by Claude Opus 5.5
parent 4721b0e97b
commit 7b4080c91f
5 changed files with 41 additions and 8 deletions
+3 -2
View File
@@ -1,5 +1,5 @@
<script lang="ts">
import { goto, replaceState } from '$app/navigation';
import { goto } from '$app/navigation';
import { page } from '$app/state';
import Board from '$lib/components/Board.svelte';
import Lobby from '$lib/components/Lobby.svelte';
@@ -33,7 +33,8 @@
room = null;
error = '';
const sent = seatInLink(location.hash);
if (sent) replaceState(location.pathname + location.search, {});
// The browser's own call: this runs as the page first loads, before the router could take one.
if (sent) history.replaceState(history.state, '', location.pathname + location.search);
const held = seatFor(id);
const take = (s: HeldSeat) =>
Room.resume(id, s).then((r) => {