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}