Stage E: every born VM is a switch participant (FABRIC-3.8 §3.6, G4)
capsule_birth_baby() registers each VM at its LIVE completion point, beside the common-channel subscription. register() is idempotent. The Artemis/ Hestia registrations in kernel_main.c and WIREBIND's own call are removed (Hera, never born through capsule_birth_baby, stays with set_current). Probe (restored away): Tripod registered once each (3 slots), a WORKER-BIRTH VM becomes a participant with no hand registration (4) and KILL frees it (3), WIREBIND registers exactly console+user, zero duplicates, on amd64/aarch64/riscv64. Acceptance: dict_hash unchanged, relay 3, idle growth 0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
604ad7aadc
commit
c7185facf0
@@ -1052,3 +1052,54 @@ explicit instruction.
|
||||
- WIREBIND's detach path calls `capsule_vm_kill()` directly, without the `KILL` word's
|
||||
`vm_physics_retire()`. I have not checked whether a detached identity's VM-physics heat
|
||||
is retired elsewhere.
|
||||
- [x] **Stage E — every born VM is a switch participant (§3.6, G4).** 2026-09-23. Captain Bob:
|
||||
*"yes"* (go ahead with Stage E).
|
||||
|
||||
Changes:
|
||||
- `capsule_birth.c`: `capsule_birth_baby()` registers the new VM right after its task 3.2
|
||||
common-channel subscription, at its LIVE completion point. The capsule code has already
|
||||
run to completion by then. A full table is logged and doesn't fail the birth.
|
||||
- `capsule_vm_switch_signal.c/.h`: `sk_vm_switch_signal_register()` is now
|
||||
**idempotent**. An already-registered VM gets its existing slot back, not a duplicate.
|
||||
- `kernel_main.c`: the Artemis/Hestia registrations are removed. Hera is still registered
|
||||
there (she's the one VM never born through `capsule_birth_baby()`), together with
|
||||
`sk_vm_switch_set_current(mama)`. Nothing can switch before that: every switch point
|
||||
requires a current VM.
|
||||
- `capsule_wirebind.c`: the user VM's `sk_vm_switch_signal_register()` call becomes a
|
||||
participation lookup. `switch_slot` was only ever used as a ≥ 0 flag and is now
|
||||
documented as one, since slot indices shift when the table compacts.
|
||||
- The WIREBIND console VM is now a participant too. That's harmless: it never has mail,
|
||||
so it is never chosen. It is unregistered when it's killed at detach (Stage D).
|
||||
- Registration order changes: Hestia, then Artemis at their births, then Hera. Decisions
|
||||
don't depend on order (C-b's walk-order evidence), but the DoE's `switch_current_slot`
|
||||
column now numbers them in that order.
|
||||
- Boot order checked: `sk_vm_switch_signal_boot_init()` (`kernel_main.c:536`) runs before
|
||||
the Tripod births (`:1124`/`:1142`).
|
||||
|
||||
**Evidence, as named in §4.** A temporary probe, restored away from a pre-probe snapshot
|
||||
and verified free of probe code:
|
||||
- `register()` prints every call, and flags any `DUPLICATE`;
|
||||
- `kernel_main.c` checks Tripod participation, then `WORKER-BIRTH`s `eprobe` **without
|
||||
registering it by hand**, checks it is a participant, and `KILL`s it.
|
||||
|
||||
Probe runs with the full relay: `logs/20260923-192830/amd64/`, `-193439/aarch64/`,
|
||||
`-194103/riscv64/`. Identical on all three:
|
||||
- `register` lines for Hestia (count 0 → 1), Artemis (1 → 2), Hera (2 → 3), eprobe
|
||||
(3 → 4);
|
||||
- `STAGE-E PROBE: tripod hera=1 artemis=1 hestia=1 slots=3; WORKER-BIRTH eprobe
|
||||
participant=1 slots=4; after KILL slots=3`, **PASS**;
|
||||
- at WIREBIND attach, exactly **two** registrations (the console VM and `rajames~user`);
|
||||
- **zero `DUPLICATE`** lines anywhere;
|
||||
- the relay still gives `3`.
|
||||
|
||||
**Formal acceptance with the probe gone:** `logs/20260923-194803/amd64/`,
|
||||
`-195401/aarch64/`, `-200026/riscv64/`.
|
||||
- All reach `[zuse@Hera] ok>` with zero `UNKNOWN WORD`, failures and faults.
|
||||
- The `dict_hash` set is unchanged.
|
||||
- The relay gives `3` through a real switch.
|
||||
- Idle log growth: 0 bytes.
|
||||
- Clean build on all three plus hosted, no new warnings.
|
||||
|
||||
**What this makes possible (not exercised yet):** every `WORKER-BIRTH`ed DoE worker is now
|
||||
a participant. Mail sent to a worker is delivered by a switch onto its own stack, and it
|
||||
competes by heat. Stage G's `SEND` word and interleave test are next.
|
||||
|
||||
Reference in New Issue
Block a user