From 389ca74d9ff18acab3f62996d4ea256d9096f073 Mon Sep 17 00:00:00 2001 From: Robert Allan James Date: Thu, 13 Aug 2026 08:15:44 -0400 Subject: [PATCH] FABRIC-2.md: close Multi-VM heartbeat ownership item MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Punch list §B item complete. Documents the Hera-sole-owner ruling and points to the vm_runtime.c fix (bcc72d0) and its three-arch acceptance logs. Co-Authored-By: Claude Sonnet 5 --- FABRIC-2.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/FABRIC-2.md b/FABRIC-2.md index 1c39e12..ea224db 100644 --- a/FABRIC-2.md +++ b/FABRIC-2.md @@ -58,10 +58,30 @@ and recorded. is the single most concrete open item carried into this document — real, live, and unmeasured. -- [ ] **Multi-VM heartbeat ownership.** Whose `tick_target_ns` drives the one physical timer +- [x] **Multi-VM heartbeat ownership.** Whose `tick_target_ns` drives the one physical timer (FABRIC.md §26.5) has only one answer while Hera is the only VM; explicitly "not resolved for when Hermes/Artemis return." Hermes has returned (item 4.2). Same situation as the fleet heat leak above — a deferral whose triggering condition has since become true. + **Ruled:** there is exactly one physical timer, so exactly one VM may write its re-arm + period — never whichever VM's `vm_tick()` happened to run last. Hera is the fixed point + everywhere else in this design (patron zero, sole capacity arbiter, sole birther/killer of + VMs — see FABRIC.md §20.2, §26), so she is the sole owner here too. Every other VM's Loop + #7 (`vm_tick_inference_engine()`) still adapts its own `vm->heartbeat.tick_target_ns` + exactly as before — that per-VM bookkeeping is correct and untouched — it simply never + reaches the shared physical re-arm; only Hera's does. + *Done when:* `vm_tick_inference_engine()` gates the physical-timer re-arm behind + `vm_uuid_is_hera(vm->stadium_vm_id)`, and a three-arch QEMU boot with Hermes live (item + 4.2) is clean. + *Refs (FABRIC.md):* §20.2, §26.5. + + > **DONE 2026-08-13.** `vm_tick_inference_engine()` + > (`src/starkernel/vm/vm_runtime.c:766`) now wraps the kernel-base re-arm block in + > `if (vm_uuid_is_hera(vm->stadium_vm_id))`, using the existing + > `vm_uuid_is_hera()` (`src/starkernel/capsule/vm_uuid.c:51`) already used the same way at + > the birth/kill call sites in `capsule_birth.c` and `capsule_vm_physics.c`. Three-arch + > acceptance boot, all clean to `ok>`, Hermes live and self-testing in every log: + > `logs/20260813-075940/amd64`, `logs/20260813-080125/aarch64`, + > `logs/20260813-080257/riscv64`. Committed `bcc72d0`. ---