test(build): Zuse's minted pair as a stick -- the acceptance boots and the sessions use it

mkdiskimage.sh --starship-from IDENT ART lays a minted pair out as a StarshipOS stick: an identity
partition holding IDENT's bytes and an Artemis partition holding ART's, each exactly its file's
size (Artemis's signature and fence are placed from the volume's size). kernel/Makefile: a
zusestick target, made fresh for every boot, is ZUSEDISK's default (ZUSE_PAIR names the pair);
STICK_PAIR puts the pair in the PC stick. qemu_session.py's Zuse drive is the pair as a stick.
check_images.sh checks both forms byte for byte against the pair (60 PASS).

On today's kernel all 23 sessions pass on the Zuse stick, and acceptance: amd64, aarch64,
riscv64 to [zuse@Hera] ok>, POST 538/538, dict_hash 0xfec8c47cfc6f437f; v4 suite and test-32
0 failures. The plan gains Task 5, screen=boot (ruled 2026-10-28).

Plan: docs/v4.0.0/plans/2026-10-27-stick-4-one-disk.md, Task 1 (R1 as recommended).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rajames
2026-10-28 08:41:51 -04:00
co-authored by Claude Opus 5.5
parent b2278b6204
commit 38b2b9693a
59 changed files with 4350 additions and 14 deletions
@@ -310,3 +310,38 @@ drives), §5 items 1, 2 and 5, §9 (entropy, parity), §11 increment 4.
- the seven GPT modes.
- [ ] **Step 5:** Suite; full acceptance; commit `feat(kernel): Artemis and Zuse from one disk --
the stick; virtio Artemis leaves v4` with the logs.
### Task 5: `screen=boot` -- the console on the screen until login (added 2026-10-28)
Captain Bob, 2026-10-28: "yes, add screen=boot at the end of increment 4" -- for the SER5 smoke
test after Task 4, which has no serial port: today the v4 boot turns the screen's console mirror off
after POST (`sk_v4_block_chain`, `console_fb_mirror(0)`), so a failure after POST shows a black
screen.
**Files:**
- Modify: `kernel/include/starkernel/kernel_args.h` (`int screen_boot;` in `KernelArgs`, before
`raw`; check `boot_info_offsets.h` -- `args` is the last field it may name, `BootDisk` comes after)
- Modify: `kernel/src/boot/cmdline.c` (`screen=boot`, with or without `--`, as `system=` is parsed;
the last one wins; any other `screen=` value is ignored)
- Modify: `kernel/src/kernel_main.c` (`sk_v4_block_chain`: with `screen_boot`, the mirror stays on
and the line `Screen: the console stays on until login (screen=boot)`; without it, as today)
- Modify: `scripts/qemu_session.py` (mode `screen_boot`)
- Modify: `boards/BRINGUP.md` (the PC section: the smoke test's `starforth.cfg` is
`system=v4 screen=boot`, Secure Boot off)
**Behaviour:**
- Before the first login only. Login draws the console as today; a logout darkens the screen as
today (`screen=boot` is for watching a boot, not a way round the identity gate: the screen shows
what serial shows, and nothing can be typed without Zuse).
- Default (no argument): unchanged -- `screen_dark_until_login` still passes.
- v3 (`system=v3`): unchanged.
- [ ] **Step 1: Failing test.** Mode `screen_boot` (amd64, `KERNEL_ARGS=screen=boot`, no drive):
the `Screen:` line; 30 s after POST the screen is not black (at least 500 lit pixels, as
`screen_console_after_login` counts); no `ok> `. Today: FAIL.
- [ ] **Step 2:** Run: FAIL.
- [ ] **Step 3:** Implement.
- [ ] **Step 4:** `screen_boot` passes on amd64 and aarch64 (riscv64's ramfb too, if the mode's
screendump works there); `screen_dark_until_login`, `screen_dark_after_logout`, `zuse` pass.
- [ ] **Step 5:** Suite; full acceptance; commit `feat(kernel): screen=boot keeps the console on the
screen until login -- for watching a PC boot` with the logs.