From 5690d2980bde462cdf0edee36520042b1236ceb4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 03:38:39 +0000 Subject: [PATCH 01/19] ci: the nightly's proofs run last, and cannot hold back the images Nightly 174 passed acceptance, then Isabelle was killed building HOL-Library (exit 137, out of memory on the runner), and the images were never built or published. The proofs check the theories, not the images: they now run after the publish, whatever happened before them, and a failure still turns the run red. Their log stays in the run's logs artifact. A release still runs them before it publishes. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- .gitea/workflows/nightly.yml | 19 ++++++++++++------- scripts/nightly.sh | 6 ++++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/.gitea/workflows/nightly.yml b/.gitea/workflows/nightly.yml index 709694d4..7a3d89d3 100644 --- a/.gitea/workflows/nightly.yml +++ b/.gitea/workflows/nightly.yml @@ -1,12 +1,15 @@ -# Nightly snapshot of the kernel images: the acceptance protocol, the proofs, the board images, -# then Nexus. Each stage is a step of scripts/nightly.sh (its header says what each does); any -# failure stops the run, and nothing is published unless every stage before it passed. +# Nightly snapshot of the kernel images: the acceptance protocol, the board images, Nexus, then +# the proofs. Each stage is a step of scripts/nightly.sh (its header says what each does); any +# failure stops the run, and nothing is published unless every stage before it passed. The proofs +# come last and run whatever happened before them: they check the theories, not the images, so a +# failed proof does not hold back images that passed acceptance -- it turns the run red. # # org.starship:kernelImage:-SNAPSHOT, starshipos-snapshots # classifier pc StarshipOS.iso amd64, UEFI -- the ISO the amd64 acceptance boot booted # classifier raspi5 raspi5.img.xz Raspberry Pi 5, for Raspberry Pi Imager # classifier milkv MilkV.img.xz Milk-V Mars -# classifier logs logs.tar.gz this run's serial logs, proof log and DoE CSVs +# classifier logs logs.tar.gz this run's serial logs and DoE CSVs (the proof log is in +# the run's logs artifact) # # Gitea runs a schedule from the default branch, master, so this builds master. name: Nightly snapshot @@ -22,7 +25,7 @@ concurrency: jobs: nightly: - name: Acceptance, proofs, images + name: Acceptance, images, proofs runs-on: ubuntu-latest container: image: gitea.starshipos-f18.org/rajames/lithosananke-runner:72b6cf370db1 # ci/runner-image (#120) @@ -46,8 +49,6 @@ jobs: run: scripts/nightly.sh accept stick-high - name: Acceptance 32-bit build run: scripts/nightly.sh test-32 - - name: Isabelle/HOL proofs - run: scripts/nightly.sh proofs - name: Images run: scripts/nightly.sh images @@ -64,6 +65,10 @@ jobs: name: kernel-images-${{ github.run_number }} path: build/nightly/ + - name: Isabelle/HOL proofs + if: always() + run: scripts/nightly.sh proofs + - name: Keep the logs and DoE CSVs if: always() uses: actions/upload-artifact@v3 diff --git a/scripts/nightly.sh b/scripts/nightly.sh index a749fc85..02d4ceeb 100755 --- a/scripts/nightly.sh +++ b/scripts/nightly.sh @@ -3,7 +3,8 @@ # images, the documents, and Nexus. One stage per call; the workflows run each as a step # (.gitea/workflows/nightly.yml, release.yml, nightly-docs.yml). # -# The images, in this order (any failure ends the run; nothing is published after it): +# The images, in this order (any failure ends the run; nothing is published after it) -- except +# that the nightly runs the proofs last, whatever happened before them (nightly.yml says why): # # scripts/nightly.sh accept # One boot of the acceptance protocol (.claude/CLAUDE.md), in the foreground, one QEMU at a @@ -27,7 +28,8 @@ # scripts/nightly.sh publish # org.starship:kernelImage: to that Maven repository, in one deploy (one # timestamp): classifier pc (iso), raspi5 and milkv (img.xz), and logs (tar.gz: this -# run's serial logs, proof log and DoE CSVs -- the evidence for the rest). +# run's serial logs and DoE CSVs -- the evidence for the rest; and the proof log, when the +# proofs ran before it, as a release runs them). # # The documents (a separate pipeline): # From 4ae1f759d55b4ed3b76b3443ebfdab070cc48c33 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 03:41:34 +0000 Subject: [PATCH 02/19] ci: HOL-Library built into the runner image Measured here (Isabelle2025-2, one thread): HOL-Library from scratch takes ~11 minutes and peaks at ~5.3 GiB -- what nightly 174 was killed doing; the StarForth session on a built HOL-Library takes under a minute and ~2.2 GiB. The image builds HOL-Library once into Isabelle's own heaps, so every job finds it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- ci/runner-image/Dockerfile | 7 ++++++- scripts/nightly.sh | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ci/runner-image/Dockerfile b/ci/runner-image/Dockerfile index 542b73de..2270dda6 100644 --- a/ci/runner-image/Dockerfile +++ b/ci/runner-image/Dockerfile @@ -1,7 +1,8 @@ # The CI runner image (#120): gitea/runner-images' Ubuntu 24.04 with Node -- which # actions/checkout and upload-artifact run on -- plus everything the jobs install at their start: # what `make ARCH=amd64,aarch64,riscv64 init INIT_DOCS=0` installs (taken from the Makefile -# itself, not copied, so the two cannot drift), and Maven and a JRE for the publish steps. +# itself, not copied, so the two cannot drift), Maven and a JRE for the publish steps, and +# Isabelle's HOL-Library already built, for the proofs. # # Built by .gitea/workflows/runner-image.yml, from a context of the Makefile, boards/ and this file. FROM gitea/runner-images:ubuntu-24.04-v26.11.03 @@ -11,4 +12,8 @@ WORKDIR /opt/starship-init RUN make --no-print-directory ARCH=amd64,aarch64,riscv64 init INIT_DOCS=0 \ && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq maven default-jre-headless \ && rm -rf /var/lib/apt/lists/* /opt/starship-init/build/cache/downloads +# HOL-Library, built once here, into Isabelle's own heaps (system_heaps), so the nightly's proofs +# build only the StarForth session: ~2.2 GiB and under a minute, where HOL-Library from scratch +# takes ~5.3 GiB and ~11 minutes -- more than the runner had (nightly 174, killed). +RUN isabelle build -b -o system_heaps -o threads=1 HOL-Library WORKDIR / diff --git a/scripts/nightly.sh b/scripts/nightly.sh index 02d4ceeb..0b51dd10 100755 --- a/scripts/nightly.sh +++ b/scripts/nightly.sh @@ -17,7 +17,8 @@ # make -C v4 test-32: v4 with 32-bit cells, every test (the acceptance's last part). # scripts/nightly.sh proofs # isabelle build -c -D proof/: the StarForth session checked afresh every run, whatever is -# cached (HOL-Library is reused); its log is logs//isabelle/, as a boot's is. +# cached (HOL-Library is reused: the CI image has it built, ci/runner-image); its log is +# logs//isabelle/, as a boot's is. # scripts/nightly.sh images # The board images, into build/nightly/: # raspi5.img.xz Raspberry Pi 5 (make boot_image TARGET=RASPI), for Raspberry Pi Imager From 03027f976916de3930b89b01cb9c1dbc93579adb Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 04:15:29 +0000 Subject: [PATCH 03/19] pki: the StarshipOS CA, made on the CI box; capsules signed in CI Ruled by Captain Bob, 2026-11-07: "New root CA on the CI box. Valid StarshipOS rather than snake oil intermediate." - ci/pki/make-ca.sh makes the StarshipOS Root CA (its key stays on the CI box) and the StarshipOS Capsule Signing intermediate it issues, and stores the signing key as the secret CAPSULE_SIGN_KEY. - The kernel finds the signing certificate by one name, CAPSULE_SIGNING_CERT_NAME = pki:starshipos-intermediate.der. The certificate itself lands once make-ca.sh has run; until then the snakeoil intermediate is in the tree under its old name and the capsules check as "no root key" (a warning, as "missing" was). - mkcapsule refuses a signing key that is not that certificate's. - SIGN_KEY has no default; acceptance, build, nightly and release set it from the secret. FABRIC-3.md XLVI. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- .gitea/workflows/acceptance.yml | 12 ++++ .gitea/workflows/build.yml | 24 +++++++ .gitea/workflows/nightly.yml | 12 ++++ .gitea/workflows/release.yml | 12 ++++ ci/pki/make-ca.sh | 81 ++++++++++++++++++++++++ docs/fabric/FABRIC-3.md | 44 +++++++++++++ kernel/Makefile | 14 ++-- kernel/include/starkernel/capsule.h | 3 +- kernel/include/starkernel/capsule_sig.h | 12 +++- kernel/include/starkernel/x509_ed25519.h | 7 +- kernel/src/capsule/capsule_sig.c | 4 +- tools/mkcapsule.c | 34 ++++++++++ v4/Makefile | 6 +- 13 files changed, 246 insertions(+), 19 deletions(-) create mode 100755 ci/pki/make-ca.sh diff --git a/.gitea/workflows/acceptance.yml b/.gitea/workflows/acceptance.yml index 592adb28..8efd9761 100644 --- a/.gitea/workflows/acceptance.yml +++ b/.gitea/workflows/acceptance.yml @@ -37,6 +37,18 @@ jobs: fetch-depth: 0 # the SBOM's version is git describe lfs: false # only the logs and DoE CSVs are in LFS; the build needs neither + - name: The capsule-signing key + env: + KEY: ${{ secrets.CAPSULE_SIGN_KEY }} + run: | # ci/pki/make-ca.sh; kernel/Makefile signs with SIGN_KEY + if [ -n "$KEY" ]; then + f="${RUNNER_TEMP:-/tmp}/capsule-signing.key" + (umask 077; printf '%s\n' "$KEY" > "$f") + echo "SIGN_KEY=$f" >> "$GITHUB_ENV"; echo "The capsules will be signed." + else + echo "::warning::No CAPSULE_SIGN_KEY secret: the capsules are built unsigned." + fi + - name: Acceptance amd64 run: scripts/nightly.sh accept amd64 - name: Acceptance aarch64 diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 1b8fc6aa..88f8c199 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -34,6 +34,18 @@ jobs: fetch-depth: 0 # the SBOM's version is git describe lfs: false # only the logs and DoE CSVs are in LFS; the build needs neither + - name: The capsule-signing key + env: + KEY: ${{ secrets.CAPSULE_SIGN_KEY }} + run: | # ci/pki/make-ca.sh; kernel/Makefile signs with SIGN_KEY + if [ -n "$KEY" ]; then + f="${RUNNER_TEMP:-/tmp}/capsule-signing.key" + (umask 077; printf '%s\n' "$KEY" > "$f") + echo "SIGN_KEY=$f" >> "$GITHUB_ENV"; echo "The capsules will be signed." + else + echo "::warning::No CAPSULE_SIGN_KEY secret: the capsules are built unsigned." + fi + - name: Boot image run: make boot_image TARGET=${{ matrix.board }} @@ -62,5 +74,17 @@ jobs: with: lfs: false + - name: The capsule-signing key + env: + KEY: ${{ secrets.CAPSULE_SIGN_KEY }} + run: | # ci/pki/make-ca.sh; kernel/Makefile signs with SIGN_KEY + if [ -n "$KEY" ]; then + f="${RUNNER_TEMP:-/tmp}/capsule-signing.key" + (umask 077; printf '%s\n' "$KEY" > "$f") + echo "SIGN_KEY=$f" >> "$GITHUB_ENV"; echo "The capsules will be signed." + else + echo "::warning::No CAPSULE_SIGN_KEY secret: the capsules are built unsigned." + fi + - name: make -C v4 test run: make -C v4 test diff --git a/.gitea/workflows/nightly.yml b/.gitea/workflows/nightly.yml index 7a3d89d3..7f04f6f7 100644 --- a/.gitea/workflows/nightly.yml +++ b/.gitea/workflows/nightly.yml @@ -39,6 +39,18 @@ jobs: fetch-depth: 0 # the SBOM's version is git describe lfs: false # only the logs and DoE CSVs are in LFS; the build needs neither + - name: The capsule-signing key + env: + KEY: ${{ secrets.CAPSULE_SIGN_KEY }} + run: | # ci/pki/make-ca.sh; kernel/Makefile signs with SIGN_KEY + if [ -n "$KEY" ]; then + f="${RUNNER_TEMP:-/tmp}/capsule-signing.key" + (umask 077; printf '%s\n' "$KEY" > "$f") + echo "SIGN_KEY=$f" >> "$GITHUB_ENV"; echo "The capsules will be signed." + else + echo "::warning::No CAPSULE_SIGN_KEY secret: the capsules are built unsigned." + fi + - name: Acceptance amd64 run: scripts/nightly.sh accept amd64 - name: Acceptance aarch64 diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 141ae3ae..e248f06b 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -33,6 +33,18 @@ jobs: fetch-depth: 0 lfs: false + - name: The capsule-signing key + env: + KEY: ${{ secrets.CAPSULE_SIGN_KEY }} + run: | # ci/pki/make-ca.sh; kernel/Makefile signs with SIGN_KEY + if [ -n "$KEY" ]; then + f="${RUNNER_TEMP:-/tmp}/capsule-signing.key" + (umask 077; printf '%s\n' "$KEY" > "$f") + echo "SIGN_KEY=$f" >> "$GITHUB_ENV"; echo "The capsules will be signed." + else + echo "::warning::No CAPSULE_SIGN_KEY secret: the capsules are built unsigned." + fi + - name: The tag names the tree's version run: | tree="v$(sed -n 's/^LITHOS_VERSION *?= *//p' kernel/Makefile)" diff --git a/ci/pki/make-ca.sh b/ci/pki/make-ca.sh new file mode 100755 index 00000000..a1331597 --- /dev/null +++ b/ci/pki/make-ca.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# make-ca.sh -- the StarshipOS capsule-signing PKI, made once, on the CI box (Captain Bob, +# 2026-11-07: "New root CA on the CI box. Valid StarshipOS rather than snake oil intermediate"). +# +# StarshipOS Root CA Ed25519, 20 years, self-signed. Its key never leaves this box: +# not in the repository, not in Gitea, not in any image. +# StarshipOS Capsule Signing Ed25519, 10 years, signed by the root; CA:TRUE, pathlen:0. +# Its certificate is built into every image (capsules/pki/ +# starshipos-intermediate.der) and checks each capsule at boot; +# its key signs the capsules (mkcapsule --sign-key), in CI from +# the repository secret CAPSULE_SIGN_KEY. +# +# Replaces the offline LithosAnanke Root CA and its snakeoil intermediate (FABRIC-2.md, +# Milestone 6) for every build. Run as root: +# +# sudo ci/pki/make-ca.sh [dir] # dir defaults to /var/lib/starshipos-ca +# +# It refuses to overwrite an existing CA. When it is done it prints the two certificates (public: +# paste them where they are wanted) and says how to put the signing key into Gitea. With +# GITEA_TOKEN set (a token that may administer the repository), it stores the secret itself. +set -euo pipefail +umask 077 +dir=${1:-/var/lib/starshipos-ca} +repo=${GITEA_REPO:-rajames/LithosAnanke} +api=${GITEA_API:-https://gitea.starshipos-f18.org/api/v1} + +command -v openssl >/dev/null || { echo "make-ca: needs openssl" >&2; exit 1; } +[ -e "$dir/root/root.key" ] && { echo "make-ca: $dir already holds a CA; not overwriting it" >&2; exit 1; } +mkdir -p "$dir/root" "$dir/signing" +cd "$dir" + +cat > ca.cnf <<'CNF' +[ req ] +distinguished_name = dn +prompt = no +[ dn ] +[ root_ext ] +basicConstraints = critical, CA:TRUE +keyUsage = critical, keyCertSign, cRLSign +subjectKeyIdentifier = hash +[ signing_ext ] +basicConstraints = critical, CA:TRUE, pathlen:0 +keyUsage = critical, keyCertSign, cRLSign, digitalSignature +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always +CNF + +# the root +openssl genpkey -algorithm ed25519 -out root/root.key +openssl req -new -x509 -key root/root.key -days 7305 -config ca.cnf -extensions root_ext \ + -subj "/O=StarshipOS/CN=StarshipOS Root CA" -out root/root.pem + +# the capsule-signing intermediate, signed by the root +openssl genpkey -algorithm ed25519 -out signing/signing.key +openssl req -new -key signing/signing.key -config ca.cnf \ + -subj "/O=StarshipOS/CN=StarshipOS Capsule Signing" -out signing/signing.csr +openssl x509 -req -in signing/signing.csr -CA root/root.pem -CAkey root/root.key \ + -CAcreateserial -days 3652 -extfile ca.cnf -extensions signing_ext -out signing/signing.pem +openssl x509 -in signing/signing.pem -outform DER -out signing/starshipos-intermediate.der +openssl verify -CAfile root/root.pem signing/signing.pem + +chmod 700 root signing; chmod 600 root/* signing/* + +if [ -n "${GITEA_TOKEN:-}" ]; then + python3 -c 'import json,sys; print(json.dumps({"data": open(sys.argv[1]).read()}))' signing/signing.key | + curl -fsS -o /dev/null -X PUT -H "Authorization: token $GITEA_TOKEN" -H 'Content-Type: application/json' \ + "$api/repos/$repo/actions/secrets/CAPSULE_SIGN_KEY" -d @- && + echo "make-ca: stored the signing key as $repo's secret CAPSULE_SIGN_KEY" +else + echo "make-ca: put $dir/signing/signing.key, whole, into $repo's Actions secret CAPSULE_SIGN_KEY" + echo " (Settings -> Actions -> Secrets), or run again with GITEA_TOKEN set -- after" + echo " removing $dir, since it refuses to overwrite a CA." +fi +echo +echo "=== The root certificate (public) -- $dir/root/root.pem" +cat root/root.pem +echo "=== The capsule-signing certificate (public) -- $dir/signing/signing.pem" +cat signing/signing.pem +echo "=== Fingerprints" +openssl x509 -in root/root.pem -noout -fingerprint -sha256 -subject -enddate +openssl x509 -in signing/signing.pem -noout -fingerprint -sha256 -subject -issuer -enddate diff --git a/docs/fabric/FABRIC-3.md b/docs/fabric/FABRIC-3.md index d41d95c9..16144bca 100644 --- a/docs/fabric/FABRIC-3.md +++ b/docs/fabric/FABRIC-3.md @@ -6061,3 +6061,47 @@ four conflicts resolved to the branch's files (`92ca805e`). - The first scheduled nightly's publish to Nexus (#17). - The Pi 5 and Mars images booted on their boards (#27, #28); a Pi 4 port (#26). - Revoke the access token `claude-session-20261106` (Settings, Applications). + +## XLVI. The StarshipOS CA: capsules signed in CI, by a root on the CI box (2026-11-07) + +### 1. Found + +Every image built anywhere but Captain Bob's machine carried unsigned capsules: CI, the +acceptance runs, the nightly bound for Nexus, a release, the demo. The capsule-signing key -- the +snakeoil intermediate of the offline LithosAnanke Root CA (FABRIC-2.md, Milestone 6) -- lived only +there, `kernel/Makefile`'s `SIGN_KEY` named its path, and a missing signature is a warning by +design (2026-08-26), so they booted: `V4: capsule v4:sys:core.f18 signature: missing (unsigned)` +in every accepted log (`logs/20261106-004933`). And `mkcapsule` signed with whatever key it was +given: a key that is not the embedded certificate's makes every signature INVALID, which refuses +Mama. + +### 2. Ruled + +Captain Bob, 2026-11-07: "New root CA on the CI box. Valid StarshipOS rather than snake oil +intermediate." + +### 3. Built + +- `ci/pki/make-ca.sh`, run once on the CI box: **StarshipOS Root CA** (Ed25519, 20 years, + self-signed; its key stays on that box, in `/var/lib/starshipos-ca`) and **StarshipOS Capsule + Signing** (Ed25519, 10 years, issued by the root, `CA:TRUE, pathlen:0`). It refuses to + overwrite a CA, prints both certificates, and stores the signing key as the repository secret + `CAPSULE_SIGN_KEY` (or says how). +- The image carries `capsules/pki/starshipos-intermediate.der` in place of the snakeoil + intermediate; the kernel finds it by one name, `CAPSULE_SIGNING_CERT_NAME` (`capsule_sig.h`). +- `mkcapsule` checks the signing key against that certificate before it writes anything, and + refuses a key that is not its, or a key with no certificate to check. +- `SIGN_KEY` has no default (`kernel/Makefile`, `v4/Makefile`): CI sets it from the secret (a step + in `acceptance.yml`, `build.yml`, `nightly.yml`, `release.yml`); unset, the capsules are built + unsigned, as before. + +What it is not: the kernel still does not check the intermediate against a root at boot +(`x509_ed25519.h`; `ACL.4th`'s `ACL-CA-KEY` is still 0). A signature proves a capsule matches the +certificate in the same image. That is unchanged by this, and a ruling of its own. + +### 4. Verified + +With a CA made by `make-ca.sh` in a scratch directory (not the real one): `openssl verify` of the +chain OK; `make-ca.sh` refuses a second run; `mkcapsule` with the signing key -- "signing key +matches"; with the root's key -- refused; with a key and no certificate -- refused; with no key -- +unsigned, as before. The acceptance with the real certificate is the PR's. diff --git a/kernel/Makefile b/kernel/Makefile index ddbead77..31f425f8 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -207,7 +207,8 @@ MKCAPSULE_SRC = tools/mkcapsule.c tools/pkcs8_ed25519.c \ kernel/src/crypto/ed25519.c \ kernel/src/crypto/fe25519.c \ kernel/src/crypto/scalar25519.c \ - kernel/src/crypto/sha512.c + kernel/src/crypto/sha512.c \ + kernel/src/crypto/x509_ed25519.c MKCAPSULE_BIN = $(BUILD_DIR)/tools/mkcapsule # mkartemis: formats and signs an Artemis partition at build with the kernel's own # block-subsystem and artemis_sig code (tools/mkartemis.c), built as v4/Makefile builds them. @@ -215,12 +216,11 @@ MKARTEMIS_SRC = tools/mkartemis.c kernel/src/artemis_sig.c \ $(addprefix v3/src/,block_subsystem.c blkio_ram.c blkio_file.c log.c \ platform/platform_init.c platform/linux/time.c) MKARTEMIS_BIN = $(BUILD_DIR)/tools/mkartemis -# Milestone 6 (Phase 8): the snakeoil intermediate's private key, generated -# offline outside this repo entirely (see FABRIC-2.md's Phase 8 §Milestone 6 -# writeup) -- not present in CI or a fresh checkout, so signing is skipped -# gracefully ($(wildcard ...) below) rather than failing the build. Override -# with `make SIGN_KEY=/path/to/key.pem ...` on a machine that holds it. -SIGN_KEY ?= /home/rajames/CLionProjects/lithosananke-ca/intermediate/snakeoil-intermediate.key +# The capsule-signing key: "StarshipOS Capsule Signing"'s private key (ci/pki/make-ca.sh, +# FABRIC-3.md XLVI). CI sets SIGN_KEY from the secret CAPSULE_SIGN_KEY; elsewhere set it by hand +# (`make SIGN_KEY=/path/to/signing.key ...`). Unset or absent, the capsules are built unsigned, +# which boots with a warning per capsule. mkcapsule refuses a key that is not the certificate's. +SIGN_KEY ?= SIGN_KEY_ARGS = $(if $(wildcard $(SIGN_KEY)),--sign-key $(SIGN_KEY),) CAPSULE_GENERATED = $(BUILD_DIR)/capsule_generated.c CAPSULE_GENERATED_OBJ = $(BUILD_DIR)/capsule_generated.o diff --git a/kernel/include/starkernel/capsule.h b/kernel/include/starkernel/capsule.h index 883c85e5..1122ade0 100644 --- a/kernel/include/starkernel/capsule.h +++ b/kernel/include/starkernel/capsule.h @@ -171,7 +171,8 @@ typedef struct { * * Milestone 6 (Phase 8): each capsule's payload bytes (the same bytes * content_hash already covers), signed by mkcapsule at build time with - * the snakeoil intermediate's private key. has_sig=0 for a capsule built + * the capsule-signing key (StarshipOS Capsule Signing, capsule_sig.h; + * the snakeoil intermediate's until 2026-11-07). has_sig=0 for a capsule built * before this feature existed or otherwise unsigned -- a real, distinct * state, not "signature is all-zero bytes" (which sig[64] full of 0x00 * would otherwise look ambiguous with). Indexed 1:1 with diff --git a/kernel/include/starkernel/capsule_sig.h b/kernel/include/starkernel/capsule_sig.h index 32ae68b1..b2bb3fff 100644 --- a/kernel/include/starkernel/capsule_sig.h +++ b/kernel/include/starkernel/capsule_sig.h @@ -22,6 +22,12 @@ #include "starkernel/capsule.h" +/* The certificate whose key the capsules are signed with: "StarshipOS + * Capsule Signing", issued by the StarshipOS Root CA (ci/pki/make-ca.sh; + * FABRIC-3.md XLVI), replacing the snakeoil intermediate of Milestone 6. + * mkcapsule refuses to sign with a key that is not this certificate's. */ +#define CAPSULE_SIGNING_CERT_NAME "pki:starshipos-intermediate.der" + typedef enum { CAPSULE_SIG_OK = 0, /* has_sig=1, and it verifies */ CAPSULE_SIG_MISSING, /* has_sig=0 -- not signed at all */ @@ -31,9 +37,9 @@ typedef enum { /* * Verify capsule descs[index]'s Ed25519 signature against the embedded - * snakeoil intermediate cert's public key (capsule name - * "pki:snakeoil-intermediate.der", found and parsed once, cached for - * every later call this boot -- the cert doesn't change mid-boot). + * capsule-signing certificate's public key (CAPSULE_SIGNING_CERT_NAME, + * found and parsed once, cached for every later call this boot -- the + * cert doesn't change mid-boot). * * descs/names/sigs must be the same three parallel arrays * (capsule_get_descriptors()/capsule_get_names()/capsule_get_signatures()), diff --git a/kernel/include/starkernel/x509_ed25519.h b/kernel/include/starkernel/x509_ed25519.h index 1aa96b5f..a2f0521d 100644 --- a/kernel/include/starkernel/x509_ed25519.h +++ b/kernel/include/starkernel/x509_ed25519.h @@ -6,9 +6,10 @@ * * x509_extract_ed25519_pubkey() only ever reads SubjectPublicKeyInfo -- * no signature verification, no chain validation, no extension parsing. - * That's the capsule-PKI use case (Milestone 6): the embedded snakeoil - * intermediate cert is trusted because it's baked into the trusted build, - * never re-verified against the offline root CA at boot. + * That's the capsule-PKI use case (Milestone 6): the embedded capsule- + * signing cert (StarshipOS Capsule Signing since 2026-11-07, the snakeoil + * intermediate before it) is trusted because it's baked into the trusted + * build, never re-verified against its root CA at boot. * * x509_verify_signature()/x509_extract_serial() (added 2026-08-28, * FABRIC-2.md §F.7/§F.17) are for CERTVERIFY -- a regular user's cert, diff --git a/kernel/src/capsule/capsule_sig.c b/kernel/src/capsule/capsule_sig.c index 6d46f7f1..759decb5 100644 --- a/kernel/src/capsule/capsule_sig.c +++ b/kernel/src/capsule/capsule_sig.c @@ -4,8 +4,6 @@ #include "starkernel/ed25519.h" #include -#define SNAKEOIL_CERT_NAME "pki:snakeoil-intermediate.der" - /* Cached once per boot: the cert doesn't change mid-boot, and every * capsule birth (Mama, then every child VM) would otherwise re-find and * re-parse the same cert. -1 = not yet attempted, 0 = failed, 1 = ready. */ @@ -20,7 +18,7 @@ static int find_and_cache_pubkey(const CapsuleDesc *descs, pubkey_state = 0; /* assume failure unless every step below succeeds */ for (uint32_t i = 0; i < desc_count; i++) { - if (strcmp(names[i].name, SNAKEOIL_CERT_NAME) == 0) { + if (strcmp(names[i].name, CAPSULE_SIGNING_CERT_NAME) == 0) { const CapsuleDesc *cert_desc = &descs[i]; if (x509_extract_ed25519_pubkey(arena_base + cert_desc->offset, (size_t)cert_desc->length, diff --git a/tools/mkcapsule.c b/tools/mkcapsule.c index d8b419b5..c9237f74 100644 --- a/tools/mkcapsule.c +++ b/tools/mkcapsule.c @@ -56,6 +56,8 @@ #include "pkcs8_ed25519.h" #include "starkernel/ed25519.h" +#include "starkernel/x509_ed25519.h" +#include "starkernel/capsule_sig.h" /*=========================================================================== * xxHash64 (embedded for build tool — no external dependency) @@ -1575,6 +1577,34 @@ static int load_sign_key(const char *key_path) { return 0; } +/* The signing key must be the one whose certificate the image carries + * (CAPSULE_SIGNING_CERT_NAME): the kernel checks every signature against + * that certificate, and refuses a signature that does not verify -- Mama's + * own included. A key that is not the certificate's would build an image + * that cannot boot, so refuse to build it. Returns 0 if they match. */ +static int check_sign_key_matches_cert(void) { + uint8_t key_pub[32], cert_pub[32]; + ed25519_keygen(sign_seed, key_pub); + for (int i = 0; i < capsule_count; i++) { + if (strcmp(capsules[i].name, CAPSULE_SIGNING_CERT_NAME) != 0) continue; + if (x509_extract_ed25519_pubkey(capsules[i].data, capsules[i].length, cert_pub) != 0) { + fprintf(stderr, "mkcapsule: ERROR: %s is not an Ed25519 certificate\n", + CAPSULE_SIGNING_CERT_NAME); + return -1; + } + if (memcmp(key_pub, cert_pub, 32) != 0) { + fprintf(stderr, "mkcapsule: ERROR: the signing key is not %s's -- every " + "capsule would fail its check at boot\n", CAPSULE_SIGNING_CERT_NAME); + return -1; + } + fprintf(stderr, "mkcapsule: signing key matches %s\n", CAPSULE_SIGNING_CERT_NAME); + return 0; + } + fprintf(stderr, "mkcapsule: ERROR: --sign-key given, but no %s to check it against\n", + CAPSULE_SIGNING_CERT_NAME); + return -1; +} + int main(int argc, char **argv) { /* --manifest mode: generate block ownership markdown. Optional * --sign-key prefix: mkcapsule --manifest [--sign-key @@ -1717,6 +1747,10 @@ int main(int argc, char **argv) { fprintf(stderr, "mkcapsule: %d capsule(s) collected\n", capsule_count); + if (have_sign_seed && check_sign_key_matches_cert() != 0) { + return 1; + } + FILE *out = fopen(output_path, "w"); if (!out) { fprintf(stderr, "mkcapsule: ERROR: cannot create '%s'\n", output_path); diff --git a/v4/Makefile b/v4/Makefile index 35b40021..bfab3332 100644 --- a/v4/Makefile +++ b/v4/Makefile @@ -173,10 +173,12 @@ RUN_amd64 ?= RUN_aarch64 ?= qemu-aarch64 RUN_riscv64 ?= qemu-riscv64 -SIGN_KEY ?= /home/rajames/CLionProjects/lithosananke-ca/intermediate/snakeoil-intermediate.key +# as kernel/Makefile: CI sets SIGN_KEY; unset, the capsules are built unsigned +SIGN_KEY ?= SIGN_KEY_ARGS = $(if $(wildcard $(SIGN_KEY)),--sign-key $(SIGN_KEY),) CRYPTO_SRCS := $(addprefix $(ROOT)/kernel/src/crypto/,ed25519.c fe25519.c scalar25519.c sha512.c) -MKCAPSULE_SRCS := $(ROOT)/tools/mkcapsule.c $(ROOT)/tools/pkcs8_ed25519.c $(CRYPTO_SRCS) +MKCAPSULE_SRCS := $(ROOT)/tools/mkcapsule.c $(ROOT)/tools/pkcs8_ed25519.c $(CRYPTO_SRCS) \ + $(ROOT)/kernel/src/crypto/x509_ed25519.c CAPSULE_FILES := $(shell find $(ROOT)/capsules -type f ! -name '.*' 2>/dev/null) CAPSULE_DIR_C := $(BINDIR)/capsule_generated.c MACHINE_64 := $(BINDIR)/rom-64.c $(BINDIR)/v4_map_64.c From 51dd4a83919b12f0ec9af1a92635d3b17a2124e6 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 11:29:10 +0000 Subject: [PATCH 04/19] site/org: the .org wiki's landing page and its two dashboards Ruled by Captain Bob, 2026-11-07: a generic landing page for anonymous visitors, a login-protected admin dashboard for him, and a protected contributors' dashboard. Main.WebHome (everyone), Admin.WebHome (XWiki.rajames alone), Contributors.WebHome (XWiki.StarshipContributors and the administrator); CI shown as Gitea's live workflow badges. install.sh puts them on the wiki through XWiki's REST API, with the group and the space rights, and checks a guest's view. Not yet run: the .org XWiki answers 503. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- site/org/Admin.WebHome.xwiki | 37 +++++++++++ site/org/Contributors.WebHome.xwiki | 51 +++++++++++++++ site/org/Main.WebHome.xwiki | 40 ++++++++++++ site/org/README.md | 22 +++++++ site/org/install.sh | 98 +++++++++++++++++++++++++++++ 5 files changed, 248 insertions(+) create mode 100644 site/org/Admin.WebHome.xwiki create mode 100644 site/org/Contributors.WebHome.xwiki create mode 100644 site/org/Main.WebHome.xwiki create mode 100644 site/org/README.md create mode 100755 site/org/install.sh diff --git a/site/org/Admin.WebHome.xwiki b/site/org/Admin.WebHome.xwiki new file mode 100644 index 00000000..2839fabd --- /dev/null +++ b/site/org/Admin.WebHome.xwiki @@ -0,0 +1,37 @@ += Admin Dashboard = + +{{info}} +Only the project's administrator can see this page (its space's rights: view and edit, ##XWiki.rajames## alone). +{{/info}} + +== CI == + +|=Workflow|=Status|=Runs +|Acceptance -- the gate on every PR into master|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/acceptance.yml/badge.svg]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=acceptance.yml]] +|Build -- the quick check on StarForth-v4.0.0|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/build.yml/badge.svg?branch=StarForth-v4.0.0]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=build.yml]] +|Nightly -- acceptance, images to Nexus, proofs (03:00 UTC)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly.yml/badge.svg?branch=master]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=nightly.yml]] +|Nightly documents (04:00 UTC)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly-docs.yml/badge.svg?branch=master]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=nightly-docs.yml]] +|Runner image|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/runner-image.yml/badge.svg?branch=master]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=runner-image.yml]] +|Release (a v tag)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/release.yml/badge.svg]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=release.yml]] + +== Work == + +* [[Open pull requests>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/pulls?state=open]] +* [[Open issues>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open]] -- [[in progress>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=23]], [[blocked>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=20]], [[needs acceptance>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=21]] +* [[Milestones>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/milestones]] and [[the project board>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/projects]] +* [[Branch protection and secrets>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/settings/branches]] -- ##master##: no pushes, merges only after Acceptance +* [[Actions secrets>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/settings/actions/secrets]] -- ##NEXUS_CI_PASSWORD##, ##PACKAGES_TOKEN##, ##CAPSULE_SIGN_KEY## +* [[Runners>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/settings/actions/runners]] +* [[Access tokens>>https://gitea.starshipos-f18.org/user/settings/applications]] -- revoke what a session no longer needs + +== Artifacts == + +* [[Nexus: org.starship snapshots>>https://nexus.starshipos-f18.org/#browse/browse:starshipos-snapshots:org%2Fstarship]] -- ##kernelImage## (##pc##, ##raspi5##, ##milkv##, ##logs##), ##documentation## (##book##, ##vol1##-##vol3##, ##api##) +* [[Nexus: releases>>https://nexus.starshipos-f18.org/#browse/browse:starshipos-releases:org%2Fstarship]] +* [[Container images>>https://gitea.starshipos-f18.org/rajames/-/packages]] -- ##lithosananke-runner##, the CI runner image + +== Sites == + +* [[starshipos-f18.com>>https://starshipos-f18.com/]] -- the public face, and [[Try it>>https://starshipos-f18.com/bin/view/TryIt/]] +* [[Contributors' dashboard>>Contributors.WebHome]] +* [[Wiki administration>>path:/bin/admin/XWiki/XWikiPreferences]] -- users, groups (##XWiki.StarshipContributors##), rights diff --git a/site/org/Contributors.WebHome.xwiki b/site/org/Contributors.WebHome.xwiki new file mode 100644 index 00000000..717e8319 --- /dev/null +++ b/site/org/Contributors.WebHome.xwiki @@ -0,0 +1,51 @@ += Contributors' Dashboard = + +{{info}} +For members of ##XWiki.StarshipContributors## and the administrator. Ask Captain Bob to be added. +{{/info}} + +== How We Work: the Captain Bob Method == + +Neither agile nor waterfall. One process from the developer's desk to ##master##: + +1. **Found** -- an issue says what is wrong or missing, with the evidence (a log, a line of code). +1. **Ruled** -- Captain Bob decides what is to be done. Nothing is built without a ruling, and no fix nobody asked for. +1. **Built** -- on the working branch, ##StarForth-v4.0.0##. C99, no GNU extensions; compose in FORTH before adding a C word. +1. **Verified** -- the acceptance protocol, below; its logs are committed under ##logs/##. +1. **Merged** -- a pull request into ##master##, which runs acceptance by itself. ##master## takes nothing else. + +== The Acceptance Protocol == + +Run in this order, one QEMU at a time, in the foreground: + +{{code language="none"}} +make -f kernel/Makefile ARCH=amd64 clean qemu +make -f kernel/Makefile ARCH=aarch64 clean qemu +make -f kernel/Makefile ARCH=riscv64 clean qemu +make -f kernel/Makefile ARCH=amd64 clean qemu-stick-high +make -C v4 test-32 +{{/code}} + +Each boot reaches ##[zuse@Hera] ok>## with ##POST: PASSED## and every POST check passing, and the +three architectures report the same ##dict_hash##. ##make ARCH=amd64,aarch64,riscv64 init## +installs everything this needs. + +|=Check|=Status +|Acceptance|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/acceptance.yml/badge.svg]] +|Build (StarForth-v4.0.0)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/build.yml/badge.svg?branch=StarForth-v4.0.0]] +|Nightly|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly.yml/badge.svg?branch=master]] + +== Where Things Are == + +* [[The repository>>https://gitea.starshipos-f18.org/rajames/LithosAnanke]] -- start with ##README.md## and ##docs/README.md##; the design record is ##docs/fabric/FABRIC-3.md## +* [[New issue>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues/new/choose]] -- the forms: bug, work, ruling, board +* [[Open features>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=2]] and [[bugs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=1]] +* [[Board bring-up>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&milestone=2]] -- ##boards/BRINGUP.md## +* Before touching a capsule (##capsules/*.4th##): read ##experiments/bare_metal/README.md## -- the block ranges are shared by every capsule + +== Rules That Bite == + +* No new branch, no ##git stash##, without Captain Bob's say-so. +* Never modify a registered, tested FORTH word to "fix" it; the problem is in the caller. +* ACL policy lives in ##ACL.4th##, not in C. +* Tags are sacred: each has the logs proving its state. diff --git a/site/org/Main.WebHome.xwiki b/site/org/Main.WebHome.xwiki new file mode 100644 index 00000000..69cd41e7 --- /dev/null +++ b/site/org/Main.WebHome.xwiki @@ -0,0 +1,40 @@ +{{box cssClass="floatinginfobox" title="**StarshipOS**"}} +* **Kernel**: LithosAnanke v2.1.0 (UEFI, bare metal) +* **Runtime**: StarForth v4, the F18 engine (v3.2.0 kept) +* **Architectures**: amd64, aarch64, riscv64 +* **Boards**: PC (UEFI stick), Raspberry Pi 5, Milk-V Mars +* **Language**: C99 and FORTH +{{/box}} + += StarshipOS = + +StarshipOS is an operating system with no other operating system underneath it. **LithosAnanke**, a +UEFI microkernel, boots straight from the firmware and runs **StarForth** -- a FORTH virtual +machine -- as its only runtime. There is no libc and no shell: the system speaks FORTH. + +This wiki is the project's working home: its design, its record and its dashboards. The public +face of StarshipOS -- what it is, and a machine to try in your browser -- is +[[starshipos-f18.com>>https://starshipos-f18.com/]]. + +== The Project == + +* [[The source>>https://gitea.starshipos-f18.org/rajames/LithosAnanke]] -- the kernel, StarForth, the proofs and the documents, in one repository +* [[Issues>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues]] -- what is found, ruled, built and verified +* [[Pull requests>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/pulls]] -- the only way into ##master## + +== How a Change Is Accepted == + +Every change passes the same **acceptance protocol**, by hand or in CI: the kernel booted in QEMU on +amd64, aarch64 and riscv64 to its prompt, its power-on self-test passing every check; the PC stick +loaded the way a PC loads it; and the 32-bit build's tests. A pull request into ##master## runs it +by itself, and nothing that fails it is merged. + +|=Check|=Status +|Acceptance (pull requests)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/acceptance.yml/badge.svg]] +|Nightly: acceptance, images, proofs|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly.yml/badge.svg?branch=master]] +|Nightly: documents|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly-docs.yml/badge.svg?branch=master]] + +== Contributors == + +Contributors have a dashboard of their own: [[log in>>path:/bin/login/XWiki/XWikiLogin]], then +[[Contributors>>Contributors.WebHome]]. diff --git a/site/org/README.md b/site/org/README.md new file mode 100644 index 00000000..79fbea74 --- /dev/null +++ b/site/org/README.md @@ -0,0 +1,22 @@ +# site/org -- the .org XWiki's pages + +The project's working wiki at `starshipos-f18.org` (the public face is the `.com`; `demo/` has its +"Try it" page). Three pages, ruled by Captain Bob on 2026-11-07: + +| Page | File | Who sees it | +|---|---|---| +| `Main.WebHome` -- the landing page | `Main.WebHome.xwiki` | everyone, guests included | +| `Admin.WebHome` -- the admin dashboard | `Admin.WebHome.xwiki` | the administrator (`XWiki.rajames`) alone | +| `Contributors.WebHome` -- the contributors' dashboard | `Contributors.WebHome.xwiki` | the group `XWiki.StarshipContributors`, and the administrator | + +The dashboards show CI as Gitea's live workflow badges, which need no login and no script rights. + +`install.sh` puts them on the wiki through its REST API, makes the group and the rights, and checks +as a guest that the landing page is readable and the dashboards are not: + +``` +XWIKI_USER=rajames XWIKI_PASSWORD=... site/org/install.sh +``` + +Contributors are added to `XWiki.StarshipContributors` in the wiki's administration (Users and +Groups). The wiki-wide rights -- what guests may do anywhere else -- are the wiki's own, not this. diff --git a/site/org/install.sh b/site/org/install.sh new file mode 100755 index 00000000..3d241faf --- /dev/null +++ b/site/org/install.sh @@ -0,0 +1,98 @@ +#!/bin/bash +# install.sh -- the .org XWiki's three pages (Captain Bob, 2026-11-07): a landing page anyone can +# read, an admin dashboard for the administrator alone, and a contributors' dashboard for the +# group XWiki.StarshipContributors (and the administrator). Through XWiki's REST API: +# +# Main.WebHome Main.WebHome.xwiki rights untouched: the wiki's own (guests view) +# Admin.WebHome Admin.WebHome.xwiki Admin.WebPreferences: view, edit, comment, +# delete -- $ADMIN_USER alone +# Contributors.WebHome Contributors.WebHome.xwiki Contributors.WebPreferences: view, comment -- +# XWiki.StarshipContributors and $ADMIN_USER; +# edit, delete -- $ADMIN_USER +# XWiki.StarshipContributors the group, created empty; members are added in the wiki's +# administration (Users and Groups) +# +# An allow on a space denies that right there to everyone not named -- guests included. +# +# XWIKI_USER=rajames XWIKI_PASSWORD=... site/org/install.sh [https://starshipos-f18.org] +# +# Run it again after editing a page: pages are replaced, rights and the group are added once. +# It ends by checking, without logging in, that the landing page is readable and the dashboards +# are not. +set -euo pipefail +cd "$(dirname "$0")" +base=${1:-https://starshipos-f18.org} +rest="$base/rest/wikis/xwiki" +user=${XWIKI_USER:?set XWIKI_USER} +pass=${XWIKI_PASSWORD:?set XWIKI_PASSWORD} +admin=${ADMIN_USER:-XWiki.$user} +group=XWiki.StarshipContributors +auth=(-u "$user:$pass") + +page() { # page [file]: create or replace + local body + body=$(python3 -c ' +import sys +from xml.sax.saxutils import escape +title, path = sys.argv[1], sys.argv[2] +content = open(path).read() if path else "" +print("<page xmlns=\"http://www.xwiki.org\"><title>%sxwiki/2.1" + "%s" % (escape(title), escape(content)))' "$3" "${4:-}") + curl -fsS -o /dev/null -w " page $1.$2: %{http_code}\n" "${auth[@]}" -X PUT \ + -H 'Content-Type: application/xml' --data-binary "$body" "$rest/spaces/$1/pages/$2" +} +objects() { # objects : how many the page has + curl -fsS "${auth[@]}" -H 'Accept: application/json' "$rest/spaces/$1/pages/$2/objects/$3" | + python3 -c 'import json,sys; print(len(json.load(sys.stdin).get("objectSummaries") or []))' +} +object() { # object ...: add one + local s=$1 p=$2 c=$3; shift 3 + local args=(--data-urlencode "className=$c") + for kv in "$@"; do args+=(--data-urlencode "property#$kv"); done + curl -fsS -o /dev/null -w " $s.$p: $c added (%{http_code})\n" "${auth[@]}" -X POST "${args[@]}" \ + "$rest/spaces/$s/pages/$p/objects" +} + +echo "=== $base, as $user" +page Main WebHome "StarshipOS" Main.WebHome.xwiki +page Admin WebHome "Admin Dashboard" Admin.WebHome.xwiki +page Contributors WebHome "Contributors' Dashboard" Contributors.WebHome.xwiki + +echo "=== the group $group" +page XWiki StarshipContributors "Starship Contributors" +if [ "$(objects XWiki StarshipContributors XWiki.XWikiGroups)" = 0 ]; then + object XWiki StarshipContributors XWiki.XWikiGroups "member=" +else + echo " already a group" +fi + +echo "=== rights" +page Admin WebPreferences "Admin rights" +if [ "$(objects Admin WebPreferences XWiki.XWikiGlobalRights)" = 0 ]; then + object Admin WebPreferences XWiki.XWikiGlobalRights \ + "levels=view,edit,comment,delete" "users=$admin" "groups=" "allow=1" +else + echo " Admin: rights there already, left as they are" +fi +page Contributors WebPreferences "Contributors rights" +if [ "$(objects Contributors WebPreferences XWiki.XWikiGlobalRights)" = 0 ]; then + object Contributors WebPreferences XWiki.XWikiGlobalRights \ + "levels=view,comment" "users=$admin" "groups=$group" "allow=1" + object Contributors WebPreferences XWiki.XWikiGlobalRights \ + "levels=edit,delete" "users=$admin" "groups=" "allow=1" +else + echo " Contributors: rights there already, left as they are" +fi + +echo "=== as a guest" +bad= +for p in Main Admin Contributors; do + code=$(curl -s -o /dev/null -w '%{http_code}' -H 'Accept: application/json' "$rest/spaces/$p/pages/WebHome") + case "$p:$code" in + Main:200|Admin:401|Admin:403|Contributors:401|Contributors:403) + echo " $p.WebHome: $code -- as it should be";; + *) echo " $p.WebHome: $code -- NOT as it should be"; bad=1;; + esac +done +[ -z "$bad" ] || { echo "install: a guest's view is wrong; see above" >&2; exit 1; } +echo "=== done: $base/bin/view/Main/" From 6f14d8d6bc93ba2b2b018e9fc32b2d50f0316ead Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 11:36:09 +0000 Subject: [PATCH 05/19] site/org: the .org pages in the starshipos-f18.com look Captain Bob, 2026-11-07: style .org like the StarshipOS.com design canvas. build.py makes the three pages from one source, as {{html}} blocks in the canvas's look (navy, orange accent, JetBrains Mono and Exo 2), and the same pages as the canvas's .org artboards. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- site/org/Admin.WebHome.xwiki | 91 ++++---- site/org/Contributors.WebHome.xwiki | 109 +++++---- site/org/Main.WebHome.xwiki | 109 +++++---- site/org/README.md | 7 +- site/org/build.py | 332 ++++++++++++++++++++++++++++ 5 files changed, 522 insertions(+), 126 deletions(-) create mode 100644 site/org/build.py diff --git a/site/org/Admin.WebHome.xwiki b/site/org/Admin.WebHome.xwiki index 2839fabd..22984827 100644 --- a/site/org/Admin.WebHome.xwiki +++ b/site/org/Admin.WebHome.xwiki @@ -1,37 +1,54 @@ -= Admin Dashboard = - -{{info}} -Only the project's administrator can see this page (its space's rights: view and edit, ##XWiki.rajames## alone). -{{/info}} - -== CI == - -|=Workflow|=Status|=Runs -|Acceptance -- the gate on every PR into master|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/acceptance.yml/badge.svg]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=acceptance.yml]] -|Build -- the quick check on StarForth-v4.0.0|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/build.yml/badge.svg?branch=StarForth-v4.0.0]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=build.yml]] -|Nightly -- acceptance, images to Nexus, proofs (03:00 UTC)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly.yml/badge.svg?branch=master]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=nightly.yml]] -|Nightly documents (04:00 UTC)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly-docs.yml/badge.svg?branch=master]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=nightly-docs.yml]] -|Runner image|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/runner-image.yml/badge.svg?branch=master]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=runner-image.yml]] -|Release (a v tag)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/release.yml/badge.svg]]|[[runs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions?workflow=release.yml]] - -== Work == - -* [[Open pull requests>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/pulls?state=open]] -* [[Open issues>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open]] -- [[in progress>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=23]], [[blocked>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=20]], [[needs acceptance>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=21]] -* [[Milestones>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/milestones]] and [[the project board>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/projects]] -* [[Branch protection and secrets>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/settings/branches]] -- ##master##: no pushes, merges only after Acceptance -* [[Actions secrets>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/settings/actions/secrets]] -- ##NEXUS_CI_PASSWORD##, ##PACKAGES_TOKEN##, ##CAPSULE_SIGN_KEY## -* [[Runners>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/settings/actions/runners]] -* [[Access tokens>>https://gitea.starshipos-f18.org/user/settings/applications]] -- revoke what a session no longer needs - -== Artifacts == - -* [[Nexus: org.starship snapshots>>https://nexus.starshipos-f18.org/#browse/browse:starshipos-snapshots:org%2Fstarship]] -- ##kernelImage## (##pc##, ##raspi5##, ##milkv##, ##logs##), ##documentation## (##book##, ##vol1##-##vol3##, ##api##) -* [[Nexus: releases>>https://nexus.starshipos-f18.org/#browse/browse:starshipos-releases:org%2Fstarship]] -* [[Container images>>https://gitea.starshipos-f18.org/rajames/-/packages]] -- ##lithosananke-runner##, the CI runner image - -== Sites == - -* [[starshipos-f18.com>>https://starshipos-f18.com/]] -- the public face, and [[Try it>>https://starshipos-f18.com/bin/view/TryIt/]] -* [[Contributors' dashboard>>Contributors.WebHome]] -* [[Wiki administration>>path:/bin/admin/XWiki/XWikiPreferences]] -- users, groups (##XWiki.StarshipContributors##), rights +{{html clean="false"}} + + +
+
+ +
+
+

Administrator only

+

Admin dashboard.

+

Seen by XWiki.rajames alone: the Admin space allows view and edit to that account and nobody else.

+
+
+

CI

+

Every workflow, live.

+
Acceptance -- the gate on every PR into masteracceptance.yml status runs
+
Build -- the quick check on StarForth-v4.0.0build.yml status runs
+
Nightly -- acceptance, images to Nexus, proofs (03:00 UTC)nightly.yml status runs
+
Nightly documents (04:00 UTC)nightly-docs.yml status runs
+
Runner imagerunner-image.yml status runs
+
Release -- a v<version> tagrelease.yml status runs
+
+
+

Run the project

+

Work, artifacts, sites.

+
+ +
+

Artifacts

+

Nexus and packages

+ +
+ +
+
+ +
+{{/html}} diff --git a/site/org/Contributors.WebHome.xwiki b/site/org/Contributors.WebHome.xwiki index 717e8319..b733c63a 100644 --- a/site/org/Contributors.WebHome.xwiki +++ b/site/org/Contributors.WebHome.xwiki @@ -1,51 +1,64 @@ -= Contributors' Dashboard = - -{{info}} -For members of ##XWiki.StarshipContributors## and the administrator. Ask Captain Bob to be added. -{{/info}} - -== How We Work: the Captain Bob Method == - -Neither agile nor waterfall. One process from the developer's desk to ##master##: - -1. **Found** -- an issue says what is wrong or missing, with the evidence (a log, a line of code). -1. **Ruled** -- Captain Bob decides what is to be done. Nothing is built without a ruling, and no fix nobody asked for. -1. **Built** -- on the working branch, ##StarForth-v4.0.0##. C99, no GNU extensions; compose in FORTH before adding a C word. -1. **Verified** -- the acceptance protocol, below; its logs are committed under ##logs/##. -1. **Merged** -- a pull request into ##master##, which runs acceptance by itself. ##master## takes nothing else. - -== The Acceptance Protocol == - -Run in this order, one QEMU at a time, in the foreground: - -{{code language="none"}} -make -f kernel/Makefile ARCH=amd64 clean qemu +{{html clean="false"}} + + +
+
+ +
+
+

Contributors

+

Contributors' dashboard.

+

For the members of XWiki.StarshipContributors and the administrator. Ask Captain Bob to be added.

+
+
+

How we work

+

The Captain Bob method.

+

Neither agile nor waterfall: one process from the developer's desk to master.

+
+
1

Found

An issue says what is wrong or missing, with the evidence: a log, a line of code.

+
2

Ruled

Captain Bob decides what is to be done. Nothing is built without a ruling, and no fix nobody asked for.

+
3

Built

On the working branch, StarForth-v4.0.0. C99, no GNU extensions; compose in FORTH before adding a C word.

+
4

Verified

The acceptance protocol, below; its logs are committed under logs/.

+
5

Merged

A pull request into master, which runs acceptance by itself. master takes nothing else.

+
+
+
+

The acceptance protocol

+

In this order, one QEMU at a time, in the foreground.

+
make -f kernel/Makefile ARCH=amd64   clean qemu
 make -f kernel/Makefile ARCH=aarch64 clean qemu
 make -f kernel/Makefile ARCH=riscv64 clean qemu
 make -f kernel/Makefile ARCH=amd64   clean qemu-stick-high
-make -C v4 test-32
-{{/code}}
-
-Each boot reaches ##[zuse@Hera] ok>## with ##POST: PASSED## and every POST check passing, and the
-three architectures report the same ##dict_hash##. ##make ARCH=amd64,aarch64,riscv64 init##
-installs everything this needs.
-
-|=Check|=Status
-|Acceptance|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/acceptance.yml/badge.svg]]
-|Build (StarForth-v4.0.0)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/build.yml/badge.svg?branch=StarForth-v4.0.0]]
-|Nightly|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly.yml/badge.svg?branch=master]]
-
-== Where Things Are ==
-
-* [[The repository>>https://gitea.starshipos-f18.org/rajames/LithosAnanke]] -- start with ##README.md## and ##docs/README.md##; the design record is ##docs/fabric/FABRIC-3.md##
-* [[New issue>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues/new/choose]] -- the forms: bug, work, ruling, board
-* [[Open features>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=2]] and [[bugs>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&labels=1]]
-* [[Board bring-up>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues?state=open&milestone=2]] -- ##boards/BRINGUP.md##
-* Before touching a capsule (##capsules/*.4th##): read ##experiments/bare_metal/README.md## -- the block ranges are shared by every capsule
-
-== Rules That Bite ==
-
-* No new branch, no ##git stash##, without Captain Bob's say-so.
-* Never modify a registered, tested FORTH word to "fix" it; the problem is in the caller.
-* ACL policy lives in ##ACL.4th##, not in C.
-* Tags are sacred: each has the logs proving its state.
+make -C v4 test-32
+

Each boot reaches [zuse@Hera] ok> with POST: PASSED and every POST check passing, and the three architectures report the same dict_hash. make ARCH=amd64,aarch64,riscv64 init installs everything this needs.

+
Acceptance -- the gate on every PR into masteracceptance.yml status runs
+
Build -- the quick check on StarForth-v4.0.0build.yml status runs
+
Nightly -- acceptance, images to Nexus, proofs (03:00 UTC)nightly.yml status runs
+
+
+

Reference

+

Where things are, and what not to do.

+
+
+

Where things are

+

start here

+
  • The repository — README.md, docs/README.md; the design record is docs/fabric/FABRIC-3.md
  • New issue — the forms: bug, work, ruling, board
  • Open features and bugs
  • Board bring-up — boards/BRINGUP.md
  • Before touching a capsule: read experiments/bare_metal/README.md — the block ranges are shared by every capsule
+
+
+

Rules that bite

+

learned the hard way

+
  • No new branch, no git stash, without Captain Bob's say-so.
  • Never modify a registered, tested FORTH word to fix it: the problem is in the caller.
  • ACL policy lives in ACL.4th, not in C.
  • Tags are sacred: each has the logs proving its state.
+
+
+
+ +
+{{/html}} diff --git a/site/org/Main.WebHome.xwiki b/site/org/Main.WebHome.xwiki index 69cd41e7..8a7b103a 100644 --- a/site/org/Main.WebHome.xwiki +++ b/site/org/Main.WebHome.xwiki @@ -1,40 +1,69 @@ -{{box cssClass="floatinginfobox" title="**StarshipOS**"}} -* **Kernel**: LithosAnanke v2.1.0 (UEFI, bare metal) -* **Runtime**: StarForth v4, the F18 engine (v3.2.0 kept) -* **Architectures**: amd64, aarch64, riscv64 -* **Boards**: PC (UEFI stick), Raspberry Pi 5, Milk-V Mars -* **Language**: C99 and FORTH -{{/box}} - -= StarshipOS = - -StarshipOS is an operating system with no other operating system underneath it. **LithosAnanke**, a -UEFI microkernel, boots straight from the firmware and runs **StarForth** -- a FORTH virtual -machine -- as its only runtime. There is no libc and no shell: the system speaks FORTH. - -This wiki is the project's working home: its design, its record and its dashboards. The public -face of StarshipOS -- what it is, and a machine to try in your browser -- is -[[starshipos-f18.com>>https://starshipos-f18.com/]]. - -== The Project == - -* [[The source>>https://gitea.starshipos-f18.org/rajames/LithosAnanke]] -- the kernel, StarForth, the proofs and the documents, in one repository -* [[Issues>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/issues]] -- what is found, ruled, built and verified -* [[Pull requests>>https://gitea.starshipos-f18.org/rajames/LithosAnanke/pulls]] -- the only way into ##master## - -== How a Change Is Accepted == - -Every change passes the same **acceptance protocol**, by hand or in CI: the kernel booted in QEMU on -amd64, aarch64 and riscv64 to its prompt, its power-on self-test passing every check; the PC stick -loaded the way a PC loads it; and the 32-bit build's tests. A pull request into ##master## runs it -by itself, and nothing that fails it is merged. - -|=Check|=Status -|Acceptance (pull requests)|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/acceptance.yml/badge.svg]] -|Nightly: acceptance, images, proofs|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly.yml/badge.svg?branch=master]] -|Nightly: documents|[[image:https://gitea.starshipos-f18.org/rajames/LithosAnanke/actions/workflows/nightly-docs.yml/badge.svg?branch=master]] - -== Contributors == - -Contributors have a dashboard of their own: [[log in>>path:/bin/login/XWiki/XWikiLogin]], then -[[Contributors>>Contributors.WebHome]]. +{{html clean="false"}} + + +
+
+ +
+
+

ok> the working home

+

Where StarshipOS is built.

+

StarshipOS is an operating system with no other operating system underneath it. LithosAnanke, a UEFI microkernel, boots straight from the firmware and runs StarForth, a FORTH virtual machine, as its only runtime. This wiki holds its design, its record and its dashboards; the public face is starshipos-f18.com.

+ +
+
+
v2.1.0
LithosAnanke, the UEFI microkernel
v4
StarForth, the F18 engine
3 ISAs
amd64 · aarch64 · riscv64
538
POST checks on every boot
+
+
+

The project

+

One repository, one process, one line to master.

+
+
+

The source

+

kernel, StarForth, proofs, documents

+

Everything in one repository: LithosAnanke, StarForth v3 and v4, the Isabelle/HOL proofs and the books.

Browse it → +
+
+

Issues

+

found, ruled, built, verified

+

Every piece of work starts as an issue with its evidence, and is ruled before it is built.

Open issues → +
+
+

Pull requests

+

the only way into master

+

master takes nothing but a pull request that passed the acceptance protocol.

Pull requests → +
+
+
+
+

How a change is accepted

+

Booted on three architectures, every time.

+

The kernel boots in QEMU on amd64, aarch64 and riscv64 to its prompt, its power-on self-test passing every check; the PC stick boots loaded the way a PC loads it; the 32-bit build passes its tests. A developer runs it by hand, a pull request runs it by itself, and the nightly runs it again before it publishes.

+
Acceptance -- the gate on every PR into masteracceptance.yml status
+
Nightly -- acceptance, images to Nexus, proofs (03:00 UTC)nightly.yml status
+
Nightly documents (04:00 UTC)nightly-docs.yml status
+
+
+
+
+

Contributors

+

Working on StarshipOS?

+

Contributors have a dashboard of their own: the method, the acceptance commands, the open work. Log in to see it.

+
+ +
+
+ +
+{{/html}} diff --git a/site/org/README.md b/site/org/README.md index 79fbea74..17c9a674 100644 --- a/site/org/README.md +++ b/site/org/README.md @@ -9,7 +9,12 @@ The project's working wiki at `starshipos-f18.org` (the public face is the `.com | `Admin.WebHome` -- the admin dashboard | `Admin.WebHome.xwiki` | the administrator (`XWiki.rajames`) alone | | `Contributors.WebHome` -- the contributors' dashboard | `Contributors.WebHome.xwiki` | the group `XWiki.StarshipContributors`, and the administrator | -The dashboards show CI as Gitea's live workflow badges, which need no login and no script rights. +They are in the starshipos-f18.com look -- the "StarshipOS.com" design canvas (navy `#0A1222`, accent +`#F5891F`, JetBrains Mono with Exo 2 headings), where they are also drawn as the `.org` artboards. +`build.py` writes the three `.xwiki` files (and, with `--canvas `, the artboards) from one +source: edit it, not the `.xwiki` files. Each page is one `{{html}}` block, which needs a page author +with script rights (the administrator has them). CI is shown as Gitea's live workflow badges, which +need no login. `install.sh` puts them on the wiki through its REST API, makes the group and the rights, and checks as a guest that the landing page is readable and the dashboards are not: diff --git a/site/org/build.py b/site/org/build.py new file mode 100644 index 00000000..2aeae249 --- /dev/null +++ b/site/org/build.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python3 +"""build.py -- the .org XWiki's three pages in the starshipos-f18.com look (the "StarshipOS.com" +design canvas: navy #0A1222, accent #F5891F, JetBrains Mono, Exo 2 headings), from one source. + + site/org/build.py writes Main.WebHome.xwiki, Admin.WebHome.xwiki, + Contributors.WebHome.xwiki (each one {{html}} block) + site/org/build.py --canvas + also writes /project/Org*.dc.html, the same pages as + design-canvas artboards (status badges drawn as placeholders: + a canvas loads nothing from Gitea) + +The {{html}} macro needs a page author with script rights. install.sh puts the pages on the wiki. +""" +import os +import sys + +GITEA = "https://gitea.starshipos-f18.org/rajames/LithosAnanke" +COM = "https://starshipos-f18.com/" +ISSUES = GITEA + "/issues?state=open" +ACCENT = "#F5891F" +TEAL = "#4FD1B0" + +FONTS = ('\n' + '') + +H = "font-family: 'Exo 2', sans-serif" +CARD = "background: #111C30; border: 1px solid #22324D; border-radius: 6px; padding: 28px" +EYEBROW = ("margin: 0 0 12px; font-size: 13px; letter-spacing: 0.14em; text-transform: uppercase; " + "color: {accent}") +BTN = ("display: inline-block; padding: 14px 24px; background: {accent}; color: #0A1222; " + "font-weight: 700; text-decoration: none; border-radius: 4px") +BTN2 = ("display: inline-block; padding: 14px 24px; border: 1px solid #34486A; color: #EEF2F7; " + "text-decoration: none; border-radius: 4px") +WRAP = "max-width: 1120px; margin: 0 auto" + +WORKFLOWS = { # file -> (branch for the badge, what it is) + "acceptance.yml": (None, "Acceptance -- the gate on every PR into master"), + "build.yml": ("StarForth-v4.0.0", "Build -- the quick check on StarForth-v4.0.0"), + "nightly.yml": ("master", "Nightly -- acceptance, images to Nexus, proofs (03:00 UTC)"), + "nightly-docs.yml": ("master", "Nightly documents (04:00 UTC)"), + "runner-image.yml": ("master", "Runner image"), + "release.yml": (None, "Release -- a v<version> tag"), +} + + +def badge(wf, canvas): + branch = WORKFLOWS[wf][0] + if canvas: + return ('[LIVE STATUS]') + q = "?branch=" + branch if branch else "" + return ('%s status' % (GITEA, wf, q, wf)) + + +def status_rows(wfs, canvas, runs=True): + rows = [] + for wf in wfs: + link = (' runs' % (GITEA, wf) + if runs else "") + rows.append('
' + '%s' + '%s%s
' + % (WORKFLOWS[wf][1], badge(wf, canvas), link)) + return "\n".join(rows) + + +def nav(here, links): + items = [] + for label, href, key in links: + cur = ' aria-current="page"' if key == here else "" + style = ("color: #EEF2F7; text-decoration: none; border-bottom: 2px solid {accent}" + if key == here else "color: #C8D1DE; text-decoration: none") + items.append('%s' % (href, cur, style, label)) + items.append('starshipos-f18.com →' + % COM) + return ('
\n' + '\n
' % (WRAP, links[0][1], H, "".join(items))) + + +FOOTER = ('
\n' + '
\n' + '© 2026 Robert Allan James · A Starship Foundation project (in formation)\n' + 'Source' + 'starshipos-f18.com\n
\n
' % (WRAP, GITEA, COM)) + + +def hero(eyebrow, title, text, buttons=""): + return ('
\n' + '

%s

\n' + '

%s

\n' + '

%s

\n%s' + '
' % (WRAP, EYEBROW.replace("{accent}", TEAL), eyebrow, H, title, text, + ('
%s
\n' % buttons) + if buttons else "")) + + +def section(eyebrow, title, body, pad="48px 24px"): + return ('
\n

%s

\n' + '

%s

\n' + '%s\n
' % (WRAP, pad, EYEBROW, eyebrow, H, title, body)) + + +def card(title, sub, body): + return ('
\n

%s

\n' + '

%s

\n%s\n
' + % (CARD, H, title, sub, body)) + + +def grid(items, min_w=280): + return ('
\n%s\n
' % (min_w, "\n".join(items))) + + +def links(items): + return ('
    %s
' + % "".join("
  • %s
  • " % i for i in items)) + + +def a(href, text): + return '%s' % (href, text) + + +def code(s): + return '%s' % s + + +def page_main(canvas, url): + links_ = [("Home", url("Main"), "Main"), ("Contributors", url("Contributors"), "Contributors")] + glance = [("v2.1.0", "LithosAnanke, the UEFI microkernel"), ("v4", "StarForth, the F18 engine"), + ("3 ISAs", "amd64 · aarch64 · riscv64"), ("538", "POST checks on every boot")] + strip = ('
    \n
    %s
    \n
    ' + % (WRAP, "".join('
    %s
    ' + '
    %s
    ' % (H, n, t) + for n, t in glance))) + project = section("The project", "One repository, one process, one line to master.", grid([ + card("The source", "kernel, StarForth, proofs, documents", + '

    Everything in one repository: LithosAnanke, ' + 'StarForth v3 and v4, the Isabelle/HOL proofs and the books.

    ' + a(GITEA, "Browse it →")), + card("Issues", "found, ruled, built, verified", + '

    Every piece of work starts as an issue with its ' + 'evidence, and is ruled before it is built.

    ' + a(GITEA + "/issues", "Open issues →")), + card("Pull requests", "the only way into master", + '

    master takes nothing but a pull request that ' + 'passed the acceptance protocol.

    ' + a(GITEA + "/pulls", "Pull requests →")), + ]), pad="96px 24px 48px") + accept = section("How a change is accepted", "Booted on three architectures, every time.", + '

    The kernel boots in QEMU ' + 'on amd64, aarch64 and riscv64 to its prompt, its power-on self-test passing every check; ' + 'the PC stick boots loaded the way a PC loads it; the 32-bit build passes its tests. A ' + 'developer runs it by hand, a pull request runs it by itself, and the nightly runs it ' + 'again before it publishes.

    \n
    %s
    ' + % (CARD, status_rows(["acceptance.yml", "nightly.yml", "nightly-docs.yml"], canvas, False))) + contrib = ('
    \n
    \n
    \n' + '

    Contributors

    \n

    ' + 'Working on StarshipOS?

    \n

    Contributors have a dashboard ' + 'of their own: the method, the acceptance commands, the open work. Log in to see it.

    \n
    \n' + '\n
    \n
    ' + % (WRAP, CARD, EYEBROW, H, url("login"), BTN, url("Contributors"), BTN2)) + return "\n".join([ + nav("Main", links_), + hero("ok> the working home", "Where StarshipOS is built.", + "StarshipOS is an operating system with no other operating system underneath it. LithosAnanke, a " + "UEFI microkernel, boots straight from the firmware and runs StarForth, a FORTH virtual machine, " + "as its only runtime. This wiki holds its design, its record and its dashboards; the public face " + "is " + a(COM, "starshipos-f18.com") + ".", + 'Browse the sourceTry it in a browser' + % (GITEA, BTN, COM + "bin/view/TryIt/", BTN2)), + strip, project, accept, contrib, FOOTER]) + + +def page_admin(canvas, url): + links_ = [("Home", url("Main"), "Main"), ("Contributors", url("Contributors"), "Contributors"), + ("Admin", url("Admin"), "Admin")] + ci = section("CI", "Every workflow, live.", '
    %s
    ' % (CARD, status_rows(list(WORKFLOWS), canvas)), + pad="0 24px 48px") + work = card("Work", "Gitea", links([ + a(GITEA + "/pulls?state=open", "Open pull requests"), + a(ISSUES, "Open issues") + " — " + a(ISSUES + "&labels=23", "in progress") + ", " + + a(ISSUES + "&labels=20", "blocked") + ", " + a(ISSUES + "&labels=21", "needs acceptance"), + a(GITEA + "/milestones", "Milestones") + " and " + a(GITEA + "/projects", "the project board"), + a(GITEA + "/settings/branches", "Branch protection") + " — master: no pushes, merges only after Acceptance", + a(GITEA + "/settings/actions/secrets", "Actions secrets") + " — " + code("NEXUS_CI_PASSWORD") + ", " + + code("PACKAGES_TOKEN") + ", " + code("CAPSULE_SIGN_KEY"), + a(GITEA + "/settings/actions/runners", "Runners"), + a("https://gitea.starshipos-f18.org/user/settings/applications", "Access tokens") + + " — revoke what a session no longer needs"])) + arts = card("Artifacts", "Nexus and packages", links([ + a("https://nexus.starshipos-f18.org/#browse/browse:starshipos-snapshots:org%2Fstarship", "Snapshots") + + " — " + code("kernelImage") + " (pc, raspi5, milkv, logs), " + code("documentation") + + " (book, vol1–vol3, api)", + a("https://nexus.starshipos-f18.org/#browse/browse:starshipos-releases:org%2Fstarship", "Releases"), + a("https://gitea.starshipos-f18.org/rajames/-/packages", "Container images") + " — " + + code("lithosananke-runner"), ])) + sites = card("Sites", "and the wiki itself", links([ + a(COM, "starshipos-f18.com") + " and " + a(COM + "bin/view/TryIt/", "Try it"), + a(url("Contributors"), "Contributors' dashboard"), + a(url("admin"), "Wiki administration") + " — users, the group " + code("XWiki.StarshipContributors") + + ", rights"])) + return "\n".join([ + nav("Admin", links_), + hero("Administrator only", "Admin dashboard.", + "Seen by " + code("XWiki.rajames") + " alone: the Admin space allows view and edit to that " + "account and nobody else."), + ci, section("Run the project", "Work, artifacts, sites.", grid([work, arts, sites], 300), pad="0 24px 96px"), + FOOTER]) + + +def page_contrib(canvas, url): + links_ = [("Home", url("Main"), "Main"), ("Contributors", url("Contributors"), "Contributors")] + steps = [("Found", "An issue says what is wrong or missing, with the evidence: a log, a line of code."), + ("Ruled", "Captain Bob decides what is to be done. Nothing is built without a ruling, and no fix " + "nobody asked for."), + ("Built", "On the working branch, " + code("StarForth-v4.0.0") + ". C99, no GNU extensions; compose " + "in FORTH before adding a C word."), + ("Verified", "The acceptance protocol, below; its logs are committed under " + code("logs/") + "."), + ("Merged", "A pull request into " + code("master") + ", which runs acceptance by itself. master takes " + "nothing else.")] + method = section("How we work", "The Captain Bob method.", + '

    Neither agile nor waterfall: ' + 'one process from the developer\'s desk to master.

    \n' + grid( + ['
    ' + '%d

    %s

    ' + '

    %s

    ' + % (CARD, H, i + 1, H, t, d) for i, (t, d) in enumerate(steps)], 190), pad="0 24px 48px") + cmds = ("make -f kernel/Makefile ARCH=amd64 clean qemu\n" + "make -f kernel/Makefile ARCH=aarch64 clean qemu\n" + "make -f kernel/Makefile ARCH=riscv64 clean qemu\n" + "make -f kernel/Makefile ARCH=amd64 clean qemu-stick-high\n" + "make -C v4 test-32") + accept = section("The acceptance protocol", "In this order, one QEMU at a time, in the foreground.", + '
    '
    +                     '%s
    \n

    Each boot reaches ' + '%s with %s and every POST check passing, and the three architectures report the same ' + '%s. %s installs everything this needs.

    \n
    %s
    ' + % (cmds, code("[zuse@Hera] ok>"), code("POST: PASSED"), code("dict_hash"), + code("make ARCH=amd64,aarch64,riscv64 init"), CARD, + status_rows(["acceptance.yml", "build.yml", "nightly.yml"], canvas))) + where = card("Where things are", "start here", links([ + a(GITEA, "The repository") + " — " + code("README.md") + ", " + code("docs/README.md") + + "; the design record is " + code("docs/fabric/FABRIC-3.md"), + a(GITEA + "/issues/new/choose", "New issue") + " — the forms: bug, work, ruling, board", + a(ISSUES + "&labels=2", "Open features") + " and " + a(ISSUES + "&labels=1", "bugs"), + a(ISSUES + "&milestone=2", "Board bring-up") + " — " + code("boards/BRINGUP.md"), + "Before touching a capsule: read " + code("experiments/bare_metal/README.md") + + " — the block ranges are shared by every capsule"])) + rules = card("Rules that bite", "learned the hard way", links([ + "No new branch, no " + code("git stash") + ", without Captain Bob's say-so.", + "Never modify a registered, tested FORTH word to fix it: the problem is in the caller.", + "ACL policy lives in " + code("ACL.4th") + ", not in C.", + "Tags are sacred: each has the logs proving its state."])) + return "\n".join([ + nav("Contributors", links_), + hero("Contributors", "Contributors' dashboard.", + "For the members of " + code("XWiki.StarshipContributors") + " and the administrator. " + "Ask Captain Bob to be added."), + method, accept, section("Reference", "Where things are, and what not to do.", + grid([where, rules], 360), pad="0 24px 96px"), + FOOTER]) + + +PAGES = { # name -> (builder, title, canvas file, canvas height) + "Main": (page_main, "StarshipOS", "OrgHome.dc.html", 2300), + "Admin": (page_admin, "Admin Dashboard", "OrgAdmin.dc.html", 1900), + "Contributors": (page_contrib, "Contributors' Dashboard", "OrgContributors.dc.html", 2500), +} + + +def wiki_url(key): + return {"login": "/bin/login/XWiki/XWikiLogin?xredirect=/bin/view/Contributors/", + "admin": "/bin/admin/XWiki/XWikiPreferences"}.get(key, "/bin/view/%s/" % key) + + +def canvas_url(key): + files = {k: v[2] for k, v in PAGES.items()} + return files.get(key, "https://starshipos-f18.org" + wiki_url(key)) + + +def body(name, canvas): + html = PAGES[name][0](canvas, canvas_url if canvas else wiki_url) + return ('
    \n%s\n
    ' % html) + + +def write_wiki(name): + html = body(name, False).replace("{accent}", ACCENT) + with open("%s.WebHome.xwiki" % name, "w") as f: + f.write('{{html clean="false"}}\n%s\n%s\n{{/html}}\n' % (FONTS, html)) + + +def write_canvas(name, root): + title, file, h = PAGES[name][1], PAGES[name][2], PAGES[name][3] + html = body(name, True).replace("{accent}", "{{accent}}") + doc = ('\n\n\n\nStarshipOS.org — %s' + '\n\n\n\n\n\n%s\n\n\n%s\n' + '\n\n\n\n' % (title, FONTS, html, h)) + os.makedirs(os.path.join(root, "project"), exist_ok=True) + with open(os.path.join(root, "project", file), "w") as f: + f.write(doc) + + +if __name__ == "__main__": + os.chdir(os.path.dirname(os.path.abspath(__file__))) + canvas_root = sys.argv[2] if len(sys.argv) > 2 and sys.argv[1] == "--canvas" else None + for n in PAGES: + write_wiki(n) + if canvas_root: + write_canvas(n, canvas_root) + print("wrote", ", ".join("%s.WebHome.xwiki" % n for n in PAGES), + "and the canvas artboards" if canvas_root else "") From 89189514829e6500dbc33c76ff066f4ddbf00700 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 13:31:31 +0000 Subject: [PATCH 06/19] site/com: the .com pages from the design canvas, installed Captain Bob, 2026-11-07: build the .com from the StarshipOS.com canvas. canvas/ holds the artboards as drawn; build.py makes Main, Inquiries and TryIt as {{html}} pages (the wiki's links and domains, the images as attachments, the real console in Try it, the forms by e-mail); install.sh puts them on the wiki and checks a guest's view. Installed on starshipos-f18.com: every page and image reads 200 as a guest, and renders without a macro error. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- site/com/Inquiries.WebHome.xwiki | 95 +++++++++++++++++++ site/com/Main.WebHome.xwiki | 128 +++++++++++++++++++++++++ site/com/README.md | 18 ++++ site/com/TryIt.WebHome.xwiki | 104 ++++++++++++++++++++ site/com/badge.jpg | Bin 0 -> 133457 bytes site/com/build.py | 92 ++++++++++++++++++ site/com/canvas/Inquiries.dc.html | 118 +++++++++++++++++++++++ site/com/canvas/Main.dc.html | 151 ++++++++++++++++++++++++++++++ site/com/canvas/TryIt.dc.html | 136 +++++++++++++++++++++++++++ site/com/captain-bob.jpg | Bin 0 -> 98106 bytes site/com/install.sh | 49 ++++++++++ site/org/build.py | 0 12 files changed, 891 insertions(+) create mode 100644 site/com/Inquiries.WebHome.xwiki create mode 100644 site/com/Main.WebHome.xwiki create mode 100644 site/com/README.md create mode 100644 site/com/TryIt.WebHome.xwiki create mode 100644 site/com/badge.jpg create mode 100755 site/com/build.py create mode 100644 site/com/canvas/Inquiries.dc.html create mode 100644 site/com/canvas/Main.dc.html create mode 100644 site/com/canvas/TryIt.dc.html create mode 100644 site/com/captain-bob.jpg create mode 100755 site/com/install.sh mode change 100644 => 100755 site/org/build.py diff --git a/site/com/Inquiries.WebHome.xwiki b/site/com/Inquiries.WebHome.xwiki new file mode 100644 index 00000000..672f40db --- /dev/null +++ b/site/com/Inquiries.WebHome.xwiki @@ -0,0 +1,95 @@ +{{html clean="false"}} + + +
    + +
    + +
    + +
    +

    Inquiries

    +

    Talk to the bridge.

    +

    Licensing, research collaboration, press or plain curiosity — every message is read by a human. Want to contribute code? Head to starshipos-f18.org.

    +
    + +
    + +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +Opens your e-mail program. Replies usually within a few days. +
    +
    + + + +
    + + + +
    +{{/html}} diff --git a/site/com/Main.WebHome.xwiki b/site/com/Main.WebHome.xwiki new file mode 100644 index 00000000..0d622f26 --- /dev/null +++ b/site/com/Main.WebHome.xwiki @@ -0,0 +1,128 @@ +{{html clean="false"}} + + +
    + +
    + +
    + +
    +
    +

    ok> bare metal · FORTH · C99

    +

    An operating system that obeys a conservation law.

    +

    StarshipOS is a bare-metal operating system built from the ground up in StarForth and C99. One compudynamic engine governs every word, message, block and virtual machine — and holds K≡1.0 on every architecture it runs on.

    + +
    +
    +StarshipOS badge: Santino the mascot inside a ring on a starfield +
    +
    + +
    +
    +
    38,400+
    experimental runs validating K≡1.0
    +
    3 ISAs
    amd64 · aarch64 · riscv64
    +
    FORTH-79
    compliant core, live at the ok> prompt
    +
    Patent pending
    LithosAnanke kernel architecture
    +
    +
    + +
    +

    The system

    +

    One engine. One fabric. Everything in it obeys the same physics.

    +
    +
    +

    StarForth

    +

    the language and the VM

    +

    A FORTH-79 compliant adaptive virtual machine written in C99. Words execute by heat: what the system uses, it keeps close. Everything a user touches is StarForth — there is no compiler inside the box.

    +
    +
    +

    LithosAnanke

    +

    the microkernel

    +

    A bare-metal microkernel built around the Stadium — a single fabric where words, messages, blocks and VMs live side by side, all governed by one compudynamic engine.

    +
    +
    +

    The fleet

    +

    VMs that are born, not spawned

    +

    Hera births and governs the fleet. Artemis keeps the blocks. Console draws a vector framebuffer. Hermes, in the kernel, carries every message — and every message is checked against its ACL.

    +
    +
    +
    + +
    +
    +

    Phenomenon first

    Observe the behaviour, then write the mathematics. Document before code.

    +

    Parity first

    The same machine on every ISA, proven by reproducible dictionary hashes.

    +

    Identity on a key

    Your certificate lives on a thumb drive. No key, no session.

    +

    Minimal by design

    A small core of primitives; everything else composed in FORTH.

    +
    +
    + +
    +
    +
    +

    Research

    +

    James Law: K≡1.0

    +

    A conservation invariant that holds regardless of instruction set. Validated across 38,400+ runs in 128 configurations under QEMU on amd64, aarch64 and riscv64, and published on SSRN.

    +
    + +
    +
    + +
    +

    Next: silicon

    +

    From virtual machine to fabric.

    +

    StarForth V4 is being brought up as a mesh of tiny stack-machine cores on FPGA — words as instructions, messaging in hardware, and the compudynamic engine steering what runs and when. Same machine, same parity, now in logic.

    +
    + +
    +
    +Painted portrait of Captain Bob at a keyboard with a mug of coffee, wearing a StarshipOS jacket +
    +

    From the bridge

    +

    Built by one engineer, in the open.

    +

    StarshipOS is designed and built by Captain Bob — Robert Allan James — drawing on roughly fifty years of embedded-systems work. Development happens in Ashland, Ohio, and in public on starshipos-f18.org.

    +Get in touch +
    +
    +
    + +
    +
    +
    +

    Launch announcements

    +

    Milestones, releases and papers. Low volume. Unsubscribe anytime.

    +
    +
    + + + +
    +
    +
    + + + +
    +{{/html}} diff --git a/site/com/README.md b/site/com/README.md new file mode 100644 index 00000000..782c042a --- /dev/null +++ b/site/com/README.md @@ -0,0 +1,18 @@ +# site/com -- the starshipos-f18.com XWiki's pages + +The public face of StarshipOS, made from the "StarshipOS.com" design canvas (claude.ai), whose +artboards are copied into `canvas/` as they are: Home (`Main.WebHome`), `Inquiries.WebHome`, +`TryIt.WebHome`. `build.py` turns each into one `{{html}}` block (a page author with script rights) +and says what changes on the way: the wiki's links and domains, the images as attachments +(`badge.jpg`, `captain-bob.jpg`, web-size copies of the canvas's), the real console in Try it, the +forms by e-mail. `install.sh` puts them on the wiki and checks a guest can read them: + +``` +site/com/build.py +XWIKI_USER=rajames XWIKI_PASSWORD=... site/com/install.sh +``` + +Change the design on the canvas, copy the artboard into `canvas/`, and run both again. + +Installed 2026-11-07. Try it is on the wiki but not in the navigation (#117): its console, +`try.starshipos-f18.com`, is not served yet (#115). diff --git a/site/com/TryIt.WebHome.xwiki b/site/com/TryIt.WebHome.xwiki new file mode 100644 index 00000000..c2da0a81 --- /dev/null +++ b/site/com/TryIt.WebHome.xwiki @@ -0,0 +1,104 @@ +{{html clean="false"}} + + +
    + +
    + +
    + +
    +

    ok> try it

    +

    A StarshipOS machine of your own.

    +

    Not a recording, not a simulation of StarshipOS: the console below is a real machine, started just for you and already at its prompt. You are Zuse, the superuser — of a machine that exists only for your session. There is nothing to break, and nothing you do is kept.

    +
    + +
    +
    +
    +StarshipOS · amd64 · your session +try.starshipos-f18.com +
    + +
    +

    If the console does not connect, every machine is in use: try again in a few minutes.

    +
    + +
    +
    +
    Zuse
    the superuser, of this machine only
    +
    amd64
    LithosAnanke v2.1.0 · StarForth v4
    +
    30 min
    then it is gone; reload for a new one
    +
    Offline
    no network inside the machine
    +
    +
    + +
    +

    Things to try

    +

    StarshipOS speaks FORTH.

    +

    Type a line and press Enter. When the machine has done it, it answers ok.

    +
    +
    +

    You type

    +

    3 4 + .

    +

    It answers

    +

    7 ok

    +

    Numbers go on a stack; + adds the top two; . prints the result.

    +
    +
    +

    You type

    +

    : SQUARE DUP * ;

    +

    It answers

    +

    ok

    +

    You have just taught the machine a new word, SQUARE.

    +
    +
    +

    You type

    +

    7 SQUARE .

    +

    It answers

    +

    49 ok

    +

    …and used it, as if it had always been there.

    +
    +
    +
    + +
    +
    +

    A machine of your own

    Resumed at its prompt from one that booted, passed its 538 power-on self-tests and logged Zuse in — so you never wait for a boot.

    +

    The latest green build

    Always the most recent build that booted on amd64, aarch64 and riscv64 and passed every acceptance check.

    +

    A Zuse of its own

    Zuse is whoever holds the identity drive. Here it is a demo Zuse minted for this page alone — not anyone's real identity.

    +

    Gone when you go

    Close the page, or let 30 minutes pass, and the machine is stopped and discarded. The next visitor starts clean.

    +
    +
    + +
    +
    +
    +

    A small server

    +

    Emulated, so a little slower.

    +

    The demo runs in an emulator on a modest server: slower than StarshipOS on real hardware, and only a few machines at once. The real thing boots straight from firmware, with nothing beneath it.

    +
    + +
    +
    + + + +
    +{{/html}} diff --git a/site/com/badge.jpg b/site/com/badge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe2b6bd13b9c3ef309bacf42553275f070800156 GIT binary patch literal 133457 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 literal 0 HcmV?d00001 diff --git a/site/com/build.py b/site/com/build.py new file mode 100755 index 00000000..30866304 --- /dev/null +++ b/site/com/build.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +"""build.py -- the starshipos-f18.com XWiki pages, made from the "StarshipOS.com" design canvas. + + site/com/build.py canvas/{Main,Inquiries,TryIt}.dc.html -> {Main,Inquiries,TryIt}.WebHome.xwiki + +The canvas is the source: its artboards are copied into canvas/ as they are, and this turns each into +one {{html}} block (which needs a page author with script rights). What changes on the way: + + - the accent hole becomes its default colour, and the canvas's links become the wiki's pages + (Main.dc.html -> /bin/view/Main/, ...) and the real domains (starshipos.org -> starshipos-f18.org); + - the two images become attachments of Main.WebHome (badge.jpg, captain-bob.jpg -- web-size copies + of the canvas's uploads); + - Try it: the drawn console becomes the real one, an iframe of try.starshipos-f18.com; + - the forms, which have no server behind them, send by e-mail (mailto:); + - a link the canvas left as a placeholder ([SSRN PAPER URL]) points at the .org until it is given. + +install.sh puts the pages and the images on the wiki. +""" +import os +import re + +ACCENT = "#F5891F" +FONTS = ('\n' + '') +ORG = "https://starshipos-f18.org/" +PAGES = ["Main", "Inquiries", "TryIt"] +IMAGES = {"/_blob/5b564d54d98e02ad600c913a9a1888f2": "badge.jpg", + "/_blob/5483451f292782a8b366e437181c4bcf": "captain-bob.jpg"} + +CONSOLE = '''

    +
    +StarshipOS · amd64 · your session +try.starshipos-f18.com +
    + +
    +

    If the console does not connect, every machine is in use: try again in a few minutes.

    ''' + + +def body(src): + m = re.search(r"(.*)", src, re.S) + html = re.sub(r".*?", "", m.group(1), flags=re.S).strip() + html = html.replace("{{accent}}", ACCENT) + for p in PAGES: + html = html.replace('href="%s.dc.html"' % p, 'href="/bin/view/%s/"' % p) + html = html.replace('href="https://starshipos.org"', 'href="%s"' % ORG) + html = html.replace(">starshipos.org", ">starshipos-f18.org") + html = html.replace("on starshipos.org.", "on starshipos-f18.org.") + html = html.replace('href="[SSRN PAPER URL]"', 'href="%s"' % ORG) + for blob, name in IMAGES.items(): + html = html.replace('src="%s"' % blob, 'src="/bin/download/Main/WebHome/%s"' % name) + html = html.replace("min-height: 100vh", "min-height: 0") # inside the wiki's page, not a screen + return html + + +def try_it(html): + start = html.index('
    ", html.index("[LIVE CONSOLE]")) + len("

    ") + return html[:start] + CONSOLE + html[end:] + + +def forms(html, page): + if page == "Main": + html = html.replace('
    ', + '') + html = html.replace(' + + + +StarshipOS — Inquiries + + + + + + + + + +
    + +
    + +
    + +
    +

    Inquiries

    +

    Talk to the bridge.

    +

    Licensing, research collaboration, press or plain curiosity — every message is read by a human. Want to contribute code? Head to starshipos.org.

    +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +Replies usually within a few days. +
    + + + + +
    + +
    +
    +© 2026 Robert Allan James · A Starship Foundation project (in formation) +Homestarshipos.org +
    +
    + +
    +
    + + + diff --git a/site/com/canvas/Main.dc.html b/site/com/canvas/Main.dc.html new file mode 100644 index 00000000..9bb787ce --- /dev/null +++ b/site/com/canvas/Main.dc.html @@ -0,0 +1,151 @@ + + + + +StarshipOS — Home + + + + + + + + + +
    + +
    + +
    + +
    +
    +

    ok> bare metal · FORTH · C99

    +

    An operating system that obeys a conservation law.

    +

    StarshipOS is a bare-metal operating system built from the ground up in StarForth and C99. One compudynamic engine governs every word, message, block and virtual machine — and holds K≡1.0 on every architecture it runs on.

    + +
    +
    +StarshipOS badge: Santino the mascot inside a ring on a starfield +
    +
    + +
    +
    +
    38,400+
    experimental runs validating K≡1.0
    +
    3 ISAs
    amd64 · aarch64 · riscv64
    +
    FORTH-79
    compliant core, live at the ok> prompt
    +
    Patent pending
    LithosAnanke kernel architecture
    +
    +
    + +
    +

    The system

    +

    One engine. One fabric. Everything in it obeys the same physics.

    +
    +
    +

    StarForth

    +

    the language and the VM

    +

    A FORTH-79 compliant adaptive virtual machine written in C99. Words execute by heat: what the system uses, it keeps close. Everything a user touches is StarForth — there is no compiler inside the box.

    +
    +
    +

    LithosAnanke

    +

    the microkernel

    +

    A bare-metal microkernel built around the Stadium — a single fabric where words, messages, blocks and VMs live side by side, all governed by one compudynamic engine.

    +
    +
    +

    The fleet

    +

    VMs that are born, not spawned

    +

    Hera births and governs the fleet. Artemis keeps the blocks. Console draws a vector framebuffer. Hermes, in the kernel, carries every message — and every message is checked against its ACL.

    +
    +
    +
    + +
    +
    +

    Phenomenon first

    Observe the behaviour, then write the mathematics. Document before code.

    +

    Parity first

    The same machine on every ISA, proven by reproducible dictionary hashes.

    +

    Identity on a key

    Your certificate lives on a thumb drive. No key, no session.

    +

    Minimal by design

    A small core of primitives; everything else composed in FORTH.

    +
    +
    + +
    +
    +
    +

    Research

    +

    James Law: K≡1.0

    +

    A conservation invariant that holds regardless of instruction set. Validated across 38,400+ runs in 128 configurations under QEMU on amd64, aarch64 and riscv64, and published on SSRN.

    +
    + +
    +
    + +
    +

    Next: silicon

    +

    From virtual machine to fabric.

    +

    StarForth V4 is being brought up as a mesh of tiny stack-machine cores on FPGA — words as instructions, messaging in hardware, and the compudynamic engine steering what runs and when. Same machine, same parity, now in logic.

    +
    + +
    +
    +Painted portrait of Captain Bob at a keyboard with a mug of coffee, wearing a StarshipOS jacket +
    +

    From the bridge

    +

    Built by one engineer, in the open.

    +

    StarshipOS is designed and built by Captain Bob — Robert Allan James — drawing on roughly fifty years of embedded-systems work. Development happens in Ashland, Ohio, and in public on starshipos.org.

    +Get in touch +
    +
    +
    + +
    +
    +
    +

    Launch announcements

    +

    Milestones, releases and papers. Low volume. Unsubscribe anytime.

    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + diff --git a/site/com/canvas/TryIt.dc.html b/site/com/canvas/TryIt.dc.html new file mode 100644 index 00000000..e6cc2522 --- /dev/null +++ b/site/com/canvas/TryIt.dc.html @@ -0,0 +1,136 @@ + + + + +StarshipOS — Try it + + + + + + + + + +
    + +
    + +
    + +
    +

    ok> try it

    +

    A StarshipOS machine of your own.

    +

    Not a recording, not a simulation of StarshipOS: the console below is a real machine, started just for you and already at its prompt. You are Zuse, the superuser — of a machine that exists only for your session. There is nothing to break, and nothing you do is kept.

    +
    + +
    +
    +
    +StarshipOS · amd64 · your session +try.starshipos-f18.com +
    +
    +
    StarshipOS -- starting a throwaway machine, yours for up to 30 minutes. Nothing you do is kept.
    +
    Try: 3 4 + . : SQUARE DUP * ; 7 SQUARE .
    +
    Ready -- type a line and press Enter.
    +
    [zuse@Hera] ok> 3 4 + .
    +
    [zuse@Hera] 7 ok
    +
    [zuse@Hera] ok> : SQUARE DUP * ; 7 SQUARE .
    +
    [zuse@Hera] 49 ok
    +
    [zuse@Hera] ok>
    +
    +
    +

    [LIVE CONSOLE] On the site this panel is the machine itself — the console of try.starshipos-f18.com, embedded. If it does not connect, every machine is in use; try again in a few minutes.

    +
    + +
    +
    +
    Zuse
    the superuser, of this machine only
    +
    amd64
    LithosAnanke v2.1.0 · StarForth v4
    +
    30 min
    then it is gone; reload for a new one
    +
    Offline
    no network inside the machine
    +
    +
    + +
    +

    Things to try

    +

    StarshipOS speaks FORTH.

    +

    Type a line and press Enter. When the machine has done it, it answers ok.

    +
    +
    +

    You type

    +

    3 4 + .

    +

    It answers

    +

    7 ok

    +

    Numbers go on a stack; + adds the top two; . prints the result.

    +
    +
    +

    You type

    +

    : SQUARE DUP * ;

    +

    It answers

    +

    ok

    +

    You have just taught the machine a new word, SQUARE.

    +
    +
    +

    You type

    +

    7 SQUARE .

    +

    It answers

    +

    49 ok

    +

    …and used it, as if it had always been there.

    +
    +
    +
    + +
    +
    +

    A machine of your own

    Resumed at its prompt from one that booted, passed its 538 power-on self-tests and logged Zuse in — so you never wait for a boot.

    +

    The latest green build

    Always the most recent build that booted on amd64, aarch64 and riscv64 and passed every acceptance check.

    +

    A Zuse of its own

    Zuse is whoever holds the identity drive. Here it is a demo Zuse minted for this page alone — not anyone's real identity.

    +

    Gone when you go

    Close the page, or let 30 minutes pass, and the machine is stopped and discarded. The next visitor starts clean.

    +
    +
    + +
    +
    +
    +

    A small server

    +

    Emulated, so a little slower.

    +

    The demo runs in an emulator on a modest server: slower than StarshipOS on real hardware, and only a few machines at once. The real thing boots straight from firmware, with nothing beneath it.

    +
    + +
    +
    + + + +
    +
    + + + diff --git a/site/com/captain-bob.jpg b/site/com/captain-bob.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e421e1659090a18835f4d1cd74ddeefc2b6d458 GIT binary patch literal 98106 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 <file>: create or replace <space>.WebHome + local body + body=$(python3 -c ' +import sys +from xml.sax.saxutils import escape +print("<page xmlns=\"http://www.xwiki.org\"><title>%sxwiki/2.1" + "%s" % (escape(sys.argv[1]), escape(open(sys.argv[2]).read())))' "$2" "$3") + curl -fsS -o /dev/null -w " page $1.WebHome: %{http_code}\n" "${auth[@]}" -X PUT \ + -H 'Content-Type: application/xml' --data-binary "$body" "$rest/spaces/$1/pages/WebHome" +} +attach() { # attach : create or replace an attachment of .WebHome + curl -fsS -o /dev/null -w " attachment $1.WebHome/$2: %{http_code}\n" "${auth[@]}" -X PUT \ + -H 'Content-Type: image/jpeg' --data-binary "@$2" "$rest/spaces/$1/pages/WebHome/attachments/$2" +} + +echo "=== $base, as $user" +page Main "StarshipOS" Main.WebHome.xwiki +attach Main badge.jpg +attach Main captain-bob.jpg +page Inquiries "Inquiries" Inquiries.WebHome.xwiki +page TryIt "Try StarshipOS" TryIt.WebHome.xwiki + +echo "=== as a guest" +bad= +for u in /bin/view/Main/ /bin/view/Inquiries/ /bin/view/TryIt/ \ + /bin/download/Main/WebHome/badge.jpg /bin/download/Main/WebHome/captain-bob.jpg; do + code=$(curl -s -o /dev/null -w '%{http_code}' "$base$u") + if [ "$code" = 200 ]; then echo " $u: 200"; else echo " $u: $code -- NOT readable"; bad=1; fi +done +[ -z "$bad" ] || { echo "install: a guest cannot read everything; see above" >&2; exit 1; } +echo "=== done: $base/bin/view/Main/" diff --git a/site/org/build.py b/site/org/build.py old mode 100644 new mode 100755 From 7d9dd4e4a9811f711edb4a7ee9fe984460bf0caa Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 13:32:56 +0000 Subject: [PATCH 07/19] site/org: installed; rights before pages; objects as XML The first run on starshipos-f18.org created the dashboards, then XWiki refused the group and rights objects: a form-encoded POST needs XWiki's form token (CSRF), an XML one does not. For about two minutes Admin.WebHome and Contributors.WebHome were readable by guests (links and the names of secrets, no values). Objects now go as XML, and the spaces' rights are made before the pages, so a failed run cannot leave a dashboard open. Installed: Main 200, Admin and Contributors 401 as a guest, 200 as rajames; a second run changes nothing. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- site/org/install.sh | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/site/org/install.sh b/site/org/install.sh index 3d241faf..2310315a 100755 --- a/site/org/install.sh +++ b/site/org/install.sh @@ -46,18 +46,20 @@ objects() { # objects : how many the page has python3 -c 'import json,sys; print(len(json.load(sys.stdin).get("objectSummaries") or []))' } object() { # object ...: add one + # as XML: XWiki refuses a form-encoded POST without its form token (CSRF), not an XML one local s=$1 p=$2 c=$3; shift 3 - local args=(--data-urlencode "className=$c") - for kv in "$@"; do args+=(--data-urlencode "property#$kv"); done - curl -fsS -o /dev/null -w " $s.$p: $c added (%{http_code})\n" "${auth[@]}" -X POST "${args[@]}" \ - "$rest/spaces/$s/pages/$p/objects" + local body + body=$(python3 -c ' +import sys +from xml.sax.saxutils import escape +props = "".join("%s" % (escape(k), escape(v)) + for k, v in (a.split("=", 1) for a in sys.argv[2:])) +print("%s%s" % (escape(sys.argv[1]), props))' "$c" "$@") + curl -fsS -o /dev/null -w " $s.$p: $c added (%{http_code})\n" "${auth[@]}" -X POST \ + -H 'Content-Type: application/xml' --data-binary "$body" "$rest/spaces/$s/pages/$p/objects" } echo "=== $base, as $user" -page Main WebHome "StarshipOS" Main.WebHome.xwiki -page Admin WebHome "Admin Dashboard" Admin.WebHome.xwiki -page Contributors WebHome "Contributors' Dashboard" Contributors.WebHome.xwiki - echo "=== the group $group" page XWiki StarshipContributors "Starship Contributors" if [ "$(objects XWiki StarshipContributors XWiki.XWikiGroups)" = 0 ]; then @@ -84,6 +86,11 @@ else echo " Contributors: rights there already, left as they are" fi +echo "=== the pages -- after their spaces' rights, so a dashboard is never readable without them" +page Main WebHome "StarshipOS" Main.WebHome.xwiki +page Admin WebHome "Admin Dashboard" Admin.WebHome.xwiki +page Contributors WebHome "Contributors' Dashboard" Contributors.WebHome.xwiki + echo "=== as a guest" bad= for p in Main Admin Contributors; do From c2ff10015f5064721a2daec20d4b5d5258a53edf Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 13:47:37 +0000 Subject: [PATCH 08/19] site: the design's colours over the wikis' high-contrast theme; .org inquiries - site/colorlock.py: both XWikis force black and white with !important (a HIGH CONTRAST DARK THEME block in the skin's cssVariablesInit.css). On our pages only, the design's colours win: each inline colour made !important, and a stylesheet scoped to the page root (.ssos) for the rest. Used by site/com/build.py and site/org/build.py; the .com reinstalled with it. - site/org/inquiries (Captain Bob, 2026-11-07): the .com's inquiries go to an admin-only master/detail on the .org -- Inquiries.WebHome (Live Data table), one page per inquiry under Inquiries.Entries with a sheet and a status, PublicInquiry (public) filing them with its author's rights and echoing nothing a visitor sends; a hidden trap field for robots. The .com form posts there. Installed and tested: a guest's inquiry filed and deleted; one whose name and message were script macros was stored as text, nothing ran. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- site/__pycache__/colorlock.cpython-313.pyc | Bin 0 -> 2967 bytes site/colorlock.py | 41 +++++++ site/com/Inquiries.WebHome.xwiki | 79 ++++++------ site/com/Main.WebHome.xwiki | 110 +++++++++-------- site/com/TryIt.WebHome.xwiki | 112 +++++++++-------- site/com/build.py | 19 ++- site/org/Admin.WebHome.xwiki | 60 +++++---- site/org/Contributors.WebHome.xwiki | 66 +++++----- site/org/Main.WebHome.xwiki | 72 ++++++----- site/org/build.py | 5 +- site/org/inquiries/ClassSetup.xwiki | 26 ++++ site/org/inquiries/Inquiries.WebHome.xwiki | 3 + site/org/inquiries/InquirySheet.xwiki | 26 ++++ .../org/inquiries/PublicInquiry.WebHome.xwiki | 41 +++++++ site/org/inquiries/install.sh | 115 ++++++++++++++++++ 15 files changed, 545 insertions(+), 230 deletions(-) create mode 100644 site/__pycache__/colorlock.cpython-313.pyc create mode 100644 site/colorlock.py create mode 100644 site/org/inquiries/ClassSetup.xwiki create mode 100644 site/org/inquiries/Inquiries.WebHome.xwiki create mode 100644 site/org/inquiries/InquirySheet.xwiki create mode 100644 site/org/inquiries/PublicInquiry.WebHome.xwiki create mode 100755 site/org/inquiries/install.sh diff --git a/site/__pycache__/colorlock.cpython-313.pyc b/site/__pycache__/colorlock.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1186d1f91b2baa03fbd3d68ace3c56df94ad36e GIT binary patch literal 2967 zcmZ`5-ESL3e%2qcySCfVqT@m-3{I=qA+{Umqp1^+k~R^D(tx+Q0xh-1>xsR1y}Qgz z8e)o+N5V;$o=(;E1QH1G0B=0U2W7C!Q``{sDfo-i@6qU1@iI^ZWkV z`ORS}r6PDf9{t~kH{%HXS8jqQ;sb~G0C^()22e*JsZ#lo<}UE#o!yShq7_<4Ulx(w3%t^&AhXLb2;3k)WHNhq)taTw%08z zIo24*hQ*B<1=_mNH1K-E<`jztZBe{xGo1p1@C5Rzx?qb2e)l%;ajX-@HbAOj)Ehb7 zwge+w_<|YU1g(Wtle7%0ZWnaU|3sKUswU-cScb?00^644#+N2r>w8-LPbkf|8n= zxkem80I^_K$8hm-aXL3Xp1XV{JBEo>>-r=UAoC<$G&g2FrHn#w_NoVad6N0;+VgT% zQdNv|xa)e?Fep3&YPtJ#+T$afkDnW}7&UOZ!-2Q8aHp&hCltA-9Gw0JhJ{wn+T zrW=tu$pvWHIWI4-sh*WF>>E1*N~J1=j--7EvMMOUpWrIANS)bhRt-84`o4svd)y&R zc2LioSuY$Q8&-od<2b2mvl?ZAg5hFuqBwc|nDD1v*DwiOAb1q4`zD8%re>~=FP$t= zYRF9YGcPS%o*qAu*|3~75ttD4V*z0tndDF>U7Q&6@a6gOVzGEkXW-l7;!<(x$}!Rt z@lH%m&P>lA;|Ss{l^pm9X~Q-lL47gIPs}e~J8sW*h;E3D5`Ic(t@??sKdoG!s&j>I zSF|79yURy2UOW$a_3i_^m3z<)%U^OCVLJ~P98m%=LfEYbCS4WTfb6U5R{klxzFwm1 z&`kbj)iBL0_*2rAzEfGA@?m%n^MHMX3dmAcP`RJOXV#P{A6u6EPdr*Epq@jo-$lp@ zt%SfRVVGW8sC=f!6F@6R8OVXh7g2WL=C3j(t}@$Jdp~SD(bte| z)jv2d!O<0Wqw0^%u&cD(XpQP7ca<8Kg@Du59WONO7A>s7Tq@jvVPo@oi&&&d3moQ8LAP6ld>)qG zcy$vMIcO`McMOt<&cn;^!)FuiCr@uK?x#*~-`=|Y@SQ)uzn8kuNnLoX|0|XLOxaH) zx36qn*}l4U^~)FbhF<9mz4G1s-cY_Xl>cGw=Z|(LUf&;l=I`;p#{Z^1{-85B`q}(` zJhh$NNq0_?$ag_Yy0o*{g}Blzu{}7DMPc1X!s79xA)}gnoVZnUkVZ2ff7`tgoh_H*x!n->8{8_tGDXX49^s zW@BzthY2Oz7^B{C>Z;}Ch9ec@(8#=B5z$W@7ab~-;ReIRmO{BjjyNQvV$mDnDcO#QKiIIJv&27y+ zPV8Np>0Fxm@wuIaTmQUGItye+ukBuMCzASwAl@&(-gd zC)k;6YAMg1jpZc{x7#ZDzRqX&a%@a%T` n^Y#H!&aW!_bz`sI?9`iwVP&wTY$pF7A5caQ&qkG(JTt!or7|TO literal 0 HcmV?d00001 diff --git a/site/colorlock.py b/site/colorlock.py new file mode 100644 index 00000000..2e1f2eeb --- /dev/null +++ b/site/colorlock.py @@ -0,0 +1,41 @@ +"""colorlock.py -- keep a page's own colours inside a wiki whose theme forces its own. + +Both XWikis carry a high-contrast theme (skins/flamingo/cssVariablesInit.css on the server) that sets +every element black on white with !important. On our pages the design's colours win instead +(Captain Bob, 2026-11-07), and on those pages only; the rest of the wiki keeps the theme: + + - every colour an element states in its style="" is made !important -- an inline !important beats + any stylesheet's; + - a stylesheet scoped to the page's root (class "ssos") covers the elements that state no colour: + ".ssos *" outranks the theme's "*" (both !important, the more specific wins). +""" +import re + +ROOT_CLASS = "ssos" +STYLE = """""" +COLOUR_PROPS = re.compile(r"^\s*(color|background|background-color|border|border-(top|right|bottom|left)|" + r"border-color|border-(top|right|bottom|left)-color|accent-color|fill)\s*:", re.I) + + +def _lock_style(m): + decls = [] + for d in m.group(1).split(";"): + if d.strip() and COLOUR_PROPS.match(d) and "!important" not in d: + d = d.rstrip() + " !important" + decls.append(d) + return 'style="%s"' % ";".join(decls) + + +def lock(html, root_marker): + """root_marker: the opening text of the page's root element, e.g. '
    = 1, root_marker + html = html.replace(root_marker, root_marker.replace("
    -
    + +
    -
    +
    -

    Inquiries

    +

    Inquiries

    Talk to the bridge.

    -

    Licensing, research collaboration, press or plain curiosity — every message is read by a human. Want to contribute code? Head to starshipos-f18.org.

    +

    Licensing, research collaboration, press or plain curiosity — every message is read by a human. Want to contribute code? Head to starshipos-f18.org.

    -
    + +
    - - + +
    - - + +
    - - + +
    - - @@ -48,46 +57,46 @@
    - - + +
    - - + +
    - -Opens your e-mail program. Replies usually within a few days. + +Replies usually within a few days.
    -