code wiki / _hdl_build / nx_lipratio_gate.nx
nx_lipratio_gate.nx
buildroot/runtime/_hdl_build/nx_lipratio_gate.nx
about
nx_lipratio_gate.nx -- GATE for the buildable half of aesthetictwin rung AT4: lip vermilion heights
and the upper-to-lower ratio, measured from the BLENDED SURFACE rather than from the part table.
THE LOAD-BEARING TOOTH IS T4, AND IT IS THE RUNG'S DONE-RULE STATED AS AN EXPERIMENT. That rule says
the axis must be "read from mesh landmarks and NOT from slider positions". Those two are
indistinguishable on a healthy face -- both give a plausible number -- so the only way to tell them
apart is to CHANGE THE GEOMETRY AND SEE WHICH ONE MOVES. T4 halves the lip parts' vertical radius and
requires the measured ratio to change. The estate's existing nx_faceprofile_gate reads lip depth as
p[10*6+2], a part-table field that halving ry does not touch at all, so it would sail through T4
unchanged -- which is precisely the defect this rung exists to close.
T3 is the other half of the same idea from the opposite direction: the stomion this gate EXTRACTED
from the surface must agree with the parameter that CARVED it, within a tolerance DERIVED from that
carve's own radius plus the blend width rather than typed as a constant. Extraction and parameter
are two independent routes to one landmark, so their agreement is a free audit and their
disagreement would locate a real defect in whichever is wrong.
T5 is the negative control and it is REACHABLE, not decorative: shrunk to a tenth, the face no longer
intersects the midline band at all, every probe returns no-surface, and the measure must report
UNMEASURED rather than a number. A measure that answered anyway would be reading its own parameters.
dependencies 4 imports · 0 importers
imports: nx_syscalls.nxnx_gate_verdict.nxnx_gatekit_lib.nxnx_faceanat.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 LG_ASCII0: i64 = 48 |
| 27 | const LG_MINUS: i64 = 45 |
| 28 | const LG_NL: i64 = 10 |
| 29 | const LG_MOUTH_CARVE: i64 = 20 |
| 30 | const LG_LIP_UPPER: i64 = 10 |
| 31 | const LG_LIP_LOWER: i64 = 11 |
| 32 | const LG_HALF: i64 = 50 |
| 33 | const LG_TENTH: i64 = 10 |
| 34 | const LG_PART_CY: i64 = 1 |
| 35 | const LG_PART_RY: i64 = 4 |
| 36 | const LG_FIELDS: i64 = 6 |
| 37 | const LG_PCT: i64 = 100 // the morphs' neutral percent |
functions
| 39 | func lg_pnum(tag: *u8, v: i64) -> i64 |
| 61 | func lg_abs(v: i64) -> i64 { if v < 0 { return 0 - v } return v } called by 1: main |
| 63 | func main(argc: i64, argv: *i64) -> i64 |