Stage D batch 4: mama_forth_words.c groups 1+2 -- capsule/lifecycle words + BIRTH/START/KILL (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

15 of mama_forth_words.c's 48 silent sites fixed, split by functional
grouping per direct instruction: CAPSULE@/CAPSULE-HASH@/CAPSULE-FLAGS@/
CAPSULE-LEN@/CAPSULE-BIRTH/CAPSULE-RUN/EXEC (9), and BIRTH/START/KILL
(6).

Refined the diagnostic-placement rule: match whichever convention that
same function's other already-correct guards use, rather than
defaulting uniformly. BIRTH/START/KILL/EXEC each already had a
console_println() sibling guard ("name too long or empty") -- their
newly-diagnosed guards now match that, same shape as USE's own fix.
The CAPSULE*@ words have no sibling guard to match, so they keep
log_message() (defer_words.c's gold-standard default).

Three-arch clean qemu acceptance passed; BIRTH itself is exercised by
every boot (Hermes/Artemis birth).

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 18:51:54 -04:00
co-authored by Claude Sonnet 5
parent 66c2f3e539
commit b42c3b195c
10 changed files with 27210 additions and 6 deletions
+29
View File
@@ -4605,3 +4605,32 @@ regression unaffected -- including the full POST word-test suite, which exercise
`vm_compile_word`/`vm_compile_call`/`execute_colon_word` extensively via every colon-definition
test case, with zero regressions from either the diagnostics or the two NULL-guard fixes.
**`mama_forth_words.c` (48 sites) -- per direct instruction, split by functional grouping
rather than mechanical file-order chunks or one single batch. Six groups identified from
§XXXII.3's own per-file site list:** capsule descriptor/lifecycle words + `EXEC` (9: `CAPSULE@`/
`CAPSULE-HASH@`/`CAPSULE-FLAGS@`/`CAPSULE-LEN@`/`CAPSULE-BIRTH`/`CAPSULE-RUN`/`EXEC`); VM
lifecycle words (6: `BIRTH`/`START`/`KILL`); cross-VM execution/dispatch (11: `VM-STEP`/
`VM-EXEC`/`VM-CALL`/`SWITCH-MARK-WORK`/`VM-HEAT`); identity/crypto (10: `MINT` + its
`mint_pop_string()` helper/`ZUSE-ELIGIBILITY-ADD`/`ZUSE-ELIGIBLE?`/`ELEVATE-PUBKEY-UNPACK`);
dictionary lookup + diagnostic/test words (6: `NAME>XT`/`RUNCAP-TEST`/`PAIR-TEST`); Stadium/
physics primitives (6: `STADIUM-ADMIT`/`STADIUM-EVICT`/`STADIUM-RES-PULL`/`STADIUM-RES-PUSH`/
`STADIUM-HEAT@`/`STADIUM-HEAT!`). Groups combined two-at-a-time per commit for acceptance-boot
economy (each full rebuild+3-arch cycle costs the same regardless of diff size within one file),
documented separately below per group.
**Batch 4 -- DONE, 2026-09-15: groups 1+2 (capsule descriptor/lifecycle words + EXEC, and VM
lifecycle words BIRTH/START/KILL) -- 15 sites.** Refined the diagnostic-placement rule while
doing this batch: rather than defaulting to `log_message()` everywhere (batches 1-3's own
default, absent any sibling to match), **match whichever convention that same function's other
already-correct guards already use.** `BIRTH`/`START`/`KILL`/`EXEC` each already had a sibling
guard using `console_println()` ("name too long or empty") -- their newly-diagnosed guards now
use `console_println()` too, for internal consistency within the same function, matching `USE`'s
own five-guard precedent exactly (these are all `S" name"`-taking, directly-interactive commands,
the same shape `USE` is). The four `CAPSULE*@` fetch words and `CAPSULE-BIRTH`/`CAPSULE-RUN` have
no such sibling (a single guard each) -- kept `log_message()`, matching `defer_words.c`'s
gold-standard default for a function with nothing else to match against.
**Verified:** three-architecture `clean qemu` acceptance (amd64/aarch64/riscv64) passed --
`BIRTH` itself is exercised heavily by every boot (Hermes/Artemis birth), a real regression check
beyond compile-cleanliness for this specific batch.