code wiki / (root) / nx_nxa_play_gate.nx

nx_nxa_play_gate.nx

buildroot/runtime/nx_nxa_play_gate.nx

8408 B147 linesdepth 3pulls 4 transitivereach 0 importersview sourcekind gate/prooftopic nxa
docsdependenciesstructsconstsfunctions

about

nx_nxa_play_gate.nx -- THE POSE PLAYER GATE: skinning is JOINT-DRIVEN, deterministic, bounded at identity, and refuses an unrigged asset by name -- each proven on REAL corpus artifacts. Subject: ./nx_nxa_play.elf (the serving-root binary; e2e fork via nx_gatekit_lib's proven capture, never a hand-rolled pipe -- a v1 of a sibling gate deadlocked in pipe_wait for 50+ minutes on exactly that mistake, and the banked law is that fixtures and subprocess come from nx_gatekit_lib). THE ANTI-VACUITY TOOTH IS SPREAD, NOT MOTION. "The mesh moved" is passed by a global translate and by uniform jitter -- neither is skinning. A joint-driven deformation moves different vertices by DIFFERENT amounts (a shoulder swings the hand far, the hip barely at all), so max-min displacement is strictly positive; a whole-mesh shove makes every vertex travel the same distance and collapses that spread to ZERO. This gate therefore asserts SPREAD, which the trivial wrong implementation cannot produce. IDENTITY IS BOUNDED, NOT EXACT, AND THE BOUND IS DERIVED. Applying the identity pose does NOT reproduce bind pose bit-for-bit: nx_skeleton blends in fx256 and truncates once per influence in `w * (...) / 256`, plus once in the matvec, so the worst-case residual is INFLUENCES + 1 = 5 model units. Measured across all 16 corpus rigs (14,164 to 423,919 verts) the actual floor is a stable 3. The tooth asserts the DERIVED bound of 5 and PRINTS the observed value, so a regression that pushes residue past truncation noise fails while honest rounding passes. This floor is also the CONTROL for any future twist/volume claim: a real LBS artifact must exceed it to be real at all.

dependencies 3 imports · 0 importers

nx_syscalls.nx nx_gate_verdict.nx nx_gatekit_lib.nx nx_nxa_play_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_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 ↻ gv_puts sys_write ↻ sys_mmap ↻ ng_run gk_run_capture gk_run_cap2 gk_run_cap3 sys_mmap ↻ sys_pipe2 sys_fork sys_close sys_setpgid sys_openat_rd sys_dup3 sys_execve sys_exit ↻ sys_sleep_ms sys_mmap ↻ sys_munmap nx_kill sys_now_realtime_ms sys_mmap ↻ sys_clock_gettime_real

structs

none

consts

26const NG_ELF: *u8 = "./nx_nxa_play.elf"
27const NG_RIG: *u8 = "sites/nishifamily/world/ref9d.nxa"
30const NG_NORIG: *u8 = "sites/nishifamily/world/ref.nxa"
31const NG_POSE: *u8 = "0"
32const NG_CAP: i64 = 65536
33const NG_INFLUENCES: i64 = 4
35const NG_IDENT_BOUND: i64 = NG_INFLUENCES + 1
36const NG_EXIT_NOSEC: i64 = 5

functions

38func ng_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
called by 2: ng_num_afterng_has
40func ng_run(asset: *u8, pose: *u8, buf: *u8, blen: *i64) -> i64
called by 1: main calls 1: gk_run_capture
45func ng_num_after(buf: *u8, n: i64, key: *u8) -> i64
called by 1: main calls 1: ng_slen
71func ng_has(buf: *u8, n: i64, ned: *u8) -> i64
called by 1: main calls 1: ng_slen
83func main() -> i64