code wiki / _hdl_build / nx_autofix_ensemble_gate.nx

nx_autofix_ensemble_gate.nx source

↩ module page · 74 lines · 4369 B

1// nx_autofix_ensemble_gate.nx -- gate for THE LIVE ENSEMBLE orchestrator (nx_autofix_ensemble). 2// On nx_gate_verdict (D001 law). Gates the NEW logic = miss-extraction (fork-loop + cascade are 3// already-gated elfs). Imports the shared lib (nx_autofix_ens_lib) so it tests the ORGAN'S code: 4// T1 miss count = exactly the non-green rows 5// T2 a MISS row IS in the misses-manifest (full name|path preserved for maker#2) 6// T3 a GREEN row is NOT in the misses-manifest (never re-run a resolved instance) 7// T4 all-green ledger -> 0 misses (maker#2 skipped) 8// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0 9import "nx_autofix_ens_lib.nx" 10import "nx_gate_verdict.nx" 11import "nx_syscalls.nx" 12 13func aeg_has(q: *u8, n: i64, s: *u8) -> i64 { 14 var sl: i64 = 0; while s[sl] != (0 as u8) { sl = sl + 1 } 15 if sl == 0 { return 1 } 16 var i: i64 = 0 17 while i + sl <= n { 18 var hit: i64 = 1 19 var j: i64 = 0 20 while j < sl { if q[i+j] != s[j] { hit = 0; j = sl } else { j = j + 1 } } 21 if hit == 1 { return 1 } 22 i = i + 1 23 } 24 return 0 25} 26 27func main() -> i64 { 28 let ctr: *i64 = gv_ctr() 29 gv_head("nx_autofix_ensemble gate -- miss-extraction: hand maker#2 exactly maker#1's unresolved rows" as *u8) 30 31 let man: *u8 = "a|runtime/a.nx\nb|runtime/b.nx\nc|runtime/c.nx\nd|runtime/d.nx\n" as *u8 32 let l1: *u8 = "AUTOFIX-AUTO ts=1 cand=a located=a attempts=1 maker=GREEN revert=1 symj=GREEN\nAUTOFIX-AUTO ts=1 cand=b located=b attempts=5 maker=MISS revert=1 symj=SKIP\nAUTOFIX-AUTO ts=1 cand=c located=c attempts=1 maker=GREEN revert=1 symj=GREEN\nAUTOFIX-AUTO ts=1 cand=d located=d attempts=5 maker=MISS revert=1 symj=SKIP\n" as *u8 33 let mannn: i64 = ael_slen(man) 34 let l1n: i64 = ael_slen(l1) 35 let out: *u8 = sys_mmap(65536) 36 let box: *i64 = sys_mmap(8) as *i64 37 let cnt: i64 = ael_extract_misses(l1, l1n, man, mannn, out, box) 38 39 var t1: i64 = 0 40 if cnt == 2 { t1 = 1 } 41 gv_check("T1 miss count = 2 (b,d)" as *u8, t1, ctr) 42 gv_check("T2 miss row b preserved (name|path)" as *u8, aeg_has(out, box[0], "b|runtime/b.nx" as *u8), ctr) 43 gv_check("T3 green row a NOT in misses" as *u8, 1 - aeg_has(out, box[0], "a|runtime/a.nx" as *u8), ctr) 44 45 let l1g: *u8 = "AUTOFIX-AUTO ts=1 cand=a located=a attempts=1 maker=GREEN revert=1 symj=GREEN\nAUTOFIX-AUTO ts=1 cand=b located=b attempts=1 maker=GREEN revert=1 symj=GREEN\nAUTOFIX-AUTO ts=1 cand=c located=c attempts=1 maker=GREEN revert=1 symj=GREEN\nAUTOFIX-AUTO ts=1 cand=d located=d attempts=1 maker=GREEN revert=1 symj=GREEN\n" as *u8 46 let l1gn: i64 = ael_slen(l1g) 47 let out2: *u8 = sys_mmap(65536) 48 let box2: *i64 = sys_mmap(8) as *i64 49 let cnt2: i64 = ael_extract_misses(l1g, l1gn, man, mannn, out2, box2) 50 var t4: i64 = 0 51 if cnt2 == 0 { t4 = 1 } 52 gv_check("T4 all-green -> 0 misses (skip maker#2)" as *u8, t4, ctr) 53 54 // F960 N-maker staging: every maker MUST get its own ledger path, else maker#3 clobbers maker#2's 55 // ledger and the union silently loses a maker's greens (a wrong-but-plausible 2-maker-looking result). 56 let p1: *u8 = sys_mmap(64) 57 let p2: *u8 = sys_mmap(64) 58 let p3: *u8 = sys_mmap(64) 59 ael_stage_path(p1, "/tmp/ens_l" as *u8, 1, ".ledger" as *u8) 60 ael_stage_path(p2, "/tmp/ens_l" as *u8, 2, ".ledger" as *u8) 61 ael_stage_path(p3, "/tmp/ens_l" as *u8, 3, ".ledger" as *u8) 62 gv_check("T5 stage path 1 = the 2-maker organ's exact legacy path (back-compat)" as *u8, aeg_has(p1, ael_slen(p1), "/tmp/ens_l1.ledger" as *u8), ctr) 63 gv_check("T6 stage path 3 is DISTINCT from 1 and 2 (no ledger clobber)" as *u8, 1 - aeg_has(p3, ael_slen(p3), "/tmp/ens_l2.ledger" as *u8), ctr) 64 var t7: i64 = 0 65 if ael_slen(p2) == ael_slen(p3) { if aeg_has(p2, ael_slen(p2), "/tmp/ens_l2.ledger" as *u8) == 1 { t7 = 1 } } 66 gv_check("T7 stage paths are single-digit and uniform (AE_MAXMK<=9 holds)" as *u8, t7, ctr) 67 let pm: *u8 = sys_mmap(64) 68 ael_stage_path(pm, "/tmp/ens_miss" as *u8, 2, ".txt" as *u8) 69 gv_check("T8 miss-manifest path is per-stage too (chained misses never overwrite)" as *u8, aeg_has(pm, ael_slen(pm), "/tmp/ens_miss2.txt" as *u8), ctr) 70 71 let rc: i64 = gv_verdict("AUTOFIX-ENSEMBLE-GATE" as *u8, ctr, "miss-extraction hands each maker exactly the unresolved rows; per-stage paths never collide" as *u8) 72 sys_exit(rc) 73 return rc 74}