code wiki / _hdl_build / nx_apistack_migrate_gate.nx
nx_apistack_migrate_gate.nx source
↩ module page · 41 lines · 2648 B
1// nx_apistack_migrate_gate.nx -- hermetic gate for CAP-API-MIGRATE. Proves HTML tags stripped, '|' sanitized, text
2// kept. expect_exit: 0
3import "nx_syscalls.nx"
4import "nx_apistack_migrate.nx"
5import "nx_gate_verdict.nx"
6
7func gp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
8func gn(v: i64) -> i64 { var t: i64=v; if t<0{sys_write(1,"-" as *u8,1);t=0-t} let tm:*u8=sys_mmap(24); var k:i64=0; if t==0{tm[0]=48 as u8;k=1} while t>0{tm[k]=(48+(t%10)) as u8;t=t/10;k=k+1} let b:*u8=sys_mmap(24); var j:i64=0; while j<k{b[j]=tm[k-1-j];j=j+1} sys_write(1,b,k); return 0 }
9func g_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
10func g_eq(a: *u8, b: *u8, n: i64) -> i64 { var i: i64=0; while i<n { if a[i]!=b[i] { return 0 } i=i+1 } return 1 }
11
12func main(argc: i64, argv: *i64) -> i64 {
13 gp("=== nx_apistack_migrate_gate (HTML -> .site blueprint ingest) ===\n" as *u8)
14 let html: *u8 = "<h1>Hi</h1><p>Bob|x</p>" as *u8
15 let out: *u8 = sys_mmap(4096); let n: i64 = mg_html_to_blueprint(html, g_slen(html), out)
16 gp(" BLUEPRINT: '" as *u8); sys_write(1, out, n); gp("'\n" as *u8)
17 var pass: i64 = 0; var fail: i64 = 0
18
19 if g_eq(out, "HiBobx" as *u8, 6) == 1 { if n == 6 { pass=pass+1; gp(" T1 tags stripped, text kept -> 'HiBobx' PASS\n" as *u8) } else { fail=fail+1; gp(" T1 FAIL len=" as *u8); gn(n); gp("\n" as *u8) } } else { fail=fail+1; gp(" T1 FAIL content\n" as *u8) }
20
21 // T2 no angle brackets remain
22 var ang: i64 = 0; var i: i64 = 0
23 while i < n { if out[i]==(60 as u8) { ang=1 } if out[i]==(62 as u8) { ang=1 } i=i+1 }
24 if ang == 0 { pass=pass+1; gp(" T2 no tag chars remain PASS\n" as *u8) } else { fail=fail+1; gp(" T2 FAIL\n" as *u8) }
25
26 // T3 no '|' delimiter remains
27 var pipe: i64 = 0; i = 0
28 while i < n { if out[i]==(124 as u8) { pipe=1 } i=i+1 }
29 if pipe == 0 { pass=pass+1; gp(" T3 delimiter '|' sanitized PASS\n" as *u8) } else { fail=fail+1; gp(" T3 FAIL\n" as *u8) }
30
31 gp("RESULT pass=" as *u8); gn(pass); gp(" fail=" as *u8); gn(fail)
32 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
33 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
34 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
35 let ctr__dry: *i64 = gv_ctr()
36 ctr__dry[0] = pass
37 ctr__dry[1] = pass + fail
38 let rc__dry: i64 = gv_verdict("APISTACK-MIGRATE-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8)
39 sys_exit(rc__dry)
40 return rc__dry
41}