multiuser-doe.4th: the campaign trial-loop capsule, verified live
Build / build-amd64-iso (push) Waiting to run
Build / build-aarch64-iso (push) Waiting to run
Build / build-riscv64-img (push) Waiting to run

Builds the experimental control Bob correctly identified as still
missing after HB-ON/HB-OFF (§XXXIII.5): walk the shuffled matrix of
concurrency-level x workload-mode cells, birth the right worker count
per cell, drive each with two VM-EXEC touches, check VM-ERROR?, kill
them, print a trial marker. Built entirely from existing primitives
(WORKER-BIRTH, VM-EXEC, VM-HEAT, VM-ERROR?, KILL, HB-ON/HB-OFF) plus
doe.4th's own RUN-MATRIX/SHUFFLE-MATRIX pattern -- no new C primitives.

Real capsule-format bug found and fixed: a first draft, chunked purely
by a fixed 16-line count with no regard for word boundaries, split
several CASE...ENDCASE structures and one oversized colon definition
across Block headers. Result was a cascading [CAPSULE][DEFER] failure
from the first split forward -- every subsequent line failed to
compile, and MU-RUN-TRIAL was never actually defined (confirmed:
UNKNOWN WORD when called). Root cause traced to capsule_loader.c
directly: a :...; word and any control structure inside it must fit
entirely within one 16-line block -- the loader's per-block compile
pass has no persistent record of an open CASE's (or an overlong
definition's own) state across a Block boundary. Not previously
documented anywhere in this project's capsule-authoring guidance.
Fixed via manually curated block boundaries and factoring oversized
bodies into smaller helper words.

Reps ratified at 60/cell (not the 10 first drafted), matching this
project's own "rule of 3's" DoE convention (ACL-RWT's 3 seeds/30 reps,
std79's 3x9x3). 6 cfgs x 60 reps = 360 main-block trials.
MU-MAX-REPS raised 20 -> 63 for run-matrix headroom.

Verified live on amd64: one isolated trial (0 0 999 MU-RUN-TRIAL)
produced two real concurrent births, two clean kills, and the exact
expected marker (MU-TRIAL run=999 cfg=0 rep=0 nw=2 mode=0 fail=0).
Hera stayed healthy throughout. Clean 3-arch qemu boot.

Not yet run: the full 360-trial MU-EXEC-CAMPAIGN itself (a genuinely
long-running action under TCG, deliberately not started without
explicit confirmation) or the WIREBIND-automation fixed arm.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BWpNjdwPtFLuVLaAq44L9K
This commit is contained in:
Robert Allan James
2026-09-16 10:27:45 -04:00
co-authored by Claude Sonnet 5
parent 41918a28a4
commit 29f91f9531
16 changed files with 56229 additions and 2 deletions
+46
View File
@@ -5044,3 +5044,49 @@ grow continuously via Hera/Hermes/Artemis's own background ticks. Confirmed: ban
both workers reported no error, both killed cleanly, Hera stayed healthy throughout both workers reported no error, both killed cleanly, Hera stayed healthy throughout
(`5 6 + .` -> `11`). Test capsule reverted after capture; `workload-calib1.4th` kept. (`5 6 + .` -> `11`). Test capsule reverted after capture; `workload-calib1.4th` kept.
### XXXIII.6 -- The trial-loop capsule: built, one real capsule-format bug found and fixed
**Scope correction, made explicit rather than silently absorbed:** Captain Bob challenged
"driver capsule" as the wrong-sized word for what was actually still missing -- `HB-ON`/`HB-OFF`
already handles instrumentation gating (§XXXIII.5). What remained was purely the experimental
control: walking the shuffled matrix of concurrency-level x workload-mode cells, birthing the
right worker count per cell, driving each with two touches, checking `VM-ERROR?`, killing them,
and printing a trial-boundary marker. `multiuser-doe.4th` is exactly that control loop, built
entirely from primitives that already existed (`WORKER-BIRTH`, `VM-EXEC`, `VM-HEAT`,
`VM-ERROR?`, `KILL`, `HB-ON`/`HB-OFF`) plus `doe.4th`'s own `RUN-MATRIX`/`SHUFFLE-MATRIX`
pattern for the run order -- no new primitives needed at all.
**Real capsule-format bug found and fixed, not assumed away:** a first draft, chunked
automatically by a fixed 16-line-per-block count with no regard for word boundaries, split
several `CASE...ENDCASE` structures and one oversized colon definition across `Block` headers.
The result was a cascading `[CAPSULE][DEFER]` failure from the very first split forward --
every subsequent line in the file failed to compile and got silently deferred (the loader's own
retry mechanism, meant for genuine forward references, never actually resolves a structural
split), and `MU-RUN-TRIAL` was never defined at all (confirmed: `UNKNOWN WORD: 'MU-RUN-TRIAL'`
when called). **Root cause, verified against `capsule_loader.c` directly:** the loader's
per-block compile pass has no persistent record of an open `CASE`'s (or an overlong
definition's own) control-flow state across a `Block` boundary -- a `:...;` word and any
control structure inside it (`CASE...ENDCASE`, `DO...LOOP`) must fit entirely within one
16-line block. Not previously documented anywhere in this project's own capsule-authoring
guidance. **Fix:** manually curated block boundaries (not automated chunking) so every
definition and control structure is block-local; oversized bodies (`MU-RUN-TRIAL`,
`MU-EXEC-CAMPAIGN`) factored into smaller helper words (`MU-BIRTH-ALL`/`MU-TOUCH-ALL`/
`MU-CHECK-ALL`/`MU-KILL-ALL`, `MU-CAMPAIGN-STEP`) rather than shrunk by cutting real content.
**Reps ratified: 60 per cell**, not the 10 first drafted -- Captain Bob's own standing
convention ("maintain a rule of 3's in all our DoE's", matching the ACL-RWT campaign's 3
seeds/30 reps and the std79 DoE's 3x9x3 shape). 6 cfgs (3 concurrency levels x 2 workload
modes) x 60 reps = 360 main-block trials. `MU-MAX-REPS` raised from 20 to 63 to give the
run-matrix array headroom above 60.
**Verified live on amd64, one isolated trial (not yet the full shuffled campaign):**
`0 0 999 MU-RUN-TRIAL` (cfg=0 -> 2 workers, uniform mode) produced two real concurrent births
(`mu0`, `mu1`, both from the default uniform workload), two clean kills, and the exact expected
marker: `MU-TRIAL run=999 cfg=0 rep=0 nw=2 mode=0 fail=0`. Hera stayed healthy throughout
(`5 6 + .` -> `11`). Clean 3-arch qemu boot on the real committed capsule.
**Not yet run:** the full `MU-EXEC-CAMPAIGN` (360 trials, mixing in the heavier existing
workloads like `RUN-CHAOS5`'s 1,000,000 iterations) -- a genuinely long-running action under
TCG, deliberately not kicked off without explicit confirmation first. The WIREBIND-automation
fixed arm also remains unbuilt.
+15 -2
View File
@@ -1,5 +1,5 @@
# Capsule Block Manifest — Auto-generated # Capsule Block Manifest — Auto-generated
<!-- Generated by mkcapsule --manifest 2026-09-16T13:47:26Z --> <!-- Generated by mkcapsule --manifest 2026-09-16T14:25:13Z -->
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. --> <!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
<!-- Hand-written justifications and immutability notes live --> <!-- Hand-written justifications and immutability notes live -->
<!-- in MANIFEST.md alongside this auto-generated index. --> <!-- in MANIFEST.md alongside this auto-generated index. -->
@@ -27,6 +27,7 @@
| `init-l8-volatile.4th` | 4810, 4811, 4812, 4813 | `0x98caabbbd92abac4` | yes | | `init-l8-volatile.4th` | 4810, 4811, 4812, 4813 | `0x98caabbbd92abac4` | yes |
| `init.4th` | 2049, 2050, 2057 | `0x1ef4939ed32ec1e6` | yes | | `init.4th` | 2049, 2050, 2057 | `0x1ef4939ed32ec1e6` | yes |
| `lib.4th` | 4050 | `0x4b216635c359ef73` | yes | | `lib.4th` | 4050 | `0x4b216635c359ef73` | yes |
| `multiuser-doe.4th` | 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055 | `0x1dc57cdf83afb6ce` | yes |
| `process.4th` | 4300, 4301 | `0x781afc1dbd0294f7` | yes | | `process.4th` | 4300, 4301 | `0x781afc1dbd0294f7` | yes |
| `sdk.4th` | 5109, 5110, 5111, 5112, 5113, 5114, 5115 | `0x008fdbbb62c94a3a` | yes | | `sdk.4th` | 5109, 5110, 5111, 5112, 5113, 5114, 5115 | `0x008fdbbb62c94a3a` | yes |
| `turtle.4th` | 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108 | `0x4d470418ca543365` | yes | | `turtle.4th` | 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108 | `0x4d470418ca543365` | yes |
@@ -373,6 +374,18 @@
| 5041 | `common:messaging.4th` | `0x201cfd6d39fcb22d` | ok | | 5041 | `common:messaging.4th` | `0x201cfd6d39fcb22d` | ok |
| 5042 | `common:messaging.4th` | `0x201cfd6d39fcb22d` | ok | | 5042 | `common:messaging.4th` | `0x201cfd6d39fcb22d` | ok |
| 5043 | `workload-calib1.4th` | `0x3b9f2d17b554fabc` | ok | | 5043 | `workload-calib1.4th` | `0x3b9f2d17b554fabc` | ok |
| 5044 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5045 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5046 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5047 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5048 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5049 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5050 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5051 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5052 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5053 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5054 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5055 | `multiuser-doe.4th` | `0x1dc57cdf83afb6ce` | ok |
| 5100 | `turtle.4th` | `0x4d470418ca543365` | ok | | 5100 | `turtle.4th` | `0x4d470418ca543365` | ok |
| 5101 | `turtle.4th` | `0x4d470418ca543365` | ok | | 5101 | `turtle.4th` | `0x4d470418ca543365` | ok |
| 5102 | `turtle.4th` | `0x4d470418ca543365` | ok | | 5102 | `turtle.4th` | `0x4d470418ca543365` | ok |
@@ -396,4 +409,4 @@
None. None.
--- ---
*36 capsule(s) scanned. Re-run `mkcapsule --manifest <dir>` to refresh.* *37 capsule(s) scanned. Re-run `mkcapsule --manifest <dir>` to refresh.*
+167
View File
@@ -0,0 +1,167 @@
Block 5044
3 CONSTANT MU-N-CONC
2 CONSTANT MU-N-MODES
MU-N-CONC MU-N-MODES * CONSTANT MU-N-CFG
63 CONSTANT MU-MAX-REPS
MU-N-CFG MU-MAX-REPS * CONSTANT MU-MAX-RUNS
CREATE MU-CONC-LEVELS 3 CELLS ALLOT
2 0 CELLS MU-CONC-LEVELS + !
4 1 CELLS MU-CONC-LEVELS + !
8 2 CELLS MU-CONC-LEVELS + !
: MU-CONC-OF ( cfg -- n ) 2 / CELLS MU-CONC-LEVELS + @ ;
: MU-MODE-OF ( cfg -- m ) 2 MOD ;
VARIABLE MU-UNIFORM-WL
8 MU-UNIFORM-WL !
Block 5045
: WL-CAPSULE ( idx -- c-addr u )
CASE
0 OF S" workload-0.4th" ENDOF
1 OF S" workload-1.4th" ENDOF
2 OF S" workload-2.4th" ENDOF
3 OF S" workload-3.4th" ENDOF
4 OF S" workload-4.4th" ENDOF
5 OF S" workload-5.4th" ENDOF
6 OF S" workload-6.4th" ENDOF
7 OF S" workload-7.4th" ENDOF
8 OF S" workload-8.4th" ENDOF
9 OF S" workload-9.4th" ENDOF
ENDCASE ;
Block 5046
: WL-ENTRY ( idx -- c-addr u )
CASE
0 OF S" RUN-TRANSPOSE" ENDOF
1 OF S" MICRO-BURST" ENDOF
2 OF S" RUN-SAW" ENDOF
3 OF S" DUAL-SINE" ENDOF
4 OF S" RUN-PI" ENDOF
5 OF S" RUN-CHAOS5" ENDOF
6 OF S" RUN-OMNI" ENDOF
7 OF S" RUN-MMUL" ENDOF
8 OF S" RUN-FIB" ENDOF
9 OF S" RUN-SAW" ENDOF
ENDCASE ;
Block 5047
: MU-WORKER-NAME ( n -- c-addr u )
CASE
0 OF S" mu0" ENDOF
1 OF S" mu1" ENDOF
2 OF S" mu2" ENDOF
3 OF S" mu3" ENDOF
4 OF S" mu4" ENDOF
5 OF S" mu5" ENDOF
6 OF S" mu6" ENDOF
7 OF S" mu7" ENDOF
ENDCASE ;
VARIABLE MU-TMP-NC
VARIABLE MU-TMP-NU
Block 5048
: MU-WL-FOR ( mode worker-n -- wl-idx )
SWAP IF 10 MOD ELSE DROP MU-UNIFORM-WL @ THEN ;
: MU-BIRTH-WORKER ( wl-idx worker-n -- ok? )
MU-WORKER-NAME MU-TMP-NU ! MU-TMP-NC !
WL-CAPSULE
MU-TMP-NC @ MU-TMP-NU @
WORKER-BIRTH ;
: MU-TOUCH-WORKER ( wl-idx worker-n -- )
MU-WORKER-NAME MU-TMP-NU ! MU-TMP-NC !
WL-ENTRY
MU-TMP-NC @ MU-TMP-NU @
VM-EXEC ;
Block 5049
VARIABLE MU-FAIL-COUNT
: MU-CHECK-WORKER ( worker-n -- )
MU-WORKER-NAME VM-ERROR?
IF MU-FAIL-COUNT @ 1+ MU-FAIL-COUNT ! THEN ;
: MU-KILL-WORKER ( worker-n -- )
MU-WORKER-NAME KILL ;
CREATE MU-RUN-MATRIX MU-MAX-RUNS CELLS ALLOT
: MU-MATRIX! ( val idx -- ) CELLS MU-RUN-MATRIX + ! ;
: MU-MATRIX@ ( idx -- val ) CELLS MU-RUN-MATRIX + @ ;
VARIABLE MU-N-RUNS
: MU-INIT-MATRIX ( -- ) MU-N-RUNS @ 0 DO I I MU-MATRIX! LOOP ;
Block 5050
VARIABLE MU-SW-I VARIABLE MU-SW-J
VARIABLE MU-SW-VI VARIABLE MU-SW-VJ
: MU-SWAP-MTX ( i j -- )
MU-SW-J ! MU-SW-I !
MU-SW-I @ MU-MATRIX@ MU-SW-VI !
MU-SW-J @ MU-MATRIX@ MU-SW-VJ !
MU-SW-VJ @ MU-SW-I @ MU-MATRIX!
MU-SW-VI @ MU-SW-J @ MU-MATRIX! ;
: MU-SHUFFLE ( -- )
MU-N-RUNS @ 1 - 0 DO
I MU-N-RUNS @ 1 - RANDOM
I MU-SWAP-MTX
LOOP ;
Block 5051
VARIABLE MU-RUN-ID VARIABLE MU-CFG
VARIABLE MU-REP VARIABLE MU-NW
VARIABLE MU-MODE VARIABLE MU-NREPS
: MU-EMIT-TRIAL-MARKER ( -- )
." MU-TRIAL run=" MU-RUN-ID @ .
." cfg=" MU-CFG @ .
." rep=" MU-REP @ .
." nw=" MU-NW @ .
." mode=" MU-MODE @ .
." fail=" MU-FAIL-COUNT @ . CR ;
Block 5052
: MU-BIRTH-ALL ( -- )
MU-NW @ 0 DO
MU-MODE @ I MU-WL-FOR I MU-BIRTH-WORKER DROP
LOOP ;
: MU-TOUCH-ALL ( -- )
MU-NW @ 0 DO
MU-MODE @ I MU-WL-FOR I MU-TOUCH-WORKER
LOOP ;
: MU-CHECK-ALL ( -- )
MU-NW @ 0 DO
I MU-CHECK-WORKER
LOOP ;
Block 5053
: MU-KILL-ALL ( -- )
MU-NW @ 0 DO
I MU-KILL-WORKER
LOOP ;
: MU-RUN-TRIAL ( cfg rep run-id -- )
MU-RUN-ID ! MU-REP ! MU-CFG !
0 MU-FAIL-COUNT !
MU-CFG @ MU-CONC-OF MU-NW !
MU-CFG @ MU-MODE-OF MU-MODE !
MU-BIRTH-ALL
MU-TOUCH-ALL
MU-TOUCH-ALL
MU-CHECK-ALL
MU-KILL-ALL
MU-EMIT-TRIAL-MARKER ;
Block 5054
: MU-CAMPAIGN-STEP ( idx -- )
MU-MATRIX@
DUP MU-NREPS @ /
SWAP MU-NREPS @ MOD
MU-RUN-ID @
MU-RUN-TRIAL
MU-RUN-ID @ 1+ MU-RUN-ID ! ;
Block 5055
: MU-EXEC-CAMPAIGN ( seed n-reps -- )
DUP MU-NREPS !
MU-N-CFG * MU-N-RUNS !
SEED
MU-INIT-MATRIX MU-SHUFFLE
HB-ON
0 MU-RUN-ID !
MU-N-RUNS @ 0 DO
I MU-CAMPAIGN-STEP
LOOP
HB-OFF
." MU-CAMPAIGN: complete" CR ;
BIN
View File
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff