feat(kernel): MINT-ZUSE, a word of the lone node (request 2) (#92, 4.6) [skip ci]

word_count 317 -> 318; no POST case (it waits for a stick and YES, as BYE has none).

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-08 18:15:26 +00:00
parent 8b83e0a72d
commit 5df4d73480
2 changed files with 9 additions and 3 deletions
@@ -356,7 +356,7 @@ Tasks 1-3 accepted and merged (#159, master 594d2f93); #155 merged with them.
- [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`.
- [ ] 4.6 `MINT-ZUSE` in `sk_v4_words[]` (request 2): word_count 317 -> 318
- [x] 4.6 `MINT-ZUSE` in `sk_v4_words[]` (request 2): word_count 317 -> 318. Builds; `mint_zuse` running on amd64 (build/t4/mint-46.txt).
- [ ] 4.7 the real Zuse stick recognised and attached after the system stick; her session
- [ ] 4.8 `mint_zuse` passes on amd64; then the other tests: `mint_zuse_refuse`, `mint_pull_system`, `zuse_stick_first`, `mint_small`, the pair's stick offered
- [ ] 4.9 regressions, full acceptance on three ISAs (new dict_hash, equal), FABRIC entry, commit
+8 -2
View File
@@ -20,6 +20,7 @@
*
* Nothing of the v3 VM is started. docs/v4.0.0/DECOMPOSITION.md.
*/
#include "starkernel/v4/sk_v4_mint.h"
#include "starkernel/v4/sk_v4.h"
#include "starkernel/v4/sk_v4_identity.h"
#include "starkernel/kbd_input.h"
@@ -62,11 +63,12 @@ static int sk_v4_key(void)
}
/* THE KERNEL'S WORDS for the lone node. BYE is v3's (mama_word_bye): a cold
* restart. v3's reaps Hera's children first; the lone node is started
* restart, and MINT-ZUSE mints the real Zuse onto a second stick
* (sk_v4_mint.c). v3's BYE reaps Hera's children first; the lone node is started
* before there is a fleet, so there are none. The rest of the kernel's
* words come when the node is brought up in the VM's place (ENGINE.md
* step 4), where v3's own functions serve them. */
static const char *const sk_v4_words[] = { "BYE" };
static const char *const sk_v4_words[] = { "BYE", "MINT-ZUSE" };
static void sk_v4_serve(v4_node *node, unsigned request)
{
@@ -75,6 +77,10 @@ static void sk_v4_serve(v4_node *node, unsigned request)
console_println("BYE: cold restart");
arch_cold_reset();
}
/* MINT-ZUSE: the real Zuse onto a second stick (docs/v4.0.0/STICK.md 6a;
* plan 2026-10-29-stick-5, Task 4). No POST case: it waits for a stick
* and a typed YES, as BYE has none. */
if (request == 2) (void)sk_v4_mint_zuse();
}
/* Read a line from the keyboard: characters are echoed, backspace rubs one