Compare commits

..
2 Commits
Author SHA1 Message Date
Jesse.MarkowitzandClaude Opus 5.5 8a29de54ee Docs: the StartOS package is the only place the game is served
The static site on the File Browser host was retired with the 0.4.9
line on 2026-09-29. README, TODO and the structure plan no longer
describe a site deploy as the release step or the zero-dependency rule
as what keeps the site a static upload.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019rwKTmug58sEsJ72AuWsEi
2026-10-07 06:05:59 -04:00
Jesse.MarkowitzandClaude Fable 5.1 d04f4c2fe4 Two documents catch up with the save rule
The quickstart's bug-reporting section told a player to save the game and send the file;
in a Competitive multiplayer game that button now waits for the end, so it says so and says
to note the Day and Stage instead. The route table in multiplayer.md gains `/api/save`,
which had been in the code since 0.8.0.10 and never in the table. No code, no version.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FrCWubm9GAftYCm2hWdKwK
2026-09-29 18:23:03 -04:00
5 changed files with 11 additions and 6 deletions
+1 -1
View File
@@ -91,7 +91,7 @@ station-master/
├── public/ ├── public/
│ ├── replays/ ← saved games published to the site's replay directory │ ├── replays/ ← saved games published to the site's replay directory
│ └── images/ ← art the build copies into the site │ └── images/ ← art the build copies into the site
├── scripts/ ← build and deploy the static site ├── scripts/ ← build the site the package serves (and a static-host deploy, unused since 2026-09-29)
├── src/ ├── src/
│ ├── engine/ ← pure rules engine: no I/O, no clock, deterministic from a seed │ ├── engine/ ← pure rules engine: no I/O, no clock, deterministic from a seed
│ ├── server/ ← the authoritative multiplayer server: lobby, sessions, persistence │ ├── server/ ← the authoritative multiplayer server: lobby, sessions, persistence
+5 -3
View File
@@ -54,9 +54,11 @@ Not items. Things that are true of every change, and that have gone wrong when s
- **Commits and tags are GPG-signed and I cannot make them.** Stage the work, write the message to - **Commits and tags are GPG-signed and I cannot make them.** Stage the work, write the message to
a file, hand over a `!` command. Tags must be `git tag -s` — a bare `git tag` makes a lightweight a file, hand over a `!` command. Tags must be `git tag -s` — a bare `git tag` makes a lightweight
tag and `git push --follow-tags` skips it *without any error*. tag and `git push --follow-tags` skips it *without any error*.
- **There is one line now.** The 0.4.9 playtest line was retired on 2026-09-29 (Jesse: "no longer - **There is one line and one place the game is served.** The 0.4.9 playtest line was retired on
being maintained"), so `npm run deploy:web` from this directory is the deploy. The public site 2026-09-29 (Jesse: "no longer being maintained"), and the static site on the File Browser host
serves the last 0.4.9h build until that is run once from `main`. with it: "the game is served on the StartOS service for station master." Releasing is the wrapper
bump and `make install`; there is no site deploy. `npm run deploy:web` stays in the repo only in
case a static host ever returns, and nothing depends on it.
- **The save check is the LAST thing before the tag, not a thing done during the work.** 0.8.2 - **The save check is the LAST thing before the tag, not a thing done during the work.** 0.8.2
replayed every server save, wrote "three resume, ten refuse" into its notes, and then put a card replayed every server save, wrote "three resume, ten refuse" into its notes, and then put a card
into the deck — and shipped with zero of thirteen resuming. Replay the server's saves against the into the deck — and shipped with zero of thirteen resuming. Replay the server's saves against the
+1
View File
@@ -245,6 +245,7 @@ special handling: `pump` stops, and the next push simply carries a `Menu` contai
POST /api/lobby/create, /api/lobby/join lobby POST /api/lobby/create, /api/lobby/join lobby
POST /api/intent { gameId, seq, intent } POST /api/intent { gameId, seq, intent }
GET /api/stream EventSource — per-seat frames, with Last-Event-ID resume GET /api/stream EventSource — per-seat frames, with Last-Event-ID resume
GET /api/save ?token= — the seat's own save; 403 SAVE_AFTER_FINISH in a running Competitive game
GET /api/health { ok, service, engineVersion, games } — unauthenticated; see below GET /api/health { ok, service, engineVersion, games } — unauthenticated; see below
GET /api/games every game and lobby, summarised ┐ GET /api/games every game and lobby, summarised ┐
GET /api/games/<id>/save the save, for keeping or replaying ├ ADMIN_SECRET GET /api/games/<id>/save the save, for keeping or replaying ├ ADMIN_SECRET
+1 -1
View File
@@ -110,4 +110,4 @@ Each extraction above names the test it makes possible:
- Do not refactor `render()` and fix a screen bug in the same commit. The audit's value was that - Do not refactor `render()` and fix a screen bug in the same commit. The audit's value was that
each finding could be verified against unchanged code. each finding could be verified against unchanged code.
- Do not introduce a framework or a runtime dependency to do any of this. The zero-dependency rule - Do not introduce a framework or a runtime dependency to do any of this. The zero-dependency rule
is what makes the package a 63 MB `.s9pk` and the site a static upload. is what keeps the package a 63 MB `.s9pk`.
+3 -1
View File
@@ -190,7 +190,9 @@ Please do report anything that looks like a bug or an area to be improved.
- **What you expected versus what happened**, with the Day and Stage. "Day 2 Stage 9, train 5 had - **What you expected versus what happened**, with the Day and Stage. "Day 2 Stage 9, train 5 had
no coaches" is worth more than "passengers seem broken". no coaches" is worth more than "passengers seem broken".
- **Save the game** (the **Save replay** button) and send the file. A save is the seed and the moves - **Save the game** (the **Save replay** button) and send the file. A save is the seed and the moves
made, so it replays exactly and the problem can be looked at directly. made, so it replays exactly and the problem can be looked at directly. In a Competitive
multiplayer game the button waits until the game is over, because the file carries the seed and
the seed is every rival's hand; note the Day and Stage and save it at the end.
- **Anything the screen did not explain.** If you had to guess a rule, that is worth saying even - **Anything the screen did not explain.** If you had to guess a rule, that is worth saying even
when the game was right. when the game was right.
- **Anything you went looking for and could not find.** - **Anything you went looking for and could not find.**