code wiki / _hdl_build / nx_survey_ws_register.nx

nx_survey_ws_register.nx source

↩ module page · 124 lines · 4642 B

1// nx_survey_ws_register.nx -- register the SURVEY/PULSE arc as a LIVE workstream in the WMS registry 2// (orchestration over contention: the machine SSOT owns the stream, the board shows it ALIVE, the 3// dispatcher can machine-verify it via code_link). Exact clone of nx_project_ws_register (pwr_ -> 4// swr_): per-prefix wlock across the ws:ids RMW + ws:<id> write; idempotent; READBACK-verified. 5// code_link = nx_survey_stats_gate (47/47 KAT+adversary gate = the machine-verifiable proof). 6// expect_exit: 0 license_tier: ORIGINAL 7import "nx_ws_cas.nx" 8import "nx_heartbeat_str.nx" 9const SWR_MAGIC_1024: i64 = 1024 10 11const SWR_ID: *u8 = "SURVEY-PULSE-01" 12const SWR_MEM: *u8 = "project-nishi-survey-pulse-2026-07-10" 13const SWR_HB: *u8 = "knowledge/status/wms_heartbeat.log" 14 15func swr_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 16func swr_cat(dst: *u8, off: i64, s: *u8) -> i64 { var o: i64 = off; var i: i64 = 0; while s[i] != (0 as u8) { dst[o] = s[i]; o = o + 1; i = i + 1 } return o } 17func swr_n(dst: *u8, off: i64, v: i64) -> i64 { 18 var o: i64 = off 19 var m: i64 = v 20 if m < 0 { dst[o] = 45 as u8; o = o + 1; m = 0 - m } 21 let t: *u8 = sys_mmap(28) 22 var k: i64 = 0 23 if m == 0 { t[0] = 48 as u8; k = 1 } 24 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 25 var i: i64 = 0 26 while i < k { dst[o + i] = t[k - 1 - i]; i = i + 1 } 27 return o + k 28} 29 30func swr_register(id: *u8, state: *u8, code: *u8) -> i64 { 31 let wp: *u8 = WS_PREFIX 32 let lp: *u8 = sys_mmap(512) 33 var i: i64 = 0 34 while wp[i] != (0 as u8) { lp[i] = wp[i]; i = i + 1 } 35 let suf: *u8 = "wlock" 36 var s: i64 = 0 37 while suf[s] != (0 as u8) { lp[i] = suf[s]; i = i + 1; s = s + 1 } 38 lp[i] = 0 as u8 39 let lfd: i64 = sys_openat_append(lp, 0x1a4) 40 if lfd >= 0 { sys_flock(lfd, SYS_LOCK_EX) } 41 42 let key: *u8 = sys_mmap(192) 43 key[0] = 119 as u8 44 key[1] = 115 as u8 45 key[2] = 58 as u8 46 var k: i64 = 0 47 while id[k] != (0 as u8) { key[3 + k] = id[k]; k = k + 1 } 48 key[3 + k] = 0 as u8 49 50 let rec: *u8 = sys_mmap(SWR_MAGIC_1024) 51 var o: i64 = 0 52 o = swr_cat(rec, o, id) 53 rec[o] = 9 as u8 54 o = o + 1 55 o = swr_cat(rec, o, "E-SVY" as *u8) 56 rec[o] = 9 as u8 57 o = o + 1 58 o = swr_cat(rec, o, state) 59 rec[o] = 9 as u8 60 o = o + 1 61 o = swr_n(rec, o, sys_now_realtime_sec()) 62 rec[o] = 9 as u8 63 o = o + 1 64 o = swr_cat(rec, o, SWR_MEM) 65 rec[o] = 9 as u8 66 o = o + 1 67 o = swr_cat(rec, o, code) 68 rec[o] = 9 as u8 69 o = o + 1 70 o = swr_cat(rec, o, "-" as *u8) 71 rec[o] = 0 as u8 72 ws_put_p(WS_PREFIX, key, rec) 73 74 let pq: *i64 = sys_mmap(16) as *i64 75 let lq: *i64 = sys_mmap(16) as *i64 76 if ss_get(WS_PREFIX, "ws:ids" as *u8, pq, lq) == 1 { 77 let ids: *u8 = pq[0] as *u8 78 let idn: i64 = lq[0] 79 if ws_member(ids, idn, id) == 0 { 80 let nb: *u8 = sys_mmap(idn + 192) 81 var c: i64 = 0 82 while c < idn { nb[c] = ids[c]; c = c + 1 } 83 nb[c] = 9 as u8 84 c = c + 1 85 var d: i64 = 0 86 while id[d] != (0 as u8) { nb[c] = id[d]; c = c + 1; d = d + 1 } 87 nb[c] = 0 as u8 88 ws_put_p(WS_PREFIX, "ws:ids" as *u8, nb) 89 } 90 } 91 if lfd >= 0 { sys_flock(lfd, SYS_LOCK_UN); sys_close(lfd) } 92 return 0 93} 94 95func main() -> i64 { 96 swr_puts("=== nx_survey_ws_register -- the SURVEY/PULSE arc into the WMS registry (E-SVY, code_link=nx_survey_stats_gate) ===\n" as *u8) 97 swr_register(SWR_ID, "ACTIVE" as *u8, "nx_survey_stats_gate" as *u8) 98 hb_beat_s(SWR_HB, SWR_ID, 1) 99 // READBACK verify (never assert without reading it back) 100 let pq: *i64 = sys_mmap(16) as *i64 101 let lq: *i64 = sys_mmap(16) as *i64 102 var ok: i64 = 0 103 if ss_get(WS_PREFIX, "ws:SURVEY-PULSE-01" as *u8, pq, lq) == 1 { 104 if lq[0] > 0 { 105 let rb: *u8 = pq[0] as *u8 106 var i: i64 = 0 107 var hit: i64 = 0 108 while i + 5 <= lq[0] { 109 if rb[i] == (69 as u8) { if rb[i+1] == (45 as u8) { if rb[i+2] == (83 as u8) { if rb[i+3] == (86 as u8) { if rb[i+4] == (89 as u8) { hit = 1 } } } } } 110 i = i + 1 111 } 112 if hit == 1 { ok = 1 } 113 } 114 } 115 if ok == 1 { 116 swr_puts("readback=OK (ws:SURVEY-PULSE-01 carries E-SVY) heartbeat=BEATEN\n" as *u8) 117 swr_puts("verdict=GREEN (the survey arc is a registered, machine-verifiable workstream on the board)\n" as *u8) 118 sys_exit(0) 119 return 0 120 } 121 swr_puts("verdict=RED (readback missing)\n" as *u8) 122 sys_exit(1) 123 return 1 124}