nx_forge_gate.nx source
↩ module page · 82 lines · 3345 B
1// nx_forge_gate.nx -- gate for the F3 forge driver (nx_forge.nx). Teeth (fixture specs in
2// knowledge/forge/fix/, candidate files = the rung-1 "model"):
3// T1 correct candidate -> GREEN at cycle 1
4// T2 builds-but-wrong-output -> judge REJECTS byte-exact (exhausted, rc -20) [negctl v2 class]
5// T3 hardcoded-banned-literal 1st -> FLAGGED pre-build, clean 2nd candidate GREEN at cycle 2
6// T4 broken 1st (parse trap) -> verbatim compiler output BANKED to repair ctx, GREEN at 2
7// T5 only broken candidates -> stops at the maxcycles bound (rc -21), never GREEN
8// license_tier: ORIGINAL expect_exit: 0
9import "nx_forge.nx"
10import "nx_gate_verdict.nx"
11
12func main(argc: i64, argv: *i64) -> i64 {
13 var pass: i64 = 0
14 // T1
15 let r1: i64 = fg_run("knowledge/forge/fix/spec_t1.txt" as *u8)
16 var t1: i64 = 0
17 if r1 == 1 { t1 = 1 }
18 std_puts("T1 green-first rc=" as *u8)
19 std_pdec(r1)
20 if t1 == 1 { std_putln(" PASS" as *u8) }
21 if t1 == 0 { std_putln(" FAIL" as *u8) }
22 pass = pass + t1
23 // T2
24 let r2: i64 = fg_run("knowledge/forge/fix/spec_t2.txt" as *u8)
25 var t2: i64 = 0
26 let wantx: i64 = 0 - 20
27 if r2 == wantx { t2 = 1 }
28 std_puts("T2 judge-reject rc=" as *u8)
29 std_pdec(r2)
30 if t2 == 1 { std_putln(" NEGCTL-CAUGHT PASS" as *u8) }
31 if t2 == 0 { std_putln(" FAIL" as *u8) }
32 pass = pass + t2
33 // T3
34 let r3: i64 = fg_run("knowledge/forge/fix/spec_t3.txt" as *u8)
35 var t3: i64 = 0
36 if r3 == 2 { t3 = 1 }
37 std_puts("T3 hardcode-flag-then-clean rc=" as *u8)
38 std_pdec(r3)
39 if t3 == 1 { std_putln(" PASS" as *u8) }
40 if t3 == 0 { std_putln(" FAIL" as *u8) }
41 pass = pass + t3
42 // T4 (check repair ctx got the verbatim compiler output)
43 let r4: i64 = fg_run("knowledge/forge/fix/spec_t4.txt" as *u8)
44 var t4: i64 = 0
45 if r4 == 2 {
46 let xbuf: *u8 = sys_mmap(65536) as *u8
47 let xn: i64 = fc_read("/tmp/forge_repair_ctx.txt" as *u8, xbuf, 65536)
48 if xn > 80 {
49 let m1: *u8 = "CYCLE-FAIL build" as *u8
50 let l1: i64 = std_slen(m1)
51 let f1: i64 = fc_contains(xbuf, xn, m1, l1)
52 if f1 == 1 { t4 = 1 }
53 }
54 }
55 std_puts("T4 repair-banks-stderr rc=" as *u8)
56 std_pdec(r4)
57 if t4 == 1 { std_putln(" PASS" as *u8) }
58 if t4 == 0 { std_putln(" FAIL" as *u8) }
59 pass = pass + t4
60 // T5
61 let r5: i64 = fg_run("knowledge/forge/fix/spec_t5.txt" as *u8)
62 var t5: i64 = 0
63 let wantb: i64 = 0 - 21
64 if r5 == wantb { t5 = 1 }
65 std_puts("T5 cycle-bound rc=" as *u8)
66 std_pdec(r5)
67 if t5 == 1 { std_putln(" NEGCTL-CAUGHT PASS" as *u8) }
68 if t5 == 0 { std_putln(" FAIL" as *u8) }
69 pass = pass + t5
70 // verdict
71 std_puts("FORGE-GATE pass=" as *u8)
72 std_pdec(pass)
73 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
74 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
75 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
76 let ctr__dry: *i64 = gv_ctr()
77 ctr__dry[0] = pass
78 ctr__dry[1] = 5
79 let rc__dry: i64 = gv_verdict("FORGE-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8)
80 sys_exit(rc__dry)
81 return rc__dry
82}