nx_relief_bands_gate.nx source
↩ module page · 350 lines · 19792 B
1// nx_relief_bands_gate.nx -- THE MULTI-BAND MICRO-RELIEF LAW AND THE DISCRETE PORE LAYER, GATED.
2// /compare/graphics C5, symbol rlf_pore_mask. Subject: nx_relief_lib.
3//
4// WHAT THIS GATE IS FOR. nx_relief_lib grew from one spatial band to three on 2026-08-28. Three
5// bands is three amplitudes and three wavelengths, and six numbers with nothing checking them is
6// exactly the shape rule 11 exists to stop. So every claim the new code makes is a tooth here, and
7// each tooth is a property the WRONG implementations provably cannot satisfy:
8// * a band table that drifted from its conf ledger -> dies at T7
9// * a "pore layer" that is really a fourth noise octave -> dies at T5 (coverage, bite-proven)
10// * a mask that ignores the orifice diameter -> dies at T6 (bite-proven at r=0)
11// * a band 1 rigged by amplitude rather than wavelength -> dies at T3 (bite-proven)
12// * an addition that disturbed the shipped single-band -> dies at T2
13// * a second tilt convention for the new bands -> dies at T1
14// * a resolution claim that flatters the whole-body atlas -> dies at T8, which asserts the
15// UNFLATTERING direction as well
16// T5 is the load-bearing tooth for the MECHANISM and its bar is not a constant: it is the coverage
17// the model itself DERIVES (pi r^2 over the cell), measured at TWO different lattice scales, so a
18// field that is not a sparse disc layer cannot agree with it twice.
19// license_tier: ORIGINAL expect_exit: 0 No hw writes (Rule 26).
20import "nx_syscalls.nx"
21import "nx_gate_verdict.nx"
22import "nx_relief_lib.nx"
23
24// the shader's unit-normal scale, mirrored. EVERY tilt function here is linear in it, so this
25// choice cannot flatter any result -- it only sets the units the numbers are printed in.
26const RB_N_FULL: i64 = 256
27// FIXTURE, NOT A CLAIM ABOUT PRODUCTION (corrected 2026-08-29). This is the TOP rung of the ship
28// ladder, chosen deliberately so every verdict below holds A FORTIORI: a band the LARGEST
29// whole-body atlas cannot carry, no smaller one can either. What actually ships is NOT fixed
30// here -- txm_ship_res (nx_nxa_texm.nx) descends 4096/2048/1024/512 by TEXTURE-MEMORY budget
31// alone with no physical term, so the shipped rung follows knowledge/asset_texture_floor.conf
32// and was measured at 2048 on the live cast. The previous comment asserted this WAS the shipped
33// resolution, which was false and is the stale-name-list defect wearing a const comment: a gate
34// that hardcodes what production "actually" does states something that will outlive its truth.
35const RB_RES_BODY: i64 = 4096
36// a face-sized region, 250 mm across. A FIXTURE SCALE for the published table, NOT a law: every
37// span-taking function below accepts any span, and the tooth that matters asserts the boundary.
38const RB_FACE_UM: i64 = 250000
39const RB_CELL_A: i64 = 64 // two lattice scales for the coverage measurement. A sparse disc
40const RB_CELL_B: i64 = 128 // layer has the SAME coverage at both; a noise octave does not.
41const RB_SWEEP_A: i64 = 512 // 8x8 = 64 cells at RB_CELL_A
42const RB_SWEEP_B: i64 = 1024 // 8x8 = 64 cells at RB_CELL_B
43// agreement tolerance between the DERIVED coverage and the MEASURED one, in permil of surface.
44// DECLARED IMPRECISION: a disc of radius r is measured on an integer grid, so a finite sweep
45// quantises its area. This is that quantisation, not slack for a wrong model.
46const RB_TOL_PERMIL: i64 = 4
47const RB_SEED: i64 = 20260828
48const RB_BUF: i64 = 256
49const RB_CONF_A: *u8 = "knowledge/relief_bands.conf"
50const RB_CONF_B: *u8 = "buildroot/knowledge/relief_bands.conf"
51
52func rb_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
53func rb_abs(v: i64) -> i64 { if v < 0 { return 0 - v } return v }
54func rb_max2(a: i64, b: i64) -> i64 { if a > b { return a } return b }
55
56// substring search. Returns the offset, or -1.
57func rb_find(hay: *u8, hn: i64, ndl: *u8, nn: i64) -> i64 {
58 if nn <= 0 { return 0 - 1 }
59 var i: i64 = 0
60 while i + nn <= hn {
61 var j: i64 = 0
62 var ok: i64 = 1
63 while j < nn {
64 if hay[i + j] != ndl[j] { ok = 0; j = nn } else { j = j + 1 }
65 }
66 if ok == 1 { return i }
67 i = i + 1
68 }
69 return 0 - 1
70}
71
72// build the conf row a band's CONSTS imply. The row is composed FROM the consts, so finding it in
73// the ledger is a real coupling and not a comparison of two hand-typed strings.
74func rb_row(d: *u8, id: i64, name: *u8, amp: i64, lam: i64) -> i64 {
75 var p: i64 = gv_cat(d, 0, "band|" as *u8)
76 p = gv_catn(d, p, id)
77 p = gv_cat(d, p, "|" as *u8)
78 p = gv_cat(d, p, name)
79 p = gv_cat(d, p, "|" as *u8)
80 p = gv_catn(d, p, amp)
81 p = gv_cat(d, p, "|" as *u8)
82 p = gv_catn(d, p, lam)
83 p = gv_cat(d, p, "|" as *u8)
84 d[p] = 0 as u8
85 return p
86}
87
88// THE PARAMETRIC MASK: what rlf_pore_mask would be at an arbitrary pit radius. rlf_pore_mask IS
89// this at rlf_pore_radius(), and T4 pins that identity -- so this is a knob on the SHIPPED
90// function, never a second implementation of it.
91func rb_mask_at_r(x: i64, y: i64, cell: i64, r: i64) -> i64 {
92 if r <= 0 { return 0 }
93 let r2: i64 = r * r
94 let d2: i64 = rlf_pore_d2(x, y, cell)
95 if d2 >= r2 { return 0 }
96 return (r2 - d2) * RLF_H_RANGE / r2
97}
98// measured pore coverage over a contiguous n x n sweep, in permil of surface, at pit radius r.
99func rb_cover_permil(cell: i64, n: i64, r: i64) -> i64 {
100 var hits: i64 = 0
101 var i: i64 = 0
102 while i < n {
103 var j: i64 = 0
104 while j < n {
105 if rb_mask_at_r(i, j, cell, r) > 0 { hits = hits + 1 }
106 j = j + 1
107 }
108 i = i + 1
109 }
110 return hits * 1000 / (n * n)
111}
112// 1 = the measured coverage does not agree with what the disc model derives.
113func rb_cover_wrong(measured: i64, derived: i64) -> i64 {
114 if rb_abs(measured - derived) > RB_TOL_PERMIL { return 1 }
115 return 0
116}
117// 1 = a band of this shape does NOT out-tilt band 0.
118func rb_not_outtilt(a_um: i64, lambda_um: i64) -> i64 {
119 if rlf_band_tilt_full(RB_N_FULL, a_um, lambda_um) <= rlf_tilt_full(RB_N_FULL) { return 1 }
120 return 0
121}
122
123func main() -> i64 {
124 let ctr: *i64 = gv_ctr()
125 gv_head("nx_relief_bands_gate -- multi-band micro-relief and the discrete pore layer" as *u8)
126
127 let t0b: i64 = rlf_tilt_full(RB_N_FULL)
128 let t1b: i64 = rlf_band_tilt_full(RB_N_FULL, RLF_SEC_UM, RLF_SEC_LAMBDA_UM)
129 let tpb: i64 = rlf_pore_tilt_full(RB_N_FULL)
130 let rad: i64 = rlf_pore_radius()
131 let derived: i64 = rlf_pore_area_permil()
132 gv_puts(" band tilts of " as *u8); gv_num(RB_N_FULL)
133 gv_puts(": primary(" as *u8); gv_num(RLF_RELIEF_UM); gv_puts("um/" as *u8); gv_num(RLF_RELIEF_LAMBDA_UM)
134 gv_puts("um)=" as *u8); gv_num(t0b)
135 gv_puts(" secondary(" as *u8); gv_num(RLF_SEC_UM); gv_puts("um/" as *u8); gv_num(RLF_SEC_LAMBDA_UM)
136 gv_puts("um)=" as *u8); gv_num(t1b)
137 gv_puts(" pore-rim(" as *u8); gv_num(RLF_PORE_UM); gv_puts("um/" as *u8); gv_num(RLF_PORE_DIA_UM)
138 gv_puts("um)=" as *u8); gv_num(tpb); gv_puts("\n" as *u8)
139 gv_puts(" pore radius=" as *u8); gv_num(rad)
140 gv_puts(" of " as *u8); gv_num(RLF_UNIT)
141 gv_puts(" per cell, derived coverage=" as *u8); gv_num(derived); gv_puts(" permil\n" as *u8)
142
143 // ---- T0 THE FIXTURE MUST REACH THE CONDITION. If the pit radius is degenerate or no pit is
144 // ever hit in the sweep, every tooth below is vacuous and passing them would mean nothing.
145 let covA: i64 = rb_cover_permil(RB_CELL_A, RB_SWEEP_A, rad)
146 let covB: i64 = rb_cover_permil(RB_CELL_B, RB_SWEEP_B, rad)
147 var t0: i64 = 1
148 if rad <= 0 { t0 = 0 }
149 if covA <= 0 { t0 = 0 }
150 if covB <= 0 { t0 = 0 }
151 gv_puts(" measured coverage: cell " as *u8); gv_num(RB_CELL_A); gv_puts(" -> " as *u8); gv_num(covA)
152 gv_puts(" permil, cell " as *u8); gv_num(RB_CELL_B); gv_puts(" -> " as *u8); gv_num(covB)
153 gv_puts(" permil (derived " as *u8); gv_num(derived); gv_puts(")\n" as *u8)
154 gv_check("T0 fixture-pit-radius-positive-and-pits-actually-hit-at-both-scales" as *u8, t0, ctr)
155
156 // ---- T1 ONE RULER. The general per-band tilt function must reproduce the shipped single-band
157 // one EXACTLY at band 0, over the whole scale, or the new bands are being measured by a second
158 // convention and no comparison between them means anything.
159 var t1: i64 = 1
160 var n: i64 = 1
161 while n <= RB_N_FULL {
162 if rlf_band_tilt_full(n, RLF_RELIEF_UM, RLF_RELIEF_LAMBDA_UM) != rlf_tilt_full(n) { t1 = 0 }
163 n = n + 1
164 }
165 gv_check("T1 band-tilt-is-the-shipped-tilt-at-band-0-over-the-whole-scale" as *u8, t1, ctr)
166
167 // ---- T2 THE ADDITION DISTURBED NOTHING. nx_sdfrender_sss_gate's T1 (flat skin bit-exact) and
168 // T4 (shader field IS baker field) both rest on these two functions. Re-derived here from the
169 // primitive, so a change to either would surface HERE rather than as a mystery in the shader.
170 var t2: i64 = 1
171 var i2: i64 = 0
172 while i2 < 128 {
173 let x: i64 = i2 * 7
174 let y: i64 = i2 * 11
175 if rlf_relief_h(x, y, RB_RES_BODY, RB_SEED) != rlf_noise3(x, y, RB_SEED, rlf_relief_lat(RB_RES_BODY)) { t2 = 0 }
176 if rlf_relief_h3(x, y, RB_SEED, 18) != rlf_noise3(x, y, RB_SEED, 18) { t2 = 0 }
177 i2 = i2 + 1
178 }
179 gv_check("T2 single-band-path-unchanged-by-the-addition" as *u8, t2, ctr)
180
181 // ---- T3 ASPECT RATIO DOMINATES DEPTH. Band 1 must be strictly SHALLOWER than band 0 and still
182 // carry strictly MORE tilt. Both conjuncts, because either alone is not the claim: a deeper
183 // band out-tilting a shallower one would be unremarkable, and this rung's whole argument is
184 // that fineness beats depth.
185 var t3: i64 = 1
186 if RLF_SEC_UM >= RLF_RELIEF_UM { t3 = 0 }
187 if t1b <= t0b { t3 = 0 }
188 gv_check("T3 secondary-band-is-shallower-than-primary-AND-out-tilts-it" as *u8, t3, ctr)
189
190 // ---- T4 THE PARAMETRIC MASK IS THE SHIPPED MASK. Pins rb_mask_at_r to rlf_pore_mask at the
191 // real radius, so T5's and T6's knob turns the SHIPPED function and not a lookalike.
192 var t4: i64 = 1
193 var i4: i64 = 0
194 while i4 < RB_SWEEP_A {
195 if rb_mask_at_r(i4, i4 * 3, RB_CELL_A, rad) != rlf_pore_mask(i4, i4 * 3, RB_CELL_A) { t4 = 0 }
196 i4 = i4 + 1
197 }
198 gv_check("T4 parametric-mask-is-bit-identical-to-the-shipped-mask-at-the-real-radius" as *u8, t4, ctr)
199
200 // ---- T5 THE LOAD-BEARING TOOTH: THIS IS A SPARSE DISC LAYER, NOT A NOISE OCTAVE. The measured
201 // coverage must match what pi*r^2/cell^2 derives, AT TWO DIFFERENT LATTICE SCALES. A noise
202 // field can be made to hit one number by tuning a threshold; it cannot be scale-invariant at a
203 // coverage the disc model derived independently.
204 var t5: i64 = 1
205 if rb_cover_wrong(covA, derived) == 1 { t5 = 0 }
206 if rb_cover_wrong(covB, derived) == 1 { t5 = 0 }
207 gv_check("T5 pore-coverage-matches-the-derived-disc-area-at-two-lattice-scales" as *u8, t5, ctr)
208
209 // ---- T6 THE PROFILE FALLS OFF WITH DISTANCE, and is bounded by the codomain. Recorded as the
210 // nearest and furthest still-lit samples in the sweep, so it measures the real field.
211 var mind2: i64 = RLF_PORE_D2_INF
212 var maxd2: i64 = 0 - 1
213 var mmin: i64 = 0
214 var mmax: i64 = 0
215 var over: i64 = 0
216 var i6: i64 = 0
217 while i6 < RB_SWEEP_B {
218 var j6: i64 = 0
219 while j6 < 64 {
220 let m: i64 = rlf_pore_mask(i6, j6, RB_CELL_B)
221 if m > RLF_H_RANGE { over = 1 }
222 if m < 0 { over = 1 }
223 if m > 0 {
224 let d: i64 = rlf_pore_d2(i6, j6, RB_CELL_B)
225 if d < mind2 { mind2 = d; mmin = m }
226 if d > maxd2 { maxd2 = d; mmax = m }
227 }
228 j6 = j6 + 1
229 }
230 i6 = i6 + 1
231 }
232 var t6: i64 = 1
233 if over == 1 { t6 = 0 }
234 if maxd2 < 0 { t6 = 0 }
235 if mmin <= mmax { t6 = 0 }
236 gv_puts(" profile: nearest lit sample d2=" as *u8); gv_num(mind2); gv_puts(" mask=" as *u8); gv_num(mmin)
237 gv_puts(" | furthest lit d2=" as *u8); gv_num(maxd2); gv_puts(" mask=" as *u8); gv_num(mmax); gv_puts("\n" as *u8)
238 gv_check("T6 mask-falls-off-with-distance-and-stays-inside-the-codomain" as *u8, t6, ctr)
239
240 // ---- T7 RESOLUTION HONESTY, ASSERTED IN THE UNFLATTERING DIRECTION TOO. On the whole-body
241 // atlas the estate actually bakes, BOTH new bands must be reported as NOT carried -- a rung
242 // that claimed otherwise would be flattering itself. On a face-sized region at the resolution
243 // rlf_band_res_needed names, both must be carried. A tooth that only checked the good news
244 // would pass for an organ that always returned 1.
245 let needSecBody: i64 = rlf_band_res_needed(RLF_BODY_UM, RLF_SEC_LAMBDA_UM)
246 let needSecFace: i64 = rlf_band_res_needed(RB_FACE_UM, RLF_SEC_LAMBDA_UM)
247 let needPorFace: i64 = rlf_band_res_needed(RB_FACE_UM, RLF_PORE_PITCH_UM)
248 var t7: i64 = 1
249 if rlf_band_resolvable(RB_RES_BODY, RLF_SEC_LAMBDA_UM) != 0 { t7 = 0 }
250 if rlf_band_resolvable(RB_RES_BODY, RLF_PORE_PITCH_UM) != 0 { t7 = 0 }
251 if rlf_band_resolvable_span(RB_FACE_UM, needSecFace, RLF_SEC_LAMBDA_UM) != 1 { t7 = 0 }
252 if rlf_band_resolvable_span(RB_FACE_UM, needPorFace, RLF_PORE_PITCH_UM) != 1 { t7 = 0 }
253 gv_puts(" whole-body atlas " as *u8); gv_num(RB_RES_BODY)
254 gv_puts(": texel=" as *u8); gv_num(rlf_texel_um(RB_RES_BODY))
255 gv_puts("um -> secondary carried=" as *u8); gv_num(rlf_band_resolvable(RB_RES_BODY, RLF_SEC_LAMBDA_UM))
256 gv_puts(" pore carried=" as *u8); gv_num(rlf_band_resolvable(RB_RES_BODY, RLF_PORE_PITCH_UM))
257 gv_puts("\n RES NEEDED: secondary over a whole body=" as *u8); gv_num(needSecBody)
258 gv_puts(", over a " as *u8); gv_num(RB_FACE_UM / 1000); gv_puts("mm face=" as *u8); gv_num(needSecFace)
259 gv_puts("; pore over that face=" as *u8); gv_num(needPorFace); gv_puts("\n" as *u8)
260 gv_check("T7 new-bands-declared-ABSENT-on-the-whole-body-atlas-and-PRESENT-per-region" as *u8, t7, ctr)
261
262 // ---- T8 THE WHOLE-BODY PREDICATE IS THE SPAN PREDICATE AT THE BODY SPAN. One ruler again:
263 // without this the two could disagree and each would look right on its own.
264 var t8: i64 = 1
265 var r8: i64 = 512
266 while r8 <= 16384 {
267 if rlf_band_resolvable(r8, RLF_SEC_LAMBDA_UM) != rlf_band_resolvable_span(RLF_BODY_UM, r8, RLF_SEC_LAMBDA_UM) { t8 = 0 }
268 if rlf_texel_um(r8) != rlf_texel_um_span(RLF_BODY_UM, r8) { t8 = 0 }
269 r8 = r8 + 512
270 }
271 gv_check("T8 whole-body-resolvability-is-the-span-form-at-the-body-span" as *u8, t8, ctr)
272
273 // ---- T9 THE COMPOSED HEIGHT STAYS INSIDE THE ENVELOPE ITS OWN CONSTS DECLARE, and the total
274 // is the sum of the three bands. The compiler takes literal const initialisers only, so that
275 // relationship cannot be written as arithmetic in the lib -- it is pinned here instead.
276 var t9: i64 = 1
277 if rlf_total_um() != RLF_RELIEF_UM + RLF_SEC_UM + RLF_PORE_UM { t9 = 0 }
278 var lo9: i64 = 0
279 var hi9: i64 = 0
280 var i9: i64 = 0
281 while i9 < 512 {
282 let u: i64 = rlf_relief_um2(i9 * 5, i9 * 3, RB_RES_BODY, RB_SEED)
283 if u < lo9 { lo9 = u }
284 if u > hi9 { hi9 = u }
285 i9 = i9 + 1
286 }
287 if lo9 < 0 - RLF_PORE_UM { t9 = 0 }
288 if hi9 > RLF_RELIEF_UM + RLF_SEC_UM { t9 = 0 }
289 gv_puts(" composed height over the sweep: " as *u8); gv_num(lo9); gv_puts(" .. " as *u8); gv_num(hi9)
290 gv_puts(" um, envelope -" as *u8); gv_num(RLF_PORE_UM); gv_puts(" .. " as *u8)
291 gv_num(RLF_RELIEF_UM + RLF_SEC_UM); gv_puts("\n" as *u8)
292 gv_check("T9 composed-height-inside-its-declared-envelope-and-total-reconciles" as *u8, t9, ctr)
293
294 // ---- T10 THE BANDS AGREE WITH THEIR PROVENANCE LEDGER. Each expected row is COMPOSED FROM
295 // THE CONSTS, so this is a real coupling rather than two hand-typed strings compared. If the
296 // ledger cannot be read from this working directory the gate ABSTAINS -- it does not acquit.
297 let cn: *i64 = sys_mmap(8) as *i64
298 cn[0] = 0
299 var cbuf: *u8 = sys_read_file(RB_CONF_A, cn)
300 var csrc: i64 = 1
301 if cn[0] <= 0 { cbuf = sys_read_file(RB_CONF_B, cn); csrc = 2 }
302 var present: i64 = 0
303 if cn[0] > 0 { present = 1 }
304 gv_puts(" band ledger: " as *u8)
305 if csrc == 1 { gv_puts(RB_CONF_A) } else { gv_puts(RB_CONF_B) }
306 gv_puts(" bytes=" as *u8); gv_num(cn[0]); gv_puts("\n" as *u8)
307 if gv_need("relief_bands.conf readable from this working directory" as *u8, present, ctr) == 1 {
308 let row: *u8 = sys_mmap(RB_BUF) as *u8
309 var t10: i64 = 1
310 rb_row(row, 0, "primary" as *u8, RLF_RELIEF_UM, RLF_RELIEF_LAMBDA_UM)
311 if rb_find(cbuf, cn[0], row, rb_slen(row)) < 0 { t10 = 0 }
312 rb_row(row, 1, "secondary" as *u8, RLF_SEC_UM, RLF_SEC_LAMBDA_UM)
313 if rb_find(cbuf, cn[0], row, rb_slen(row)) < 0 { t10 = 0 }
314 rb_row(row, 2, "pore" as *u8, RLF_PORE_UM, RLF_PORE_PITCH_UM)
315 if rb_find(cbuf, cn[0], row, rb_slen(row)) < 0 { t10 = 0 }
316 var p2: i64 = gv_cat(row, 0, "pore_dia|" as *u8)
317 p2 = gv_catn(row, p2, RLF_PORE_DIA_UM)
318 p2 = gv_cat(row, p2, "|" as *u8)
319 row[p2] = 0 as u8
320 if rb_find(cbuf, cn[0], row, rb_slen(row)) < 0 { t10 = 0 }
321 gv_check("T10 every-band-const-has-a-matching-row-in-the-provenance-ledger" as *u8, t10, ctr)
322
323 // ---- T11 A BAND MAY NOT ACQUIRE A NUMBER WITH NO SOURCE FIELD AT ALL. UNPINNED is a legal
324 // and honest source; a MISSING one is not. This is what stops the ledger from decaying into
325 // a list of numbers that happens to match the code.
326 var t11: i64 = 1
327 if rb_find(cbuf, cn[0], "|nx_relief_lib-2026-08-25" as *u8, 25) < 0 { t11 = 0 }
328 if rb_find(cbuf, cn[0], "|UNPINNED" as *u8, 9) < 0 { t11 = 0 }
329 gv_check("T11 ledger-carries-a-source-field-for-every-band-pinned-or-honestly-UNPINNED" as *u8, t11, ctr)
330 }
331
332 // ---- NEGATIVE CONTROLS. Each fires on the wrong implementation and is silent on the shipped
333 // one, which is the only evidence that the tooth above it can fail at all.
334 // (1) a field that covers all of the skin is a noise octave, not a pore layer.
335 gv_bite("neg-control-a-field-covering-the-whole-surface-is-not-a-pore-layer" as *u8,
336 rb_cover_wrong(1000, derived), rb_cover_wrong(covB, derived), ctr)
337 // (2) the mask must be DRIVEN by the orifice diameter. At zero radius it must vanish entirely;
338 // an implementation returning a constant, or ignoring r, keeps its coverage and dies here.
339 gv_bite("neg-control-a-mask-that-ignores-the-orifice-diameter-cannot-vanish-at-r-zero" as *u8,
340 rb_cover_wrong(rb_cover_permil(RB_CELL_B, RB_SWEEP_A, 0), derived),
341 rb_cover_wrong(covB, derived), ctr)
342 // (3) T3 is about the WAVELENGTH, not a rigged amplitude: band 1's own depth at band 0's
343 // wavelength must FAIL to out-tilt band 0, while band 1's real wavelength succeeds.
344 gv_bite("neg-control-band-1-depth-at-band-0-wavelength-cannot-out-tilt-band-0" as *u8,
345 rb_not_outtilt(RLF_SEC_UM, RLF_RELIEF_LAMBDA_UM),
346 rb_not_outtilt(RLF_SEC_UM, RLF_SEC_LAMBDA_UM), ctr)
347
348 return gv_verdict("nx_relief_bands_gate" as *u8, ctr,
349 "micro-relief carries three bands with a provenance ledger a gate checks: the secondary band is a third the depth of the primary and carries more tilt because slope follows the aspect ratio, and the pore layer is a sparse jittered-grid disc field whose coverage matches the area its own model derives at two lattice scales. The single-band path shipped on 2026-08-25 is untouched. Where a band cannot be carried the organ says so: on the whole-body atlas both new bands are reported ABSENT, and the resolution that would carry them is published rather than assumed." as *u8)
350}