code wiki / _hdl_build / nx_queue_health.nx

nx_queue_health.nx source

↩ module page · 100 lines · 3878 B

1// nx_queue_health.nx -- QUEUE-HEALTH gate (Auditor, X-Q-004): the assignment 2// queue audited every beat so nobody scans it by hand: 3// counts by status (TODO/GEN/NOVEL/WIP/DONE/RED) 4// DEP-DRIFT: rows whose deps name ids that do not EXIST in the queue 5// (typos/renames -> a row that can never unblock, silently) 6// RED rows: failed assignments needing an owner decision 7// Emits QHEALTH row to knowledge/status/queue_health.log; exits nonzero ONLY 8// on structural defects (dep-drift) -- counts are reporting, not failure. 9// license_tier: ORIGINAL 10import "nx_syscalls.nx" 11import "nx_assign_core.nx" 12 13func qh_w(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 } 14func qh_wn(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m; sys_write(fd,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(fd,bb,k); return 0 } 15 16// count dep tokens of row r that do NOT resolve to a queue id 17func qh_baddeps(cx: *i64, r: i64) -> i64 { 18 let dd: *u8 = an_deps_at(cx, r) 19 if dd[0] == (45 as u8) { if dd[1] == (0 as u8) { return 0 } } 20 let tok: *u8 = sys_mmap(64) 21 var bad: i64 = 0 22 var i: i64 = 0 23 var k: i64 = 0 24 var go: i64 = 1 25 while go == 1 { 26 let ch: i64 = dd[i] as i64 27 var fin: i64 = 0 28 if ch == 0 { fin = 1 } 29 if ch == 44 { fin = 1 } 30 if fin == 1 { 31 if k > 0 { 32 tok[k] = 0 as u8 33 if an_find(cx, tok) < 0 { bad = bad + 1 } 34 k = 0 35 } 36 if ch == 0 { go = 0 } 37 } else { 38 if k < 63 { tok[k] = ch as u8; k = k + 1 } 39 } 40 i = i + 1 41 } 42 return bad 43} 44 45func main(argc: i64, argv: *i64) -> i64 { 46 var qp: *u8 = "knowledge/registry/assignment_queue.tsv" as *u8 47 if argc >= 2 { qp = argv[1] as *u8 } 48 let cx: *i64 = an_newcx() 49 let rows: i64 = an_load(qp, cx) 50 if rows <= 0 { qh_w(1, "QHEALTH verdict=RED reason=queue-missing\n" as *u8); sys_exit(101) } 51 let st: *i64 = cx[4] as *i64 52 var todo: i64 = 0 53 var gen: i64 = 0 54 var novel: i64 = 0 55 var wip: i64 = 0 56 var done: i64 = 0 57 var redr: i64 = 0 58 var drift: i64 = 0 59 var r: i64 = 0 60 while r < rows { 61 if st[r] == 84 { todo = todo + 1 } 62 if st[r] == 71 { gen = gen + 1 } 63 if st[r] == 78 { novel = novel + 1 } 64 if st[r] == 87 { wip = wip + 1 } 65 if st[r] == 68 { done = done + 1 } 66 if st[r] == 82 { redr = redr + 1 } 67 let bd: i64 = qh_baddeps(cx, r) 68 if bd > 0 { 69 drift = drift + 1 70 qh_w(1, "QHEALTH-DRIFT id=" as *u8) 71 qh_w(1, an_id_at(cx, r)) 72 qh_w(1, " unresolved-deps=" as *u8) 73 qh_wn(1, bd) 74 qh_w(1, "\n" as *u8) 75 } 76 r = r + 1 77 } 78 let lf: i64 = sys_openat_append("knowledge/status/queue_health.log" as *u8, 0x1a4) 79 var p: i64 = 0 80 while p < 2 { 81 var fd: i64 = 1 82 if p == 1 { fd = lf } 83 if fd >= 0 { 84 qh_w(fd, "QHEALTH rows=" as *u8); qh_wn(fd, rows) 85 qh_w(fd, " todo=" as *u8); qh_wn(fd, todo) 86 qh_w(fd, " gen=" as *u8); qh_wn(fd, gen) 87 qh_w(fd, " novel=" as *u8); qh_wn(fd, novel) 88 qh_w(fd, " wip=" as *u8); qh_wn(fd, wip) 89 qh_w(fd, " done=" as *u8); qh_wn(fd, done) 90 qh_w(fd, " red=" as *u8); qh_wn(fd, redr) 91 qh_w(fd, " dep-drift=" as *u8); qh_wn(fd, drift) 92 qh_w(fd, " epoch=" as *u8); qh_wn(fd, sys_now_realtime_sec()) 93 if drift == 0 { qh_w(fd, " verdict=GREEN\n" as *u8) } else { qh_w(fd, " verdict=RED\n" as *u8) } 94 } 95 p = p + 1 96 } 97 if lf >= 0 { sys_close(lf) } 98 sys_exit(drift) 99 return 0 100}