capsules: prune init.4th to Hera alone

Punch list §25 item 0.1 complete.

Verified: all three architectures build clean and boot to the ok> prompt with
Hera alone. Blocks executed are exactly 2057 -> 2049 (-> lib.4th/4050) -> 2050.
Zero occurrences of "Hermes" or "Tripod" in any of the three serial logs, and
the only parity record is MAMA_INIT -- no baby VM is born. mkcapsule --lint
passes 26 files, 0 failing, 0 violations.

Deleted blocks 2051, 2052, 2053, 2054, 2055, 2056, 2058, 2059 -- readiness
handshake, broadcast test, TRIPOD-TEST, HERMES-E2E and the fleet-DoE
scaffolding. Edited 2057 (banner), 2049 (dropped both births with their
CD-INIT calls and the common:msg.4th / process.4th loads, which are wholly
Hermes-dependent; kept lib.4th; VM-TREE and VM-CHILDREN no longer name absent
children) and 2050 (kept the BOOT-BANNER call, dropped the two calls to the
deleted words). capsules/hermes/ and capsules/artemis/ untouched on disk.

New Hera-alone parity baseline, identical across all three ISAs:
  dict_hash=0x3d4e1daf289da94f  capsule_hash=0xb4c4b5559146a3bd
This supersedes the pre-prune baselines in logs/ and is what item 0.10's
double-boot reproducibility check compares against.

Commit contents beyond the item's own edit, noted rather than slipped in:
capsules/BLOCK_MAP.md is regenerated by any build; the three serial logs are
this item's acceptance evidence and CLAUDE.md requires committing them; the
DoE CSVs are auto-extracted by the qemu target on every run. Leaving generated
output from this item's acceptance run for a later item to sweep up would be
worse than including it here.

Reported, not fixed: tools/mkcapsule.c emits two -Wstringop-truncation warnings
on the host build (:404, :562), pre-existing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-08-03 12:47:21 -04:00
co-authored by Claude Opus 5
parent 39aa54b9a4
commit c3e4fc282c
12 changed files with 31349 additions and 109315 deletions
+4 -132
View File
@@ -4,145 +4,17 @@ Block 2057
: BOOT-BANNER
CR .SEP
." LithosAnanke — FORTH-79 bare-metal kernel" CR
." Tripod v1: K=1.0 + Hermes events + Artemis storage" CR
." Stadium step one: Hera alone" CR
.SEP
." Tripod: Hera Hermes Artemis [live]" CR
." Hera [live]" CR
.SEP CR ;
Block 2049
( Hera init — Mama VM personality )
: VM-TREE ( -- ) ." Hera[0]>Hermes[1] Artemis[2]" CR ;
: VM-TREE ( -- ) ." Hera[0]" CR ;
: VM-PARENT ( -- id ) 0 ;
: VM-CHILDREN ( -- ) ." Hermes[1] Artemis[2]" CR ;
: VM-CHILDREN ( -- ) ." (none)" CR ;
\ S" ACL.4th" EXEC
S" lib.4th" EXEC
S" common:msg.4th" USE
S" process.4th" EXEC
\ Tripod boot: Artemis -> Hermes -> Hera
S" Artemis" BIRTH
S" CD-INIT" S" Artemis" VM-EXEC
S" Hermes" BIRTH
S" CD-INIT" S" Hermes" VM-EXEC
Block 2053
( Phase 1: readiness handshake -- VM-FLEET-ATTRACTOR-DESIGN )
: READINESS-HANDSHAKE ( -- )
S" HERMES-ANNOUNCE-READY" S" Hermes" VM-EXEC
S" ARTEMIS-ANNOUNCE-READY" S" Artemis" VM-EXEC
S" 0 ENQUEUE-READY" S" Hermes" VM-EXEC
S" HERMES-TICK" S" Hermes" VM-EXEC
S" READY-ALL?" S" Hermes" VM-CALL IF
S" READY-ACK" S" Hermes" VM-EXEC
S" ARTEMIS-READY-ACK" S" Artemis" VM-EXEC
LOG-TEST" PASS: readiness handshake"
VM-PHYSICS-STATUS
ELSE
LOG-ERROR" FAIL: readiness handshake"
THEN ;
Block 2054
( Phase 2: real broadcast -- VM-FLEET-ATTRACTOR-DESIGN )
VARIABLE BCAST-GOT
: BCAST-RECV ( -- ) 1 BCAST-GOT +! ;
: BROADCAST-TEST ( -- )
S" REGISTER-COMMON-MEMBERS" S" Hermes" VM-EXEC
S" SEND-BROADCAST-TEST" S" Hermes" VM-EXEC
S" HERMES-TICK" S" Hermes" VM-EXEC
BCAST-GOT @ 0>
S" BCAST-GOT @" S" Hermes" VM-CALL 0> AND
S" BCAST-GOT @" S" Artemis" VM-CALL 0> AND
IF LOG-TEST" PASS: broadcast reached all 3"
VM-PHYSICS-STATUS
ELSE LOG-ERROR" FAIL: broadcast reached all 3" THEN ;
Block 2050
( Hera boot — banner )
BOOT-BANNER
READINESS-HANDSHAKE
BROADCAST-TEST
Block 2051
( TRIPOD-TEST: 6 criteria per TRIPOD.md )
( K holds continuously by construction; no tick-pump )
: TRIPOD-TEST ( -- )
LOG-INFO" === TRIPOD Acceptance ==="
VM-CONSERVED? IF LOG-TEST" PASS: fleet K"
ELSE LOG-ERROR" FAIL: K drift" THEN
S" HERMES-TICK" S" Hermes" VM-EXEC
LOG-TEST" PASS: Hermes liveness"
S" ART-STATUS" S" Artemis" VM-EXEC
LOG-TEST" PASS: Artemis ready"
S" Hermes" KILL-VM
LOG-TEST" PASS: reap"
S" Hermes" BIRTH S" CD-INIT" S" Hermes" VM-EXEC
VM-CONSERVED? IF LOG-TEST" K soak"
ELSE LOG-ERROR" K soak" THEN
LOG-INFO" === TRIPOD DONE ===" ;
Block 2052
( Run TRIPOD acceptance test + E2E msg flow )
TRIPOD-TEST
: HERMES-E2E ( -- )
S" HERMES-MSG-TEST" S" Hermes" VM-CALL
IF LOG-TEST" PASS: msg queued"
ELSE LOG-ERROR" FAIL: msg queued" THEN
S" HERMES-TICK" S" Hermes" VM-EXEC
S" MSG-USED" S" Hermes" VM-CALL
0 > IF LOG-TEST" PASS: E2E msg flow"
ELSE LOG-ERROR" FAIL: E2E msg flow" THEN ;
HERMES-E2E
Block 2055
( Phase 3: fleet DoE -- one config per VM per run )
( VM-FLEET-ATTRACTOR-DESIGN-20260705.md rev h. Not run at )
( boot -- invoked via serial injection: )
( SEED N-RUNS EXEC-FLEET-DOE )
VARIABLE FDOE-RUN-ID
VARIABLE FDOE-HERA VARIABLE FDOE-HERMES VARIABLE FDOE-ARTEMIS
: FLEET-DOE-HDR ( -- )
." FLEETDOE,run_id,hera_cfg,hermes_cfg,artemis_cfg" CRLF ;
: FLEET-DOE-ROW ( -- )
." FLEETDOE," FDOE-RUN-ID @ CSV-COL
FDOE-HERA @ CSV-COL FDOE-HERMES @ CSV-COL
FDOE-ARTEMIS @ CSV-LAST ;
Block 2056
( FDOE-REMOTE-FORCE-CMD: cfg -> "N L8-TABLE-FORCE" command )
( string for VM-EXEC, targeting the same 128-config table )
( the remote VM's own heartbeat drives (ssm_l8_force_config, )
( ssm_jacquard.c) -- no CASE lookup needed for a raw index. )
VARIABLE FDOE-CMD-POS VARIABLE FDOE-APPEND-LEN
: FDOE-CMD-APPEND ( src-addr src-len -- )
DUP FDOE-APPEND-LEN !
FDOE-CMD-POS @ SWAP MOVE
FDOE-APPEND-LEN @ FDOE-CMD-POS +! ;
: FDOE-REMOTE-FORCE-CMD ( cfg -- addr len )
PAD FDOE-CMD-POS !
0 SWAP <# #S #> FDOE-CMD-APPEND
S" L8-TABLE-FORCE" FDOE-CMD-APPEND
PAD FDOE-CMD-POS @ PAD - ;
Block 2058
( Per-run apply + workload. Workload is HERMES-TICK/ART-PING, )
( not BROADCAST-TEST -- that would exhaust Hermes's fixed )
( member/message arenas after ~20 runs by re-registering )
( members and allocating message slots faster than heat-decay )
( reap can free them. VM-EXEC/VM-CALL themselves are what )
( trigger vm_physics_touch -- the workload just needs to reach )
( Hermes and Artemis each run, not do anything expensive. )
: FDOE-APPLY-ALL ( hera-cfg hermes-cfg artemis-cfg -- )
FDOE-ARTEMIS ! FDOE-HERMES ! FDOE-HERA !
FDOE-HERA @ L8-TABLE-FORCE
FDOE-HERMES @ FDOE-REMOTE-FORCE-CMD S" Hermes" VM-EXEC
FDOE-ARTEMIS @ FDOE-REMOTE-FORCE-CMD S" Artemis" VM-EXEC ;
: FLEET-DOE-WORKLOAD ( -- )
S" HERMES-TICK" S" Hermes" VM-EXEC
S" ART-PING" S" Artemis" VM-EXEC ;
Block 2059
( Run loop: draws (hera,hermes,artemis) cfg independently and )
( uniformly from 0-127 each, with replacement, for n-runs. )
: FLEET-DOE-RUN-ONE ( hera-cfg hermes-cfg artemis-cfg -- )
FDOE-APPLY-ALL
FLEET-DOE-WORKLOAD
FLEET-DOE-ROW
1 FDOE-RUN-ID +! ;
: EXEC-FLEET-DOE ( seed n-runs -- )
SWAP SEED 0 FDOE-RUN-ID ! 1 LOG-LEVEL!
FLEET-DOE-HDR
0 DO
0 127 RANDOM 0 127 RANDOM 0 127 RANDOM
FLEET-DOE-RUN-ONE
LOOP
3 LOG-LEVEL!
." FLEET-DOE: complete" CRLF ;