code wiki / _hdl_build / nx_biotwin_board.nx

nx_biotwin_board.nx source

↩ module page · 327 lines · 21290 B

1// nx_biotwin_board.nx -- THE DIGITAL-HUMAN-TWIN CAPABILITY BOARD: how far is the ecosystem from a 2// credible human body twin, graded by the REGULATOR'S OWN RULER instead of one we invented? 3// 4// RULER = ASME V&V 40-2018 + FDA 2023 final guidance "Assessing the Credibility of Computational 5// Modeling and Simulation in Medical Device Submissions" -- already ingested and adversarially verified 6// 3-0 against PRIMARY ASME/FDA sources in our own corpus (cid 6199859983256447418). We did not author 7// this ruler and cannot bend it. Its central law: REQUIRED CREDIBILITY IS COMMENSURATE WITH MODEL RISK, 8// where model risk = model INFLUENCE x DECISION CONSEQUENCE, anchored to a declared Question of Interest 9// (QOI) and Context of Use (COU). A model credible for visualisation is NOT credible for a clinical 10// decision, and saying otherwise is the exact failure the guidance exists to stop. 11// 12// HONEST BY CONSTRUCTION: 13// - coverage is COMPUTED from the axis rows, never hand-written; 14// - every HAVE names an evidence artifact; nx_biotwin_board_gate stats each one on disk and liar-kills 15// any verdict whose artifact does not exist; 16// - readiness is reported PER QOI at its own COU tier, so a high visualisation score can never be 17// quoted as clinical readiness -- the number is bound to the claim it is allowed to support; 18// - the GAP QUEUE is demand-ranked (an axis blocking N questions outranks one blocking 1). That queue 19// IS the build order. 20// 21// ***THE FENCE (rule-26 never-brick, applied to bodies instead of hardware)*** 22// CLAUDE.md rule 26 forbids any capability that can brick hardware, and demands it be proven MECHANICALLY 23// rather than promised. The same construction is applied here to the two COU tiers where a wrong answer 24// injures a person instead of a device: 25// FENCE 1 (COU-3 clinical): an axis cannot score above GAP without in-vivo + population validation 26// evidence, which does not exist and cannot be faked past the gate. 27// FENCE 2 (COU-4 molecular/actuation): genomic target inference, edit/vector design emission, and any 28// wet-lab or patient actuation are OUT OF SCOPE BY LAW. This stack designs and simulates; it 29// never actuates on tissue or a person. 30// The fence is a CLAMP, not a comment: axclaim[] holds what anyone asserted, axv[] holds what the board 31// computes, and the clamp forces axv=GAP on every fenced axis. Axis 21 ships a DELIBERATE PLANTED LIE 32// (axclaim=HAVE) as a PERMANENT runtime neg-control -- if fence_blocked ever reads 0 the fence is dead 33// and the gate goes RED. The safety property is therefore re-proven on every single run, not asserted. 34// license_tier: ORIGINAL expect_exit: 0 35import "nx_syscalls.nx" 36const K_MAGIC_262144: i64 = 262144 37 38// ---- axis ids (COU tier in brackets) ---- 39// 0 surface-mesh-io [0] 1 volumetric-body-sdf [0] 2 skeletal-rig-deformation [0] 40// 3 skin-appearance-bssrdf [0] 4 internal-anatomy-render [0] 5 deterministic-render [0] 41// 6 photogrammetry-capture [1] 7 anatomical-landmarking [1] 8 morphometric-derivation [1] 42// 9 longitudinal-registration [1] 10 soft-tissue-fem-solver [2] 11 gravity-load-pose-reg [2] 43// 12 mesh-convergence-gci [2] 13 uncertainty-quantification [2] 14 code-verification-mms [2] 44// 15 bench-validation-phantom [2] 16 invivo-validation [3 FENCE] 17 population-validation [3 FENCE] 45// 18 clinical-decision-claim [3 FENCE] 19 genomic-target-infer [4 FENCE] 20 edit-vector-design [4 FENCE] 46// 21 wetlab-patient-actuation [4 FENCE] 47 48func ocat(o: *u8, at: i64, s: *u8) -> i64 { var i: i64=0; var a: i64=at; while s[i]!=(0 as u8){o[a]=s[i]; a=a+1; i=i+1} return a } 49func onum(o: *u8, at: i64, v: i64) -> i64 { 50 var a: i64=at; var m: i64=v 51 if m==0 { o[a]=48 as u8; return a+1 } 52 if m<0 { o[a]=45 as u8; a=a+1; m=0-m } 53 let t: *u8 = sys_mmap(32); var k: i64=0 54 while m>0 { t[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } 55 var q: i64=k-1 56 while q>=0 { o[a]=t[q]; a=a+1; q=q-1 } 57 return a 58} 59func bit(i: i64) -> i64 { var v: i64=1; var k: i64=0; while k<i { v=v*2; k=k+1 } return v } 60func hasbit(mask: i64, i: i64) -> i64 { let b: i64=bit(i); if (mask/b)%2==1 { return 1 } return 0 } 61func mk(a: i64,b: i64,c: i64,d: i64,e: i64,f: i64,g: i64,h: i64,i: i64,j: i64) -> i64 { 62 var m: i64=0 63 if a>=0 { m=m+bit(a) } 64 if b>=0 { m=m+bit(b) } 65 if c>=0 { m=m+bit(c) } 66 if d>=0 { m=m+bit(d) } 67 if e>=0 { m=m+bit(e) } 68 if f>=0 { m=m+bit(f) } 69 if g>=0 { m=m+bit(g) } 70 if h>=0 { m=m+bit(h) } 71 if i>=0 { m=m+bit(i) } 72 if j>=0 { m=m+bit(j) } 73 return m 74} 75func vstr(v: i64) -> *u8 { if v==2 { return "HAVE" as *u8 } if v==1 { return "PARTIAL" as *u8 } return "GAP" as *u8 } 76func fstr(f: i64) -> *u8 { 77 if f==2 { return "HARD-FENCED-BY-LAW" as *u8 } 78 if f==1 { return "FENCED-NEEDS-INVIVO" as *u8 } 79 return "open" as *u8 80} 81 82func main() -> i64 { 83 let NA: i64 = 22 84 let axnm: *i64 = sys_mmap(NA*8) as *i64 // axis name 85 let axcl: *i64 = sys_mmap(NA*8) as *i64 // CLAIMED verdict (what anyone asserted) 86 let axv: *i64 = sys_mmap(NA*8) as *i64 // COMPUTED verdict after the fence clamp 87 let axev: *i64 = sys_mmap(NA*8) as *i64 // evidence artifact (0 = none) 88 let axcou:*i64 = sys_mmap(NA*8) as *i64 // Context-of-Use tier 0..4 89 let axfn: *i64 = sys_mmap(NA*8) as *i64 // fence: 0 open, 1 needs-invivo, 2 hard-by-law 90 let axdm: *i64 = sys_mmap(NA*8) as *i64 // demand = questions of interest blocked 91 92 // ---- COU-0 VISUALISE: low model risk. This is where the Gx lane ALREADY lives; the graphics board's 93 // declared north star ("IRL anatomically-correct being INSIDE AND OUT") is exactly this tier. ---- 94 axnm[0]="surface-mesh-io" as i64; axcl[0]=2; axcou[0]=0; axfn[0]=0; axev[0]="knowledge/nx_bunny.png" as i64 95 axnm[1]="volumetric-body-sdf" as i64; axcl[1]=2; axcou[1]=0; axfn[1]=0; axev[1]="knowledge/nx_sdfbody.png" as i64 96 axnm[2]="skeletal-rig-deformation" as i64; axcl[2]=2; axcou[2]=0; axfn[2]=0; axev[2]="knowledge/nishi_being_walk.glb" as i64 97 axnm[3]="skin-appearance-bssrdf" as i64; axcl[3]=1; axcou[3]=0; axfn[3]=0; axev[3]="knowledge/nx_gx_sss_skin.png" as i64 98 // graphics board grades internal-anatomy-render PARTIAL with NO artifact -- so it carries none here. 99 axnm[4]="internal-anatomy-render" as i64; axcl[4]=1; axcou[4]=0; axfn[4]=0; axev[4]=0 100 // the sovereign EXCEED: bit-exact deterministic render (pixel-exact vs Microsoft WARP). Reproducibility 101 // is a first-class V&V40 credibility factor, so this is a genuine regulatory asset, not a graphics toy. 102 axnm[5]="deterministic-repeatable-render" as i64; axcl[5]=2; axcou[5]=0; axfn[5]=0; axev[5]="knowledge/nx_gx8_ssao.png" as i64 103 104 // ---- COU-1 MEASURE: turning geometry into numbers. morphometric-derivation is now PARTIAL -- the gap_queue 105 // rank-1 rung is BUILT (nx_biotwin_morphometrics: provenanced integer derivation from the SDF being, gated 106 // 6/6 + mutation-proven, own rule-26 promotion fence). Capture + landmarking are still GAP, which correctly 107 // caps the "derive from a scan" QOI. PARTIAL not HAVE: no propagated per-measurement UQ, single upright pose, 108 // synthetic substrate only. ---- 109 axnm[6]="photogrammetry-capture" as i64; axcl[6]=0; axcou[6]=1; axfn[6]=0; axev[6]=0 110 axnm[7]="anatomical-landmarking" as i64; axcl[7]=0; axcou[7]=1; axfn[7]=0; axev[7]=0 111 axnm[8]="morphometric-derivation" as i64; axcl[8]=1; axcou[8]=1; axfn[8]=0; axev[8]="knowledge/nx_biotwin_morphometrics.json" as i64 112 axnm[9]="longitudinal-registration" as i64; axcl[9]=0; axcou[9]=1; axfn[9]=0; axev[9]=0 113 114 // ---- COU-2 ENGINEERING TRADE STUDY: the surgical-planning tier. Needs real numerics + UQ. ---- 115 axnm[10]="soft-tissue-fem-solver" as i64; axcl[10]=0; axcou[10]=2; axfn[10]=0; axev[10]=0 116 axnm[11]="gravity-load-pose-registration" as i64; axcl[11]=0; axcou[11]=2; axfn[11]=0; axev[11]=0 117 axnm[12]="mesh-convergence-gci" as i64; axcl[12]=0; axcou[12]=2; axfn[12]=0; axev[12]=0 118 axnm[13]="uncertainty-quantification" as i64; axcl[13]=0; axcou[13]=2; axfn[13]=0; axev[13]=0 119 axnm[14]="code-verification-mms" as i64; axcl[14]=0; axcou[14]=2; axfn[14]=0; axev[14]=0 120 axnm[15]="bench-validation-phantom" as i64; axcl[15]=0; axcou[15]=2; axfn[15]=0; axev[15]=0 121 122 // ---- COU-3 CLINICAL: FENCE 1. No in-vivo apparatus, no IRB, no patients. Cannot be earned in software. ---- 123 axnm[16]="invivo-validation" as i64; axcl[16]=0; axcou[16]=3; axfn[16]=1; axev[16]=0 124 axnm[17]="population-validation" as i64; axcl[17]=0; axcou[17]=3; axfn[17]=1; axev[17]=0 125 axnm[18]="clinical-decision-claim" as i64; axcl[18]=0; axcou[18]=3; axfn[18]=1; axev[18]=0 126 127 // ---- COU-4 MOLECULAR / ACTUATION: FENCE 2. Out of scope by law, not by schedule. ---- 128 axnm[19]="genomic-target-inference" as i64; axcl[19]=0; axcou[19]=4; axfn[19]=2; axev[19]=0 129 axnm[20]="edit-or-vector-design-emission" as i64; axcl[20]=0; axcou[20]=4; axfn[20]=2; axev[20]=0 130 // ***PERMANENT PLANTED LIE / RUNTIME NEG-CONTROL*** -- axis 21 deliberately CLAIMS HAVE. The fence clamp 131 // below must force it to GAP on every run. If fence_blocked ever reports 0, the fence has died and the 132 // gate goes RED. This is how rule 26 demands safety be proven: mechanically, every time, not promised. 133 axnm[21]="wetlab-or-patient-actuation" as i64; axcl[21]=2; axcou[21]=4; axfn[21]=2; axev[21]=0 134 135 // ---- THE FENCE CLAMP: computed verdict = claim, EXCEPT a fenced axis is forced to GAP ---- 136 var fence_blocked: i64 = 0 137 var ai: i64 = 0 138 while ai < NA { 139 axv[ai] = axcl[ai] 140 if axfn[ai] >= 1 { 141 if axcl[ai] > 0 { fence_blocked = fence_blocked + 1 } 142 axv[ai] = 0 143 } 144 axdm[ai] = 0 145 ai = ai + 1 146 } 147 148 // ---- QUESTIONS OF INTEREST (the V&V40 anchor). Each declares its COU tier and required axes. ---- 149 let NQ: i64 = 8 150 let qnm: *i64 = sys_mmap(NQ*8) as *i64 151 let qmk: *i64 = sys_mmap(NQ*8) as *i64 152 let qcou:*i64 = sys_mmap(NQ*8) as *i64 153 let qrd: *i64 = sys_mmap(NQ*8) as *i64 154 let qfn: *i64 = sys_mmap(NQ*8) as *i64 155 156 qnm[0]="show a person a visual of their own body" as i64 157 qmk[0]=mk(0,1,2,3,4,5,-1,-1,-1,-1); qcou[0]=0 158 qnm[1]="derive morphometric measurements from a scan" as i64 159 qmk[1]=mk(0,5,6,7,8,-1,-1,-1,-1,-1); qcou[1]=1 160 qnm[2]="track morphological change over time" as i64 161 qmk[2]=mk(0,5,6,8,9,-1,-1,-1,-1,-1); qcou[2]=1 162 qnm[3]="predict soft-tissue shape under a planned intervention" as i64 163 qmk[3]=mk(0,8,10,11,12,13,14,15,-1,-1); qcou[3]=2 164 qnm[4]="inform a clinical decision about a specific patient" as i64 165 qmk[4]=mk(10,13,15,16,17,18,-1,-1,-1,-1); qcou[4]=3 166 qnm[5]="infer genomic targets from phenotype" as i64 167 qmk[5]=mk(8,19,-1,-1,-1,-1,-1,-1,-1,-1); qcou[5]=4 168 qnm[6]="emit an edit or delivery-vector design" as i64 169 qmk[6]=mk(19,20,-1,-1,-1,-1,-1,-1,-1,-1); qcou[6]=4 170 qnm[7]="actuate on tissue or a person" as i64 171 qmk[7]=mk(19,20,21,-1,-1,-1,-1,-1,-1,-1); qcou[7]=4 172 173 // ---- COMPUTE: demand per axis, readiness per QOI ---- 174 var qi: i64 = 0 175 while qi < NQ { 176 var got: i64 = 0; var need: i64 = 0; var fenced: i64 = 0 177 ai = 0 178 while ai < NA { 179 if hasbit(qmk[qi], ai)==1 { 180 need = need + 1 181 got = got + axv[ai] 182 axdm[ai] = axdm[ai] + 1 183 if axfn[ai] >= 1 { fenced = 1 } 184 } 185 ai = ai + 1 186 } 187 var r: i64 = 0 188 if need > 0 { r = (got*1000)/(need*2) } 189 qrd[qi] = r 190 qfn[qi] = fenced 191 qi = qi + 1 192 } 193 194 // coverage: unweighted, and demand-weighted. Fenced axes are EXCLUDED from the reachable denominator 195 // so the headline number describes what is actually buildable, not what is forbidden. 196 var csum: i64 = 0; var creach: i64 = 0 197 var dsum: i64 = 0; var dmax: i64 = 0 198 var nhave: i64 = 0; var npart: i64 = 0; var ngap: i64 = 0; var nfen: i64 = 0 199 ai = 0 200 while ai < NA { 201 csum = csum + axv[ai] 202 if axfn[ai]==0 { 203 creach = creach + 2 204 dsum = dsum + axv[ai]*axdm[ai] 205 dmax = dmax + 2*axdm[ai] 206 } 207 if axfn[ai]>=1 { nfen=nfen+1 } 208 if axfn[ai]==0 { if axv[ai]==2 { nhave=nhave+1 } } 209 if axfn[ai]==0 { if axv[ai]==1 { npart=npart+1 } } 210 if axfn[ai]==0 { if axv[ai]==0 { ngap=ngap+1 } } 211 ai = ai + 1 212 } 213 var reach_cov: i64 = 0 214 if creach > 0 { reach_cov = (csum*1000)/creach } 215 var dem_cov: i64 = 0 216 if dmax > 0 { dem_cov = (dsum*1000)/dmax } 217 218 // ---- EMIT JSON ---- 219 let jb: *u8 = sys_mmap(K_MAGIC_262144) 220 var j: i64 = 0 221 j = ocat(jb, j, "{\x22v\x22:1,\x22domain\x22:\x22biotwin\x22,\x22title\x22:\x22Digital Human Twin -- credibility board (ASME V&V40 / FDA 2023 ruler)\x22" as *u8) 222 j = ocat(jb, j, ",\x22ruler\x22:{\x22standard\x22:\x22ASME V&V 40-2018 + FDA 2023 final guidance on CM&S credibility in medical device submissions\x22" as *u8) 223 j = ocat(jb, j, ",\x22corpus_cid\x22:\x226199859983256447418\x22,\x22verification\x22:\x22adversarially verified 3-0 vs PRIMARY ASME/FDA sources (15 claims)\x22" as *u8) 224 j = ocat(jb, j, ",\x22law\x22:\x22required model credibility is COMMENSURATE with model risk = influence x decision consequence, anchored to a declared QOI + Context of Use\x22" as *u8) 225 j = ocat(jb, j, ",\x22doctrine\x22:\x22we did not author this ruler and cannot bend it -- a regulator wrote it\x22}" as *u8) 226 227 // axes 228 j = ocat(jb, j, ",\x22axes\x22:[" as *u8) 229 ai = 0 230 while ai < NA { 231 if ai>0 { j = ocat(jb, j, "," as *u8) } 232 j = ocat(jb, j, "{\x22axis\x22:\x22" as *u8); j = ocat(jb, j, axnm[ai] as *u8) 233 j = ocat(jb, j, "\x22,\x22cou_tier\x22:" as *u8); j = onum(jb, j, axcou[ai]) 234 j = ocat(jb, j, ",\x22verdict\x22:\x22" as *u8); j = ocat(jb, j, vstr(axv[ai])) 235 j = ocat(jb, j, "\x22,\x22claimed\x22:\x22" as *u8); j = ocat(jb, j, vstr(axcl[ai])) 236 j = ocat(jb, j, "\x22,\x22fence\x22:\x22" as *u8); j = ocat(jb, j, fstr(axfn[ai])) 237 j = ocat(jb, j, "\x22,\x22questions_blocked\x22:" as *u8); j = onum(jb, j, axdm[ai]) 238 j = ocat(jb, j, ",\x22artifact\x22:\x22" as *u8) 239 if axev[ai]!=0 { j = ocat(jb, j, axev[ai] as *u8) } 240 j = ocat(jb, j, "\x22}" as *u8) 241 ai = ai + 1 242 } 243 j = ocat(jb, j, "]" as *u8) 244 245 // questions of interest -- readiness BOUND to the claim it may support 246 j = ocat(jb, j, ",\x22questions_of_interest\x22:[" as *u8) 247 qi = 0 248 while qi < NQ { 249 if qi>0 { j = ocat(jb, j, "," as *u8) } 250 j = ocat(jb, j, "{\x22qoi\x22:\x22" as *u8); j = ocat(jb, j, qnm[qi] as *u8) 251 j = ocat(jb, j, "\x22,\x22cou_tier\x22:" as *u8); j = onum(jb, j, qcou[qi]) 252 j = ocat(jb, j, ",\x22readiness_permil\x22:" as *u8); j = onum(jb, j, qrd[qi]) 253 j = ocat(jb, j, ",\x22status\x22:\x22" as *u8) 254 if qfn[qi]==1 { j = ocat(jb, j, "FENCED -- not reachable by building software" as *u8) } 255 if qfn[qi]==0 { j = ocat(jb, j, "buildable" as *u8) } 256 j = ocat(jb, j, "\x22}" as *u8) 257 qi = qi + 1 258 } 259 j = ocat(jb, j, "]" as *u8) 260 261 // demand-ranked gap queue over REACHABLE axes only = the build order 262 j = ocat(jb, j, ",\x22gap_queue\x22:[" as *u8) 263 let used: *i64 = sys_mmap(NA*8) as *i64 264 ai = 0 265 while ai < NA { used[ai]=0; ai=ai+1 } 266 var emitted: i64 = 0 267 var rounds: i64 = 0 268 while rounds < NA { 269 var best: i64 = 0-1; var bestscore: i64 = 0-1 270 ai = 0 271 while ai < NA { 272 if used[ai]==0 { if axfn[ai]==0 { if axv[ai] < 2 { 273 var sc: i64 = axdm[ai]*10 274 if axv[ai]==0 { sc = sc + 5 } 275 if sc > bestscore { bestscore = sc; best = ai } 276 } } } 277 ai = ai + 1 278 } 279 if best >= 0 { 280 used[best] = 1 281 if emitted>0 { j = ocat(jb, j, "," as *u8) } 282 j = ocat(jb, j, "{\x22rank\x22:" as *u8); j = onum(jb, j, emitted+1) 283 j = ocat(jb, j, ",\x22axis\x22:\x22" as *u8); j = ocat(jb, j, axnm[best] as *u8) 284 j = ocat(jb, j, "\x22,\x22verdict\x22:\x22" as *u8); j = ocat(jb, j, vstr(axv[best])) 285 j = ocat(jb, j, "\x22,\x22cou_tier\x22:" as *u8); j = onum(jb, j, axcou[best]) 286 j = ocat(jb, j, ",\x22questions_blocked\x22:" as *u8); j = onum(jb, j, axdm[best]) 287 j = ocat(jb, j, "}" as *u8) 288 emitted = emitted + 1 289 } 290 rounds = rounds + 1 291 } 292 j = ocat(jb, j, "]" as *u8) 293 294 // computed scores 295 j = ocat(jb, j, ",\x22reachable_coverage_permil\x22:" as *u8); j = onum(jb, j, reach_cov) 296 j = ocat(jb, j, ",\x22demand_weighted_coverage_permil\x22:" as *u8); j = onum(jb, j, dem_cov) 297 j = ocat(jb, j, ",\x22have\x22:" as *u8); j = onum(jb, j, nhave) 298 j = ocat(jb, j, ",\x22partial\x22:" as *u8); j = onum(jb, j, npart) 299 j = ocat(jb, j, ",\x22gap\x22:" as *u8); j = onum(jb, j, ngap) 300 j = ocat(jb, j, ",\x22fenced\x22:" as *u8); j = onum(jb, j, nfen) 301 j = ocat(jb, j, ",\x22axes_total\x22:" as *u8); j = onum(jb, j, NA) 302 303 // ***the fence proof, re-run every invocation*** 304 j = ocat(jb, j, ",\x22fence_blocked\x22:" as *u8); j = onum(jb, j, fence_blocked) 305 j = ocat(jb, j, ",\x22fence_proof\x22:\x22axis 21 (wetlab-or-patient-actuation) ships a DELIBERATE claimed HAVE as a permanent runtime neg-control. The clamp must force it to GAP, so fence_blocked>=1 on every run. fence_blocked==0 means the fence is dead and the gate goes RED. Rule-26 construction: proven mechanically, never promised.\x22" as *u8) 306 307 // the honest deflation, in band 308 j = ocat(jb, j, ",\x22honest\x22:\x22Coverage measures CAPABILITY PRESENCE against the reachable axes only -- it is NOT clinical credibility. Zero axes carry in-vivo or population validation evidence, so under FDA 2023 step 3 every clinical Context of Use scores model risk HIGH against achieved validation ZERO. No output of this stack may inform a decision about a real person. Layer-1 visualisation is genuinely near-term; everything at COU>=3 is fenced, and COU-4 is fenced BY LAW rather than by schedule.\x22" as *u8) 309 310 // the science blocker, stated plainly so it cannot be re-litigated as an engineering problem 311 j = ocat(jb, j, ",\x22terminal_blocker\x22:{\x22claim\x22:\x22adult polygenic morphology is not editable post-development\x22" as *u8) 312 j = ocat(jb, j, ",\x22why\x22:\x22body-morphology traits are highly polygenic with small per-locus effect sizes, and the loci overwhelmingly act DEVELOPMENTALLY. Editing them in an adult does not retroactively rebuild an adult body. This is a biology blocker, not an engineering or regulatory one -- no amount of architecture, compute or capital moves it.\x22" as *u8) 313 j = ocat(jb, j, ",\x22consequence\x22:\x22a roadmap whose terminal node is elective polygenic morphological editing terminates in a wall. The reachable terminal node is RECONSTRUCTIVE and REGENERATIVE tissue work, which has real patients, real reimbursement and a real regulatory door.\x22}" as *u8) 314 315 // standing law collisions this domain forces -- file as DECISIONS, do not re-litigate per session 316 j = ocat(jb, j, ",\x22law_collisions\x22:[" as *u8) 317 j = ocat(jb, j, "{\x22law\x22:\x22no-float (K3 / model lane)\x22,\x22collides_with\x22:\x22FEM and UQ are float-heavy, numerically stiff problems; integer FEA is itself a research programme\x22,\x22decision_needed\x22:\x22grant the sim lane a float exemption benched against a float oracle (the c-cuda-bench-oracle-only precedent), or accept a multi-year integer-numerics detour\x22}," as *u8) 318 j = ocat(jb, j, "{\x22law\x22:\x22rule-13 additive-only, never DELETE production data\x22,\x22collides_with\x22:\x22GDPR Art.17 erasure over Art.9 special-category data; genomic + biometric is the most regulated data pair that exists (also HIPAA, GINA, BIPA)\x22,\x22decision_needed\x22:\x22crypto-shredding (keep the additive plane, destroy the per-subject key) is the only construction that satisfies BOTH laws -- ratify it before any human data is stored\x22}," as *u8) 319 j = ocat(jb, j, "{\x22law\x22:\x22sovereign-no-python + external-reimpls-bench-only (F616)\x22,\x22collides_with\x22:\x22the entire bio-ML toolchain (ESM/AlphaFold-class, Geneformer-class) is Python\x22,\x22decision_needed\x22:\x22those stay ORACLES, never dependencies -- which means COU-4 is a BENCH domain for years before it could ever be a BUILD domain\x22}]" as *u8) 320 321 j = ocat(jb, j, ",\x22method\x22:\x22verdict scores HAVE=2 PARTIAL=1 GAP=0. QOI readiness = sum(scores of required axes)*1000/(2*count). Reachable coverage excludes fenced axes from the denominator. gap_queue ranks by questions_blocked, GAP breaking ties above PARTIAL.\x22" as *u8) 322 j = ocat(jb, j, ",\x22gate\x22:\x22nx_biotwin_board_gate (liar-kill: every HAVE names an artifact that must exist on disk; the fence clamp must block the planted lie; the honesty and terminal_blocker blocks cannot rot out)\x22}" as *u8) 323 324 sys_write(1, jb, j) 325 sys_write(1, "\n" as *u8, 1) 326 return 0 327}