code wiki / (root) / nx_chargen_param_gate.nx

nx_chargen_param_gate.nx

buildroot/runtime/nx_chargen_param_gate.nx

12837 B256 linesdepth 3pulls 4 transitivereach 0 importersview sourcekind gate/proof
docsdependenciesstructsconstsfunctions

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

nx_syscalls.nx nx_gate_verdict.nx nx_gatekit_lib.nx nx_chargen_param_gate.nx

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

main gv_head gv_puts sys_write gv_ctr sys_mmap nxa_die sys_write ↻ sys_exit nxa_lock_take nxa_lock_addr sys_write ↻ nxa_lock_give nxa_lock_addr ↻ nxa_report_overrun sys_write ↻ nxa_dump_printable sys_write ↻ nxa_dump_sizes sys_write ↻ sys_mkdir sys_mmap ↻ cg_conf_num sys_mmap ↻ sys_read_file sys_openat_rd sys_lseek sys_mmap ↻ sys_read sys_munmap sys_close cg_num_after cg_slen gv_puts ↻ gv_num sys_mmap ↻ sys_write ↻ sys_munmap ↻ gv_check gv_puts ↻

structs

none

consts

35const CG_ELF: *u8 = "./nx_body_gen.elf"
36const CG_DIR: *u8 = "/tmp/nxcgp"
37const CG_CONF: *u8 = "knowledge/rigfloor_msh.conf"
38const CG_CAP: i64 = 65536
39const CG_MAXN: i64 = 64
44const CG_H: *u8 = "1700"

functions

46func 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
49func cg_num_after(buf: *u8, n: i64, key: *u8) -> i64
called by 2: cg_conf_nummain calls 1: cg_slen
74func cg_itoa(v: i64, out: *u8) -> *u8
called by 2: cg_genmain
87func cg_conf_num(key: *u8) -> i64
94func cg_same(a: *u8, b: *u8) -> i64
called by 1: main calls 2: sys_mmapsys_read_file
110func cg_gen(out: *u8, radial: i64, buf: *u8, bl: *i64, sbuf: *u8) -> i64
called by 1: main calls 2: gk_run_capturecg_itoa
116func main(argc: i64, argv: *i64) -> i64