code wiki / _hdl_build / nx_capability_no_regression.nx
nx_capability_no_regression.nx source
↩ module page · 93 lines · 5451 B
1// nx_capability_no_regression.nx -- the NO-REGRESSION SAFEGUARD (operator: "a no regression safeguard"). As we
2// climb the family tree into perfect objects, we must NEVER lose ground. Three guards, ratcheted/verified:
3// (1) PERFECT count is a FLOOR (up-only): the climbed-capability count may rise or hold, never DROP (a
4// frontier object un-climbing = regression). Reads `perfect=` from the capability_audit.log.
5// (2) COLLISIONS is a CEILING (down-only): un-consolidated generations may fall or hold, never RISE (new
6// sprawl = regression). Reads `collisions=`.
7// (3) NO FUNCTIONALITY LOST: the merge-verification gates (nx_cidr_gate, nx_aec) must stay GREEN -- if a
8// consolidation ever drops a capability, its union-gate goes RED and this trips. This is the deepest guard.
9// Floors/ceilings persist in the sovereign seg_store. Run standing (conductor pulse) = the gains can't erode.
10// license_tier: ORIGINAL
11import "nx_seg_store.nx"
12import "nx_syscalls.nx"
13const NR_MAGIC_1048576: i64 = 1048576
14const NR_MAGIC_1048560: i64 = 1048560
15
16const NR_STORE: *u8 = "knowledge/store/cap-no-regress"
17const NR_LOG: *u8 = "knowledge/status/capability_audit.log"
18const NR_RUNNER: *u8 = "_offc/nx_sov_build_run.elf"
19const NR_NONE: i64 = 0 - 2000000000 // sentinel: no baseline yet
20
21// read the LATEST "key<digits>" integer in the audit log (key e.g. "perfect=" / "collisions="). -1 if absent.
22func nr_metric(key: *u8) -> i64 {
23 let fd: i64=sys_openat_rd(NR_LOG); if fd<0 { return 0-1 }
24 let buf: *u8=sys_mmap(NR_MAGIC_1048576); var n: i64=0; var go: i64=1
25 while go==1 { let r: i64=sys_read(fd, (buf as i64 + n) as *u8, NR_MAGIC_1048560-n); if r<=0 {go=0} else {n=n+r} if n>=NR_MAGIC_1048560 {go=0} }
26 sys_close(fd)
27 var kl: i64=0; while key[kl]!=(0 as u8){kl=kl+1}
28 var last: i64=0-1; var i: i64=0
29 while i+kl<=n {
30 var k: i64=0; var hit: i64=1
31 while k<kl { if buf[i+k]!=key[k] {hit=0;k=kl} else {k=k+1} }
32 if hit==1 { var p: i64=i+kl; var v: i64=0; var any: i64=0; while p<n { if buf[p]<(48 as u8){p=n} else { if buf[p]>(57 as u8){p=n} else {v=v*10+((buf[p] as i64)-48);p=p+1;any=1} } } if any==1 {last=v} }
33 i=i+1
34 }
35 return last
36}
37
38// PERFECT is a FLOOR (up-only): reg if current < floor; ratchet floor UP. COLLISIONS is a CEILING (down-only):
39// reg if current > ceil; ratchet ceil DOWN.
40func nr_floor_step(floor: i64, current: i64, reg_out: *i64) -> i64 {
41 if floor == NR_NONE { reg_out[0]=0; return current }
42 if current < floor { reg_out[0]=1; return floor }
43 reg_out[0]=0; if current > floor { return current } return floor
44}
45func nr_ceil_step(ceil: i64, current: i64, reg_out: *i64) -> i64 {
46 if ceil == NR_NONE { reg_out[0]=0; return current }
47 if current > ceil { reg_out[0]=1; return ceil }
48 reg_out[0]=0; if current < ceil { return current } return ceil
49}
50
51func nr_get(axis: *u8) -> i64 {
52 let h: *i64=ss_open(NR_STORE); if (h as i64)==0 { return NR_NONE }
53 let pq: *i64=sys_mmap(16) as *i64; let lq: *i64=sys_mmap(16) as *i64
54 if ss_hget(h, axis, pq, lq)!=1 { return NR_NONE }
55 let cp: *u8=pq[0] as *u8; var v: i64=0; var i: i64=0; while i<lq[0]{v=v*10+((cp[i] as i64)-48);i=i+1} return v
56}
57func nr_itoa(v: i64, out: *u8) -> i64 { var m: i64=v; if m<0{m=0-m} var k: i64=0; if m==0{out[0]=48 as u8;return 1} let t: *u8=sys_mmap(24); var nn: i64=0; while m>0{t[nn]=(48+(m%10)) as u8;m=m/10;nn=nn+1} while k<nn{out[k]=t[nn-1-k];k=k+1} return nn }
58func nr_set_all(perfect_floor: i64, collision_ceil: i64) -> i64 {
59 let w: *i64=ss_begin()
60 let bp: *u8=sys_mmap(24); let lp: i64=nr_itoa(perfect_floor, bp); ss_add(w, 1, "floor:perfect" as *u8, bp, lp)
61 let bc: *u8=sys_mmap(24); let lc: i64=nr_itoa(collision_ceil, bc); ss_add(w, 1, "ceil:collisions" as *u8, bc, lc)
62 ss_commit(NR_STORE, w, sys_now_realtime_sec()); return 0
63}
64
65// fork the sovereign runner on `gate`; 0 = GREEN.
66func nr_run_gate(gate: *u8) -> i64 {
67 let pid: i64=sys_fork()
68 if pid==0 {
69 let dn: i64=sys_openat_wr("/dev/null\x00" as *u8, 420); if dn>=0 { sys_dup3(dn,1,0); sys_dup3(dn,2,0) }
70 let argv: *i64=sys_mmap(64) as *i64; argv[0]=NR_RUNNER as i64; argv[1]=gate as i64; argv[2]=0
71 let envp: *i64=sys_mmap(16) as *i64; envp[0]="PATH=/usr/bin:/bin" as *u8 as i64; envp[1]=0
72 sys_execve(NR_RUNNER, argv, envp); sys_exit(127)
73 }
74 let st: *i64=sys_mmap(16) as *i64; sys_wait4(pid, st, 0); return (st[0]>>8)&0xff
75}
76// the merge-verification gates must stay GREEN = NO functionality lost in any consolidation. 1 = all green.
77func nr_gates_green() -> i64 {
78 if nr_run_gate("nx_cidr_gate\x00" as *u8) != 0 { return 0 }
79 if nr_run_gate("nx_aec\x00" as *u8) != 0 { return 0 }
80 return 1
81}
82
83// THE SAFEGUARD: ratchet perfect (floor) + collisions (ceiling), write back; reg_out bitmask (bit0=perfect-drop
84// bit1=collision-rise). returns 1 = no regression on the counts | 0 = regressed. (gates-green is checked separately.)
85func nr_check(perfect: i64, collisions: i64, reg_out: *i64) -> i64 {
86 let pf: i64=nr_get("floor:perfect" as *u8); let cc: i64=nr_get("ceil:collisions" as *u8)
87 let rp: *i64=sys_mmap(16) as *i64; let rc: *i64=sys_mmap(16) as *i64
88 let np: i64=nr_floor_step(pf, perfect, rp); let nc: i64=nr_ceil_step(cc, collisions, rc)
89 nr_set_all(np, nc)
90 var reg: i64=0; if rp[0]==1 { reg=reg|1 } if rc[0]==1 { reg=reg|2 }
91 reg_out[0]=reg
92 if reg==0 { return 1 } return 0
93}