Files
LithosAnanake/logs/hermes-tripod-smoke-results.md
T

113 lines
3.7 KiB
Markdown

# 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-EXEC`
fires synchronously inside `MSG-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.