Phase C: distributed messaging capsule + idle-loop pump
Extract the messaging vocabulary (arenas, MSG-*/CH-*/MBR-* words) out of capsules/hermes/init.4th into a new shared capsules/common/messaging.4th that Hermes and Artemis each load at birth, giving every VM its own private MSG-ARENA/CH-ARENA instead of only Hermes having one. Hermes stays the owner of the one real, canonical COMMON-CH; Artemis subscribes into it via VM-EXEC at her own birth, and Hermes proactively subscribes Hera (idx 0) since Hera always exists first. Hera does NOT get her own copy: register_child_vm_words()'s own doc comment explains why the STADIUM-* primitives common:messaging.4th depends on are deliberately never registered in her dictionary (keeps her dict_hash off item 4.1's baseline). Confirmed live by loading it into her dictionary anyway first -- every colon-definition referencing an unregistered Stadium primitive was silently dropped (MSG-HEAT@/!, CH-HEAT@/!, MSG-COOL-ALL, MSG-TICK all missing after boot). Reverted that path; she orchestrates via BIRTH/VM-EXEC/VM-CALL instead. Added capsule_vm_registry_get_by_index() (capsule_birth.c/.h) for registry enumeration by birth-order position, and a pump in repl.c's existing idle hook that walks every live VM once per idle beat and VM-EXECs MSG-TICK into each one except Hera's own entry. Verified clean (no UNKNOWN WORD / VM-EXEC errors after birth) on all three architectures. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019ZGkimpfyh63EZyRkNbkPD
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
0ec91b517a
commit
21bca315ff
@@ -223,6 +223,19 @@ int capsule_vm_registry_get(VMUuid vm_id, VMRegistryEntry *out);
|
||||
*/
|
||||
uint32_t capsule_vm_registry_count(void);
|
||||
|
||||
/**
|
||||
* capsule_vm_registry_get_by_index - Get registry entry by list position
|
||||
* (birth order, stable within a boot session -- the registry is
|
||||
* append-only). For enumeration (e.g. the idle-loop messaging pump,
|
||||
* FABRIC-3.md Phase C, 2026-08-28), where no vm_id is known up front.
|
||||
* Index range is [0, capsule_vm_registry_count()).
|
||||
*
|
||||
* @param index Zero-based position in birth order
|
||||
* @param out Output: registry entry copy
|
||||
* @return 0 on success, -1 if index is out of range
|
||||
*/
|
||||
int capsule_vm_registry_get_by_index(uint32_t index, VMRegistryEntry *out);
|
||||
|
||||
/**
|
||||
* capsule_vm_find_by_name - Find VM registry entry by symbolic name
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user