nx_nxa_play_gate.nx
buildroot/runtime/nx_nxa_play_gate.nx
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
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
| 26 | const NG_ELF: *u8 = "./nx_nxa_play.elf" |
| 27 | const NG_RIG: *u8 = "sites/nishifamily/world/ref9d.nxa" |
| 30 | const NG_NORIG: *u8 = "sites/nishifamily/world/ref.nxa" |
| 31 | const NG_POSE: *u8 = "0" |
| 32 | const NG_CAP: i64 = 65536 |
| 33 | const NG_INFLUENCES: i64 = 4 |
| 35 | const NG_IDENT_BOUND: i64 = NG_INFLUENCES + 1 |
| 36 | const NG_EXIT_NOSEC: i64 = 5 |
functions
| 38 | func ng_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } |
| 40 | func ng_run(asset: *u8, pose: *u8, buf: *u8, blen: *i64) -> i64 |
| 45 | func ng_num_after(buf: *u8, n: i64, key: *u8) -> i64 |
| 71 | func ng_has(buf: *u8, n: i64, ned: *u8) -> i64 |
| 83 | func main() -> i64 |