Stage O-A: the Tripod is an observer -- outside the compudynamic comparison, acting on events (FABRIC-3.9.0 §2, 3.9.8)

Observer flag on switch-signal slots, set by the kernel for the Tripod
(is_fleet_foundation, hoisted; Hera in kernel_main). The decision: an
observer in progress or holding an event keeps the CPU; observers with
events (mail, Hera's console input) go ahead of participants, oldest wait
stamp first; participants compared by work heat as before. Observers are
never charged (O-2) nor floored. Uncommitted heat-share charge discarded.

Evidence, byte-identical amd64/aarch64/riscv64: G interleave unchanged;
Hestia's mail runs before any worker output (HHHABB...); a line typed
while two workers run is read and executed mid-stream (...ABAB1 2 + . /
3 ok / ABAB...) -- console responsive under load. Relay 3, dict_hash
unchanged. Busy-wait DOE deliberately not run (deadlocks by design until
O-C). FABRIC-3.9.0 records rulings and Captain Bob's messaging note (§7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-09-24 09:28:35 -04:00
co-authored by Claude Opus 5.5
parent 04dbc3a5d3
commit 6e933dac38
14 changed files with 27770 additions and 35 deletions
@@ -116,6 +116,17 @@ int sk_vm_switch_signal_unregister(VMUuid vm_id);
* mail is delivered on their own stacks, by a switch). */
int sk_vm_switch_signal_is_participant(VMUuid vm_id);
/* FABRIC-3.9.0.md §2 (Stage O-A, 2026-09-24): the observer role. The
* Tripod (Hera, Artemis, Hestia) is marked by the kernel at registration --
* never by anything a VM executes. Observers are outside the compudynamic
* comparison (never heat candidates, never charged, never in a floor) and
* act on events: at a clean boundary an observer with mail (or, for Hera,
* console input) goes ahead of every participant, and an observer acting
* on an event is not displaced (ruling O-1). is_observer() is 0 for an
* unregistered VM. */
void sk_vm_switch_signal_set_observer(VMUuid vm_id);
int sk_vm_switch_signal_is_observer(VMUuid vm_id);
/* A fresh, unique wait stamp (mainline, single writer). kernel_hermes.c
* stamps each admitted message with one. */
uint64_t sk_vm_switch_signal_next_stamp(void);