Bundle Station Master v0.5.2, and fix the package version scheme

Submodule pin moves to v0.5.2, which carries the working splash-page
multiplayer door and the GET /api/health probe behind it.

The interface goes back to serving `/` — the splash, which is the front
door to all three ways to play. It pointed at /play.html only because the
splash's multiplayer door was hardcoded to "Coming soon", making the front
page a dead end on a real server; v0.5.2 removes the reason for the
workaround. The splash now probes /api/health on load, so served from here
it opens the lobby and served as a plain static site it says plainly that
it needs a server.

The package version was wrong and is corrected: 1.0.0:0 -> 0.5.2:0. That
1.0.0 was the scaffold's placeholder, left in by mistake — versions.md's
consistency checklist requires the upstream half to match the bundled tag,
which is what makes "bump the pin, bump the version" one mechanical action
rather than a judgement call. No historical version file is needed: the
placeholder carried no migration and was never published anywhere.

The correction is a downgrade in ExVer terms, so StartOS refused to install
over the existing copy ("uninit target range `!` is unsatisfiable"). The
installed package was therefore removed and reinstalled — checked first
that the volume held only an auto-generated join secret and no games. Two
consequences, both one-time and both recorded in UPDATING.md: the join
secret is regenerated, and the host's public domain binding was dropped
with the uninstall and has to be re-added.

Verified on phoenix.local: builds as v0.5.2:0, installs, starts, and serves
/api/health 200 with the right body; the splash carries all three doors
including a live ./play.html?lobby, no "Coming soon" anywhere, all three
ids the probe addresses present, and #lobby rendering on play.html?lobby.
This commit is contained in:
Jesse
2026-08-21 11:13:40 -04:00
parent 278bbcf51c
commit ea012f1329
5 changed files with 40 additions and 26 deletions
+10 -4
View File
@@ -29,10 +29,16 @@ cd station-master && git fetch --tags && git checkout v<new version>
cd .. && git add station-master
```
Then bump this package's own version in `startos/versions/current.ts` (see
[Versions](../start-technologies/projects/start-sdk/docs/src/versions.md)) with release notes
naming the Station Master version now bundled — e.g. "Bundles Station Master v0.5.2." — and
rebuild (`make`).
Then set this package's version in `startos/versions/current.ts` to **the same number**, as
`<tag>:0` — `versions.md`'s consistency checklist requires the upstream half to match the
submodule tag exactly, so v0.5.3 becomes `0.5.3:0`. Give it release notes naming what changed for
a player, then rebuild (`make`). Raise the `:0` instead, leaving the upstream half alone, when the
change is packaging-only and the bundled game has not moved.
> The initial release shipped as `1.0.0:0` — the scaffold's placeholder, left in by mistake while
> the game was at 0.5.1. It was corrected to `0.5.2:0` before the package was ever published
> anywhere, which is the only reason a downgrade was harmless: `0.5.2:0` sorts *below* `1.0.0:0`,
> so an installed copy had to be removed rather than updated over.
If the jump carries a multiplayer protocol or persistence-format change (check the game repo's
`CHANGELOG.md` and `docs/architecture/multiplayer.md`), read it before bumping: a running
+14 -9
View File
@@ -14,21 +14,26 @@ interface below; there is nothing else to install or configure on a player's sid
## Getting set up
1. Open this service's **Multiplayer Table** interface.
2. Run the **Get Join Secret** action from this service's Actions menu, and copy the value it
1. Run the **Get Join Secret** action from this service's Actions menu, and copy the value it
returns.
3. Share that secret, and the address you opened the interface at, with everyone you want to
play with. Anyone holding the secret can create a new game or join one that hasn't started yet.
4. In the browser, click **Multiplayer**, then **Create Game** (or **Join Game** with a game code
someone else created), and enter the join secret when asked.
2. Share that secret, and this service's address, with everyone you want to play with. Anyone
holding the secret can create a new game or join one that hasn't started yet.
3. Open this service's **Multiplayer Table** interface. You'll land on the front page, which
offers three ways in: solitaire, the replay viewer, and multiplayer.
4. Click **Play multiplayer**, then **Create Game** (or **Join Game** with a game code someone
else created), and enter the join secret when asked.
## Using Station Master
### Multiplayer Table
Create or join a game, seat players (including filling empty seats with a bot), and start. Once a
game is underway, this same interface is where every player plays their turns and watches the
table — there is nothing else to open.
The front page offers solitaire, the replay viewer, and multiplayer. **Play multiplayer** takes you
to the lobby: create or join a game, seat players (including filling empty seats with a bot), and
start. Once a game is underway, this same interface is where every player plays their turns and
watches the table — there is nothing else to open.
Solitaire runs entirely in your own browser and needs nothing from the server, so it works here
exactly as it does on the public Station Master site.
### Get Join Secret
+6 -6
View File
@@ -18,12 +18,12 @@ export const setInterfaces = sdk.setupInterfaces(async ({ effects }) => {
masked: false,
schemeOverride: null,
username: null,
// `/` serves index.html — the game's marketing splash, identical to the public static
// solitaire site and with no lobby or Multiplayer button on it (both live on play.html; see
// src/web/main.ts's `start()` and the door link in index.html). That page makes sense for a
// stranger landing on the public site, not for someone who just installed a dedicated
// multiplayer server — so this interface opens straight at the game screen instead.
path: '/play.html',
// The splash at `/`, which is the front door to all three ways to play: solitaire, the
// replay viewer, and multiplayer. Its multiplayer door probes `/api/health` on load, so
// served from here it opens the lobby, and served as a plain static site it says plainly
// that it needs a server. This briefly pointed at `/play.html` instead, back when that door
// was hardcoded to "Coming soon" and the splash was a dead end on a real server.
path: '',
query: {},
})
+9 -6
View File
@@ -1,13 +1,16 @@
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'
export const current = VersionInfo.of({
version: '1.0.0:0',
// `<upstream>:<downstream>` — the upstream half tracks the bundled Station Master tag exactly
// (`versions.md`'s consistency checklist), so bumping the submodule pin and bumping this are one
// action. The downstream half moves only for packaging-only changes.
version: '0.5.2:0',
releaseNotes: {
en_US: 'Initial StartOS package, bundling Station Master v0.5.1.',
es_ES: 'Paquete inicial para StartOS, con Station Master v0.5.1.',
de_DE: 'Erstes StartOS-Paket, mit Station Master v0.5.1.',
pl_PL: 'Pierwszy pakiet dla StartOS, zawiera Station Master v0.5.1.',
fr_FR: 'Premier paquet StartOS, avec Station Master v0.5.1.',
en_US: 'Bundles Station Master v0.5.2: the splash page opens the multiplayer lobby.',
es_ES: 'Incluye Station Master v0.5.2: la página de inicio abre la sala multijugador.',
de_DE: 'Enthält Station Master v0.5.2: Die Startseite öffnet die Mehrspieler-Lobby.',
pl_PL: 'Zawiera Station Master v0.5.2: strona powitalna otwiera poczekalnię trybu wieloosobowego.',
fr_FR: "Inclut Station Master v0.5.2 : la page d'accueil ouvre le salon multijoueur.",
},
migrations: {
up: async ({ effects }) => {},