code wiki / _hdl_build / nx_worklog_lib.nx

nx_worklog_lib.nx source

↩ module page · 34 lines · 1918 B

1// nx_worklog_lib.nx -- LIVE WORK-JOURNAL primitive (the "running logs of our work, as it goes"). 2// ONE framed, flock-atomic, crash-durable line per action, built on the WMS-R0 fa_appendz floor 3// (one-buffer-one-locked-write -> a concurrent appender can NEVER tear a line). This is the 4// sovereign capture layer: invoked per-action by a silent PostToolUse hook, AND by the redundant 5// transcript ingestor -- both write through THIS, so all paths share one durable, append-only log. 6// Line schema (TAB-separated): <epoch>\t<event>\t<tool>\t<target> 7// event = pre|post|ingest|turn tool = Edit|Write|Bash|... target = file/command/summary 8// Sovereign: nx_framed_append + nx_syscalls only. license_tier: ORIGINAL 9import "nx_framed_append.nx" 10import "nx_syscalls.nx" 11 12const WL_DIR: *u8 = "/mnt/c/Users/elder/.claude/projects/C--Users-elder/memory/worklog" 13const WL_PATH: *u8 = "/mnt/c/Users/elder/.claude/projects/C--Users-elder/memory/worklog/worklog.tsv" 14const WL_CAP: i64 = 8192 // bounded record size (fa_appendz cap) 15 16// deterministic core (epoch injected) -> gateable without a wall-clock. returns fa_appendz rc. 17func wl_append3_t(path: *u8, epoch: i64, event: *u8, tool: *u8, target: *u8) -> i64 { 18 let buf: *u8 = sys_mmap(WL_CAP + 64) 19 var o: i64 = 0 20 o = fa_catn(buf, o, epoch) 21 buf[o] = 9 as u8; o = o + 1; o = fa_cat(buf, o, event) 22 buf[o] = 9 as u8; o = o + 1; o = fa_cat(buf, o, tool) 23 buf[o] = 9 as u8; o = o + 1; o = fa_cat(buf, o, target) 24 buf[o] = 0 as u8 25 return fa_appendz(path, buf, WL_CAP) 26} 27 28// live variant: stamps the hardware clock now (sys_now_realtime_sec). 29func wl_append3(path: *u8, event: *u8, tool: *u8, target: *u8) -> i64 { 30 return wl_append3_t(path, sys_now_realtime_sec(), event, tool, target) 31} 32 33// ensure the journal directory exists (idempotent; ignores EEXIST). 34func wl_ensure_dir(dir: *u8) -> i64 { sys_mkdir(dir, 511); return 0 }