FABRIC-3.md §XXXV.13. Quit the running amd64 campaign directly on request once §XXXV.12's build unblocked live testing -- first live check found the ISA-tagging mechanism completely non-functional, in two independent ways, both only caught by checking an actual printed value rather than "it resolves without error." Bug 1: per-isa-doe.4th's strategy of redefining MU-EMIT-TRIAL-MARKER never worked, structurally, from the moment it was written. This FORTH compiles a colon definition's word calls to a direct, early-bound reference at compile time -- MU-RUN-TRIAL's call to MU-EMIT-TRIAL-MARKER bound when multiuser-doe.4th loaded, before per-isa-doe.4th's later redefinition of the same name ever existed. Every trial the running campaign persisted had an empty isa tag, not "amd64". Fixed by moving ISA-tag storage (MU-ISA-TAG-BUF/LEN/!) and the one true MU-EMIT-TRIAL-MARKER into multiuser-doe.4th itself, reading a shared variable at run time instead. per-isa-doe.4th shrank from 3 blocks to 2 (Block 5118 freed) -- fixing this recovered namespace, didn't cost any. Bug 2: found immediately while verifying the fix. MU-ISA-TAG!'s CMOVE call was copied from the original PER-ISA-TAG! it replaced, which had its own latent stack-order bug -- passed the ISA string's length as the copy source address instead of the real address, silently copying blank/garbage bytes with no error. Never caught before because §XXXV.8's own verification only checked that the entry words resolved, not that the tag they set was actually correct. Fixed the stack order; the old buggy word no longer exists anywhere (removed with Bug 1's fix, not patched in place). Verified live, together, one boot: MU-ISA-TAG-BUF readback -> "amd64" (was blank), full MU-EMIT-TRIAL-MARKER with all 6 fields set manually -> exact match on every field, VM-ERROR? -> 0, DOE-RESUME-COUNT correctly isolates by ISA (amd64->1, riscv64->0 in the same ring). Clean BYE, zero leaked processes, synthetic test write reverted before committing. Preserved logs/CSVs from the killed campaign and both verification boots per this repo's own convention -- never delete these. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BWpNjdwPtFLuVLaAq44L9K
177 lines
4.2 KiB
Forth
177 lines
4.2 KiB
Forth
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-lite.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-lite.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" CHAOS-FIELD" 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 ;
|
|
CREATE MU-ISA-TAG-BUF 16 ALLOT VARIABLE MU-ISA-TAG-LEN
|
|
: MU-ISA-TAG! ( c-addr u -- )
|
|
16 MIN DUP MU-ISA-TAG-LEN !
|
|
MU-ISA-TAG-BUF SWAP CMOVE ;
|
|
|
|
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 isa=" MU-ISA-TAG-BUF MU-ISA-TAG-LEN @ TYPE
|
|
." run=" MU-RUN-ID @ .
|
|
." cfg=" MU-CFG @ .
|
|
." rep=" MU-REP @ .
|
|
." nw=" MU-NW @ .
|
|
." mode=" MU-MODE @ .
|
|
." fail=" MU-FAIL-COUNT @ . CR
|
|
MU-RUN-ID @ MU-CFG @ MU-REP @ MU-NW @
|
|
MU-MODE @ MU-FAIL-COUNT @
|
|
MU-ISA-TAG-BUF MU-ISA-TAG-LEN @ DOE-PERSIST-TRIAL ;
|
|
|
|
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 start-idx -- )
|
|
>R
|
|
DUP MU-NREPS !
|
|
MU-N-CFG * MU-N-RUNS !
|
|
SEED
|
|
MU-INIT-MATRIX MU-SHUFFLE
|
|
HB-ON
|
|
R@ MU-RUN-ID !
|
|
MU-N-RUNS @ R> DO
|
|
I MU-CAMPAIGN-STEP
|
|
LOOP
|
|
HB-OFF
|
|
." MU-CAMPAIGN: complete" CR ;
|