nx_nxa_groom_gate.nx source
↩ module page · 369 lines · 14496 B
1// nx_nxa_groom_gate.nx -- THE GROOM GATE v3: anatomical invariants on a generated groom asset.
2//
3// WHY (operator 2026-08-26, twice in one day): first a backwards groom shipped because the referee
4// plot inherited the organ's own facing assumption; then a head-covering wrap shipped because 794
5// permil of synthesized roots sat INSIDE the skull and hair grew out of the volume. Both defects are
6// now BANKED REAL ASSETS and both are teeth here. v2 replaces the v1 facing basis (an extreme-extent
7// nose test, itself refuted: the dense face mesh drags the centroid so the sparse occiput measures
8// the larger extent) with the same basis the groom organ now uses: the estate rig convention
9// ANTERIOR-NEGATIVE = FACE, cross-checked by mesh density, refusing on disagreement.
10// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0
11import "nx_syscalls.nx"
12import "nx_gate_verdict.nx"
13
14const GG_SUBJECT: *u8 = "sites/nishifamily/world/ref9d.nxa"
15const GG_FIX_HIJAB: *u8 = "knowledge/banked_ref9d_hijab.nxa" // real defect 2: face-side roots + interior fill
16const GG_FIX_BACKWARDS: *u8 = "knowledge/banked_ref9d_backwards.nxa" // real defect 1: interior fill (its facing is the correct side)
17const GG_HDR: i64 = 32
18const GG_TOCE: i64 = 32
19const GG_WORDS: i64 = 24
20const GG_PTS: i64 = 8
21const GG_HEADBAND_PERMIL: i64 = 120
22const GG_MIN_STRANDS: i64 = 4800
23const GG_LEN_LO_PERMIL: i64 = 180
24const GG_LEN_HI_PERMIL: i64 = 400
25const GG_CONF_MAX_PERMIL: i64 = 1300
26const GG_FACE_CONE_PERMIL: i64 = 350
27const GG_EYE_DROP_PERMIL: i64 = 40
28const GG_FACE_MAX_PERMIL: i64 = 80
29// ON-SURFACE BY NEAREST NEIGHBOUR. The first draft binned the shell by octant x elevation and was
30// refuted by its own control: REAL surface roots read 764 permil interior, because a bin shared by
31// chin and scalp takes the chin's radius. The exact test for this asset class: distance to the
32// NEAREST head vert. Kept roots ARE verts (NN = 0); an on-shell synthetic sits within its jitter of
33// an anchor; an interior point is far from every vert. The bound is DERIVED per asset as twice the
34// mesh's own median inter-vert spacing -- no constant survives a re-mesh. Measured on the banked
35// wide-blend defect: 290 permil far; real roots 0.
36const GG_FAR_MAX_PERMIL: i64 = 100
37const GG_FAR_FIX_MIN_PERMIL: i64 = 200
38const GG_SPACING_SAMPLES: i64 = 128
39
40func gg_rd64(b: *u8, o: i64) -> i64 {
41 var v: i64 = 0
42 var k: i64 = 7
43 while k >= 0 { v = v*256 + (b[o + k] as i64); k = k - 1 }
44 return v
45}
46func gg_tageq(b: *u8, o: i64, t: *u8) -> i64 {
47 var i: i64 = 0
48 while i < 4 { if b[o + i] != t[i] { return 0 } i = i + 1 }
49 return 1
50}
51func gg_isqrt(n: i64) -> i64 {
52 if n <= 0 { return 0 }
53 var x: i64 = n
54 var y: i64 = (x + 1) / 2
55 while y < x { x = y; y = (x + n/x) / 2 }
56 return x
57}
58
59
60// one pass over an NXA: fills out[0..11] =
61// ok, antneg, antpos, front_roots, back_roots, nstr, meanlen_permil_of_span,
62// maxrootdist_permil_of_bandr, facecone_permil, span, far_from_surface_permil, spacing
63func gg_stats(path: *u8, out: *i64) -> i64 {
64 out[0] = 0
65 let lp: *i64 = sys_mmap(16) as *i64
66 let b: *u8 = sys_read_file(path, lp)
67 if (b as i64) == 0 { return 0 }
68 let ns: i64 = gg_rd64(b, 16)
69 if ns < 1 { return 0 }
70 var vo: i64 = 0 - 1
71 var ho: i64 = 0 - 1
72 var s: i64 = 0
73 while s < ns {
74 let e: i64 = GG_HDR + s*GG_TOCE
75 if gg_tageq(b, e, "VERT" as *u8) == 1 { vo = gg_rd64(b, e + 8) }
76 if gg_tageq(b, e, "HSTR" as *u8) == 1 { ho = gg_rd64(b, e + 8) }
77 s = s + 1
78 }
79 if vo < 0 { return 0 }
80 if ho < 0 { return 0 }
81 let nv: i64 = gg_rd64(b, vo)
82 let nstr: i64 = gg_rd64(b, ho)
83 if nv < 8 { return 0 }
84 if nstr < 1 { return 0 }
85 var mn0: i64 = 0
86 var mx0: i64 = 0
87 var mn1: i64 = 0
88 var mx1: i64 = 0
89 var mn2: i64 = 0
90 var mx2: i64 = 0
91 var first: i64 = 1
92 var i: i64 = 0
93 while i < nv {
94 let c0: i64 = gg_rd64(b, vo + 8 + (i*3)*8)
95 let c1: i64 = gg_rd64(b, vo + 8 + (i*3 + 1)*8)
96 let c2: i64 = gg_rd64(b, vo + 8 + (i*3 + 2)*8)
97 if first == 1 { mn0 = c0; mx0 = c0; mn1 = c1; mx1 = c1; mn2 = c2; mx2 = c2; first = 0 }
98 if c0 < mn0 { mn0 = c0 }
99 if c0 > mx0 { mx0 = c0 }
100 if c1 < mn1 { mn1 = c1 }
101 if c1 > mx1 { mx1 = c1 }
102 if c2 < mn2 { mn2 = c2 }
103 if c2 > mx2 { mx2 = c2 }
104 i = i + 1
105 }
106 let e0: i64 = mx0 - mn0
107 let e1: i64 = mx1 - mn1
108 let e2: i64 = mx2 - mn2
109 var sa: i64 = 2
110 if e0 >= e1 { if e0 >= e2 { sa = 0 } }
111 if e1 > e0 { if e1 >= e2 { sa = 1 } }
112 var la: i64 = 0
113 var aa: i64 = 1
114 if sa == 0 { la = 1; aa = 2; if e2 > e1 { la = 2; aa = 1 } }
115 if sa == 1 { la = 0; aa = 2; if e2 > e0 { la = 2; aa = 0 } }
116 if sa == 2 { la = 0; aa = 1; if e1 > e0 { la = 1; aa = 0 } }
117 var span: i64 = e2
118 var stop: i64 = mx2
119 if sa == 0 { span = e0; stop = mx0 }
120 if sa == 1 { span = e1; stop = mx1 }
121 if span <= 0 { return 0 }
122 let bandlo: i64 = stop - span*GG_HEADBAND_PERMIL/1000
123 var hcx: i64 = 0
124 var hcy: i64 = 0
125 var hcz: i64 = 0
126 var hcn: i64 = 0
127 i = 0
128 while i < nv {
129 let pst: i64 = gg_rd64(b, vo + 8 + (i*3 + sa)*8)
130 if pst >= bandlo {
131 hcx = hcx + gg_rd64(b, vo + 8 + (i*3)*8)
132 hcy = hcy + gg_rd64(b, vo + 8 + (i*3 + 1)*8)
133 hcz = hcz + gg_rd64(b, vo + 8 + (i*3 + 2)*8)
134 hcn = hcn + 1
135 }
136 i = i + 1
137 }
138 if hcn < 8 { return 0 }
139 let cx: i64 = hcx/hcn
140 let cy: i64 = hcy/hcn
141 let cz: i64 = hcz/hcn
142 // density cross-check + band radius + HEAD-VERT TABLE for the NN surface test
143 let hv: *i64 = sys_mmap(hcn*3*8 + 64) as *i64
144 var hn: i64 = 0
145 var antpos: i64 = 0
146 var antneg: i64 = 0
147 var bandr: i64 = 0
148 i = 0
149 while i < nv {
150 let pst: i64 = gg_rd64(b, vo + 8 + (i*3 + sa)*8)
151 if pst >= bandlo {
152 let vx: i64 = gg_rd64(b, vo + 8 + (i*3)*8)
153 let vy: i64 = gg_rd64(b, vo + 8 + (i*3 + 1)*8)
154 let vz: i64 = gg_rd64(b, vo + 8 + (i*3 + 2)*8)
155 let dx: i64 = vx - cx
156 let dy: i64 = vy - cy
157 let dz: i64 = vz - cz
158 var pav: i64 = dz
159 if aa == 0 { pav = dx }
160 if aa == 1 { pav = dy }
161 if pav > 0 { antpos = antpos + 1 } else { antneg = antneg + 1 }
162 let rr: i64 = gg_isqrt(dx*dx + dy*dy + dz*dz)
163 if rr > bandr { bandr = rr }
164 hv[hn*3] = vx
165 hv[hn*3 + 1] = vy
166 hv[hn*3 + 2] = vz
167 hn = hn + 1
168 }
169 i = i + 1
170 }
171 if bandr <= 0 { return 0 }
172 if hn < 8 { return 0 }
173 // median inter-vert spacing from a strided sample: the mesh's own resolution, derived not chosen
174 let sstep: i64 = hn/GG_SPACING_SAMPLES + 1
175 let samp: *i64 = sys_mmap(GG_SPACING_SAMPLES*8 + 64) as *i64
176 var sn9: i64 = 0
177 var k9: i64 = 0
178 while k9 < hn {
179 if sn9 < GG_SPACING_SAMPLES {
180 var best: i64 = 0
181 var j9: i64 = 0
182 while j9 < hn {
183 if j9 != k9 {
184 let ddx: i64 = hv[k9*3] - hv[j9*3]
185 let ddy: i64 = hv[k9*3 + 1] - hv[j9*3 + 1]
186 let ddz: i64 = hv[k9*3 + 2] - hv[j9*3 + 2]
187 let d2: i64 = ddx*ddx + ddy*ddy + ddz*ddz
188 if d2 > 0 { if best == 0 { best = d2 } else { if d2 < best { best = d2 } } }
189 }
190 j9 = j9 + 1
191 }
192 // insertion into the sorted sample array (no break in this dialect: flag walk)
193 let dv: i64 = gg_isqrt(best)
194 var p9: i64 = sn9
195 var moving: i64 = 1
196 while moving == 1 {
197 if p9 > 0 {
198 if samp[p9 - 1] > dv { samp[p9] = samp[p9 - 1]; p9 = p9 - 1 } else { moving = 0 }
199 } else { moving = 0 }
200 }
201 samp[p9] = dv
202 sn9 = sn9 + 1
203 }
204 k9 = k9 + sstep
205 }
206 let spacing: i64 = samp[sn9/2]
207 // ORIENTATION BY CONVENTION (anterior-negative = face), the same basis as the groom organ
208 let fsign: i64 = 0 - 1
209 let eyelvl: i64 = stop - span*GG_EYE_DROP_PERMIL/1000
210 var front: i64 = 0
211 var back: i64 = 0
212 var lensum: i64 = 0
213 var maxroot: i64 = 0
214 var conepts: i64 = 0
215 var totpts: i64 = 0
216 var interior: i64 = 0
217 var binned: i64 = 0
218 var si: i64 = 0
219 while si < nstr {
220 let base: i64 = ho + 8 + si*GG_WORDS*8
221 let rx: i64 = gg_rd64(b, base)
222 let ry: i64 = gg_rd64(b, base + 8)
223 let rz: i64 = gg_rd64(b, base + 16)
224 let rdx: i64 = rx - cx
225 let rdy: i64 = ry - cy
226 let rdz: i64 = rz - cz
227 var rav: i64 = rdz
228 if aa == 0 { rav = rdx }
229 if aa == 1 { rav = rdy }
230 if rav*fsign > 0 { front = front + 1 } else { back = back + 1 }
231 let rdist: i64 = gg_isqrt(rdx*rdx + rdy*rdy + rdz*rdz)
232 if rdist > maxroot { maxroot = rdist }
233 // NN to the head mesh: far from every vert = not on the surface
234 var bd2: i64 = 0
235 var j8: i64 = 0
236 while j8 < hn {
237 let ex: i64 = rx - hv[j8*3]
238 let ey: i64 = ry - hv[j8*3 + 1]
239 let ez: i64 = rz - hv[j8*3 + 2]
240 let d28: i64 = ex*ex + ey*ey + ez*ez
241 if j8 == 0 { bd2 = d28 } else { if d28 < bd2 { bd2 = d28 } }
242 j8 = j8 + 1
243 }
244 binned = binned + 1
245 // bound = 5x median spacing, CALIBRATED ON MEASURED DATA (2026-08-27): a point on a
246 // triangle INTERIOR is legitimately ~circumradius from every corner -- barycentric surface
247 // roots measure NN p50=379 p99=860 max=941 on ref9d, while the banked interior-fill defect
248 // measures p50=1,397. 5x226=1,130 sits between with ~20% margin each way; 2x clipped
249 // genuine surface points (measured: it refused a correct barycentric groom at 391 permil).
250 if gg_isqrt(bd2) > spacing*5 { interior = interior + 1 }
251 var p: i64 = 0
252 var slen: i64 = 0
253 while p < GG_PTS {
254 let px: i64 = gg_rd64(b, base + (p*3)*8)
255 let py: i64 = gg_rd64(b, base + (p*3 + 1)*8)
256 let pz: i64 = gg_rd64(b, base + (p*3 + 2)*8)
257 if p > 0 {
258 let qx: i64 = px - gg_rd64(b, base + ((p - 1)*3)*8)
259 let qy: i64 = py - gg_rd64(b, base + ((p - 1)*3 + 1)*8)
260 let qz: i64 = pz - gg_rd64(b, base + ((p - 1)*3 + 2)*8)
261 slen = slen + gg_isqrt(qx*qx + qy*qy + qz*qz)
262 }
263 let ddx: i64 = px - cx
264 let ddy: i64 = py - cy
265 let ddz: i64 = pz - cz
266 var pant: i64 = ddz
267 if aa == 0 { pant = ddx }
268 if aa == 1 { pant = ddy }
269 let prr: i64 = gg_isqrt(ddx*ddx + ddy*ddy + ddz*ddz)
270 var pst9: i64 = pz
271 if sa == 0 { pst9 = px }
272 if sa == 1 { pst9 = py }
273 totpts = totpts + 1
274 if pst9 < eyelvl { if prr > 0 { if pant*fsign*1000 > prr*GG_FACE_CONE_PERMIL {
275 conepts = conepts + 1
276 } } }
277 p = p + 1
278 }
279 lensum = lensum + slen
280 si = si + 1
281 }
282 out[0] = 1
283 out[1] = antneg
284 out[2] = antpos
285 out[3] = front
286 out[4] = back
287 out[5] = nstr
288 out[6] = (lensum/nstr)*1000/span
289 out[7] = maxroot*1000/bandr
290 out[8] = conepts*1000/totpts
291 out[9] = span
292 var ib: i64 = binned
293 if ib < 1 { ib = 1 }
294 out[10] = interior*1000/ib
295 out[11] = spacing
296 return 1
297}
298
299func gg_dump(tag: *u8, o: *i64) -> i64 {
300 gv_puts(" " as *u8); gv_puts(tag)
301 gv_puts(": density neg=" as *u8); gv_num(o[1])
302 gv_puts(" pos=" as *u8); gv_num(o[2])
303 gv_puts(" roots front=" as *u8); gv_num(o[3])
304 gv_puts(" back=" as *u8); gv_num(o[4])
305 gv_puts(" strands=" as *u8); gv_num(o[5])
306 gv_puts(" len_permil=" as *u8); gv_num(o[6])
307 gv_puts(" rootmax_permil=" as *u8); gv_num(o[7])
308 gv_puts(" facecone_permil=" as *u8); gv_num(o[8])
309 gv_puts(" far_permil=" as *u8); gv_num(o[10])
310 gv_puts(" spacing=" as *u8); gv_num(o[11])
311 gv_puts("\n" as *u8)
312 return 0
313}
314
315func main(argc: i64, argv: *i64) -> i64 {
316 gv_head("NXA-GROOM-GATE v2 -- anatomical invariants incl the interior-shell (head-wrap) tooth" as *u8)
317 let ctr: *i64 = gv_ctr()
318 var subj: *u8 = GG_SUBJECT
319 if argc > 1 { subj = argv[1] as *u8 }
320 let so: *i64 = sys_mmap(128) as *i64
321 let ho: *i64 = sys_mmap(128) as *i64
322 let bo: *i64 = sys_mmap(128) as *i64
323 let sok: i64 = gg_stats(subj, so)
324 gv_need("subject-asset-readable" as *u8, sok, ctr)
325 if sok == 1 {
326 gg_dump("subject" as *u8, so)
327 var t0: i64 = 0
328 if so[1] > so[2] { t0 = 1 }
329 gv_check("orientation-density-agrees-with-convention" as *u8, t0, ctr)
330 var t1: i64 = 0
331 if so[4] > so[3] { t1 = 1 }
332 gv_check("facing-roots-behind-face" as *u8, t1, ctr)
333 var t3: i64 = 0
334 if so[5] >= GG_MIN_STRANDS { t3 = 1 }
335 gv_check("density-floor" as *u8, t3, ctr)
336 var t4: i64 = 0
337 if so[6] >= GG_LEN_LO_PERMIL { if so[6] <= GG_LEN_HI_PERMIL { t4 = 1 } }
338 gv_check("length-band-permil" as *u8, t4, ctr)
339 var t5: i64 = 0
340 if so[7] <= GG_CONF_MAX_PERMIL { t5 = 1 }
341 gv_check("scalp-conformance" as *u8, t5, ctr)
342 var t6: i64 = 0
343 if so[8] <= GG_FACE_MAX_PERMIL { t6 = 1 }
344 gv_check("face-cone-clear" as *u8, t6, ctr)
345 var t7: i64 = 0
346 if so[10] <= GG_FAR_MAX_PERMIL { t7 = 1 }
347 gv_check("roots-near-scalp-surface" as *u8, t7, ctr)
348 }
349 let hok: i64 = gg_stats(GG_FIX_HIJAB, ho)
350 gv_need("hijab-fixture-readable" as *u8, hok, ctr)
351 if hok == 1 {
352 gg_dump("fix-hijab" as *u8, ho)
353 var n1: i64 = 0
354 if ho[3] > ho[4] { n1 = 1 }
355 gv_check("neg-control-hijab-fails-facing" as *u8, n1, ctr)
356 var n2: i64 = 0
357 if ho[8] > GG_FACE_MAX_PERMIL { n2 = 1 }
358 gv_check("neg-control-hijab-floods-face-cone" as *u8, n2, ctr)
359 }
360 let bok: i64 = gg_stats(GG_FIX_BACKWARDS, bo)
361 gv_need("interior-fixture-readable" as *u8, bok, ctr)
362 if bok == 1 {
363 gg_dump("fix-interior" as *u8, bo)
364 var n3: i64 = 0
365 if bo[10] >= GG_FAR_FIX_MIN_PERMIL { n3 = 1 }
366 gv_check("neg-control-interior-fill-detected" as *u8, n3, ctr)
367 }
368 return gv_verdict("NXA-GROOM-GATE" as *u8, ctr, "groom anatomy holds and both banked real defects still fail" as *u8)
369}