code wiki / _hdl_build / nx_pub_drain_diag.nx

nx_pub_drain_diag.nx source

↩ module page · 89 lines · 6340 B

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