code wiki / _hdl_build / nx_receipt.nx

nx_receipt.nx source

↩ module page · 75 lines · 3673 B

1// nx_receipt.nx -- the SOVEREIGN op ACCEPTANCE/RECEIPT ledger. The operator's "military acceptance + receipt": 2// every sovereign op (deploy, transport, recover, publish, supervise...) appends a durable, tamper-evident 3// RECEIPT of what was done + the verdict, so ANY teammate/workstream can validate orchestration is healthy -- 4// the deploy/op "returns and reports a receipt back to the workstream," confirmable by all, not assumed. 5// 6// Schema (TAB, 6 fields): ts <TAB> actor <TAB> op <TAB> target <TAB> verdict <TAB> detail 7// verdict in {ISSUED, ACCEPTED, COMPLETED, REJECTED, FAILED}. NO secrets ever (no passphrase/mnemonic/token). 8// Atomic + concurrent-safe via the proven fa_appendz floor (many op-organs append at once, zero torn rows). 9// Sovereign: composes fa_appendz (store) + slk_* (read/scan). license_tier: ORIGINAL 10import "nx_framed_append.nx" 11import "nx_site_lock_lib.nx" 12const RCPT_MAGIC_1024: i64 = 1024 13 14const RCPT_LEDGER: *u8 = "knowledge/receipts/orchestration.tsv" // workstation-side ledger ALL teammates read 15 16// append ONE receipt to `ledger` (atomic). caller-supplied ts (for determinism in gates). Returns fa_appendz rc. 17func rcpt_emit_to(ledger: *u8, ts: i64, actor: *u8, op: *u8, target: *u8, verdict: *u8, detail: *u8) -> i64 { 18 let cap: i64 = RCPT_MAGIC_1024 19 let rec: *u8 = sys_mmap(cap + 32) 20 var o: i64 = 0 21 o = fa_catn(rec, o, ts); rec[o] = 9 as u8; o = o + 1 22 o = fa_cat(rec, o, actor); rec[o] = 9 as u8; o = o + 1 23 o = fa_cat(rec, o, op); rec[o] = 9 as u8; o = o + 1 24 o = fa_cat(rec, o, target); rec[o] = 9 as u8; o = o + 1 25 o = fa_cat(rec, o, verdict); rec[o] = 9 as u8; o = o + 1 26 o = fa_cat(rec, o, detail) 27 rec[o] = 0 as u8 28 return fa_appendz(ledger, rec, cap) 29} 30// the live emit: real clock -> the canonical workstream ledger. Op-organs call THIS on completion. 31func rcpt_emit(actor: *u8, op: *u8, target: *u8, verdict: *u8, detail: *u8) -> i64 { 32 return rcpt_emit_to(RCPT_LEDGER, sys_now_realtime_sec(), actor, op, target, verdict, detail) 33} 34// leak-free bounded read of a ledger into a REUSED buffer; returns bytes (>=0) or -1. 35func rcpt_read(path: *u8, out: *u8, cap: i64) -> i64 { 36 let fd: i64 = sys_openat_rd(path) 37 if fd < 0 { return 0 - 1 } 38 var total: i64 = 0; var go: i64 = 1 39 while go == 1 { 40 let base: i64 = out as i64 41 let tail: *u8 = (base + total) as *u8 42 let nr: i64 = sys_read(fd, tail, cap - total) 43 if nr <= 0 { go = 0 } 44 if nr > 0 { total = total + nr } 45 if total >= cap { go = 0 } 46 } 47 sys_close(fd) 48 return total 49} 50// count well-formed receipts (a 6th field present => valid row); '#' comment lines + blanks skipped. 51func rcpt_count(buf: *u8, n: i64) -> i64 { 52 let fs: *i64 = sys_mmap(8); let fe: *i64 = sys_mmap(8) 53 var ls: i64 = 0; var c: i64 = 0 54 while ls < n { 55 let le: i64 = slk_line_end(buf, n, ls) 56 if le > ls { if buf[ls] != (35 as u8) { if slk_field(buf, ls, le, 5, fs, fe) == 1 { c = c + 1 } } } 57 ls = le + 1 58 } 59 return c 60} 61// count receipts whose verdict field (index 4) equals `verdict` -- e.g. how many REJECTED/FAILED (health check). 62func rcpt_count_verdict(buf: *u8, n: i64, verdict: *u8, vlen: i64) -> i64 { 63 let fs: *i64 = sys_mmap(8); let fe: *i64 = sys_mmap(8) 64 var ls: i64 = 0; var c: i64 = 0 65 while ls < n { 66 let le: i64 = slk_line_end(buf, n, ls) 67 if le > ls { if buf[ls] != (35 as u8) { 68 if slk_field(buf, ls, le, 4, fs, fe) == 1 { 69 if slk_eq(slk_at(buf, fs[0]), fe[0] - fs[0], verdict, vlen) == 1 { c = c + 1 } 70 } 71 } } 72 ls = le + 1 73 } 74 return c 75}