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}