code wiki / _hdl_build / nx_pub_drain_diag.nx
nx_pub_drain_diag.nx source
↩ module page · 88 lines · 6207 B
1import "nx_gate_gn.nx"
2// nx_pub_drain_diag.nx -- ENGINEER diagnostic for the pub_run_governed wet-drain crash (tech debt). The publisher's
3// own e2e gate ships a FLAT dest under an ABSOLUTE liveroot, ONE item, "internal" policy -- and works. The meet ship
4// used a SUBDIR dest ("meet/index.html") under a RELATIVE root with "outward" -- and crashed. This isolates each
5// axis (A=absolute+flat baseline, B=absolute+SUBDIR, D=RELATIVE+flat) printing AFTER each, so whichever stops
6// printing is the culprit. Read-only diagnosis; no production paths touched. license_tier: ORIGINAL expect_exit: 0
7import "nx_syscalls.nx"
8import "nx_publisher.nx"
9import "nx_runpath.nx"
10
11func gp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
12func dmk(p: *u8) -> i64 { __syscall(83, p as i64, 493, 0, 0, 0, 0); return 0 }
13func djoin(d: *u8, name: *u8) -> *u8 { let p: *u8 = sys_mmap(700); pub_join(d, name, p); return p }
14func dwrite(path: *u8, content: *u8) -> i64 { let fd: i64 = sys_openat_wr(path, 0x1a4); if fd<0 { return 0 } var n: i64=0; while content[n]!=(0 as u8){n=n+1} sys_write(fd, content, n); sys_close(fd); return 1 }
15func dunlink(path: *u8) -> i64 { __syscall(87, path as i64, 0, 0, 0, 0, 0); return 0 }
16
17func main() -> i64 {
18 gp("=== nx_pub_drain_diag: isolate the pub_run_governed crash axis ===\n" as *u8)
19 let wsid: *u8 = sys_mmap(64); rp_wsid(wsid); rp_ensure(wsid)
20 let D: *u8 = sys_mmap(512); rp_path(wsid, "pdd" as *u8, D); dmk(D)
21 let stage: *u8 = djoin(D, "stage" as *u8); dmk(stage)
22 let live: *u8 = djoin(D, "live" as *u8); dmk(live)
23 let appr: *u8 = djoin(D, "appr" as *u8); dmk(appr)
24 let src: *u8 = djoin(D, "src.html" as *u8); dwrite(src, "DIAG-GOOD\n" as *u8)
25
26 // A: ABSOLUTE liveroot, FLAT dest, internal (the publisher e2e baseline -- expect published=1)
27 let qa: *u8 = djoin(D, "qa.tsv" as *u8); dunlink(qa)
28 let la: *u8 = djoin(D, "la.tsv" as *u8); dunlink(la)
29 pub_submit_to(qa, src, "pageA.html" as *u8, "site" as *u8, "ws" as *u8, "internal" as *u8)
30 gp(" A: absolute+flat+internal -> draining...\n" as *u8)
31 let pA: i64 = pub_run_governed(qa, la, stage, live, "pdd_la" as *u8, appr)
32 gp(" A published=" as *u8); gn(pA); gp("\n" as *u8)
33
34 // B: ABSOLUTE liveroot, SUBDIR dest, internal (the meet pattern axis)
35 let qb: *u8 = djoin(D, "qb.tsv" as *u8); dunlink(qb)
36 let lb: *u8 = djoin(D, "lb.tsv" as *u8); dunlink(lb)
37 pub_submit_to(qb, src, "sub/pageB.html" as *u8, "site" as *u8, "ws" as *u8, "internal" as *u8)
38 gp(" B: absolute+SUBDIR+internal -> draining...\n" as *u8)
39 let pB: i64 = pub_run_governed(qb, lb, stage, live, "pdd_lb" as *u8, appr)
40 gp(" B published=" as *u8); gn(pB); gp("\n" as *u8)
41
42 // D: RELATIVE liveroot, FLAT dest, internal (the other meet axis)
43 dmk("knowledge/publish/pdd_rel_stage" as *u8)
44 dmk("knowledge/publish/pdd_rel_live" as *u8)
45 let qd: *u8 = djoin(D, "qd.tsv" as *u8); dunlink(qd)
46 let ld: *u8 = djoin(D, "ld.tsv" as *u8); dunlink(ld)
47 pub_submit_to(qd, src, "pageD.html" as *u8, "site" as *u8, "ws" as *u8, "internal" as *u8)
48 gp(" D: RELATIVE+flat+internal -> draining...\n" as *u8)
49 let pD: i64 = pub_run_governed(qd, ld, "knowledge/publish/pdd_rel_stage" as *u8, "knowledge/publish/pdd_rel_live" as *u8, "pdd_ld" as *u8, appr)
50 gp(" D published=" as *u8); gn(pD); gp("\n" as *u8)
51
52 // E: OUTWARD policy + approve-by-sha, 1 item (the meet policy axis)
53 let qe: *u8 = djoin(D, "qe.tsv" as *u8); dunlink(qe)
54 let le: *u8 = djoin(D, "le.tsv" as *u8); dunlink(le)
55 let shae: *u8 = sys_mmap(72); pub_sha_file(src, shae); pub_approve(shae, appr)
56 pub_submit_to(qe, src, "pageE.html" as *u8, "site" as *u8, "ws" as *u8, "outward" as *u8)
57 gp(" E: outward+approve, 1 item -> draining...\n" as *u8)
58 let pE: i64 = pub_run_governed(qe, le, stage, live, "pdd_le" as *u8, appr)
59 gp(" E published=" as *u8); gn(pE); gp("\n" as *u8)
60
61 // F: MULTIPLE items (3), internal (the meet multi-item axis)
62 let qf: *u8 = djoin(D, "qf.tsv" as *u8); dunlink(qf)
63 let lf: *u8 = djoin(D, "lf.tsv" as *u8); dunlink(lf)
64 pub_submit_to(qf, src, "pageF1.html" as *u8, "site" as *u8, "ws" as *u8, "internal" as *u8)
65 pub_submit_to(qf, src, "pageF2.html" as *u8, "site" as *u8, "ws" as *u8, "internal" as *u8)
66 pub_submit_to(qf, src, "pageF3.html" as *u8, "site" as *u8, "ws" as *u8, "internal" as *u8)
67 gp(" F: 3 items internal -> draining...\n" as *u8)
68 let pF: i64 = pub_run_governed(qf, lf, stage, live, "pdd_lf" as *u8, appr)
69 gp(" F published=" as *u8); gn(pF); gp("\n" as *u8)
70
71 // G: the EXACT meet pattern -- 3 DISTINCT real srcs, outward+approve-each, SUBDIR dests, + 1 UNAPPROVED (distinct src)
72 let qg: *u8 = djoin(D, "qg.tsv" as *u8); dunlink(qg)
73 let lg: *u8 = djoin(D, "lg.tsv" as *u8); dunlink(lg)
74 let s1: *u8 = "web_assets/site_demo/index.html" as *u8; let h1: *u8 = sys_mmap(72)
75 if pub_sha_file(s1, h1) == 1 { pub_submit_to(qg, s1, "meet/index.html" as *u8, "meet" as *u8, "ws" as *u8, "outward" as *u8); pub_approve(h1, appr) }
76 let s2: *u8 = "web_assets/site_demo/jobs.html" as *u8; let h2: *u8 = sys_mmap(72)
77 if pub_sha_file(s2, h2) == 1 { pub_submit_to(qg, s2, "meet/jobs.html" as *u8, "meet" as *u8, "ws" as *u8, "outward" as *u8); pub_approve(h2, appr) }
78 let s3: *u8 = "web_assets/site_demo/apply.html" as *u8; let h3: *u8 = sys_mmap(72)
79 if pub_sha_file(s3, h3) == 1 { pub_submit_to(qg, s3, "meet/apply.html" as *u8, "meet" as *u8, "ws" as *u8, "outward" as *u8); pub_approve(h3, appr) }
80 pub_submit_to(qg, "web_assets/meet_demo.meet" as *u8, "meet/unapproved.html" as *u8, "meet" as *u8, "ws" as *u8, "outward" as *u8)
81 gp(" G: 3 distinct real srcs outward+approved + 1 unapproved, subdir dests -> draining...\n" as *u8)
82 let pG: i64 = pub_run_governed(qg, lg, stage, live, "pdd_lg" as *u8, appr)
83 gp(" G published=" as *u8); gn(pG); gp("\n" as *u8)
84
85 gp("DIAG COMPLETE: A=" as *u8); gn(pA); gp(" B=" as *u8); gn(pB); gp(" D=" as *u8); gn(pD); gp(" E=" as *u8); gn(pE); gp(" F=" as *u8); gn(pF); gp(" G=" as *u8); gn(pG); gp(" (LAST printed line = the crash axis)\n" as *u8)
86 sys_exit(0)
87 return 0
88}