feat(kernel): the fixed screen -- with a real Zuse, the system stick alone can only mint a replacement; the old stick dies (#92, Task 5)
Build / Image RASPI (push) Successful in 4m21s
Build / Image PC (push) Successful in 5m1s
Build / Image MILKV (push) Successful in 7m22s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 12m17s
Acceptance / Acceptance (pull_request) Successful in 19m56s

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
This commit is contained in:
Claude
2026-11-10 07:59:58 +00:00
parent 4742cf8b3b
commit 836b4423e1
45 changed files with 3116 additions and 7 deletions
+24
View File
@@ -6489,3 +6489,27 @@ and memorize frequently so we can pick up where we left off").
- **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.
+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).
@@ -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,13 +334,13 @@ 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).
@@ -368,7 +368,7 @@ Tasks 1-3 accepted and merged (#159, master 594d2f93); #155 merged with them.
- [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)
- [~] 5.7 regressions (running: build/t5/suite57/), full acceptance, FABRIC entry, commit; then the SER5 bench steps in `boards/BRINGUP.md` (Task 5 step 6)
- [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