code wiki / _hdl_build / nx_work_predict.nx
nx_work_predict.nx source
↩ module page · 62 lines · 2972 B
1// nx_work_predict.nx -- FUTURE-axis runner: read capability_ladder.tsv and print the ADJACENT-POSSIBLE
2// frontier (probable-next work: prerequisites DONE, node not yet built), ranked by layer (nearest the
3// hardware root first = the genuine growth front). Prints + writes a durable report for the planning
4// surface. Grounded entirely in the ladder data -- no model prose. Sovereign.
5// nx_work_predict [ladder.tsv]
6// license_tier: ORIGINAL
7import "nx_syscalls.nx"
8import "nx_work_predict_lib.nx"
9
10const WPR_LADDER: *u8 = "/mnt/c/Users/elder/nishi-core/nxc2/knowledge/registry/capability_ladder.tsv"
11const WPR_REPORT: *u8 = "/mnt/c/Users/elder/.claude/projects/C--Users-elder/memory/worklog/predict_next.txt"
12const WPR_BUFCAP: i64 = 4194304 // 4MB: ladder is ~40KB, ample headroom
13const WPR_OUTCAP: i64 = 1048576
14
15func wpp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
16func wpn(v: i64) -> i64 {
17 let bb: *u8 = sys_mmap(28); var m: i64 = v
18 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
19 let t: *u8 = sys_mmap(28); var k: i64 = 0
20 if m == 0 { t[0] = 48 as u8; k = 1 }
21 while m > 0 { t[k] = ((48 + (m % 10)) as u8); m = m / 10; k = k + 1 }
22 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
23 sys_write(1, bb, k); return 0
24}
25func wpr_read(path: *u8, buf: *u8, cap: i64) -> i64 {
26 let fd: i64 = sys_openat_rd(path)
27 if fd < 0 { return 0 - 1 }
28 var total: i64 = 0
29 var nrd: i64 = sys_read(fd, buf, cap)
30 while nrd > 0 { total = total + nrd; if total >= cap { nrd = 0 } else { nrd = sys_read(fd, ((buf as i64) + total) as *u8, cap - total) } }
31 sys_close(fd)
32 return total
33}
34func wpr_strlen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
35
36func main(argc: i64, argv: *i64) -> i64 {
37 var ladder: *u8 = WPR_LADDER
38 if argc >= 2 { ladder = argv[1] as *u8 }
39
40 let buf: *u8 = sys_mmap(WPR_BUFCAP)
41 let len: i64 = wpr_read(ladder, buf, WPR_BUFCAP)
42 if len <= 0 { wpp("WORK-PREDICT ladder-unreadable: " as *u8); wpp(ladder); wpp("\n" as *u8); sys_exit(0); return 0 }
43
44 let out: *u8 = sys_mmap(WPR_OUTCAP)
45 let stats: *i64 = sys_mmap(48) as *i64
46 let nadj: i64 = wp_predict(buf, len, out, WPR_OUTCAP, stats)
47
48 wpp("WORK-PREDICT ladder=" as *u8); wpp(ladder); wpp("\n" as *u8)
49 wpp(" rows=" as *u8); wpn(stats[0])
50 wpp(" done=" as *u8); wpn(stats[1])
51 wpp(" adjacent=" as *u8); wpn(stats[2])
52 wpp(" root_available=" as *u8); wpn(stats[3])
53 wpp(" blocked=" as *u8); wpn(stats[4]); wpp("\n" as *u8)
54 wpp("-- ADJACENT-POSSIBLE probable-next (all prereqs DONE, not yet built), by layer:\n" as *u8)
55 wpp(out)
56 wpp(" (root_available = startable foundations with no prereq; blocked = waiting on a non-DONE dep)\n" as *u8)
57
58 let rfd: i64 = sys_openat_wr(WPR_REPORT, 420)
59 if rfd >= 0 { sys_write(rfd, out, wpr_strlen(out)); sys_close(rfd) }
60
61 sys_exit(0); return 0
62}