Multiuser DoE punch list: WORKER-BIRTH + VM-ERROR? + vm_physics_init fix
Build / build-amd64-iso (push) Canceled after 0s
Build / build-aarch64-iso (push) Canceled after 0s
Build / build-riscv64-img (push) Canceled after 0s

Core mechanism for §XXXIII's main concurrency block, built and
live-verified on amd64. Two new primitives:

- WORKER-BIRTH ( capsule-c capsule-u name-c name-u -- ok? ): births a
  named, VM-EXEC-addressable VM from an arbitrary (p) capsule with no
  identity involved. Corrects the ratified design's own assumption that
  the main block would use UNATTENDED-BIRTH -- that requires a
  committed capsule per identity, impractical for dozens of trial VMs.
  The concurrency block never needed identity at all.
- VM-ERROR? ( c-addr u -- flag ): reads a named VM's error state from
  Hera, mirroring VM-HEAT's silent/always-returns-a-value contract.
  Needed to check a VM-EXEC-driven trial VM's own fault state after
  the fact -- nothing existing let Hera do this.

Real bug found and fixed in both WORKER-BIRTH and UNATTENDED-BIRTH:
capsule_birth_baby() never calls vm_physics_init() either (same shape
as the registry-name gap found building UNATTENDED-BIRTH) -- without
it a born VM is never in the VM Fleet Attractor physics list, so
VM-HEAT returns 0 forever regardless of work done. Fixed by adding
vm_physics_init() alongside the existing registry-name call in both
words.

Traced (not guessed) why heat still read 0 after one VM-EXEC touch
even post-fix: vm_physics_touch()'s transfer logic only fires from a
VM's *second* touch onward -- the first touch just records a baseline
tick. Verified live across three sequential touches: heat 0 -> 7039 ->
11333. This is a real design requirement for the DoE's heat/CV
response variable (each trial must touch a worker at least twice), not
a bug to route around.

Also found live: all 10 existing workload-N.4th capsules self-execute
their full workload at load/birth time (a bare top-level call to their
own RUN-* word at file end) -- missed on an earlier, too-shallow
8-line survey of each file. WORKER-BIRTH alone already runs a worker's
first pass as a side effect of birth.

Verified live on amd64: two concurrent workers (fib + matrix-mul)
birthed, run, measured (heat + error state), and killed cleanly;
VM-HEAT/VM-ERROR? both confirmed silent-0 on an unknown name. Clean
3-arch qemu boot on the real committed change.

Still open: the run-matrix/shuffle/CSV driver capsule itself, the
WIREBIND-automation path for the fixed arm, and the per-VM touch-count
budget's exact value.

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-16 08:51:21 -04:00
co-authored by Claude Sonnet 5
parent bc2e294c50
commit e33eb36361
20 changed files with 73938 additions and 1 deletions
+55
View File
@@ -4936,3 +4936,58 @@ proven at this scale.
standing convention, at least one full pass reviewed for plausibility before calling the
harness itself proven.
### XXXIII.4 -- Punch list progress, 2026-09-16: core mechanism built and live-verified
**A scoping correction found immediately on starting implementation:** the ratified design's
main block said "every concurrent VM is `UNATTENDED-BIRTH`'d." Wrong in practice --
`UNATTENDED-BIRTH` requires its own committed capsule per identity (mint, hand-transcribe,
author a `.4th` file), completely impractical to repeat for dozens of trial VMs across a real
factorial. The main concurrency block never needed identity at all -- it's stressing
concurrency and workload execution, not identity verification (already proven in §XXXII).
**New primitive: `WORKER-BIRTH ( capsule-c capsule-u name-c name-u -- ok? )`** -- births a
named, `VM-EXEC`-addressable VM from an arbitrary `(p)` capsule with no identity involved at
all, built specifically for this main block. `UNATTENDED-BIRTH` stays exactly as built, for
the fixed arm where identity origin is the thing being varied.
**A second gap found the same way UNATTENDED-BIRTH's registry-name gap was found:**
`capsule_birth_baby()` also never calls `vm_physics_init()` -- so a `WORKER-BIRTH`'d (and, it
turns out, an `UNATTENDED-BIRTH`'d) VM was never registered in the VM Fleet Attractor physics
list at all, making `VM-HEAT` return 0 forever regardless of how much work the VM did. Fixed
in both words (`vm_physics_init(new_vm_id)` alongside the existing
`capsule_vm_registry_set_name()` call) -- plain `BIRTH` was the only existing caller doing
both together, another instance of "every birth caller must do these steps itself,
`capsule_birth_baby()` sets neither."
**A real design requirement for the heat/CV response variable, traced to ground truth in
`vm_physics_touch()` rather than guessed at:** heat only transfers from a VM's *second* touch
onward -- the first touch on any VM only records a baseline tick and sets `touched=1`, moving
zero heat by construction (`capsule_vm_physics.c:301-303`'s own gating condition). Verified
live: heat read `0` after one `VM-EXEC` touch, `7039` after a second, `11333` after a third.
**Design requirement, not a bug to route around:** each trial's per-worker driving sequence
must call `VM-EXEC` at least twice for heat to be a meaningful signal at all.
**New primitive: `VM-ERROR? ( c-addr u -- flag )`** -- reads a named VM's `vm->error` state
from Hera, mirroring `VM-HEAT`'s exact "silent, always returns a value" contract (0 on unknown/
dead name, no error). Needed because nothing previously let Hera check a `VM-EXEC`-driven
trial VM's own fault state after the fact.
**Live-verified end to end on amd64:** birthed two concurrent workers (`w1` from
`workload-8.4th`/fib, `w2` from `workload-7.4th`/matrix-mul) via `WORKER-BIRTH`, confirmed both
alive and running distinct real workloads simultaneously, read heat and error state on both
after driving real work through `VM-EXEC`, confirmed `VM-HEAT`/`VM-ERROR?` both return silent 0
(no crash) for a nonexistent name, and `KILL`'d both cleanly. Separately verified the
heat-transfer mechanism itself across three sequential touches on one worker. Hera stayed
healthy throughout every test (`5 6 + .` -> `11` after each). Clean 3-arch qemu boot on the
real committed change.
**Also found, not chased:** every one of the 10 existing `workload-N.4th` capsules
self-executes its full workload immediately at load/birth time (a bare top-level call to its
own `RUN-*` word at the end of the file) -- confirmed by reading each file's actual tail, not
assumed from its first ~10 lines as an earlier pass of this investigation did. This means
`WORKER-BIRTH` alone already runs a worker's assigned workload once as a side effect of birth;
no separate "load then call" step is needed for that first run, only for subsequent
`VM-EXEC`-driven touches.
**Still not started:** the run-matrix/shuffle/CSV driver itself, the WIREBIND-automation path
for the fixed arm, and the per-VM iteration/touch-count budget's exact value.