The plug-and-play stick, done: MINT-ZUSE and the fixed screen (#92 Tasks 4-5); licence headers #160

Open
rajames wants to merge 26 commits from StarForth-v4.0.0 into master
719 changed files with 10739 additions and 600 deletions
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
mainmenu "StarForth Configuration"
source "Kconfig.arch"
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
menu "Target architecture"
choice
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
menu "Heartbeat / adaptive tick coordinator"
config HEARTBEAT_THREAD_ENABLED
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
menu "Kernel-only options"
if STARFORTH_VARIANT_KERNEL
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
menu "Physics engine tuning"
config STRICT_PTR
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
menu "Build variant"
choice
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# ==============================================================================
# LithosAnanke / StarForth -- top-level Makefile
#
+25 -2
View File
@@ -156,8 +156,9 @@ One QEMU at a time. Use a copy of the image: the kernel writes to its disk.
2026-10-27 the PC image is the StarshipOS stick (`docs/v4.0.0/STICK.md` §4: ESP,
identity, Artemis) and `make -f kernel/Makefile ARCH=amd64 qemu-stick` does exactly
this: a copy of the stick as a USB stick on the xHCI controller (`bootindex=0`), OVMF
booting its ESP, logs under `logs/<TS>/amd64/`. The stick's identity partition is
blank until first-boot genesis (stick increment 5), so today it boots headless.
booting its ESP, logs under `logs/<TS>/amd64/`. Since 2026-11-08 (stick increment 5,
`plans/2026-10-29-stick-5`) its first boot mints the stick's own Zuse and reaches
`[zuse@Hera] ok>` with nothing set up; `qemu_session.py stick_genesis` checks it.
- [ ] **MILKV:** the command in `boards/milkv/README.md` (OpenSBI, U-Boot, `bootefi`).
- [ ] **RASPI:** there is no QEMU model of the Pi 5, but its native path -- raw image, entry
at EL2 with the MMU off, devicetree in x0 -- is rehearsed on QEMU virt:
@@ -207,6 +208,28 @@ the one QEMU exercises most closely, and the Pi 5's can be rehearsed only in par
on until login (screen=boot)"). Secure Boot off. Watch for `Boot disk: a StarshipOS stick`, `Artemis: the stick's partition
attached`, then `[zuse@Hera] ok>`. The same image boots in QEMU first:
`make -f kernel/Makefile ARCH=amd64 qemu-stick STICK_PAIR=disk/zuse-scratch`.
- [ ] **Plug and play, and the real Zuse** (2026-11-10, after the stick's increments 5 and 5a,
`docs/v4.0.0/plans/2026-10-29-stick-5-proxy-zuse-and-real-zuse.md`, Task 5 step 6). Two USB
sticks: the system stick, written from `make boot_image TARGET=PC` (no `STICK_PAIR`) with
`make write_stick DEVICE=/dev/sdX`, and a second stick of 64 MiB or more that may be erased.
Each step rehearsed first in QEMU by the session named:
- [ ] **First boot** (`stick_genesis`, `stick_grow`): the system stick alone. Watch for
`Artemis: grown to fill the stick` (a stick of 8 GB or more) or `Artemis: the stick is
under 8 GB -- not grown`, then `Zuse: genesis minted onto attached thumbdrive`, then
`[zuse@Hera] ok>`. Nothing typed before it. Write down the time from power-on to the
prompt.
- [ ] **The second boot of the same stick:** `Zuse: identity confirmed from attached
thumbdrive`, no genesis line, no growth line.
- [ ] **`MINT-ZUSE`** (`mint_zuse`): type it, plug in the second stick when asked; check the
size it names is that stick's; type `YES`. Watch for `Zuse: real Zuse minted onto the
second stick`, then `identity confirmed`, then the prompt.
- [ ] **The system stick alone** (`fallback`): power off, take the second stick out, boot. The
fixed screen's four lines (`Zuse's stick is not here.` ...), no prompt; keys typed there
do nothing. Plug the second stick in: the prompt. Pull it: the screen comes back.
- [ ] **Both sticks at power-on** (`zuse_stick_first`): her stick in the lower port if the
PC's ports are numbered; she is logged in once.
- [ ] Not done on the bench unless a spare stick is to hand: `R` and a replacement
(`replace`) -- the second stick stops working for good.
- [ ] The timer lines differ from QEMU's by design: no hypervisor, so the HPET path runs for
the first time. S1 is the finding to remember if it stops there.
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# boards/milkv/board.mk -- Milk-V Mars (StarFive JH7110, SiFive U74, RV64GC).
#
# The board's own SPI-flash U-Boot (OpenSBI underneath) runs the EFI
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# boards/pc/board.mk -- a generic PC: x86-64, UEFI firmware, ACPI.
#
# Not one machine: the standards-compliant UEFI path (FABRIC-3.md §III), so
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# boards/raspi/board.mk -- Raspberry Pi 5 (BCM2712, Cortex-A76, aarch64).
#
# Native firmware boot, no UEFI (FABRIC-3.md §IV): the Pi 5 bootloader
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# boards/zynq7020/board.mk -- Xilinx Zynq-7020 (dual Cortex-A9, ARMv7-A, 32-bit).
#
# Boot chain: BootROM -> BOOT.BIN (U-Boot SPL with the board's ps7_init DDR/
+2
View File
@@ -1,4 +1,6 @@
#!/bin/bash
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# 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").
#
+2
View File
@@ -1,4 +1,6 @@
#!/bin/bash
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# build-iso.sh -- the demo's ISO: the amd64 kernel's loader on an El Torito ISO, packed as
# `make -f kernel/Makefile ARCH=amd64 qemu` packs it (kernel/Makefile, target qemu).
#
+2
View File
@@ -1,4 +1,6 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
"""console.py -- the visitor's terminal joined to the demo machine's serial console, once the
machine is running (issue #112).
+2
View File
@@ -1,4 +1,6 @@
#!/bin/bash
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# make-snapshot.sh -- boot the demo machine once, to its prompt, and save it: every session
# resumes from here, at the prompt in seconds instead of after boot and POST (issue #113).
#
+2
View File
@@ -1,4 +1,6 @@
#!/bin/bash
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# mint-zuse.sh -- a Zuse of the demo's own, as a stick (issue #111, ruled by Captain Bob,
# 2026-11-06: "Mint Zuse for demo console").
#
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# qemu-args.sh -- the demo machine, sourced by make-snapshot.sh and start-session.sh.
#
# A session resumes a machine saved by make-snapshot.sh, and QEMU can resume a saved machine only
+2
View File
@@ -1,4 +1,6 @@
#!/bin/bash
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# start-session.sh -- one visitor's session: the saved demo machine, resumed at its prompt, its
# serial console on this terminal; gone when the visitor leaves or the time is up (issue #112).
# ttyd runs this once per browser connection (issue #114).
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# docs/book/Makefile -- the single LithosAnanke book, built from LaTeX.
#
# Run from the repo root (the root Makefile does this):
+68
View File
@@ -6445,3 +6445,71 @@ Plan `2026-10-29-stick-5`, Task 2; `STICK.md` 5a (its 2 TiB cap amended to 256 G
0xfec8c47cfc6f437f`, test-32 39 programs, 0 failures; regressions pass, `v3_keys` among them (v3
runs on the same code).
### 15. The license's name in the headers (2026-11-08)
- **Found:** `LICENSE` is the Starship License 1.0 (SL-1.0) and always has been; 347 source headers
said "StarForth License, Version 1.0" (Captain Bob: "I think I shortened accidently").
- **Done:** 349 files, 566 occurrences, now "Starship License, Version 1.0 (SL-1.0)" (16b9747d).
- **Ruled:** the 32 others **keep "StarForth License" as they are** -- `docs/patent/` (the patent
figures), `docs/formal/` (the citable volumes) and the generated reports under
`docs/working/experiments/`. Not to be swept.
- **The header scan** (2026-11-10): of 788 source files, 394 had no licence header at all -- most of
v4 among them. **Ruled:** the SPDX form (`SPDX-License-Identifier: LicenseRef-Starship-1.0` and the
copyright line), and the capsules (`.4th`, `.f18`) and proofs (`.thy`) left for a ruling of their
own. 253 files given it (3bd81097); `tools/kconfig/` keeps its own GPL-2.0, `docs/working/` and the
generated `v4/system/post_cases.c` are not touched. Comments only: three ISAs build, test-32 clean.
### 16. #92, Task 4: `MINT-ZUSE` -- the real Zuse on a second stick (2026-11-10)
Plan `2026-10-29-stick-5`, Task 4; `STICK.md` 6a. Worked in small increments, each committed and
pushed with the plan's Progress section brought up to date (Captain Bob: "work in small increments
and memorize frequently so we can pick up where we left off").
- **Built:** a GPT writer of a new disk, `gpt_write_one()` (the old MBR zeroed first, the protective
MBR written last, so a torn write leaves no table); a stick offered to a waiting mint, not attached
or refused (`sk_v4_identity_offer_wait()`), and the last stick turned away kept as a spare that the
next mint offers first; `sk_v4_mint.c` -- the plug-in line, the stick's size, nothing written
until `YES`, then the GPT, the partition's first devblocks zeroed, a fresh Zuse minted and read
back, and only then the marker's real key; `MINT-ZUSE`, request 2 of the lone node's words
(`word_count` 317 -> 318, `dict_hash 0x8c92508f748f99cf` on the three); the real Zuse's stick
recognised against the marker's real key, attached at the chain's tail, her session -- one
already running moves to her; her stick arriving before the system stick is remembered and
checked once the marker is read. The installed key is the logged-in Zuse's, set at each login.
- **Tested first, seen to fail:** `mint_zuse` -- "UNKNOWN WORD: 'MINT-ZUSE'". After: `mint_zuse` on
the three ISAs (the size line, `YES`, minted, her stick recognised, the prompt, `sfdisk --verify`
clean on the new stick); `mint_zuse_refuse` (the stick's bytes unchanged, offered again);
`mint_small`; `mint_zuse_used` (the pair's Zuse stick rewritten, the new Zuse recognised -- Review
Focus 2); `mint_pull_system` (stopped, nothing written, the proxy back on replug -- Review Focus
3); `zuse_stick_first` (her stick on the lower port at boot -- Review Focus 1). `gpt_write_one`
checked on the host first, against blank and used images. Regressions pass: `genesis`,
`two_sticks`, `hotplug`, `midpull`, `typeahead`.
- **Accepted:** 538/538 and `POST: PASSED` on the three and the stick loaded high; `dict_hash
0x8c92508f748f99cf` on the three; test-32 0 failures.
- **Left for Task 5:** the fixed screen (with a real Zuse, the system stick alone gives no prompt),
its R, the old stick refused after a replacement, `mint_fail` (Review Focus 4), and pulling the
system stick while hers is in (her stick, the chain's tail, must go first).
### 17. #92, Task 5: the fixed screen -- and #92 done (2026-11-10)
- **Built** (`sk_v4_identity.c`): with a real Zuse in the marker and her stick not here, the system
stick's proxy gets no prompt but the fixed screen -- "Zuse's stick is not here." / "Plug it in to
log in." / "Or plug in another stick and press R to mint a replacement" / "-- the old Zuse stick
will stop working." -- on the screen and serial; R runs the mint, every other key is read and
dropped; a stopped or failed mint brings the screen back. Her stick pulled: the screen again.
The system stick pulled while hers is in: hers, the block chain's tail, is let go first and
remembered, and checked again when the system stick is back.
- **Tested first, seen to fail:** `fallback` -- no screen, R did nothing. After: `fallback`,
`replace` (the old stick then "not this system's Zuse stick -- not used"), `mint_fail` (a stick
whose writes all fail: "failed -- nothing changed", the old stick still logs in -- Review Focus 4),
`system_pull_real` (no detach refusal; she is back on replug). `mint_fail` failed once on its own
check, which counted the first boot's mint in the second boot's log; fixed, it passed.
- **Accepted:** the regressions (every Task 4 session, `genesis`, `stick_genesis`, the screen and
keyboard sessions, `emergency`); 538/538 on the three and the stick loaded high, `word_count=318`,
`dict_hash 0x8c92508f748f99cf`; test-32 0 failures.
- **The SER5 bench steps** are in `boards/BRINGUP.md` 4.2: first boot, second boot, `MINT-ZUSE`, the
system stick alone, both sticks at power-on -- each rehearsed in QEMU first.
- **#92 is done:** the plug-and-play stick (STICK.md 5, 5a, 6, 6a) -- written, plugged in, booted,
`[zuse@Hera] ok>`; growth; the real Zuse on a second stick; the fixed screen. The alpha.4
Downloads page (#126) can offer the PC stick.
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
# docs/formal/Makefile — build all formal LaTeX publications
PDFLATEX := pdflatex -interaction=nonstopmode -halt-on-error
+2
View File
@@ -1,4 +1,6 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
"""
fix-doxygen-unicode.py — replace problematic Unicode characters in
Doxygen-generated LaTeX files with pdflatex-safe equivalents.
+2
View File
@@ -1,3 +1,5 @@
# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
LATEX=pdflatex
MAIN=main.tex
+1
View File
@@ -369,6 +369,7 @@ first and seen to fail:
5a. **The real Zuse stick (2026-10-29)** (§6a): `MINT-ZUSE` and its confirmation, the GPT and
identity written to the second stick, the marker's real key; recognition of the real Zuse
stick; the fixed screen and its R; the old stick refused after a replacement.
**Done 2026-11-10** (plan `2026-10-29-stick-5`, Tasks 4-5; `FABRIC-3.md` XLVIII.16-17; #92).
6. **Pull and replug** (§7), and the flush.
7. **The splash and progress bar** (§8), with the mkcapsule PNG converter.
8. **Acceptance moves** to the stick boot for x86_64 (§9).
@@ -274,7 +274,7 @@ on port 2 and no other drive: a first boot every time, the proxy minted, the pro
- **Pulling the real Zuse stick:** her session ends as today's line says; with Task 5, the fixed
screen.
- [ ] **Step 1: Failing tests** (amd64 unless said; a blank 600 MiB sparse stick image in the session
- [x] **Step 1: Failing tests** (amd64 unless said; a blank 600 MiB sparse stick image in the session
directory; `--make "DATASTICK_IMG=<work>/data.img DATASTICK_DEP="` where two boots share one
copy):
- **`mint_zuse`** (three ISAs): fresh data stick, prompt; type `MINT-ZUSE`; the plug-in line;
@@ -291,11 +291,11 @@ on port 2 and no other drive: a first boot every time, the proxy minted, the pro
Zuse stick on port 1 and the data stick on port 2: she is logged in (`identity confirmed` once,
the prompt).
- **`mint_small`:** a 32 MiB stick offered: `under 64 MiB`, nothing written, the prompt.
- [ ] **Step 2:** Run each: FAIL as listed.
- [ ] **Step 3:** Implement.
- [ ] **Step 4:** They pass; regression: `genesis`, `two_sticks` (a blank data stick on port 2 is
- [x] **Step 2:** Run each: FAIL as listed.
- [x] **Step 3:** Implement.
- [x] **Step 4:** They pass; regression: `genesis`, `two_sticks` (a blank data stick on port 2 is
still not used when no mint waits), `hotplug`, `midpull`, `typeahead`.
- [ ] **Step 5:** Suite; full acceptance (`word_count=318`, the new `dict_hash`, equal on three);
- [x] **Step 5:** Suite; full acceptance (`word_count=318`, the new `dict_hash`, equal on three);
commit `feat(kernel): MINT-ZUSE -- the real Zuse minted onto a second stick, read back before the
marker names her` with the logs.
@@ -317,7 +317,7 @@ on port 2 and no other drive: a first boot every time, the proxy minted, the pro
- **After a replacement** the marker's `real` is the new key; the old stick then reads `not this
system's Zuse stick -- not used`.
- [ ] **Step 1: Failing tests** (amd64; the data stick copy from a `mint_zuse` boot, booted again):
- [x] **Step 1: Failing tests** (amd64; the data stick copy from a `mint_zuse` boot, booted again):
- **`fallback`:** no Zuse stick: the four lines; no `ok> ` for 30 s; `3 4 + .` and Enter typed,
then the Zuse stick added: the prompt, and no `7` in the output before `3 4 + .` is typed
again after it. Then `R` typed with no stick offered asks for one (the plug-in line); any key
@@ -334,12 +334,42 @@ on port 2 and no other drive: a first boot every time, the proxy minted, the pro
first (no `detach` refusal in the log), `session ended`, headless; replug the data stick (hers
still in): she is logged in again, by the remembered-drive check of Task 4.
- Today: FAIL (the proxy with a real key stays headless; no fixed screen).
- [ ] **Step 2:** Run each: FAIL as listed.
- [ ] **Step 3:** Implement.
- [ ] **Step 4:** They pass; regression: all of Task 4's sessions, `genesis`, `stick_genesis`,
- [x] **Step 2:** Run each: FAIL as listed.
- [x] **Step 3:** Implement.
- [x] **Step 4:** They pass; regression: all of Task 4's sessions, `genesis`, `stick_genesis`,
`screen_dark_until_login`, `screen_dark_after_logout`, `kbd_typeahead`, `emergency`.
- [ ] **Step 5:** Suite; full acceptance; commit `feat(kernel): the fixed screen -- with a real Zuse,
- [x] **Step 5:** Suite; full acceptance; commit `feat(kernel): the fixed screen -- with a real Zuse,
the system stick alone can only mint a replacement; the old stick dies` with the logs.
- [ ] **Step 6:** A new PC stick (`make boot_image TARGET=PC`, no `STICK_PAIR`) for the SER5, and
- [x] **Step 6:** A new PC stick (`make boot_image TARGET=PC`, no `STICK_PAIR`) for the SER5, and
the bench steps written in `boards/BRINGUP.md`: plug in, boot, the prompt; `MINT-ZUSE` onto the
second stick; boot with the system stick alone (the fixed screen); with both (the prompt).
---
## Progress (kept current, one line per increment -- where to pick up)
Tasks 1-3 accepted and merged (#159, master 594d2f93); #155 merged with them.
**Task 4, `MINT-ZUSE`** (Captain Bob, 2026-11-08: "work in small increments and memorize frequently"):
- [x] 4.1 the first failing test: `qemu_session.py` mode `mint_zuse` and `add_stick(n, img, port)`
- [x] 4.2 run `mint_zuse` on amd64 before any kernel change: FAIL, "UNKNOWN WORD: 'MINT-ZUSE'" (logs/20261108-175928); the prompt check tightened to need the minted line first
- [x] 4.3 `gpt_write_one()` in `kernel/src/gpt.c` (one partition, protective MBR, both headers): builds clean on three ISAs; checked on the host (a throwaway harness, not in the tree) -- 600 MiB and 32 MiB blank images and the pair's used Zuse stick each give one identity partition, `gpt_read` reads it back, `sfdisk --verify` clean. Not yet called.
- [x] 4.4 `sk_v4_identity_offer_wait()` / `sk_v4_identity_recheck_offered()`: a stick offered, not attached, while a mint waits (`g_mint_waiting`, `g_offered` in `sk_v4_identity.c`; any stick not this system's and readable -- blank, foreign or a bad table; ends on a stick, a key, or the system stick leaving). Builds on three ISAs; not yet called.
- [x] 4.5 `sk_v4_mint.c`: the flow -- plug-in line, size line, `YES`, GPT, zeroed, minted, read back, marker. Builds on three ISAs; not yet called. The gate gained a **spare**: the last stick turned away as not this system's (or handed back by a refused mint) is offered first by the next mint (for `mint_zuse_refuse`: "a second `MINT-ZUSE` is offered again"); and accessors `sk_v4_identity_stick_in/offered_present/release_offered/marker/set_marker`.
- [x] 4.6 `MINT-ZUSE` in `sk_v4_words[]` (request 2): word_count 317 -> 318. `mint_zuse` PASSES on amd64 (logs/20261108-181556): the size line, YES, "real Zuse minted", the prompt, 7 ok, the new stick one clean identity partition. (Her session is still the proxy's: recognising the real Zuse stick is 4.7.)
- [x] 4.7 the real Zuse stick recognised and attached after the system stick; her session (`sk_v4_real_zuse_arrived()`: identity partition, no Artemis, checked against the marker's real key; attached at the chain's tail; a session already running moves to her; arriving before the system stick, remembered in `g_pending_real` and checked once the marker is read; the installed key now set at every login). Builds on three ISAs; `mint_zuse` checks "identity confirmed" after the minted line: PASS on amd64 (logs/20261110-043807). Not yet handled: pulling the system stick while hers is in (her stick is the chain's tail, so it must go first -- Task 5's `system_pull_real`).
- [x] 4.8 `mint_zuse` passes on amd64 (4.7); the other sessions written (`mint_zuse_refuse`, `mint_small`, `mint_zuse_used`, `mint_pull_system`, `zuse_stick_first`; the data stick's QEMU device now `id=datadev`, so it can be pulled) -- all five PASS on amd64 (logs/20261110-0441* .. 0449*). Left for 4.8: `mint_zuse` on aarch64 and riscv64; the regressions (`genesis`, `two_sticks`, `hotplug`, `midpull`, `typeahead`). Then the other tests: `mint_zuse_refuse`, `mint_pull_system`, `zuse_stick_first`, `mint_small`, the pair's stick offered
- [x] 4.9 regressions, full acceptance on three ISAs: 538/538, word_count=318, dict_hash 0x8c92508f748f99cf on the three, the stick high, test-32 0 failures; FABRIC-3 XLVIII.16. **Task 4 accepted.**
**Task 5, the fixed screen** (increments, as Task 4's):
- [x] 5.1 the first failing test: mode `fallback` (a mint, then the data stick booted alone: the four lines, no prompt, keys dropped; her stick added: the prompt; pulled: the screen again; R with no stick: the plug-in line, any key stops it)
- [x] 5.2 run `fallback` before any kernel change: FAIL -- no fixed screen, R does nothing (logs/20261110-062351, -062543); her stick added, the prompt, typed keys dropped, the session ended on its pull all PASS already
- [x] 5.3 the fixed screen in `sk_v4_identity_wait()`: shown while `g_proxy_fallback`; R runs `sk_v4_mint_zuse()`; every other key dropped
- [x] 5.4 her stick pulled: the fixed screen again (not headless)
- [x] 5.5 the system stick pulled while hers is in: hers let go first (the chain's tail). 5.3-5.5 written in `sk_v4_identity.c` (`sk_v4_fixed_screen`, `sk_v4_session_end`, `g_real_drive`); build on three ISAs; `fallback` PASSES (logs/20261110-063540, -063758). 5.5 itself is tested by `system_pull_real` in 5.6
- [x] 5.6 the other sessions: `replace` (R, a new stick, the old one refused), `mint_fail` (blkdebug write errors), `system_pull_real` -- all PASS on amd64 (`real_pull` is `fallback`'s pull); `mint_fail` passed on its rerun after its own check was fixed (it counted the first boot's mint in the second boot's log)
- [x] 5.7 regressions (all Task 4's sessions, genesis, stick_genesis, the screen and keyboard sessions, emergency: PASS), full acceptance (538/538 on the three and the stick high, word_count=318, dict_hash 0x8c92508f748f99cf, test-32 0 failures); FABRIC-3 XLVIII.17; the SER5 bench steps in `boards/BRINGUP.md` 4.2. **Task 5 accepted -- #92 done.** Original line:, FABRIC entry, commit; then the SER5 bench steps in `boards/BRINGUP.md` (Task 5 step 6)
Working notes: the boot's own words are `sk_v4_words[]` in `kernel/src/v4/sk_v4.c`, served by
`sk_v4_serve(node, request)` with request = index + 1 (`BYE` is 1). Sticks are added in the harness
on port 3 (port 1: the minted pair's stick when a test names it; port 2: the data stick).
@@ -7,7 +7,7 @@
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# Licensed under the Starship License, Version 1.0 (SL-1.0) (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
@@ -26,7 +26,7 @@
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# Licensed under the Starship License, Version 1.0 (SL-1.0) (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
@@ -8,7 +8,7 @@
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# Licensed under the Starship License, Version 1.0 (SL-1.0) (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
@@ -27,7 +27,7 @@
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# Licensed under the Starship License, Version 1.0 (SL-1.0) (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
@@ -7,7 +7,7 @@
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# Licensed under the Starship License, Version 1.0 (SL-1.0) (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
@@ -26,7 +26,7 @@
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# Licensed under the Starship License, Version 1.0 (SL-1.0) (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
@@ -8,7 +8,7 @@
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# Licensed under the Starship License, Version 1.0 (SL-1.0) (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
@@ -27,7 +27,7 @@
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# Licensed under the Starship License, Version 1.0 (SL-1.0) (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:

Some files were not shown because too many files have changed in this diff Show More