multiuser-doe.4th: the campaign trial-loop capsule, verified live
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:
co-authored by
Claude Sonnet 5
parent
41918a28a4
commit
29f91f9531
+46
@@ -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
@@ -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.*
|
||||||
|
|||||||
@@ -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 ;
|
||||||
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
Reference in New Issue
Block a user