code wiki / _hdl_build / nx_capability_no_regression.nx
nx_capability_no_regression.nx source
↩ module page · 97 lines · 5908 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}
57// ★SIGN FIX 2026-08-07 (estate-wide sweep). Digits are pushed into t[] least-significant-first and
58// copied out REVERSED, so appending '-' as the LAST element of t makes it emerge FIRST -- and every
59// index expression (out[k]=t[nn-1-k], return nn) stays correct with nn incremented. This one uses nn
60// where the other 393 sites use k, which is why it was the residue of the mechanical sweep.
61func nr_itoa(v: i64, out: *u8) -> i64 { var m: i64=v; var neg9: i64=0; if m<0{m=0-m;neg9=1} 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} if neg9==1{t[nn]=45 as u8;nn=nn+1} while k<nn{out[k]=t[nn-1-k];k=k+1} return nn }
62func nr_set_all(perfect_floor: i64, collision_ceil: i64) -> i64 {
63 let w: *i64=ss_begin()
64 let bp: *u8=sys_mmap(24); let lp: i64=nr_itoa(perfect_floor, bp); ss_add(w, 1, "floor:perfect" as *u8, bp, lp)
65 let bc: *u8=sys_mmap(24); let lc: i64=nr_itoa(collision_ceil, bc); ss_add(w, 1, "ceil:collisions" as *u8, bc, lc)
66 ss_commit(NR_STORE, w, sys_now_realtime_sec()); return 0
67}
68
69// fork the sovereign runner on `gate`; 0 = GREEN.
70func nr_run_gate(gate: *u8) -> i64 {
71 let pid: i64=sys_fork()
72 if pid==0 {
73 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) }
74 let argv: *i64=sys_mmap(64) as *i64; argv[0]=NR_RUNNER as i64; argv[1]=gate as i64; argv[2]=0
75 let envp: *i64=sys_mmap(16) as *i64; envp[0]="PATH=/usr/bin:/bin" as *u8 as i64; envp[1]=0
76 sys_execve(NR_RUNNER, argv, envp); sys_exit(127)
77 }
78 let st: *i64=sys_mmap(16) as *i64; sys_wait4(pid, st, 0); return (st[0]>>8)&0xff
79}
80// the merge-verification gates must stay GREEN = NO functionality lost in any consolidation. 1 = all green.
81func nr_gates_green() -> i64 {
82 if nr_run_gate("nx_cidr_gate\x00" as *u8) != 0 { return 0 }
83 if nr_run_gate("nx_aec\x00" as *u8) != 0 { return 0 }
84 return 1
85}
86
87// THE SAFEGUARD: ratchet perfect (floor) + collisions (ceiling), write back; reg_out bitmask (bit0=perfect-drop
88// bit1=collision-rise). returns 1 = no regression on the counts | 0 = regressed. (gates-green is checked separately.)
89func nr_check(perfect: i64, collisions: i64, reg_out: *i64) -> i64 {
90 let pf: i64=nr_get("floor:perfect" as *u8); let cc: i64=nr_get("ceil:collisions" as *u8)
91 let rp: *i64=sys_mmap(16) as *i64; let rc: *i64=sys_mmap(16) as *i64
92 let np: i64=nr_floor_step(pf, perfect, rp); let nc: i64=nr_ceil_step(cc, collisions, rc)
93 nr_set_all(np, nc)
94 var reg: i64=0; if rp[0]==1 { reg=reg|1 } if rc[0]==1 { reg=reg|2 }
95 reg_out[0]=reg
96 if reg==0 { return 1 } return 0
97}