Stage C-a: work law — running VM charged at each of its own beats, with carry (FABRIC-3.8 §3.13.2)

vm_physics_charge(): per-beat slope into a per-VM carry, whole units pulled
from the rest of the live fleet in proportion to heat (conservative
vm_physics_transfer), rounding shortfall kept in the carry, no fleet_window
sample. Called from vm_tick() only for the switch-current VM. Closes G9:
a VM running its own mail on its own stack now heats up while it works.

Probe (reverted): baseline Hestia heat 0->0->0 over 71 beats (FAIL, proves
G9); with charge 0->11->23 at beats 15->51->86, identical on amd64/aarch64/
riscv64, conserved, PASS. Acceptance: dict_hash unchanged, WIREBIND relay 3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-09-23 16:51:09 -04:00
co-authored by Claude Opus 5.5
parent 29447abb7d
commit 7c3736841d
19 changed files with 64261 additions and 6 deletions
+19
View File
@@ -92,6 +92,25 @@ void vm_physics_retire(VMUuid vm_id);
*/
void vm_physics_touch(VMUuid vm_id);
/**
* vm_physics_charge - Charge the running VM for one beat of its own work
*
* FABRIC-3.8.md §3.13.2 (Stage C-a, 2026-09-23). The work law, beside
* vm_physics_touch()'s dispatch law: called once per beat a VM produces
* while it is the switch-current VM (vm_tick()), so a VM running its own
* kernel-Hermes mail on its own stack heats up as it works -- before this,
* nothing did (G9). Adds one beat's slope to a per-VM carry, and pulls the
* carry's whole units from the rest of the live fleet in proportion to
* each VM's heat, through the same conservative transfer as touch. The
* fraction below one unit, and any whole units lost to the proportional
* split's own rounding, stay in the carry instead of being discarded.
* Records NO fleet_window sample, so the slope estimator and the existing
* DoE heat columns keep their meaning (§3.13.2 "Frozen slope").
*
* @param vm_id Registry VM ID of the running VM
*/
void vm_physics_charge(VMUuid vm_id);
/**
* vm_physics_tick - Heartbeat-gated inference pass
*