nx_provclass_gate.nx
buildroot/runtime/nx_provclass_gate.nx
about
nx_provclass_gate.nx -- proves the provenance-class ruler tightens without breaking anything.
THE RISK THIS HOLDS DOWN. nx_provclass_lib adds a SECOND admission axis beside nx_refcorpus's
payload wall. A second wall in front of a live journal is exactly the change that silently refuses
work that used to pass -- and the live journal already carries FIVE licence vocabularies nobody
declared (ORIGINAL, sovereign, royalty-free, CC-BY-mixed, REFERENCE_MEASURED). So the load-bearing
tooth here is not "does the classifier work"; it is T2: EVERY DISTINCT LICENCE TAG IN THE LIVE
JOURNAL STILL CLASSIFIES. That is a POPULATION check over the real file, not a hand-listed sample,
because a name list of tags would go stale the same way every name list in this estate has.
THE DISCRIMINATING PAIR is T5/T6: the SAME tag `unverified` must REFUSE at n=8 and ADMIT at n=32.
n=8 clears nx_refcorpus's global RC_KMIN, so if the raised per-class floor were not actually
binding, T5 would pass anyway and the whole class distinction would be decoration. One tag, two
sample sizes, opposite verdicts -- that is the only shape that proves the floor binds.
T9 is the STRICTLY-ADDITIVE proof: no declared class may carry a floor BELOW RC_KMIN=8. This lib is
allowed to tighten admission and never to loosen it, and a conf edit is exactly how someone would
loosen it by accident.
BITE NOTE 2026-09-03: on its FIRST run (laptop, no journal present) this gate went 15/16 RED on
`journal-population-was-actually-read` while `every-live-journal-licence-tag-classifies` scored a
VACUOUS actual=0 expected=0 PASS. The anti-vacuity tooth caught its own author on the first run,
which is exactly the case it exists for.
license_tier: ORIGINAL expect_exit: 0
dependencies 3 imports · 0 importers
imports: nx_syscalls.nxnx_gate_verdict.nxnx_provclass_lib.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
| 30 | const PG_JRNL: *u8 = "knowledge/status/refcorpus.jrnl" |
| 31 | const PG_JRNL_ALT: *u8 = "buildroot/knowledge/status/refcorpus.jrnl" |
| 32 | const PG_TAB: i64 = 9 |
| 33 | const PG_NL: i64 = 10 |
| 34 | const PG_LIC_FIELD: i64 = 7 |
| 35 | const PG_RC_KMIN: i64 = 8 |
| 36 | const PG_TAGBUF: i64 = 128 |
functions
| 38 | func pg_eol(buf: *u8, n: i64, from: i64) -> i64 called by 1: main |
| 49 | func pg_field(buf: *u8, s: i64, e: i64, want: i64, out: *u8) -> i64 called by 1: main |
| 74 | func main() -> i64 |