code wiki / _hdl_build / nx_pub_audit_gate.nx
nx_pub_audit_gate.nx source
↩ module page · 53 lines · 3872 B
1// nx_pub_audit_gate.nx -- R11 PROOF: audit query (provenance) + changelog (release notes) over the ledger.
2//
3// Seeds a known ledger (3 releases: a.html, b.html for site games; c.html for site site), then asserts:
4// pub_audit_query -- a published dest returns 1 + its sha; an unpublished dest returns 0 (no false positive).
5// pub_query_count_site -- per-site release counts are exact.
6// pub_changelog -- the projected release notes contain the real dest + sha.
7// Liar-kill: an absent dest must NOT be reported published, and a nonexistent site must count 0. File-based.
8// license_tier: ORIGINAL expect_exit: 0
9import "nx_syscalls.nx"
10import "nx_publisher.nx"
11import "nx_runpath.nx"
12
13func g_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
14func g_n(v: i64) -> i64 { var m: i64=v; if m<0{g_w("-" as *u8);m=0-m} let t:*u8=sys_mmap(24); 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; let o:*u8=sys_mmap(24); while i<k{o[i]=t[k-1-i];i=i+1} sys_write(1,o,k); return 0 }
15func g_row(id: *u8, ok: i64, pass: *i64) -> i64 { g_w(" " as *u8); g_w(id); g_w(": " as *u8); if ok==1 { g_w("OK\n" as *u8); pass[0]=pass[0]+1 } else { g_w("FAIL\n" as *u8) } return 0 }
16func g_unlink(path: *u8) -> i64 { __syscall(87, path as i64, 0, 0, 0, 0, 0); return 0 }
17
18func main() -> i64 {
19 let pass: *i64 = sys_mmap(8) as *i64; pass[0]=0
20 g_w("=== NX-PUB-AUDIT GATE (provenance query + changelog over the append-only ledger) ===\n" as *u8)
21 let wsid: *u8 = sys_mmap(64); rp_wsid(wsid); rp_ensure(wsid)
22 let D: *u8 = sys_mmap(512); rp_path(wsid, "pau" as *u8, D); __syscall(83, D as i64, 493, 0, 0, 0, 0)
23 let ledpath: *u8 = sys_mmap(700); pub_join(D, "ledger.tsv" as *u8, ledpath)
24 g_unlink(ledpath) // clean slate (unlink, not "" -- empty literal aliases rodata)
25
26 pub_record_ledger(ledpath, "shaAAAA" as *u8, "a.html" as *u8, "games" as *u8)
27 pub_record_ledger(ledpath, "shaBBBB" as *u8, "b.html" as *u8, "games" as *u8)
28 pub_record_ledger(ledpath, "shaCCCC" as *u8, "c.html" as *u8, "site" as *u8)
29
30 let outsha: *u8 = sys_mmap(256)
31 let q_a: i64 = pub_audit_query(ledpath, "a.html" as *u8, outsha)
32 let a_ok: i64 = ((q_a==1) as i64) & (pub_streq(outsha, "shaAAAA" as *u8))
33 let q_miss: i64 = pub_audit_query(ledpath, "zzz.html" as *u8, outsha) // not published
34 let games_n: i64 = pub_query_count_site(ledpath, "games" as *u8)
35 let site_n: i64 = pub_query_count_site(ledpath, "site" as *u8)
36 let nope_n: i64 = pub_query_count_site(ledpath, "nope" as *u8)
37 let cl: *u8 = sys_mmap(8192)
38 let cllen: i64 = pub_changelog(ledpath, cl, 8192)
39 let cl_has: i64 = ((pub_substr(cl, cllen, "a.html" as *u8)==1) as i64) & ((pub_substr(cl, cllen, "shaAAAA" as *u8)==1) as i64)
40
41 g_w(" query a.html=" as *u8); g_n(q_a); g_w(" sha='" as *u8); g_w(outsha); g_w("' query zzz.html=" as *u8); g_n(q_miss); g_w("\n" as *u8)
42 g_w(" count games=" as *u8); g_n(games_n); g_w(" site=" as *u8); g_n(site_n); g_w(" nope=" as *u8); g_n(nope_n); g_w(" changelog_bytes=" as *u8); g_n(cllen); g_w("\n" as *u8)
43
44 g_row("AUDIT QUERY: published dest a.html -> 1 + correct sha (shaAAAA)" as *u8, a_ok, pass)
45 g_row("LIAR-KILL: unpublished dest zzz.html -> 0 (no false positive)" as *u8, (q_miss==0) as i64, pass)
46 g_row("COUNT per-site exact: games=2, site=1" as *u8, ((games_n==2) as i64) & ((site_n==1) as i64), pass)
47 g_row("LIAR-KILL: nonexistent site -> 0 (no fabricated history)" as *u8, (nope_n==0) as i64, pass)
48 g_row("CHANGELOG release notes contain the real dest + sha" as *u8, cl_has, pass)
49
50 g_w("NX-PUB-AUDIT rows=5 pass=" as *u8); g_n(pass[0])
51 if pass[0]==5 { g_w(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 }
52 g_w(" verdict=RED\n" as *u8); sys_exit(1); return 1
53}