code wiki / _hdl_build / nx_pub_rollout.nx

nx_pub_rollout.nx source

↩ module page · 52 lines · 3536 B

1import "nx_gate_gn.nx" 2import "nx_gate_base.nx" 3// nx_pub_rollout.nx -- READ-ONLY rollout planner: pub_status + pub_dryrun over the CANONICAL queue/ledger, so the 4// operator sees exactly what the publisher would ship (e.g. the 43 queued docpub requests) WITHOUT any live write. 5// The wet ship is pub_run_governed (outward = operator-approved). license_tier: ORIGINAL expect_exit: 0 6import "nx_syscalls.nx" 7import "nx_publisher.nx" 8 9func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" 10" as *u8); return ok } 11 12func main() -> i64 { 13 pub_init() 14 gw("=== NISHI PUBLISHER ROLLOUT PLAN (read-only dry-run over the canonical queue) ===\n" as *u8) 15 let st: *i64 = sys_mmap(64) as *i64 16 pub_status("knowledge/publish/queue.tsv" as *u8, "knowledge/publish/ledger.tsv" as *u8, "knowledge/publish/approvals" as *u8, st) 17 gw(" queue PENDING=" as *u8); gn(st[0]); gw(" ledger PUBLISHED=" as *u8); gn(st[1]); gw(" ready=" as *u8); gn(st[2]); gw(" held(outward-unapproved)=" as *u8); gn(st[3]); gw(" idempotent-skip=" as *u8); gn(st[4]); gw("\n" as *u8) 18 let plan: *i64 = sys_mmap(64) as *i64 19 let would: i64 = pub_dryrun("knowledge/publish/queue.tsv" as *u8, "knowledge/publish/ledger.tsv" as *u8, "knowledge/publish/approvals" as *u8, plan) 20 gw(" DRY-RUN: would publish " as *u8); gn(would); gw(" now (held=" as *u8); gn(plan[2]); gw(", idempotent-skip=" as *u8); gn(plan[3]); gw(")\n" as *u8) 21 22 // SRC-ARTIFACT READINESS: for each READY request, does its src file actually exist on disk? (would the deploy land?) 23 let lenp: *i64 = sys_mmap(8) as *i64 24 let data: *u8 = sys_read_file("knowledge/publish/queue.tsv" as *u8, lenp) 25 var ready_src: i64 = 0; var ready_missing: i64 = 0 26 if (data as i64) != 0 { 27 let n: i64 = lenp[0] 28 let stf: *u8 = sys_mmap(64); let sha: *u8 = sys_mmap(256); let src: *u8 = sys_mmap(512); let dest: *u8 = sys_mmap(256); let pol: *u8 = sys_mmap(64) 29 var i: i64=0; var ls: i64=0 30 while i < n { 31 if data[i]==(10 as u8) { 32 let line: *u8 = ((data as i64)+ls) as *u8; let ll: i64 = i-ls 33 pub_field(line, ll, 0, stf) 34 if pub_streq(stf, "PENDING" as *u8)==1 { 35 pub_field(line, ll, 3, sha); pub_field(line, ll, 4, src); pub_field(line, ll, 5, dest); pub_field(line, ll, 6, pol) 36 if pub_policy_allows(pol, sha, "knowledge/publish/approvals" as *u8)==1 { 37 if pub_led_has("knowledge/publish/ledger.tsv" as *u8, sha, dest)==0 { 38 if pub_exists(src)==1 { ready_src = ready_src + 1 } else { ready_missing = ready_missing + 1 } 39 } 40 } 41 } 42 ls = i + 1 43 } 44 i = i + 1 45 } 46 } 47 gw(" SRC-READINESS of the ready set: artifacts-present=" as *u8); gn(ready_src); gw(" artifacts-MISSING=" as *u8); gn(ready_missing); gw("\n" as *u8) 48 if ready_missing == 0 { if ready_src > 0 { gw(" => SHIPPABLE NOW: all ready artifacts exist -> pub_run_governed would deploy " as *u8); gn(ready_src); gw(" (verify+atomic-promote+ledger, reversible).\n" as *u8) } } 49 if ready_missing > 0 { gw(" => BLOCKED: regenerate missing src artifacts first (docs-arc: nx_docpub_site + nx_docpub_tree).\n" as *u8) } 50 gw(" READ-ONLY: no live writes, ledger untouched. Wet ship = pub_run_governed (internal proceeds; outward needs operator approval).\n" as *u8) 51 return 0 52}