nx_chargen_param_gate.nx
buildroot/runtime/nx_chargen_param_gate.nx
about
nx_chargen_param_gate.nx -- CHARACTER-GEN-PARAMETRIC: a parameter vector becomes a DISTINCT,
VALID character, reproducibly, across a RANGE -- proven end-to-end on the PROMOTED generator.
WHY THIS GATE EXISTS (measured 2026-08-23, not assumed). nx_gamebench row 22
(character-gen-parametric, capv[22]=1 PARTIAL) was the board's LAST gap and the entire
gap_queue. It is also the ONLY capability row in the whole board carrying NO reason: every
neighbour that reached HAVE cites the same shape -- "flipped GAP->HAVE <date>: <organ>
(certified part) + <gate> N/N GREEN, mutation-proven (<the mutant that drove it RED>)".
nx_catalog measured the actual gap: the generators are LIVE (nx_body_gen PROMOTED+REGISTERED
77455 B, nx_body_proc PROMOTED+REGISTERED 75120 B) while nx_body_proc_gate / nx_bodygen_gate /
nx_charactergen_gate are ALL **ABSENT**. The capability was never the missing thing; the proof
binding it to the board was. This gate is that binding.
Subject: ./nx_body_gen.elf -- the SERVING-ROOT binary, forked e2e (never an in-process
re-derive) through gk_run_capture, the estate's deadlock-proven subprocess primitive. A
hand-rolled pipe/fork/wait in a sibling gate wedged for 50+ minutes in production today
(pid 2240, utime=0, wchan=pipe_wait, artifact frozen at its header): fixtures and subprocess
come from nx_gatekit_lib, and this gate never re-rolls them.
EVERY BOUND HERE IS READ OR MEASURED, NONE IS PICKED:
* N (how many characters) is READ from the reference corpus that DEFINES validity
(knowledge/rigfloor_msh.conf n_read). The generated set must be able to express at least
the width of the corpus that defines "valid"; a smaller N could not.
* the validity band (tris/parts) is READ from that same conf -- the floor organ owns those
numbers, this gate restates none of them.
* the radial sweep range is DERIVED AT RUNTIME from the generator's OWN reported defaults
(a probe run with radial omitted makes the organ report radial0/tris0), scaled onto the
floor's band. That linear sampling model is a HEURISTIC FOR CHOOSING SAMPLES ONLY -- its
correctness is not assumed, it is CHECKED by the in-band tooth on every generated asset.
dependencies 3 imports · 0 importers
imports: nx_syscalls.nxnx_gate_verdict.nxnx_gatekit_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
| 35 | const CG_ELF: *u8 = "./nx_body_gen.elf" |
| 36 | const CG_DIR: *u8 = "/tmp/nxcgp" |
| 37 | const CG_CONF: *u8 = "knowledge/rigfloor_msh.conf" |
| 38 | const CG_CAP: i64 = 65536 |
| 39 | const CG_MAXN: i64 = 64 |
| 44 | const CG_H: *u8 = "1700" |
functions
| 46 | func cg_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } called by 1: cg_num_after |
| 49 | func cg_num_after(buf: *u8, n: i64, key: *u8) -> i64 |
| 74 | func cg_itoa(v: i64, out: *u8) -> *u8 |
| 87 | func cg_conf_num(key: *u8) -> i64 |
| 94 | func cg_same(a: *u8, b: *u8) -> i64 |
| 110 | func cg_gen(out: *u8, radial: i64, buf: *u8, bl: *i64, sbuf: *u8) -> i64 |
| 116 | func main(argc: i64, argv: *i64) -> i64 |