code wiki / _hdl_build / nx_vsroll_lib.nx

nx_vsroll_lib.nx source

↩ module page · 172 lines · 6936 B

1// nx_vsroll_lib.nx -- roll per-SCOPE comparative claims into a DOMAIN verdict by MIN. 2// 3// Everything here works on BUFFERS, not files, so the gate can feed it the ugly cases directly: 4// an empty roster, a roster whose domain has no rows, a claim for the RIGHT scope under the WRONG 5// domain, an unknown earns= label. A ruler that has only ever seen well-formed input is not a 6// ruler -- that lesson cost this lane a 14/14 gate sitting on a lib that fabricated retirements. 7// 8// ★★★★★MIN OVER A HAND-PICKED SUBSET IS A MAX. The roster is declared independently of the claims 9// so a missing axis reads UNMEASURED (refuses) rather than absent (rounds up). 10// license_tier: ORIGINAL No hw writes (Rule 26). 11import "nx_vsbest_lib.nx" 12 13const VR_SCOPE_CAP: i64 = 128 14const VR_OK: i64 = 0 15const VR_NO_ROSTER: i64 = 0 - 1 16const VR_INCOMPLETE: i64 = 0 - 2 17 18// out slots for vr_roll_buf 19const VRO_NREQ: i64 = 0 20const VRO_NHAVE: i64 = 1 21const VRO_MINLV: i64 = 2 22 23func vr_line_end(buf: *u8, p: i64, n: i64) -> i64 { 24 var e: i64 = p 25 var go: i64 = 1 26 while go == 1 { if e >= n { go = 0 } else { if (buf[e] as i64) == 10 { go = 0 } else { e = e + 1 } } } 27 return e 28} 29 30// Copy field `n` (0-based, '|'-separated) of line [p,e) into out. Returns length. 31func vr_field(buf: *u8, p: i64, e: i64, n: i64, out: *u8, cap: i64) -> i64 { 32 var f: i64 = 0 33 var i: i64 = p 34 var o: i64 = 0 35 while i < e { 36 let c: i64 = buf[i] as i64 37 if c == 124 { f = f + 1; if f > n { out[o] = 0 as u8; return o } } else { 38 if f == n { if o < cap - 1 { out[o] = buf[i]; o = o + 1 } } 39 } 40 i = i + 1 41 } 42 out[o] = 0 as u8 43 return o 44} 45 46// earns=<LABEL> on a claim line -> maturity level, or -1 when the label is unknown. 47// An unknown label must NOT silently read as 0/ABSENT: that would let a corrupt or 48// future-versioned ledger line quietly become the MIN and pin a domain at the floor. 49func vr_level_of(buf: *u8, p: i64, e: i64) -> i64 { 50 let tag: *u8 = " earns=" as *u8 51 let tl: i64 = el_len(tag) 52 var i: i64 = p 53 while i + tl <= e { 54 if el_match(buf, i, tag, tl) == 1 { 55 var lv: i64 = 0 56 while lv <= MAT_EXCEED { 57 let lab: *u8 = mat_label(lv) 58 let ll: i64 = el_len(lab) 59 if i + tl + ll <= e { if el_match(buf, i + tl, lab, ll) == 1 { return lv } } 60 lv = lv + 1 61 } 62 return 0 - 1 63 } 64 i = i + 1 65 } 66 return 0 - 1 67} 68 69// Best admitted level for (domain, scope); -1 when no claim exists. 70// BOTH tokens must match on the SAME line -- a claim for scope X under a different domain must not 71// count toward this domain, or every domain sharing an axis name would inherit its neighbour's work. 72func vr_claim_level(cb: *u8, cn: i64, domain: *u8, scope: *u8) -> i64 { 73 let dt: *u8 = sys_mmap(VR_SCOPE_CAP + 32) 74 var o: i64 = ss_cat(dt, 0, " domain=" as *u8) 75 o = ss_cat(dt, o, domain); dt[o] = 32 as u8; dt[o+1] = 0 as u8 76 let st: *u8 = sys_mmap(VR_SCOPE_CAP + 32) 77 o = ss_cat(st, 0, " scope=" as *u8) 78 o = ss_cat(st, o, scope); st[o] = 32 as u8; st[o+1] = 0 as u8 79 let dl: i64 = el_len(dt) 80 let sl: i64 = el_len(st) 81 // RETRACTION IS PART OF THE READ, NOT A SEPARATE PASS (2026-07-31). 82 // The ledger is append-only, so the log is a TIMELINE and the answer is the LATEST state for 83 // this (domain, scope): a VSBEST line sets the level, a VSRETRACT line clears it back to 84 // UNMEASURED, and a later VSBEST can legitimately claim it again after a clean re-run. 85 // WHY THIS EXISTS: I admitted search|latency=behind off a benchmark that had starved our own 86 // engine, and then could not take it back -- nx_vsbest only appends. Five routes to a fabricated 87 // WIN were closed by construction and there was no route to correct an honest MISTAKE. 88 // ★★★★★AN AXIS THAT CANNOT BE UN-CLAIMED CAN BE POISONED BY EXACTLY ONE BAD MEASUREMENT. 89 // Order matters, so this walks the file forward and lets the last word win rather than taking a 90 // max over everything ever written. 91 let rt: *u8 = sys_mmap(64) 92 var ro: i64 = ss_cat(rt, 0, "VSRETRACT " as *u8) 93 rt[ro] = 0 as u8 94 let rl: i64 = el_len(rt) 95 var best: i64 = 0 - 1 96 var p: i64 = 0 97 while p < cn { 98 let e: i64 = vr_line_end(cb, p, cn) 99 if e > p { 100 var hd: i64 = 0 101 var hs: i64 = 0 102 var i: i64 = p 103 while i < e { 104 if i + dl <= e { if el_match(cb, i, dt, dl) == 1 { hd = 1 } } 105 if i + sl <= e { if el_match(cb, i, st, sl) == 1 { hs = 1 } } 106 i = i + 1 107 } 108 if hd == 1 { if hs == 1 { 109 var isret: i64 = 0 110 if p + rl <= e { if el_match(cb, p, rt, rl) == 1 { isret = 1 } } 111 if isret == 1 { best = 0 - 1 } else { 112 let lv: i64 = vr_level_of(cb, p, e) 113 if lv > best { best = lv } 114 } 115 } } 116 } 117 p = e + 1 118 } 119 return best 120} 121 122// idx-th required scope for `domain` in the roster buffer. Returns length, 0 when absent. 123func vr_scope_at(rb: *u8, rn: i64, domain: *u8, idx: i64, out: *u8, cap: i64) -> i64 { 124 let dom: *u8 = sys_mmap(VR_SCOPE_CAP) 125 var seen: i64 = 0 126 var p: i64 = 0 127 while p < rn { 128 let e: i64 = vr_line_end(rb, p, rn) 129 if e > p { if (rb[p] as i64) != 35 { 130 vr_field(rb, p, e, 0, dom, VR_SCOPE_CAP) 131 if el_streq(dom, domain) == 1 { 132 let l: i64 = vr_field(rb, p, e, 1, out, cap) 133 if l > 0 { 134 if seen == idx { return l } 135 seen = seen + 1 136 } 137 } 138 } } 139 p = e + 1 140 } 141 out[0] = 0 as u8 142 return 0 143} 144 145// THE ROLL. out[NREQ]/out[NHAVE]/out[MINLV]. Returns VR_OK, VR_NO_ROSTER or VR_INCOMPLETE. 146// MINLV is only meaningful on VR_OK -- on a refusal there is no domain level, by design. 147func vr_roll_buf(domain: *u8, rb: *u8, rn: i64, cb: *u8, cn: i64, out: *i64) -> i64 { 148 out[VRO_NREQ] = 0 149 out[VRO_NHAVE] = 0 150 out[VRO_MINLV] = 0 - 1 151 let scope: *u8 = sys_mmap(VR_SCOPE_CAP) 152 var minlv: i64 = MAT_EXCEED 153 var idx: i64 = 0 154 var go: i64 = 1 155 while go == 1 { 156 let l: i64 = vr_scope_at(rb, rn, domain, idx, scope, VR_SCOPE_CAP) 157 if l <= 0 { go = 0 } else { 158 out[VRO_NREQ] = out[VRO_NREQ] + 1 159 var lv: i64 = 0 - 1 160 if cn > 0 { lv = vr_claim_level(cb, cn, domain, scope) } 161 if lv >= 0 { 162 out[VRO_NHAVE] = out[VRO_NHAVE] + 1 163 if lv < minlv { minlv = lv } 164 } 165 idx = idx + 1 166 } 167 } 168 if out[VRO_NREQ] == 0 { return VR_NO_ROSTER } 169 if out[VRO_NHAVE] < out[VRO_NREQ] { return VR_INCOMPLETE } 170 out[VRO_MINLV] = minlv 171 return VR_OK 172}