nx_site_publish_legacy_gate_t26.nx
buildroot/runtime/nx_site_publish_legacy_gate_t26.nx
about
nx_site_publish_gate.nx -- gates artifact-publish placement semantics on a THROWAWAY CWD (the docroot
is CWD-relative sites/): fresh publish lands byte-identical; republish preserves .prev AND lands v2;
traversal ('..', absolute) DENIED with NOTHING written; secret-needle relpath DENIED via the IO layer;
absent source honest ABSENT. Runner: mkdir a scratch dir, cd into it, run. Exit 0 only on all-PASS.
license_tier: ORIGINAL expect_exit: 0
dependencies 3 imports · 0 importers
imports: nx_site_publish_lib.nxnx_seg_store.nxnx_gate_verdict.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 10 | const SG_CASES: *u8 = "fresh-publish-lands\nfirst-publish-retry-does-not-create-prev\nrepublish-preserves-prev\nchanged-publish-retry-retains-rollback\nbinary-difference-after-nul-and-retry\nrelpath-traversal-denied\nabsolute-site-denied\nordinary-key-name-allowed\nsecret-relpath-denied\nabsent-source-honest\nmissing-parent-dir-fails-loud\nguarded-create-exact\nwrong-artifact-pin-retains-live\nstale-live-pin-retains-live\nguarded-change-retains-predecessor\nguarded-retry-original-precondition\nguarded-reverse-retains-replaced-version\ncontended-target-refuses-without-wait\nreleased-lock-allows-retry\noversized-path-refused-before-construction\nstage-wrong-pin-creates-no-candidate\nstage-exact-candidate\nstage-retry-preserves-candidate\nstage-replacement-refused\nlegacy-publish-cannot-overwrite-staging\nguarded-publish-cannot-overwrite-staging\nstage-refuses-live-route\nstaging-alias-overwrites-refused\nregistered-site-config-written\nregistered-site-plane-seeded\nunregistered-stage-refused-without-placement\nrelease-identity-registered\nlegacy-publish-cannot-ignore-registered-hash\nregistered-stage-places-exact-bytes\nregistered-stage-retry-keeps-predecessor-absent\nconflicting-registration-cannot-authorize-replacement\n" as *u8 |
| 12 | const SG_ARG_CELL_BYTES: i64 = 8 // native x86-64 argv uses i64 pointer cells |
| 13 | const SG_ARGV_BYTES: i64 = (PB_GUARDED_ARGC + 1) * SG_ARG_CELL_BYTES |
functions
| 15 | func sg_check(name: *u8, ok: i64, pass: *i64) -> i64 |
| 18 | func sg_run(src: *u8, site: *u8, rel: *u8) -> i64 called by 1: main |
| 29 | func sg_eq(path: *u8, expect: *u8) -> i64 |
| 32 | func sg_eq_bytes(path: *u8, expect: *u8, expected_bytes: i64) -> i64 |
| 41 | func sg_absent(path: *u8) -> i64 called by 1: main |
| 49 | func main(argc: i64, argv: *i64) -> i64 |