code wiki / _hdl_build / nx_ws_manifest_emit.nx
nx_ws_manifest_emit.nx source
↩ module page · 36 lines · 1787 B
1// nx_ws_manifest_emit.nx -- WMS durability RUNNER: regenerate the live workstream auto-index in
2// the resume manifest from the memory dir. This is what the session Stop-hook runs (and what the
3// operator can run by hand) so the front door is ALWAYS current with every project-*.md -- the
4// fix for "the manifest doesn't write live and we lose work on a crash".
5// nx_ws_manifest_emit [memdir] [manifest]
6// defaults target the live Claude memory dir (overridable = config hierarchy #17). Sovereign.
7// license_tier: ORIGINAL
8import "nx_syscalls.nx"
9import "nx_ws_index_lib.nx"
10
11const WME_DEF_MEMDIR: *u8 = "/mnt/c/Users/elder/.claude/projects/C--Users-elder/memory"
12const WME_DEF_MANIFEST: *u8 = "/mnt/c/Users/elder/.claude/projects/C--Users-elder/memory/workstream-resume-manifest.md"
13
14func wmep(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
15func wmen(v: i64) -> i64 {
16 let bb: *u8 = sys_mmap(28); var m: i64 = v
17 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
18 let t: *u8 = sys_mmap(28); var k: i64 = 0
19 if m == 0 { t[0] = 48 as u8; k = 1 }
20 while m > 0 { t[k] = ((48 + (m % 10)) as u8); m = m / 10; k = k + 1 }
21 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
22 sys_write(1, bb, k); return 0
23}
24
25func main(argc: i64, argv: *i64) -> i64 {
26 var memdir: *u8 = WME_DEF_MEMDIR
27 var manifest: *u8 = WME_DEF_MANIFEST
28 if argc >= 2 { memdir = argv[1] as *u8 }
29 if argc >= 3 { manifest = argv[2] as *u8 }
30 let n: i64 = wme_emit(memdir, manifest)
31 wmep("WS-MANIFEST-EMIT memdir=" as *u8); wmep(memdir)
32 wmep(" indexed=" as *u8); wmen(n)
33 if n < 0 { wmep(" verdict=FAIL\n" as *u8); sys_exit(1); return 1 }
34 wmep(" verdict=OK\n" as *u8)
35 sys_exit(0); return 0
36}