wine-minesweeper/ was where this was built before it was a plugin, and it is
about to be deleted — it has no git remote, so its history lives on one machine
and nowhere else. Two things in it are still true and not captured here.
Why wine comes from Ubuntu rather than WineHQ: the distro package is older and
sufficient, and the alternative is a third-party apt source on a machine running
a wallet and a mail store, for a game. And that enabling i386 pulled four krb5
libraries forward, checked before installing rather than after — the one step
here that changes how the whole machine resolves packages, and one that
uninstalling the plugin never undoes.
Also the original verification baseline, which is useful for comparison when
something feels wrong: the board is 152x214, a synthetic click really does reach
the game, RFB 003.008, and cold start under two seconds excluding the prefix.
The shell prototype is not kept. What it knew is in sidecar/session.ts next to
the code that depends on it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043
Minesweeper X under wine on a headless display, as a plugin. It was
/api/minesweeper, a Dashboard screen, an officerdev panel, a permission
registry entry and a hand-written websocket provider in server.tsx.
The socket is why it had to live in the platform: Bun's route table is fixed
at serve(), so nothing installed later could add one. That ceiling is gone,
and this is the first plugin through the per-plugin relay.
Three things changed rather than moved:
The sidecar owns the session. The platform used to spawn bin/session.sh
detached, so the game outlived every restart, nothing supervised it, and a
crashed run left wine processes holding the prefix — the next start hung
rather than failed. PM2 supervises a sidecar, and stop() uses 'wineserver -k'
scoped by WINEPREFIX instead of 'pkill -f wineserver', which would have killed
every other wine prefix on the machine.
x11vnc moved from 127.0.0.1:5907 to a unix socket in a mode-0700 directory.
-nopw was only ever safe because of the machine, not the platform: any local
account could open that port and take the display. A fixed port is squattable
too. There is now no listener to authenticate against.
The wine prefix is confined to C:. This is the one that mattered. The platform
classified Minesweeper as kind:'execution' — never grantable — because a fresh
prefix maps the whole filesystem to Z: and symlinks the profile into the
owner's real home, and the game has Open and Save dialogs. A plugin permission
has no kind and is always grantable, so extracting it without this would have
converted a sealed capability into a file picker running as the owner.
Re-asserted on every start, because wine restores z: whenever it updates a
prefix.
Not solved: one display and one game, so two grantees share a board.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043