Stage D batch 7 (final): mama_forth_words.c groups 5+6 -- dictionary lookup/test words + Stadium primitives; Stage D closed (FABRIC-3.md §XXXII.6)
Build / build-amd64-iso (push) Canceled after 0s
Build / build-aarch64-iso (push) Canceled after 0s
Build / build-riscv64-img (push) Canceled after 0s

NAME>XT/RUNCAP-TEST/PAIR-TEST and the six STADIUM-* physics primitives
(STADIUM-ADMIT/STADIUM-EVICT/STADIUM-RES-PULL/STADIUM-RES-PUSH/
STADIUM-HEAT@/STADIUM-HEAT!), 12 sites -- closes mama_forth_words.c
and the entire kernel-only error-handling audit.

All 105 sites from the §XXXII.3 triage now accounted for: 28 already
correct, 75 silent sites fixed across repl.c/inference_words.c/
log_words.c/vm_core.c/mama_forth_words.c, 2 special cases resolved by
dropping the error per their own documented contract, 1 resolved via
console_println() per its own recursion constraint. Verified with awk:
zero remaining vm->error=1 sites in mama_forth_words.c lack a
diagnostic within the preceding three lines.

Three-arch clean qemu acceptance passed. This closes Stage D and the
USE/logging/audit thread opened in §XXXII; Stage E (human-vs-unattended
identity model) remains open, not started this pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BWpNjdwPtFLuVLaAq44L9K
This commit is contained in:
Robert Allan James
2026-09-15 20:25:30 -04:00
co-authored by Claude Sonnet 5
parent 90c86c6006
commit 42d4bf3dad
10 changed files with 27228 additions and 11 deletions
+52 -10
View File
@@ -1226,6 +1226,7 @@ static void mama_word_zuse_eligible_query(VM *vm)
static void mama_word_name_to_xt(VM *vm)
{
if (vm->dsp < 1) {
log_message(LOG_ERROR, "NAME>XT: stack underflow");
vm->error = 1;
vm_push(vm, 0);
return;
@@ -1238,6 +1239,7 @@ static void mama_word_name_to_xt(VM *vm)
}
const uint8_t *name = vm_ptr(vm, (vaddr_t)caddr);
if (!name) {
log_message(LOG_ERROR, "NAME>XT: invalid address on the stack");
vm->error = 1;
vm_push(vm, 0);
return;
@@ -1295,7 +1297,11 @@ static void mama_word_runcap_test(VM *vm)
cell_t u, caddr;
uint32_t i;
if (vm->dsp < 1) { vm->error = 1; return; }
if (vm->dsp < 1) {
console_println("RUNCAP-TEST: expects S\" name\" RUNCAP-TEST -- nothing on the stack");
vm->error = 1;
return;
}
u = vm_pop(vm);
caddr = vm_pop(vm);
@@ -1306,7 +1312,11 @@ static void mama_word_runcap_test(VM *vm)
}
{
const uint8_t *p = vm_ptr(vm, (vaddr_t)caddr);
if (!p) { vm->error = 1; return; }
if (!p) {
console_println("RUNCAP-TEST: invalid address on the stack");
vm->error = 1;
return;
}
for (i = 0; i < (uint32_t)u; i++) vm_name[i] = (char)p[i];
}
vm_name[u] = '\0';
@@ -1345,7 +1355,11 @@ static void mama_word_pair_test(VM *vm)
cell_t u, caddr;
uint32_t i;
if (vm->dsp < 1) { vm->error = 1; return; }
if (vm->dsp < 1) {
console_println("PAIR-TEST: expects S\" name\" PAIR-TEST -- nothing on the stack");
vm->error = 1;
return;
}
u = vm_pop(vm);
caddr = vm_pop(vm);
@@ -1356,7 +1370,11 @@ static void mama_word_pair_test(VM *vm)
}
{
const uint8_t *p = vm_ptr(vm, (vaddr_t)caddr);
if (!p) { vm->error = 1; return; }
if (!p) {
console_println("PAIR-TEST: invalid address on the stack");
vm->error = 1;
return;
}
for (i = 0; i < (uint32_t)u; i++) console_name[i] = (char)p[i];
}
console_name[u] = '\0';
@@ -1924,7 +1942,11 @@ static void mama_word_stadium_admit(VM *vm)
size_t i;
size_t idx;
if (vm->dsp < 2) { vm->error = 1; return; }
if (vm->dsp < 2) {
log_message(LOG_ERROR, "STADIUM-ADMIT: stack underflow");
vm->error = 1;
return;
}
behaviour_cell = vm_pop(vm);
heat_cell = vm_pop(vm);
@@ -1959,7 +1981,11 @@ static void mama_word_stadium_evict(VM *vm)
{
cell_t cell_cell;
if (vm->dsp < 0) { vm->error = 1; return; }
if (vm->dsp < 0) {
log_message(LOG_ERROR, "STADIUM-EVICT: stack underflow");
vm->error = 1;
return;
}
cell_cell = vm_pop(vm);
if (cell_cell < 0) {
@@ -2001,7 +2027,11 @@ static void mama_word_stadium_res_pull(VM *vm)
{
cell_t qty_cell;
if (vm->dsp < 0) { vm->error = 1; return; }
if (vm->dsp < 0) {
log_message(LOG_ERROR, "STADIUM-RES-PULL: stack underflow");
vm->error = 1;
return;
}
qty_cell = vm_pop(vm);
if (qty_cell < 0) {
@@ -2021,7 +2051,11 @@ static void mama_word_stadium_res_push(VM *vm)
{
cell_t heat_cell;
if (vm->dsp < 0) { vm->error = 1; return; }
if (vm->dsp < 0) {
log_message(LOG_ERROR, "STADIUM-RES-PUSH: stack underflow");
vm->error = 1;
return;
}
heat_cell = vm_pop(vm);
if (heat_cell < 0) return;
@@ -2038,7 +2072,11 @@ static void mama_word_stadium_heat_fetch(VM *vm)
{
cell_t cell_cell;
if (vm->dsp < 0) { vm->error = 1; return; }
if (vm->dsp < 0) {
log_message(LOG_ERROR, "STADIUM-HEAT@: stack underflow");
vm->error = 1;
return;
}
cell_cell = vm_pop(vm);
if (cell_cell < 0) {
@@ -2060,7 +2098,11 @@ static void mama_word_stadium_heat_store(VM *vm)
{
cell_t cell_cell, new_heat_cell;
if (vm->dsp < 1) { vm->error = 1; return; }
if (vm->dsp < 1) {
log_message(LOG_ERROR, "STADIUM-HEAT!: stack underflow");
vm->error = 1;
return;
}
cell_cell = vm_pop(vm);
new_heat_cell = vm_pop(vm);