nx_debt.nx
buildroot/runtime/nx_debt.nx
about
nx_debt.nx -- debt-store intake CLI (autonomous-loop design-of-record 2026-07-18, R1).
knowledge/store/debt- rows appended by judges/sessions; nx_ws_cycle REFUSES to emit WORK while
an open row exists (eat-debt-first mechanized). Row: <epoch>\t<sev1-9>\t<scope>\t<open|eaten>\t<desc>
nx_debt add <sev> <scope> <desc> [prefix]
nx_debt eat <epoch-id-or-index> [prefix] (epoch col0 exact-match FIRST, index fallback; echoes the row; idempotent)
nx_debt show <epoch-id-or-index> [prefix] (read-before-eat: echo one row, no mutation)
nx_debt page <offset> <limit> [prefix] (64KB-safe paged list w/ declared envelope)
nx_debt list [prefix]
Fail-closed: bad sev / out-of-range seq commit NOTHING. flock on <prefix>plock.
license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0
dependencies 3 imports · 0 importers
imports: nx_store_seed_lib.nxnx_seg_store.nxnx_syscalls.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 15 | const DB_CAP: i64 = 4194304 // 2026-07-29: was 1MB; the plane passed 850KB (~1219 rows, +~500/wk) -- the NEXT silent ceiling was weeks out (re-probe-the-new-boundary law) |
| 16 | const DB_TAB: i64 = 9 |
| 17 | const DB_NL: i64 = 10 |
| 18 | const DB_STDERR: i64 = 2 |
| 19 | const DB_LOCK_EX: i64 = 2 |
| 20 | const DB_MODE: i64 = 420 |
| 21 | const DB_SPAN: i64 = 16 |
| 22 | const DB_PATHCAP: i64 = 256 |
| 23 | const DB_MSGCAP: i64 = 512 |
| 27 | const DB_RACE_REREAD_MS: i64 = 250 |
| 45 | const DB_ID_MAXPROBE: i64 = 4096 |
| 55 | const DB_EXIT_USAGE: i64 = 2 |
functions
| 47 | func db_load_guarded(prefix: *u8, q: *u8, dbf: *i64) -> i64 |
| 57 | func db_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } |
| 58 | func db_werr(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(DB_STDERR, s, n); return 0 } |
| 59 | func db_vlen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } |
| 60 | func db_cat(d: *u8, o: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { d[o] = s[i]; o = o + 1; i = i + 1 } return o } |
| 61 | func db_catn(d: *u8, o: i64, v: i64) -> i64 { let t: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { m = 0 } var k: i64 = 0; if m == 0 { t[0] = 48 as u8; 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 { d[o] = t[k-1-i]; o = o + 1; i = i + 1 } return o } |
| 62 | func db_atoi(s: *u8) -> i64 { var v: i64 = 0; var i: i64 = 0; while s[i] != (0 as u8) { let c: i64 = s[i] as i64; if c >= 48 { if c <= 57 { v = v * 10 + (c - 48) } } i = i + 1 } return v } called by 1: main |
| 63 | func db_le(q: *u8, i: i64, n: i64) -> i64 { var e: i64 = i; var s: i64 = 1; while s == 1 { if e >= n { s = 0 } else { if q[e] == (DB_NL as u8) { s = 0 } else { e = e + 1 } } } return e } |
| 64 | func db_col(q: *u8, ls: i64, le: i64, c: i64, out: *i64) -> i64 |
| 80 | func db_span_lit(q: *u8, s: i64, e: i64, lit: *u8) -> i64 |
| 87 | func db_tail_eq(q: *u8, s: i64, e: i64, lit: *u8) -> i64 |
| 97 | func db_prefix_ok(a: *u8) -> i64 |
| 117 | func db_take_prefix(a: *u8) -> *u8 |
| 123 | func db_lock(prefix: *u8) -> i64 |
| 152 | func db_find_sub(h: *u8, n: i64, s: *u8) -> i64 called by 1: main |
| 168 | func db_open_count(q: *u8, n: i64) -> i64 |
| 179 | func main(argc: i64, argv: *i64) -> i64 |