demo: StarshipOS in a browser -- a throwaway machine per visitor, as Zuse #118

Open
rajames wants to merge 2 commits from StarForth-v4.0.0 into master
Owner

What and why

StarshipOS in a browser: each visitor gets a StarshipOS machine of their own, logged in as a Zuse
minted for the demo, at its prompt 0.2 s after the page connects, gone when they leave. Captain
Bob, 2026-11-06: a terminal with QEMU amd64 for people to play with; "Mint Zuse for demo
console"
(#111); "Make the most recent of builds that's green the demo"; a Try-it XWiki page
with the console embedded.

demo/ -- its README says how the pieces fit: the demo's own Zuse (mint-zuse.sh), the ISO, the
saved machine (make-snapshot.sh), the session (start-session.sh, console.py), the ttyd
service, an example Apache vhost and the XWiki page.

Closes #112, #113, #114

Acceptance

The Acceptance check runs on this PR by itself. The demo does not change the build: it only
uses what the build makes.

  • Logs from runs made by hand are committed in logs/: the demo Zuse's two minting boots,
    logs/20261106-192626 (genesis minted) and -192739 (identity confirmed)
  • Tested in a container (demo/README.md, Tested): the saved machine at POST 538/538 and
    [zuse@Hera] ok>; a session through ttyd's websocket, 3 4 + . -> 7 ok; QEMU gone at once on
    hang-up, close and time-out
  • Not tested here: Apache (#115), several sessions at once (#116), the XWiki page (#117)

The record

  • docs/fabric/FABRIC-3.md -- the demo is not yet in the record
  • CHANGELOG.md, when the demo is live
  • Nothing in this PR is a fix nobody asked for

🤖 Generated with Claude Code

https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2

## What and why StarshipOS in a browser: each visitor gets a StarshipOS machine of their own, logged in as a Zuse minted for the demo, at its prompt 0.2 s after the page connects, gone when they leave. Captain Bob, 2026-11-06: a terminal with QEMU amd64 for people to play with; *"Mint Zuse for demo console"* (#111); *"Make the most recent of builds that's green the demo"*; a Try-it XWiki page with the console embedded. `demo/` -- its README says how the pieces fit: the demo's own Zuse (`mint-zuse.sh`), the ISO, the saved machine (`make-snapshot.sh`), the session (`start-session.sh`, `console.py`), the ttyd service, an example Apache vhost and the XWiki page. Closes #112, #113, #114 ## Acceptance The **Acceptance** check runs on this PR by itself. The demo does not change the build: it only uses what the build makes. - [x] Logs from runs made by hand are committed in `logs/`: the demo Zuse's two minting boots, `logs/20261106-192626` (genesis minted) and `-192739` (identity confirmed) - [x] Tested in a container (`demo/README.md`, *Tested*): the saved machine at POST 538/538 and `[zuse@Hera] ok>`; a session through ttyd's websocket, `3 4 + .` -> `7 ok`; QEMU gone at once on hang-up, close and time-out - [ ] Not tested here: Apache (#115), several sessions at once (#116), the XWiki page (#117) ## The record - [ ] `docs/fabric/FABRIC-3.md` -- the demo is not yet in the record - [ ] `CHANGELOG.md`, when the demo is live - [x] Nothing in this PR is a fix nobody asked for 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
rajames added 2 commits 2026-11-06 20:34:29 +00:00
Captain Bob, 2026-11-06: a terminal with QEMU amd64 for people to play
with; "Mint Zuse for demo console" (#111); "Make the most recent of
builds that's green the demo"; a Try-it XWiki page with the console
embedded.

demo/ -- see its README:
  mint-zuse.sh       a Zuse of the demo's own, as a stick: blank pair,
                     system=v3 genesis, a second boot to confirm, make
                     zusestick. Never anyone's real Zuse
  build-iso.sh       the amd64 ISO, packed as make qemu packs it
  make-snapshot.sh   boot once to [zuse@Hera] ok>, save the machine
  start-session.sh   one visitor: the saved machine resumed, ended on
                     hang-up, close or time-out
  console.py         joins the visitor's terminal only once the machine
                     runs; keys typed while it loads are discarded
  qemu-args.sh       the machine, shared by save and resume
  starshipos-demo.service, apache-demo.conf, xwiki-try-it.xwiki

Every session is a copy: no network, read-only image, the Zuse stick's
writes discarded, QEMU's seccomp sandbox, an unprivileged user, a
fenced systemd unit, 30 minutes at most.

Tested here, from the sources master accepted (run 153): the Zuse
minted (logs/20261106-192626, -192739); the saved machine at POST
538/538 and [zuse@Hera] ok>; a session through ttyd's websocket ready
in 0.2 s, 3 4 + . -> 7 ok, 7 SQUARE . -> 49 ok; QEMU gone at once on
hang-up, close and time-out. Found and fixed on the way: a machine
saved stopped resumes stopped; a prompt matched as a regex; QEMU left
behind by a hang-up; keys lost while the machine loads. Not tested
here: Apache, several sessions at once (#116).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Merge master into StarForth-v4.0.0: #110's merge commit, so the demo's PR is up to date
Build / Image RASPI (push) Waiting to run
Build / Image PC (push) Waiting to run
Build / Image MILKV (push) Waiting to run
Build / v4 tests (32- and 64-bit cells) (push) Waiting to run
Acceptance / Acceptance (pull_request) Canceled after 0s
4f6a267be4
master's only commit not on the branch is 82804f27, the merge of #110, whose tree is the
branch's own 810d02eb.
rajames added 2 commits 2026-11-06 20:34:29 +00:00
Captain Bob, 2026-11-06: a terminal with QEMU amd64 for people to play
with; "Mint Zuse for demo console" (#111); "Make the most recent of
builds that's green the demo"; a Try-it XWiki page with the console
embedded.

demo/ -- see its README:
  mint-zuse.sh       a Zuse of the demo's own, as a stick: blank pair,
                     system=v3 genesis, a second boot to confirm, make
                     zusestick. Never anyone's real Zuse
  build-iso.sh       the amd64 ISO, packed as make qemu packs it
  make-snapshot.sh   boot once to [zuse@Hera] ok>, save the machine
  start-session.sh   one visitor: the saved machine resumed, ended on
                     hang-up, close or time-out
  console.py         joins the visitor's terminal only once the machine
                     runs; keys typed while it loads are discarded
  qemu-args.sh       the machine, shared by save and resume
  starshipos-demo.service, apache-demo.conf, xwiki-try-it.xwiki

Every session is a copy: no network, read-only image, the Zuse stick's
writes discarded, QEMU's seccomp sandbox, an unprivileged user, a
fenced systemd unit, 30 minutes at most.

Tested here, from the sources master accepted (run 153): the Zuse
minted (logs/20261106-192626, -192739); the saved machine at POST
538/538 and [zuse@Hera] ok>; a session through ttyd's websocket ready
in 0.2 s, 3 4 + . -> 7 ok, 7 SQUARE . -> 49 ok; QEMU gone at once on
hang-up, close and time-out. Found and fixed on the way: a machine
saved stopped resumes stopped; a prompt matched as a regex; QEMU left
behind by a hang-up; keys lost while the machine loads. Not tested
here: Apache, several sessions at once (#116).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Merge master into StarForth-v4.0.0: #110's merge commit, so the demo's PR is up to date
Build / Image RASPI (push) Waiting to run
Build / Image PC (push) Waiting to run
Build / Image MILKV (push) Waiting to run
Build / v4 tests (32- and 64-bit cells) (push) Waiting to run
Acceptance / Acceptance (pull_request) Canceled after 0s
4f6a267be4
master's only commit not on the branch is 82804f27, the merge of #110, whose tree is the
branch's own 810d02eb.
Some required checks failed
Build / Image RASPI (push) Waiting to run
Build / Image PC (push) Waiting to run
Build / Image MILKV (push) Waiting to run
Build / v4 tests (32- and 64-bit cells) (push) Waiting to run
Acceptance / Acceptance (pull_request) Canceled after 0s
Required
Details
Some required checks were not successful.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin StarForth-v4.0.0:StarForth-v4.0.0
git checkout StarForth-v4.0.0
Sign in to join this conversation.