3.7 KiB
Hermes Tripod Integration Test — Results
Date: 2026-06-27
Branch: lithosananke
Commit: fe4b2442
Script: tools/hermes_tripod_smoke.sh
Status: PASS — 16/16
Summary
All six inter-VM message paths through the Tripod dispatched to the correct recipient. HERMES-TICK ran clean. Arena was empty after reap.
Output
>>> Tripod integration test
>>> [1] Hera->Hermes SPAWN-EVENT
[Hermes recv]
>>> [2] Hera->Artemis store request
[Artemis recv]
>>> [3] Hermes->Hera delivery confirm
[Hera recv]
>>> [4] Hermes->Artemis log store
[Artemis recv]
>>> [5] Artemis->Hera ACK
[Hera recv]
>>> [6] Artemis->Hermes route result
[Hermes recv]
>>> HERMES-TICK (cool all 6)
>>> HERMES-TICK ok
>>> MSG-ARENA clean (expect 0): 0
>>> === Tripod integration complete ===
Validation Results
| # | Check | Result |
|---|---|---|
| 1 | test started | PASS |
| 2 | path1 header — [1] Hera->Hermes SPAWN-EVENT |
PASS |
| 3 | path1 recv — [Hermes recv] |
PASS |
| 4 | path2 header — [2] Hera->Artemis store request |
PASS |
| 5 | path2 recv — [Artemis recv] |
PASS |
| 6 | path3 header — [3] Hermes->Hera delivery confirm |
PASS |
| 7 | path3 recv — [Hera recv] |
PASS |
| 8 | path4 header — [4] Hermes->Artemis log store |
PASS |
| 9 | path4 recv — [Artemis recv] |
PASS |
| 10 | path5 header — [5] Artemis->Hera ACK |
PASS |
| 11 | path5 recv — [Hera recv] |
PASS |
| 12 | path6 header — [6] Artemis->Hermes route result |
PASS |
| 13 | path6 recv — [Hermes recv] |
PASS |
| 14 | HERMES-TICK ok | PASS |
| 15 | arena clean (expect 0): 0 | PASS |
| 16 | integration complete | PASS |
Result: 16 passed, 0 failed
Architecture Notes
Dispatch mechanism: Name-length discriminator in VM-EXEC-TRIPOD —
Hera (len=4), Hermes (len=6), Artemis (len=7). No COMPARE word needed.
Late-binding shim install: DEFER VM-EXEC declared in capsules/core/init.4th.
The test wires ' VM-EXEC-TRIPOD IS VM-EXEC from Block 9996 before Hermes loads.
This is the first live use of the new DEFER/IS/DEFER@ C primitives (Module 27).
DO loop in block content: DO...LOOP is compile-only in StarForth.
TRIP-ZERO-6 is compiled as a colon word at the top of Block 9997 so the
loop body compiles correctly before it is called.
Routing order confirmed:
| Path | Sender | Recipient | Type | [VM recv] |
|---|---|---|---|---|
| 1 | Hera | Hermes | SPAWN-EVENT (1) | [Hermes recv] |
| 2 | Hera | Artemis | 10 | [Artemis recv] |
| 3 | Hermes | Hera | SPAWN-EVENT (1) | [Hera recv] |
| 4 | Hermes | Artemis | 11 | [Artemis recv] |
| 5 | Artemis | Hera | 12 | [Hera recv] |
| 6 | Artemis | Hermes | 13 | [Hermes recv] |
Bugs Addressed (prerequisite work)
| Bug | Description | Fix |
|---|---|---|
| H1 | MSG-ALLOC returned dirty nodes (free-list link in type field) |
Zero node after allocation with FILL |
| H2 | CH-COOL-ALL only walked CH-ACTIVE list; raw CH-ALLOC nodes missed |
Smoke test inserts CH1 into CH-ACTIVE before cooling |
| H3 | MSG-SEND had DUP >R leaving message address on data stack; field writes scrambled |
Changed to >R |
What This Does Not Test
- True async inter-process delivery (hosted FORTH is single-threaded;
VM-EXECfires synchronously insideMSG-DELIVER) - K≡1.0 fleet accounting across real VM boundaries
- Channel negotiation (
CH-REQUEST → CH-ACCEPT → ephemeral channel lifecycle) - Hera lifecycle decisions driven by fleet K telemetry
Those belong to the kernel integration test (three-arch QEMU boot with real separate VM instances). This test validates the Hermes dispatch substrate.