nx_forge_cascade_gate.nx source
↩ module page · 38 lines · 2536 B
1// nx_forge_cascade_gate.nx -- gate for the cascade consumer + M5 capture. Deterministic, no model.
2// T1 GREEN path: a correct maker candidate -> fca_run GREEN -> the pair EXISTS in the sovereign
3// store (sov_has, keyed by organ) -- NO flat TSV (no-TSV law).
4// T2 NEG cheat-proof: a WRONG maker candidate -> NOT-GREEN AND its pair key is ABSENT (the
5// frontier seat cannot inject an unverified pair).
6// Fixtures reuse the flp_* gate programs (flp_good = correct, flp_broken = a let-reassign BUILD-FAIL).
7// license_tier: ORIGINAL expect_exit: 0
8import "nx_forge_cascade.nx"
9import "nx_gate_verdict.nx"
10
11const CG_STORE: *u8 = "knowledge/store/cascade_pairs"
12
13func main(argc: i64, argv: *i64) -> i64 {
14 std_putln("FORGE-CASCADE-GATE: consumer judges maker candidates; pair captured ONLY on GREEN (sovereign store)" as *u8)
15 let expectp: *u8 = "knowledge/forge/fix/flp_expect.bin" as *u8
16 var pass: i64 = 0
17 // T1 GREEN: correct candidate -> its organ key must EXIST in the sovereign store
18 let r1: i64 = fca_run("nx_fca_t1" as *u8, expectp, "knowledge/forge/fix/flp_good.nx" as *u8)
19 let has1: i64 = sov_has(CG_STORE, "nx_fca_t1" as *u8)
20 if r1 > 0 && has1 == 1 { pass = pass + 1; std_putln("T1 PASS GREEN candidate -> pair in sovereign store" as *u8) }
21 if r1 <= 0 || has1 != 1 { std_puts("T1 FAIL r=" as *u8); std_pdec(r1); std_puts(" has="); std_pdec(has1); std_puts("\n" as *u8) }
22 // T2 NEG cheat-proof: broken candidate must NOT produce a pair key
23 let r2: i64 = fca_run("nx_fca_t2" as *u8, expectp, "knowledge/forge/fix/flp_broken.nx" as *u8)
24 let has2: i64 = sov_has(CG_STORE, "nx_fca_t2" as *u8)
25 if r2 <= 0 && has2 == 0 { pass = pass + 1; std_putln("T2 PASS NEG wrong candidate refused, no pair injected" as *u8) }
26 if r2 > 0 || has2 != 0 { std_puts("T2 FAIL r=" as *u8); std_pdec(r2); std_puts(" has="); std_pdec(has2); std_puts("\n" as *u8) }
27 std_puts("FORGE-CASCADE-GATE pass=" as *u8)
28 std_pdec(pass)
29 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
30 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
31 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
32 let ctr__dry: *i64 = gv_ctr()
33 ctr__dry[0] = pass
34 ctr__dry[1] = 2
35 let rc__dry: i64 = gv_verdict("FORGE-CASCADE-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8)
36 sys_exit(rc__dry)
37 return rc__dry
38}