The rest of the plug-and-play stick, #92 Tasks 4-5 (plan docs/v4.0.0/plans/2026-10-29-stick-5-proxy-zuse-and-real-zuse.md; docs/v4.0.0/STICK.md 6a) -- with which #92 is done -- and the licence headers:
Task 4 -- MINT-ZUSE: at the prompt, it asks for a second stick, shows its size, writes nothing until YES, then a GPT with one identity partition (gpt_write_one), a fresh Zuse minted and read back, and only then the real key in the genesis marker. Her stick is then recognised against that key and her session moves to it. A new word of the lone node: word_count 317 -> 318, dict_hash 0x8c92508f748f99cf on the three ISAs.
Task 5 -- the fixed screen: with a real Zuse, the system stick alone gives no prompt but four lines; R mints a replacement, every other key is dropped; the old stick is then refused for good. Pulling her stick brings the screen back; pulling the system stick while hers is in lets hers go first.
Licence: the source headers name the Starship License 1.0 (SL-1.0), as LICENSE does (349 files); an SPDX header (LicenseRef-Starship-1.0) on the 253 source files that had none. Capsules, proofs, tools/kconfig/ (GPL-2.0), docs/working/ and the patent/formal files left as ruled.
The SER5 bench steps for the stick and the real Zuse: boards/BRINGUP.md 4.2.
Worked in small increments, each committed with the plan's Progress section up to date. Records: FABRIC-3 XLVIII.15-17.
The Acceptance check runs on this pull request by itself. Note here anything it does not cover:
Logs from runs made by hand are committed in logs/: every test seen to fail first, then pass; the regressions; full acceptance (verdicts in logs/20261110-051726/verdicts/ for Task 4, logs/20261110-075036/verdicts/ for Task 5)
Hardware this was tried on, if any: none yet -- the bench steps are written (boards/BRINGUP.md 4.2)
Not covered by Acceptance: the MINT-ZUSE and fixed-screen sessions (mint_zuse on three ISAs; mint_zuse_refuse, mint_small, mint_zuse_used, mint_pull_system, zuse_stick_first, fallback, replace, mint_fail, system_pull_real) -- run by hand, all PASS, logs committed. gpt_write_one was also checked on the host against blank and used images.
The record
docs/fabric/FABRIC-3.md has the ruling and what was built, if this is design work
CHANGELOG.md, if it is a milestone -- at alpha.4
Nothing in this PR is a fix nobody asked for (.claude/CLAUDE.md, Hard Rules): the plan's tasks; the licence work ruled ("Yes", "Yes, SPDX form, leave capsules and proofs")
## What and why
The rest of the plug-and-play stick, #92 Tasks 4-5 (plan `docs/v4.0.0/plans/2026-10-29-stick-5-proxy-zuse-and-real-zuse.md`; `docs/v4.0.0/STICK.md` 6a) -- with which #92 is done -- and the licence headers:
- **Task 4 -- `MINT-ZUSE`:** at the prompt, it asks for a second stick, shows its size, writes nothing until `YES`, then a GPT with one identity partition (`gpt_write_one`), a fresh Zuse minted and read back, and only then the real key in the genesis marker. Her stick is then recognised against that key and her session moves to it. A new word of the lone node: `word_count` 317 -> 318, `dict_hash 0x8c92508f748f99cf` on the three ISAs.
- **Task 5 -- the fixed screen:** with a real Zuse, the system stick alone gives no prompt but four lines; `R` mints a replacement, every other key is dropped; the old stick is then refused for good. Pulling her stick brings the screen back; pulling the system stick while hers is in lets hers go first.
- **Licence:** the source headers name the Starship License 1.0 (SL-1.0), as `LICENSE` does (349 files); an SPDX header (`LicenseRef-Starship-1.0`) on the 253 source files that had none. Capsules, proofs, `tools/kconfig/` (GPL-2.0), `docs/working/` and the patent/formal files left as ruled.
- **The SER5 bench steps** for the stick and the real Zuse: `boards/BRINGUP.md` 4.2.
Worked in small increments, each committed with the plan's Progress section up to date. Records: FABRIC-3 XLVIII.15-17.
Closes #92
## Acceptance
The **Acceptance** check runs on this pull request by itself. Note here anything it does not cover:
- [x] Logs from runs made by hand are committed in `logs/`: every test seen to fail first, then pass; the regressions; full acceptance (verdicts in `logs/20261110-051726/verdicts/` for Task 4, `logs/20261110-075036/verdicts/` for Task 5)
- [ ] Hardware this was tried on, if any: none yet -- the bench steps are written (`boards/BRINGUP.md` 4.2)
- Not covered by Acceptance: the `MINT-ZUSE` and fixed-screen sessions (`mint_zuse` on three ISAs; `mint_zuse_refuse`, `mint_small`, `mint_zuse_used`, `mint_pull_system`, `zuse_stick_first`, `fallback`, `replace`, `mint_fail`, `system_pull_real`) -- run by hand, all PASS, logs committed. `gpt_write_one` was also checked on the host against blank and used images.
## The record
- [x] `docs/fabric/FABRIC-3.md` has the ruling and what was built, if this is design work
- [ ] `CHANGELOG.md`, if it is a milestone -- at alpha.4
- [x] Nothing in this PR is a fix nobody asked for (`.claude/CLAUDE.md`, Hard Rules): the plan's tasks; the licence work ruled ("Yes", "Yes, SPDX form, leave capsules and proofs")
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
347 headers said "Licensed under the StarForth License, Version 1.0" -- a
shortening (Captain Bob, 2026-11-08: "License file SL I think I shortened
accidently"); LICENSE is, and has been since the first commit, the
Starship License 1.0 (SL-1.0, SPDX LicenseRef-Starship-1.0). 349 files,
566 occurrences, now "Starship License, Version 1.0 (SL-1.0)".
Left as they are, pending a ruling: docs/patent/ (the patent figures),
docs/formal/ (the citable volumes) and the generated reports under
docs/working/experiments/ (32 files). Comments and license text only:
the amd64 kernel builds, every changed script parses.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
The old MBR zeroed first, the backup header and entries, the primary, the protective MBR last: a write torn anywhere leaves no table. Builds clean on amd64, aarch64, riscv64; checked on the host against blank 600 MiB and 32 MiB images and a used Zuse stick (sfdisk --verify clean, gpt_read reads it back). Not yet called.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
sk_v4_identity_offer_wait() beats until a stick that is not this system's arrives (offered), a key is pressed, or the system stick leaves; sk_v4_identity_recheck_offered() runs the arrival check again once the mint has written it. Builds on three ISAs; not yet called.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Asks for a stick, shows its size, writes nothing until YES; then gpt_write_one, the partition's first devblocks zeroed, a fresh Zuse minted, read back, and only then the marker's real key. Any failure before the marker: 'failed -- nothing changed'. The gate remembers the last stick it turned away as a spare, offered first by the next mint. Builds on three ISAs; not yet called.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
The header scan (Captain Bob, 2026-11-10): 788 source files -- 351 with the
SL-1.0 header, 12 with the old name (docs/working/experiments, kept by
ruling), 31 under someone else's licence (tools/kconfig, Linux's, GPL-2.0:
kept), and 394 with none. Ruled: the SPDX form; capsules (.4th, .f18) and
proofs (.thy) left for a ruling of their own (mkcapsule's 64x16 block format,
content-addressed capsules).
253 files now begin
SPDX-License-Identifier: LicenseRef-Starship-1.0
Copyright (c) 2023-2026 Robert A. James
as a /* */ block (C, headers, assembly, linker scripts) or # lines (scripts,
Makefiles, Kconfig; below a shebang or a coding line); tools/mkcapsule.c,
which had the copyright line, gets the SPDX line only.
Not touched: docs/working/ (archive and old campaign material, as the
ruling kept the experiments); v4/system/post_cases.c (generated by
v4/tools/mkpost.py, "do not edit" -- the generator has the header).
Comments only: the kernel builds on amd64, aarch64, riscv64; make -C v4
test-32: 39 programs, 0 failures; every changed script parses.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
A GPT stick with an identity partition and no Artemis, the system stick in and its marker naming a real Zuse: checked against the real key; a match attached and logged in (a running session moves to her); no match: 'not this system's Zuse stick -- not used'. Arriving first, it is remembered and checked when the marker is read. Builds on three ISAs; mint_zuse running.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Task 4 of plan 2026-10-29-stick-5, accepted in full:
- amd64, aarch64, riscv64: PARITY:V4_POST tests=538 pass=538 fail=0,
POST: PASSED; PARITY:V4_SYSTEM word_count=318 dict_hash=0x8c92508f748f99cf
on the three (MINT-ZUSE, the lone node's second word)
- the PC stick as built, loaded high: 538/538, the prompt
- make -C v4 test-32: 39 programs, 0 failures
Sessions: mint_zuse on the three; mint_zuse_refuse, mint_small,
mint_zuse_used, mint_pull_system, zuse_stick_first; regressions genesis,
two_sticks, hotplug, midpull, typeahead. Verdicts in
logs/20261110-051726/verdicts/. The plan's Task 4 ticked; FABRIC-3 XLVIII.16.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
The four lines on the screen and serial while the proxy is recognised and her stick is not here; R runs sk_v4_mint_zuse(), every other key is dropped. Her stick pulled: the screen again. The system stick pulled while hers is in: hers let go first (the block chain's tail), remembered for the system stick's return. Builds on three ISAs; fallback running.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
First boot (genesis, growth, the time to the prompt), the second boot, MINT-ZUSE onto a second stick, the system stick alone (the fixed screen), both sticks at power-on -- each rehearsed first in QEMU by the qemu_session.py mode named. 3.2's 'boots headless' corrected: the stick's first boot now mints its Zuse.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Task 5 of plan 2026-10-29-stick-5, accepted in full, and with it #92:
- amd64, aarch64, riscv64: PARITY:V4_POST tests=538 pass=538 fail=0,
POST: PASSED; word_count=318 dict_hash=0x8c92508f748f99cf on the three
- the PC stick as built, loaded high: 538/538, the prompt
- make -C v4 test-32: 39 programs, 0 failures
Sessions: fallback, replace, mint_fail, system_pull_real; regressions:
every Task 4 session, genesis, stick_genesis, screen_dark_until_login,
screen_dark_after_logout, kbd_typeahead, emergency. Verdicts in
logs/20261110-075036/verdicts/. The plan's Task 5 ticked; STICK.md 11
increment 5a done; FABRIC-3 XLVIII.17; the SER5 bench steps in
boards/BRINGUP.md 4.2.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What and why
The rest of the plug-and-play stick, #92 Tasks 4-5 (plan
docs/v4.0.0/plans/2026-10-29-stick-5-proxy-zuse-and-real-zuse.md;docs/v4.0.0/STICK.md6a) -- with which #92 is done -- and the licence headers:MINT-ZUSE: at the prompt, it asks for a second stick, shows its size, writes nothing untilYES, then a GPT with one identity partition (gpt_write_one), a fresh Zuse minted and read back, and only then the real key in the genesis marker. Her stick is then recognised against that key and her session moves to it. A new word of the lone node:word_count317 -> 318,dict_hash 0x8c92508f748f99cfon the three ISAs.Rmints a replacement, every other key is dropped; the old stick is then refused for good. Pulling her stick brings the screen back; pulling the system stick while hers is in lets hers go first.LICENSEdoes (349 files); an SPDX header (LicenseRef-Starship-1.0) on the 253 source files that had none. Capsules, proofs,tools/kconfig/(GPL-2.0),docs/working/and the patent/formal files left as ruled.boards/BRINGUP.md4.2.Worked in small increments, each committed with the plan's Progress section up to date. Records: FABRIC-3 XLVIII.15-17.
Closes #92
Acceptance
The Acceptance check runs on this pull request by itself. Note here anything it does not cover:
logs/: every test seen to fail first, then pass; the regressions; full acceptance (verdicts inlogs/20261110-051726/verdicts/for Task 4,logs/20261110-075036/verdicts/for Task 5)boards/BRINGUP.md4.2)MINT-ZUSEand fixed-screen sessions (mint_zuseon three ISAs;mint_zuse_refuse,mint_small,mint_zuse_used,mint_pull_system,zuse_stick_first,fallback,replace,mint_fail,system_pull_real) -- run by hand, all PASS, logs committed.gpt_write_onewas also checked on the host against blank and used images.The record
docs/fabric/FABRIC-3.mdhas the ruling and what was built, if this is design workCHANGELOG.md, if it is a milestone -- at alpha.4.claude/CLAUDE.md, Hard Rules): the plan's tasks; the licence work ruled ("Yes", "Yes, SPDX form, leave capsules and proofs")🤖 Generated with Claude Code
https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
The header scan (Captain Bob, 2026-11-10): 788 source files -- 351 with the SL-1.0 header, 12 with the old name (docs/working/experiments, kept by ruling), 31 under someone else's licence (tools/kconfig, Linux's, GPL-2.0: kept), and 394 with none. Ruled: the SPDX form; capsules (.4th, .f18) and proofs (.thy) left for a ruling of their own (mkcapsule's 64x16 block format, content-addressed capsules). 253 files now begin SPDX-License-Identifier: LicenseRef-Starship-1.0 Copyright (c) 2023-2026 Robert A. James as a /* */ block (C, headers, assembly, linker scripts) or # lines (scripts, Makefiles, Kconfig; below a shebang or a coding line); tools/mkcapsule.c, which had the copyright line, gets the SPDX line only. Not touched: docs/working/ (archive and old campaign material, as the ruling kept the experiments); v4/system/post_cases.c (generated by v4/tools/mkpost.py, "do not edit" -- the generator has the header). Comments only: the kernel builds on amd64, aarch64, riscv64; make -C v4 test-32: 39 programs, 0 failures; every changed script parses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.