Fix EXEC/LOAD block-persistence gap and WIREBIND/USE interpreter-race panic (FABRIC-3.md §XII)
Found live while building a cross-ISA FORTH-79 dictionary exerciser: - capsule_exec_init() zeroed a capsule's block content immediately after running it, so LOAD (a genuine FORTH-79 standard word, ACL-allowed even for locked identities) could never actually read back what EXEC had just written. Removed the clear from capsule_exec_init(); block content now persists like any other Standard BLOCK/BUFFER/UPDATE write. kernel_main.c's own explicit post-birth clear of Mama's init.4th range is untouched. - USE could redirect the console to a WIREBIND identity's VM before that VM's vm_enable_interpreter() step of its own birth sequence had run, causing the next typed line to hit vm_assert_interpreter_enabled() and panic the entire machine -- not the per-session-recoverable ACL-fault path a redirected VM otherwise gets. USE now checks interpreter_enabled first and refuses with a retry message instead. Also includes the amd64/aarch64/riscv64 acceptance boot logs and DoE CSVs from this session. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXieurDfDSsDFdnSyusuWo
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
d5722986b2
commit
662ef44e59
@@ -483,6 +483,22 @@ void mama_word_use(VM *vm)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Found live 2026-09-10: WIREBIND announces "attached and ready --
|
||||
* USE it to begin" the moment the target VM is registered, but
|
||||
* vm_enable_interpreter() is a separate, later step of that same
|
||||
* birth sequence. USE redirecting here before that step lands means
|
||||
* the very next line typed hits vm_assert_interpreter_enabled()
|
||||
* inside vm_interpret() and calls host->panic() -- a hard, whole-
|
||||
* machine halt, not the per-session-recoverable fault path the REPL
|
||||
* loop otherwise gives a redirected VM. Refuse the redirect instead;
|
||||
* the caller can just retry USE a moment later once birth finishes. */
|
||||
if (entry.vm_ptr && !((VM *)entry.vm_ptr)->interpreter_enabled) {
|
||||
console_puts("USE: ");
|
||||
console_puts(name_buf);
|
||||
console_println(" not ready yet -- still bootstrapping, try again");
|
||||
return;
|
||||
}
|
||||
|
||||
/* BINDSTEP (FABRIC-2.md §F.9/§F.24): if the target has a real
|
||||
* installed identity (WIREBIND set this at attach time), re-verify
|
||||
* it against whatever drive is CURRENTLY attached -- live, not
|
||||
|
||||
Reference in New Issue
Block a user