code wiki / (root) / nx_donor_texm_gate.nx

nx_donor_texm_gate.nx source

↩ module page · 172 lines · 8161 B

1// nx_donor_texm_gate.nx -- THE DONOR-SURFACE GATE: authored FBX materials carried into TEXC+TEXM 2// on ALL FOUR Fab donors, proven on the live artifacts (never fixtures standing in for them). 3// 4// Subject: knowledge/rigcorpus/{dark_witch,paladin,dark_knight,toon3d8}_rigged.nxa as written by 5// nx_fbx_texm. Proves, per donor: 6// (1) TEXC exists and its row count EQUALS the VERT count -- the desync refusal held; 7// (2) TEXM exists, declares 4 map records, albedo is record 0, non-empty, a REAL PNG, with 8// entropy above the constant-color floor (a scalar-flood atlas cannot pass); 9// (3) the UV set is non-degenerate (u-spread) and spans >= 2 charts. 10// Neg-control: the banked PRE-TEXM donor (knowledge/bank/) must FAIL the presence tooth -- 11// a gate that cannot fire on the pre-fix artifact has not been shown to fire. 12// The donor count is bound IN the conditions (4 of 4), so the empty set cannot pass. 13 14import "nx_syscalls.nx" 15import "nx_gate_verdict.nx" 16 17const DTG_NDONOR: i64 = 4 18const DTG_A1: *u8 = "knowledge/rigcorpus/dark_witch_rigged.nxa" 19const DTG_A2: *u8 = "knowledge/rigcorpus/paladin_rigged.nxa" 20const DTG_A3: *u8 = "knowledge/rigcorpus/dark_knight_rigged.nxa" 21const DTG_A4: *u8 = "knowledge/rigcorpus/toon3d8_rigged.nxa" 22const DTG_BANKED: *u8 = "knowledge/bank/dark_witch_rigged.nxa.pretexm-20260823" 23 24const DTG_HDR: i64 = 32 25const DTG_TOCE: i64 = 32 26const DTG_TM_HDRW: i64 = 6 27const DTG_TM_RECW: i64 = 3 28const DTG_NMAPS: i64 = 4 29const DTG_RES_MIN: i64 = 8 // one PNG filter block, the same floor nx_nxa_texm enforces 30const DTG_PNG0: i64 = 137 31const DTG_PNG1: i64 = 80 32const DTG_PNG2: i64 = 78 33const DTG_PNG3: i64 = 71 34// entropy floor: a constant-color PNG of any res compresses to well under this permil of the 35// raw size; a real albedo cannot. Same discrimination the npc-atlas gate uses. 36const DTG_ENTROPY_MIN_BYTES: i64 = 65536 37const DTG_USPREAD_MIN_PERMIL: i64 = 500 // spread must cover over half the Q16 axis 38const DTG_Q16: i64 = 65536 39 40func dtg_rd64(b: *u8, off: i64) -> i64 { 41 var v: i64 = 0 42 var k: i64 = 7 43 while k >= 0 { v = v * 256 + (b[off + k] as i64); k = k - 1 } 44 return v 45} 46func dtg_tag4(s: *u8) -> i64 { 47 return (s[0] as i64) | ((s[1] as i64) << 8) | ((s[2] as i64) << 16) | ((s[3] as i64) << 24) 48} 49func dtg_sec(b: *u8, ns: i64, t: *u8, poff: *i64, pwords: *i64) -> i64 { 50 var s: i64 = 0 51 while s < ns { 52 let e: i64 = DTG_HDR + s * DTG_TOCE 53 if dtg_rd64(b, e) == dtg_tag4(t) { 54 poff[0] = dtg_rd64(b, e + 8) 55 pwords[0] = dtg_rd64(b, e + 16) 56 return 1 57 } 58 s = s + 1 59 } 60 return 0 61} 62 63// per-donor measurement: returns a bitmask of passed sub-checks and prints the values. 64// bit0 texc+texm present, bit1 texc rows == vert rows, bit2 albedo real png + entropy, 65// bit3 uv spread + multi-chart 66func dtg_measure(path: *u8) -> i64 { 67 let lp: *i64 = sys_mmap(16) as *i64 68 let b: *u8 = sys_read_file(path, lp) 69 if (b as i64) == 0 { gv_puts(" unreadable: " as *u8); gv_puts(path); gv_puts("\n" as *u8); return 0 } 70 let ns: i64 = dtg_rd64(b, 16) 71 let o1: *i64 = sys_mmap(16) as *i64 72 let w1: *i64 = sys_mmap(16) as *i64 73 let o2: *i64 = sys_mmap(16) as *i64 74 let w2: *i64 = sys_mmap(16) as *i64 75 let o3: *i64 = sys_mmap(16) as *i64 76 let w3: *i64 = sys_mmap(16) as *i64 77 var mask: i64 = 0 78 let has_texc: i64 = dtg_sec(b, ns, "TEXC" as *u8, o1, w1) 79 let has_texm: i64 = dtg_sec(b, ns, "TEXM" as *u8, o2, w2) 80 let has_vert: i64 = dtg_sec(b, ns, "VERT" as *u8, o3, w3) 81 if has_texc == 1 { if has_texm == 1 { mask = mask | 1 } } 82 if has_texc == 1 { if has_vert == 1 { 83 let texc_rows: i64 = dtg_rd64(b, o1[0]) 84 let vert_rows: i64 = dtg_rd64(b, o3[0]) 85 gv_puts(" texc_rows=" as *u8); gv_num(texc_rows) 86 gv_puts(" vert_rows=" as *u8); gv_num(vert_rows) 87 if texc_rows == vert_rows { mask = mask | 2 } 88 } } 89 if has_texm == 1 { 90 let nmaps: i64 = dtg_rd64(b, o2[0]) 91 let res: i64 = dtg_rd64(b, o2[0] + 8) 92 let a_off: i64 = dtg_rd64(b, o2[0] + (DTG_TM_HDRW + 1) * 8) 93 let a_len: i64 = dtg_rd64(b, o2[0] + (DTG_TM_HDRW + 2) * 8) 94 gv_puts(" nmaps=" as *u8); gv_num(nmaps) 95 gv_puts(" res=" as *u8); gv_num(res) 96 gv_puts(" albedo_len=" as *u8); gv_num(a_len) 97 if nmaps == DTG_NMAPS { if res >= DTG_RES_MIN { if a_len > 0 { 98 let blobbase: i64 = o2[0] + (DTG_TM_HDRW + DTG_NMAPS * DTG_TM_RECW) * 8 99 let p0: i64 = blobbase + a_off 100 var pngok: i64 = 0 101 if (b[p0] as i64) == DTG_PNG0 { if (b[p0+1] as i64) == DTG_PNG1 { 102 if (b[p0+2] as i64) == DTG_PNG2 { if (b[p0+3] as i64) == DTG_PNG3 { pngok = 1 } } } } 103 if pngok == 1 { if a_len >= DTG_ENTROPY_MIN_BYTES { mask = mask | 4 } } 104 } } } 105 } 106 if has_texc == 1 { 107 let rows: i64 = dtg_rd64(b, o1[0]) 108 let grid: i64 = dtg_rd64(b, o1[0] + 16) 109 var umin: i64 = DTG_Q16 110 var umax: i64 = 0 111 var cmin: i64 = 1 << 40 112 var cmax: i64 = 0 - 1 113 var i: i64 = 0 114 while i < rows { 115 let base: i64 = o1[0] + (4 + i * 3) * 8 116 let u: i64 = dtg_rd64(b, base) 117 let ch: i64 = dtg_rd64(b, base + 16) 118 if u < umin { umin = u } 119 if u > umax { umax = u } 120 if ch < cmin { cmin = ch } 121 if ch > cmax { cmax = ch } 122 i = i + 1 123 } 124 let spread_permil: i64 = (umax - umin) * 1000 / DTG_Q16 125 gv_puts(" u_spread_permil=" as *u8); gv_num(spread_permil) 126 gv_puts(" charts=" as *u8); gv_num(cmax - cmin + 1) 127 gv_puts(" grid=" as *u8); gv_num(grid) 128 gv_puts("\n" as *u8) 129 if spread_permil >= DTG_USPREAD_MIN_PERMIL { if cmax > cmin { mask = mask | 8 } } 130 } else { gv_puts("\n" as *u8) } 131 return mask 132} 133 134func main() -> i64 { 135 let ctr: *i64 = gv_ctr() 136 gv_head("nx_donor_texm_gate -- authored donor surfaces carried, proven per artifact" as *u8) 137 138 gv_puts("[donor 1] " as *u8); gv_puts(DTG_A1); gv_puts("\n" as *u8) 139 let m1: i64 = dtg_measure(DTG_A1) 140 gv_puts("[donor 2] " as *u8); gv_puts(DTG_A2); gv_puts("\n" as *u8) 141 let m2: i64 = dtg_measure(DTG_A2) 142 gv_puts("[donor 3] " as *u8); gv_puts(DTG_A3); gv_puts("\n" as *u8) 143 let m3: i64 = dtg_measure(DTG_A3) 144 gv_puts("[donor 4] " as *u8); gv_puts(DTG_A4); gv_puts("\n" as *u8) 145 let m4: i64 = dtg_measure(DTG_A4) 146 147 var full: i64 = 0 148 if m1 == 15 { full = full + 1 } 149 if m2 == 15 { full = full + 1 } 150 if m3 == 15 { full = full + 1 } 151 if m4 == 15 { full = full + 1 } 152 153 gv_check("all-4-donors-carry-texc-and-texm (count bound in condition, empty set cannot pass)" as *u8, full == DTG_NDONOR, ctr) 154 gv_check("witch-texc-rows-equal-vert-rows (the desync refusal held)" as *u8, (m1 & 2) == 2, ctr) 155 gv_check("paladin-texc-rows-equal-vert-rows" as *u8, (m2 & 2) == 2, ctr) 156 gv_check("knight-texc-rows-equal-vert-rows" as *u8, (m3 & 2) == 2, ctr) 157 gv_check("toon3d8-texc-rows-equal-vert-rows" as *u8, (m4 & 2) == 2, ctr) 158 gv_check("witch-albedo-real-png-above-entropy-floor (a scalar flood cannot pass)" as *u8, (m1 & 4) == 4, ctr) 159 gv_check("paladin-albedo-real-png-above-entropy-floor" as *u8, (m2 & 4) == 4, ctr) 160 gv_check("knight-albedo-real-png-above-entropy-floor" as *u8, (m3 & 4) == 4, ctr) 161 gv_check("toon3d8-albedo-real-png-above-entropy-floor" as *u8, (m4 & 4) == 4, ctr) 162 gv_check("witch-uv-spread-and-multichart" as *u8, (m1 & 8) == 8, ctr) 163 gv_check("paladin-uv-spread-and-multichart" as *u8, (m2 & 8) == 8, ctr) 164 gv_check("knight-uv-spread-and-multichart" as *u8, (m3 & 8) == 8, ctr) 165 gv_check("toon3d8-uv-spread-and-multichart" as *u8, (m4 & 8) == 8, ctr) 166 167 gv_puts("[neg-control] " as *u8); gv_puts(DTG_BANKED); gv_puts("\n" as *u8) 168 let mb: i64 = dtg_measure(DTG_BANKED) 169 gv_check("neg-control-banked-pretexm-donor-fires (pre-fix artifact lacks TEXC+TEXM -- the gate can fail)" as *u8, (mb & 1) == 0, ctr) 170 171 return gv_verdict("NX-DONOR-TEXM" as *u8, ctr, "donor surfaces are DATA carried from the author, and the carry is proven on every donor" as *u8) 172}