code wiki / _hdl_build / nx_ws_lost.nx

nx_ws_lost.nx source

↩ module page · 60 lines · 3173 B

1// nx_ws_lost.nx -- READ-ONLY diagnostic: name + CLASSIFY the "lost segment(s)" that make nx_ws_board REFUSE. 2// Runs the board's own completeness gate (ws_audit_complete_p over WS_PREFIX), then for each failing id reports 3// the EXACT root cause: RECORD-ABSENT (ws:<id> not retrievable -> lost/torn/never-committed) vs ORPHAN-EMPIRE 4// (record present but its empire is not in ws:empires). ADDITIVE + READ-ONLY: opens the store via ss_get/ss_open, 5// writes NOTHING. Sovereign: imports only nx_workstream_store (R1, read-only) + nx_syscalls. license_tier: ORIGINAL 6import "nx_workstream_store.nx" 7import "nx_syscalls.nx" 8const K_MAGIC_1024: i64 = 1024 9 10func lo_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 11func lo_wn(v: i64) -> i64 { 12 let bb: *u8 = sys_mmap(28); var m: i64 = v 13 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 14 let t: *u8 = sys_mmap(28); var k: i64 = 0 15 if m == 0 { t[0] = 48 as u8; k = 1 } 16 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 17 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 18 sys_write(1, bb, k); return 0 19} 20func main() -> i64 { 21 lo_w("=== WMS LOST-SEGMENT DIAGNOSTIC (read-only; per-id root cause) ===\n" as *u8) 22 let missing: *i64 = sys_mmap(8 * K_MAGIC_1024) as *i64 23 let mc: i64 = ws_audit_complete_p(WS_PREFIX, missing, K_MAGIC_1024) 24 lo_w("audit prefix=knowledge/store/ws- missing_count=" as *u8); lo_wn(mc); lo_w("\n" as *u8) 25 if mc < 0 { lo_w(" ws:ids ABSENT -- registry has no index\n" as *u8); sys_exit(2); return 2 } 26 if mc == 0 { lo_w(" COMPLETE -- board would RENDER\n" as *u8); sys_exit(0); return 0 } 27 let eq: *i64 = sys_mmap(16) as *i64 28 let el: *i64 = sys_mmap(16) as *i64 29 var emp: *u8 = "" as *u8 30 var empn: i64 = 0 31 if ss_get(WS_PREFIX, "ws:empires" as *u8, eq, el) == 1 { emp = eq[0] as *u8; empn = el[0] } 32 lo_w("ws:empires (canonical membership, TAB-sep) = " as *u8); sys_write(1, emp, empn); lo_w("\n" as *u8) 33 let pq: *i64 = sys_mmap(16) as *i64 34 let lq: *i64 = sys_mmap(16) as *i64 35 let keybuf: *u8 = sys_mmap(256) 36 let empbuf: *u8 = sys_mmap(256) 37 var i: i64 = 0 38 while i < mc { 39 let id: *u8 = missing[i] as *u8 40 keybuf[0] = 119 as u8; keybuf[1] = 115 as u8; keybuf[2] = 58 as u8 41 var t: i64 = 0 42 while id[t] != (0 as u8) { keybuf[3 + t] = id[t]; t = t + 1 } 43 keybuf[3 + t] = 0 as u8 44 let g: i64 = ws_get_p(WS_PREFIX, keybuf, pq, lq) 45 lo_w(" id=" as *u8); lo_w(id) 46 if g != WS_FOUND { 47 lo_w(" cause=RECORD-ABSENT rc=" as *u8); lo_wn(g); lo_w(" (in ws:ids but no retrievable ws:<id> segment -> lost/torn/never-committed)\n" as *u8) 48 } else { 49 ws_field(pq[0] as *u8, lq[0], 1, empbuf) 50 if ws_member(emp, empn, empbuf) == 0 { 51 lo_w(" cause=ORPHAN-EMPIRE empire=" as *u8); lo_w(empbuf); lo_w(" (record present but empire not in ws:empires)\n" as *u8) 52 } else { 53 lo_w(" cause=RECHECK (record present, empire ok)\n" as *u8) 54 } 55 } 56 i = i + 1 57 } 58 sys_exit(1) 59 return 1 60}