fix(v4): the identity gate's final review, items 1-4

From the fresh whole-branch review of the identity gate (With fixes; no
Critical, four Important):
1. A drive pulled while a line ran: the drives are looked at before every
   prompt (sk_v4_identity_check_now), so no prompt is shown once she is
   gone and what was typed after the pull does not run as Zuse.
2. Pulled while a line WAITS: the wait is ended at logout, by an empty
   line, and not carried into her next session (Captain Bob, 2026-10-26:
   "end the waiting line at logout"); re-attaching brings the prompt back.
3. EMERGENCY_CONSOLE_ENABLED: v4 honours it as v3 does -- a bring-up build
   has a prompt with no drive (boards/BRINGUP.md A2).
4. Keys typed at a headless machine are read and dropped, not run as
   whoever logs in next. (v3 has the same gap, sk_repl_headless_wait;
   reported, not changed.)

Each a QEMU session red then green (amd64): midpull 111650 -> 112953,
waitpull 111907 -> 113154, emergency 112524 -> 113609, typeahead
112248 -> 113359; headless 113800 and hotplug 114043 still pass.
Accepted: three clean qemu boots to [zuse@Hera] ok>, POST 538/538,
dict_hash 0xfec8c47cfc6f437f on all three; hotplug on aarch64 and
riscv64; make -C v4 test test-32 sanitize hosted-check EXIT 0;
make -C v4 test-32 0 failures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rajames
2026-10-26 13:04:06 -04:00
co-authored by Claude Opus 5.5
parent 668abc48e6
commit 6452c540a2
3 changed files with 53 additions and 6 deletions
@@ -20,8 +20,13 @@ int sk_v4_identity_present(void);
* with nothing typed. */
void sk_v4_identity_beat(void);
/* Headless: no prompt, no input, until Zuse's session begins (v3's
* sk_repl_headless_wait()). */
/* The USB drives that have arrived or left, now, not waiting for the next
* beat: before each prompt, so that a drive pulled while the last line ran
* is seen before a prompt is shown. */
void sk_v4_identity_check_now(void);
/* Headless: no prompt, and what is typed is read and dropped, until Zuse's
* session begins (v3's sk_repl_headless_wait()). */
void sk_v4_identity_wait(void);
#endif /* STARKERNEL_V4_SK_V4_IDENTITY_H */