code wiki / _hdl_build / nx_wiki_publish_nist_stem.nx
nx_wiki_publish_nist_stem.nx source
↩ module page · 58 lines · 3292 B
1// nx_wiki_publish_nist_stem.nx -- LIVE PROOF runner for A3: re-publish web_assets/nist_stem.html through
2// the guarded wrapper pub_publish() with do_push_flag=1. Expects guard ALLOW -> push to the SERVED wiki
3// doc-root. ADDITIVE + IDEMPOTENT: re-streams the SAME page to /wiki/nist_stem.html only; no other page is
4// touched. Prints the guard verdict, status, bytes, push_invoked and push_rc as RAW proof. The fetch-verify
5// (curl 200 + byte-count) is done by the operator after this run. license_tier: ORIGINAL
6import "nx_wiki_publish.nx"
7import "nx_syscalls.nx"
8
9func r_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
10func r_num(v: i64) -> i64 {
11 let bb: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { m = 0 - m }
12 let t: *u8 = sys_mmap(28); var k: i64 = 0
13 if m == 0 { t[0] = 48 as u8; k = 1 }
14 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
15 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
16 sys_write(1, bb, k); return 0
17}
18func r_codename(v: i64) -> *u8 {
19 if v == PG_ALLOW { return "ALLOW" as *u8 }
20 if v == PG_REJECT_NO_FRESHNESS { return "REJECT NO_FRESHNESS" as *u8 }
21 if v == PG_REJECT_DANGLING_CITE { return "REJECT DANGLING_CITE" as *u8 }
22 if v == PG_REJECT_DEAD_LINK { return "REJECT DEAD_LINK" as *u8 }
23 if v == PG_REJECT_PLACEHOLDER { return "REJECT PLACEHOLDER" as *u8 }
24 return "UNKNOWN" as *u8
25}
26
27func main() -> i64 {
28 // corpus = the verified-LIVE published wiki set (each fetch-verified 200). nist_stem.html links to
29 // /wiki/charter, /wiki/start, /wiki/search, /wiki/nist_stem -- all must be in the corpus or the guard
30 // returns DEAD_LINK. search is INCLUDED because the page links to it and it is live (verified).
31 let cs_ptr: *i64 = sys_mmap(8 * 16) as *i64
32 let cs_len: *i64 = sys_mmap(8 * 16) as *i64
33 cs_ptr[0] = "start" as *u8 as i64; cs_len[0] = 5
34 cs_ptr[1] = "charter" as *u8 as i64; cs_len[1] = 7
35 cs_ptr[2] = "board" as *u8 as i64; cs_len[2] = 5
36 cs_ptr[3] = "devlog" as *u8 as i64; cs_len[3] = 6
37 cs_ptr[4] = "nist_stem" as *u8 as i64; cs_len[4] = 9
38 cs_ptr[5] = "roadmap" as *u8 as i64; cs_len[5] = 7
39 cs_ptr[6] = "search" as *u8 as i64; cs_len[6] = 6
40 let ncorpus: i64 = 7
41
42 let res: *PubResult = sys_mmap(64) as *PubResult
43 r_w("[A3 LIVE] publishing web_assets/nist_stem.html -> /wiki/nist_stem.html via guarded wrapper\n" as *u8)
44 pub_publish("web_assets/nist_stem.html" as *u8, "nist_stem" as *u8, cs_ptr, cs_len, ncorpus, 1, res)
45
46 r_w("[A3 LIVE] guard_verdict=" as *u8); r_w(r_codename(res.code)); r_w("\n" as *u8)
47 r_w("[A3 LIVE] status=" as *u8); r_w(pub_status_name(res.status)); r_w("\n" as *u8)
48 r_w("[A3 LIVE] bytes=" as *u8); r_num(res.bytes); r_w("\n" as *u8)
49 r_w("[A3 LIVE] push_invoked=" as *u8); r_num(res.push_invoked); r_w("\n" as *u8)
50 r_w("[A3 LIVE] push_rc=" as *u8); r_num(res.push_rc); r_w("\n" as *u8)
51
52 if res.status == PUB_PUBLISHED {
53 if res.push_rc == 0 { r_w("[A3 LIVE] RESULT=PUBLISHED-OK\n" as *u8); sys_exit(0); return 0 }
54 r_w("[A3 LIVE] RESULT=PUSH-INVOKED-NONZERO-RC\n" as *u8); sys_exit(1); return 1
55 }
56 r_w("[A3 LIVE] RESULT=NOT-PUBLISHED\n" as *u8)
57 sys_exit(1); return 1
58}