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>
33 lines
1.3 KiB
C
33 lines
1.3 KiB
C
/* sk_v4_identity.h -- the identity gate for the v4 boot: no identity drive,
|
|
* headless; Zuse's minted thumbdrive, a console.
|
|
* docs/v4.0.0/plans/2026-10-26-engine-step4-identity-gate.md.
|
|
*
|
|
* Built only with STARFORTH_V4=1 (Kconfig.kernel).
|
|
*/
|
|
#ifndef STARKERNEL_V4_SK_V4_IDENTITY_H
|
|
#define STARKERNEL_V4_SK_V4_IDENTITY_H
|
|
|
|
/* After POST and the block chain: Zuse's public key from the genesis marker,
|
|
* every xHCI controller brought up, and the heartbeat started, as the v3
|
|
* path does before its headless wait. */
|
|
void sk_v4_identity_boot(void);
|
|
|
|
/* 1 while Zuse's session holds: her drive is attached and checked. */
|
|
int sk_v4_identity_present(void);
|
|
|
|
/* Service the heartbeat and, once a second, the USB drives that have arrived
|
|
* or left (v3's idle beat, its USB part). Called while waiting for a key
|
|
* with nothing typed. */
|
|
void sk_v4_identity_beat(void);
|
|
|
|
/* 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 */
|