code wiki / _hdl_build / nx_pipeline_gate.nx
nx_pipeline_gate.nx source
↩ module page · 68 lines · 3622 B
1// nx_pipeline_gate.nx -- proves the R1 pipeline spine. T1 a work-item advances IN ORDER to
2// EXCEEDED; T2 (load-bearing neg-control) a skip is REFUSED and the stage is unchanged (fabricated
3// completion is mechanically impossible); T3 a never-seeded id is honestly UNKNOWN (0). GREEN iff
4// all three. Uses a scratch prefix (cleaned by the harness before each run). license_tier: ORIGINAL
5import "nx_pipeline_spine.nx"
6import "nx_workstream_store.nx"
7import "nx_seg_store.nx"
8import "nx_framed_append.nx"
9import "nx_syscalls.nx"
10
11const PG_PREFIX: *u8 = "knowledge/store/plgate-"
12const PG_LOG: *u8 = "knowledge/status/pipeline_gate.log"
13
14func pg(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
15func pgn(v: i64) -> i64 {
16 let bb: *u8 = sys_mmap(28); var m: i64 = v
17 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
18 let t: *u8 = sys_mmap(28); var k: i64 = 0
19 if m == 0 { t[0] = 48 as u8; k = 1 }
20 while m > 0 { t[k] = ((48 + (m % 10)) as u8); m = m / 10; k = k + 1 }
21 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
22 sys_write(1, bb, k); return 0
23}
24
25func main(argc: i64, argv: *i64) -> i64 {
26 // T1 POS: in-order advance to EXCEEDED.
27 let s0: i64 = pl_seed_p(PG_PREFIX, "PL-A" as *u8, "demo gap: no-float training" as *u8)
28 let a2: i64 = pl_advance_p(PG_PREFIX, "PL-A" as *u8, PL_DISCOVERED, "knowledge/fetched/x.raw" as *u8)
29 let a3: i64 = pl_advance_p(PG_PREFIX, "PL-A" as *u8, PL_RESEARCHED, "knowledge/specs/x.spec" as *u8)
30 let a4: i64 = pl_advance_p(PG_PREFIX, "PL-A" as *u8, PL_SPECED, "_offc/x.elf" as *u8)
31 let a5: i64 = pl_advance_p(PG_PREFIX, "PL-A" as *u8, PL_BUILT, "knowledge/status/x_exceed.log" as *u8)
32 var pass1: i64 = 0
33 if s0 == PL_DISCOVERED { if a2 == 2 { if a3 == 3 { if a4 == 4 { if a5 == 5 { pass1 = 1 } } } } }
34
35 // T2 NEG (invariant): a fresh item at DISCOVERED; try to SKIP to SPECED -> must be refused (-1)
36 // and the stage must stay DISCOVERED.
37 pl_seed_p(PG_PREFIX, "PL-B" as *u8, "skip attempt" as *u8)
38 let skip: i64 = pl_advance_p(PG_PREFIX, "PL-B" as *u8, PL_SPECED, "fabricated.elf" as *u8)
39 let stillB: i64 = pl_stage_p(PG_PREFIX, "PL-B" as *u8)
40 var pass2: i64 = 0
41 if skip == 0 - 1 { if stillB == PL_DISCOVERED { pass2 = 1 } }
42
43 // T3 HONEST: a never-seeded id is UNKNOWN (0), not a fake hit.
44 let unseen: i64 = pl_stage_p(PG_PREFIX, "PL-NEVER-SEEDED" as *u8)
45 var pass3: i64 = 0
46 if unseen == 0 { pass3 = 1 }
47
48 var green: i64 = 0
49 if pass1 == 1 { if pass2 == 1 { if pass3 == 1 { green = 1 } } }
50
51 pg("PIPELINE-GATE seedA=" as *u8); pgn(s0)
52 pg(" advA=" as *u8); pgn(a2); pg("," as *u8); pgn(a3); pg("," as *u8); pgn(a4); pg("," as *u8); pgn(a5)
53 pg(" skip_refused=" as *u8); pgn(skip); pg(" B_stage=" as *u8); pgn(stillB)
54 pg(" unseen=" as *u8); pgn(unseen)
55 pg(" T1=" as *u8); pgn(pass1); pg(" T2=" as *u8); pgn(pass2); pg(" T3=" as *u8); pgn(pass3)
56
57 let buf: *u8 = sys_mmap(512)
58 var o: i64 = 0
59 o = fa_cat(buf, o, "PIPELINE-GATE ts=\x00" as *u8); o = fa_catn(buf, o, sys_now_realtime_sec())
60 o = fa_cat(buf, o, " T1=\x00" as *u8); o = fa_catn(buf, o, pass1)
61 o = fa_cat(buf, o, " T2=\x00" as *u8); o = fa_catn(buf, o, pass2)
62 o = fa_cat(buf, o, " T3=\x00" as *u8); o = fa_catn(buf, o, pass3)
63 if green == 1 { o = fa_cat(buf, o, " verdict=GREEN\x00" as *u8) } else { o = fa_cat(buf, o, " verdict=RED\x00" as *u8) }
64 fa_appendz(PG_LOG, buf, 512)
65
66 if green == 1 { pg(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 }
67 pg(" verdict=RED\n" as *u8); sys_exit(1); return 1
68}