code wiki / (root) / nx_osattest_gate.nx

nx_osattest_gate.nx source

↩ module page · 317 lines · 20127 B

1// nx_osattest_gate.nx -- GATE for LR6 (lang.plan rung LR6, symbol nxos_lang_ring_attest). 2// 3// SUBJECT: the DEPLOYED nx_osattest organ, driven end-to-end against a COMPILER THE CALLER NAMES. 4// The compiler is argv[1] and is MANDATORY: this gate exists to compare a challenger compiler against 5// the live one, and a silent default would produce a fully-formed verdict about a stale leftover binary. 6// 7// WHAT IT PROVES ABOUT THE ATTESTER (not about the estate's cleanliness -- a REFUSED closure is data): 8// * its partition SUMS to the population it declares; 9// * a source that MUST be refused under a live mode is counted REFUSED and the DECLARED RULE is 10// NAMED, so a refusal for an unrelated reason cannot wear the mode's name; 11// * a clean source is still counted ATTESTED under that same live mode -- an attester that refused 12// everything would score perfectly on the refusal tooth alone; 13// * a mode that is NOT enforcing is UNOBSERVABLE and is counted NEITHER clean NOR refused. This is 14// the load-bearing neg-control: nx_compile_x86's long-flag dispatch keys on ONE BYTE (arg[2]), so an 15// unrecognised flag is SILENTLY IGNORED and the compile returns 0. The fixture axis BOGUS carries a 16// real-looking flag the compiler does not know; an attester that trusted flag NAMES would report it 17// ATTESTED, and its green would be indistinguishable from a true one. 18// 19// FIXTURES ARE ASSEMBLED AT RUNTIME under /tmp/nxosattg/ and every receipt this gate produces is written 20// THERE -- the production receipt at knowledge/status/ is never touched by a gate run. 21// The two closure subjects are REAL estate sources whose behaviour under --ptrprov is already gate-proven 22// by nx_boundscheck_gate (T5 in-range accepted, T9 const-OOB builds under default, T10 refused under 23// ptrprov), so the expectations here are inherited measurements, not this author's guesses. 24// 25// usage: nx_osattest_gate [organ_elf] [compiler_elf] (CWD = the tree root, like nx_cc_equiv_gate) 26// organ_elf defaults to ../nx_osattest.elf; SUBJECT-FIRST because that is where nx_gate_bite puts it. 27// compiler_elf defaults to the gate_compiler row of knowledge/lang_attest.conf, and with neither the 28// gate REFUSES -- the binary under test is always named, never found lying around. 29// license_tier: ORIGINAL No hw writes (Rule 26). 30import "nx_syscalls.nx" 31import "nx_gate_verdict.nx" 32import "nx_ccgate_lib.nx" 33import "nx_lineconf_lib.nx" 34 35// WHERE THE MEASURED COMPILER COMES FROM WHEN NO ARGV OVERRIDE IS GIVEN. This is NOT a silent default: 36// it is a DECLARED row in versioned data, the gate PRINTS which source it used, and the receipt carries 37// that compiler's sha256 -- so the binary under test is always NAMED. With neither argv nor the row the 38// gate REFUSES. It exists because /api/gate_run forwards no arguments (MEASURED 2026-08-25: it ran this 39// gate bare and correctly got the refusal, exit_code=2 verdict=RED), and a gate the roster can only ever 40// see RED is a gate everyone learns to ignore -- which is how a real detector becomes a comment. 41const OG_CONF: *u8 = "knowledge/lang_attest.conf" 42const OG_CCKEY: *u8 = "gate_compiler" 43const OG_CCW: i64 = 1024 44 45const OG_WORD: i64 = 8 46const OG_ARGV: i64 = 8 47 48// the attester's declared exit codes, mirrored here so a tooth compares against a NAME not a digit 49const OG_RC_OK: i64 = 0 50const OG_RC_USAGE: i64 = 2 51const OG_RC_UNPROVEN: i64 = 3 52 53func og_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 54 55// EVERY stderr write goes through here: a hand-counted length beside a literal is a second copy of that 56// literal's shape and the two drift silently. Derive it, never count it. 57func og_err(s: *u8) -> i64 { sys_write(2, s, og_len(s)); return 0 } 58 59// write a NUL-terminated string to path, length DERIVED from the string (never hand-counted beside it) 60func og_write(path: *u8, s: *u8) -> i64 { 61 let fd: i64 = sys_openat_wr(path, CCG_MODE_RW) 62 if fd < 0 { return 0 - 1 } 63 let n: i64 = og_len(s) 64 sys_write(fd, s, n) 65 sys_close(fd) 66 return n 67} 68 69// fork the organ with up to three arguments (0 = omit); returns its EXIT CODE. 70func og_run(elf: *u8, a1: *u8, a2: *u8, a3: *u8, outp: *u8, errp: *u8) -> i64 { 71 let a: *i64 = sys_mmap(OG_WORD * OG_ARGV) as *i64 72 var n: i64 = 0 73 a[n] = elf as i64; n = n + 1 74 if (a1 as i64) != 0 { a[n] = a1 as i64; n = n + 1 } 75 if (a2 as i64) != 0 { a[n] = a2 as i64; n = n + 1 } 76 if (a3 as i64) != 0 { a[n] = a3 as i64; n = n + 1 } 77 a[n] = 0 78 let ofd: i64 = sys_openat_wr(outp, CCG_MODE_RW) 79 let efd: i64 = sys_openat_wr(errp, CCG_MODE_RW) 80 let st: i64 = ccg_run(elf, a, ofd, efd) 81 sys_close(ofd) 82 sys_close(efd) 83 return wait_status_rc(st) 84} 85 86func og_exists(p: *u8) -> i64 { let fd: i64 = sys_openat_rd(p); if fd < 0 { return 0 } sys_close(fd); return 1 } 87 88// A CALLER HANDS US PATHS RELATIVE TO THE TREE ROOT, AND ccg_anchor_root MAY HAVE CHDIR'D INTO buildroot 89// UNDERNEATH THEM -- which silently invalidates every one of them. MEASURED 2026-08-25: nx_gate_bite 90// passes its rebuilt subject as `buildroot/_build/<t>.sov.elf`; after the anchor that resolves to 91// buildroot/buildroot/... , the file does not open, and the gate reads RED for a reason that has nothing 92// to do with its subject -- a red for the wrong reason, which is the easiest false proof to accept. 93// RESOLVE BY TRYING, never by assuming: the path as given, then the same path from the parent. Returns 94// 1 and fills `out`, or 0 when it resolves nowhere -- and 0 REFUSES rather than guessing a third form. 95func og_resolve(p: *u8, anchored: i64, out: *u8, cap: i64) -> i64 { 96 if og_exists(p) == 1 { 97 var i: i64 = 0 98 while p[i] != (0 as u8) { if i < cap - 1 { out[i] = p[i] } i = i + 1 } 99 out[i] = 0 as u8 100 return 1 101 } 102 if anchored == 1 { 103 out[0] = 46 as u8 104 out[1] = 46 as u8 105 out[2] = 47 as u8 106 var j: i64 = 0 107 while p[j] != (0 as u8) { if j + 3 < cap - 1 { out[j + 3] = p[j] } j = j + 1 } 108 out[j + 3] = 0 as u8 109 if og_exists(out) == 1 { return 1 } 110 } 111 out[0] = 0 as u8 112 return 0 113} 114 115// how many lines of `path` contain BOTH needles; -1 when the file cannot be read, so "could not look" 116// can never be mistaken for "zero matches". 117func og_lines2(path: *u8, n1: *u8, n2: *u8) -> i64 { return ccg_file_count_lines_with2(path, n1, n2) } 118 119func main(argc: i64, argv: *i64) -> i64 { 120 let anchored: i64 = ccg_anchor_root() 121 // THE ARGV ORDER IS THE MUTATION HARNESS'S, NOT THIS AUTHOR'S PREFERENCE. nx_gate_bite's end-to-end 122 // mode rebuilds the SUBJECT per mutant and hands it to the gate as argv[1]. MEASURED 2026-08-25: 123 // with the compiler in argv[1] the harness handed this gate the ORGAN as its "compiler", the baseline 124 // run went RED, and the bite reported UNCONTROLLED -- so the gate's non-vacuity could never be 125 // measured at all. Subject first, compiler second. 126 var organ_in: *u8 = "../nx_osattest.elf" 127 if argc >= 2 { organ_in = argv[1] as *u8 } 128 let organ: *u8 = sys_mmap(OG_CCW) 129 let organ_ok: i64 = og_resolve(organ_in, anchored, organ, OG_CCW) 130 var cc_in: *u8 = 0 as *u8 131 var cc_from_argv: i64 = 0 132 if argc >= 3 { cc_in = argv[2] as *u8; cc_from_argv = 1 } 133 if cc_from_argv == 0 { 134 let cb: *u8 = sys_mmap(OG_CCW) 135 if lcf_str_of(OG_CONF, OG_CCKEY, cb, OG_CCW) > 0 { cc_in = cb } 136 } 137 var cc: *u8 = 0 as *u8 138 if (cc_in as i64) != 0 { 139 let ccr: *u8 = sys_mmap(OG_CCW) 140 if og_resolve(cc_in, anchored, ccr, OG_CCW) == 1 { cc = ccr } 141 } 142 if (cc as i64) == 0 { 143 og_err("usage: nx_osattest_gate [organ_elf] [compiler_elf]\n" as *u8) 144 og_err("REFUSED: no compiler in argv and no gate_compiler row in knowledge/lang_attest.conf -- this gate measures a NAMED compiler and will not guess one.\n" as *u8) 145 sys_exit(OG_RC_USAGE) 146 return OG_RC_USAGE 147 } 148 149 let dir: *u8 = "/tmp/nxosattg" 150 sys_mkdir(dir, CCG_MODE_X) 151 let pid: i64 = ccg_pid() 152 let confA: *u8 = ccg_path("/tmp/nxosattg/a_" as *u8, pid, ".conf" as *u8) 153 let rcptA: *u8 = ccg_path("/tmp/nxosattg/a_" as *u8, pid, ".receipt" as *u8) 154 let outA: *u8 = ccg_path("/tmp/nxosattg/a_" as *u8, pid, ".out" as *u8) 155 let errA: *u8 = ccg_path("/tmp/nxosattg/a_" as *u8, pid, ".err" as *u8) 156 let confB: *u8 = ccg_path("/tmp/nxosattg/b_" as *u8, pid, ".conf" as *u8) 157 let rcptB: *u8 = ccg_path("/tmp/nxosattg/b_" as *u8, pid, ".receipt" as *u8) 158 let outB: *u8 = ccg_path("/tmp/nxosattg/b_" as *u8, pid, ".out" as *u8) 159 let errB: *u8 = ccg_path("/tmp/nxosattg/b_" as *u8, pid, ".err" as *u8) 160 let confC: *u8 = ccg_path("/tmp/nxosattg/c_" as *u8, pid, ".conf" as *u8) 161 let rcptC: *u8 = ccg_path("/tmp/nxosattg/c_" as *u8, pid, ".receipt" as *u8) 162 let outC: *u8 = ccg_path("/tmp/nxosattg/c_" as *u8, pid, ".out" as *u8) 163 let errC: *u8 = ccg_path("/tmp/nxosattg/c_" as *u8, pid, ".err" as *u8) 164 let outD: *u8 = ccg_path("/tmp/nxosattg/d_" as *u8, pid, ".out" as *u8) 165 let errD: *u8 = ccg_path("/tmp/nxosattg/d_" as *u8, pid, ".err" as *u8) 166 167 let ctr: *i64 = gv_ctr() 168 gv_head("=== nx_osattest_gate -- LR6 NishiOS/Browser language-ring attestation: the partition sums, a planted refusal is counted AND named, a clean source is still counted clean, and a silently-ignored flag reports UNOBSERVABLE instead of ATTESTED ===" as *u8) 169 170 var t0: i64 = 0 171 if og_exists(organ) == 1 { t0 = 1 } 172 gv_check("T0 organ-elf-present-before-any-verdict-about-it (an absent artifact is indistinguishable from a broken one)" as *u8, t0, ctr) 173 var t0b: i64 = 0 174 if og_exists(cc) == 1 { t0b = 1 } 175 gv_check("T0b named-compiler-present (the gate measures the compiler it was HANDED, never one it found)" as *u8, t0b, ctr) 176 // PRINTED, deliberately NOT a tooth: both branches are legitimate, so any check here would pass in 177 // every reachable state -- decoration wearing a verdict. T0b proves the resolved path exists and T16 178 // proves the receipt names it; this line only says WHICH source supplied it. 179 ccg_val("compiler_from_argv" as *u8, cc_from_argv) 180 181 // ---- fixture A: two real closures x four axes, one of which the compiler silently ignores ---- 182 og_write(confA, "closurehash_elf=../nx_closurehash.elf\nclosurehash_root=.\nscratch_dir=/tmp/nxosattg\nclosures=2\nclosure0_name=clean-control\nclosure0_target=nx_boundscheck\nclosure1_name=planted-refuse\nclosure1_target=nx_boundscheck_constidx\naxes=4\naxis0_id=PTR\naxis0_kind=refuse\naxis0_flag=--ptrprov\naxis0_probe=runtime/nx_boundscheck_constidx.nx\naxis0_accept=runtime/nx_boundscheck.nx\naxis0_rule=outside the allocation this pointer provably refers to\naxis1_id=BOGUS\naxis1_kind=refuse\naxis1_flag=--zqx-no-such-mode\naxis1_probe=runtime/nx_boundscheck_constidx.nx\naxis1_accept=runtime/nx_boundscheck.nx\naxis1_rule=outside the allocation this pointer provably refers to\naxis2_id=UNDECL\naxis2_kind=refuse\naxis2_flag=_UNDECLARED_\naxis2_probe=_UNDECLARED_\naxis2_accept=_UNDECLARED_\naxis2_rule=_UNDECLARED_\naxis3_id=CG\naxis3_kind=emit\naxis3_flag=--no-crash-guard\naxis3_probe=runtime/nx_option_enforce_ok.nx\naxis3_accept=runtime/nx_option_enforce_ok.nx\naxis3_rule=nx_crash_guard\n" as *u8) 183 let rcA: i64 = og_run(organ, cc, confA, rcptA, outA, errA) 184 ccg_val("runA_exit" as *u8, rcA) 185 186 var t1: i64 = 0 187 if rcA == OG_RC_OK { t1 = 1 } 188 gv_check("T1 runA-exit-code-CARRIES-the-attestation-verdict (a gate deriving GREEN from a printed line would bless a failing exit)" as *u8, t1, ctr) 189 190 let s_sum: i64 = og_lines2(rcptA, "partition attested=" as *u8, "sum=8 reconciles=1" as *u8) 191 ccg_val("partition_sum_lines" as *u8, s_sum) 192 var t2: i64 = 0 193 if s_sum == 1 { t2 = 1 } 194 gv_check("T2 partition-SUMS-to-the-declared-population-2x4=8 (an unexplained residual is a leak)" as *u8, t2, ctr) 195 196 let s_pop: i64 = og_lines2(rcptA, "population=8 " as *u8, "closures=2 axes=4" as *u8) 197 ccg_val("population_lines" as *u8, s_pop) 198 var t3: i64 = 0 199 if s_pop == 1 { t3 = 1 } 200 gv_check("T3 population-is-PRINTED-not-implied (the denominator every count below is read against)" as *u8, t3, ctr) 201 202 let s_base: i64 = og_lines2(rcptA, "closure=planted-refuse " as *u8, "default_build_rc=0" as *u8) 203 ccg_val("planted_default_build_rc0_lines" as *u8, s_base) 204 var t4: i64 = 0 205 if s_base == 1 { t4 = 1 } 206 gv_check("T4 fixture-REACHED-the-condition: the planted source DOES build under the default, so its refusal under the mode is attributable to the mode and not to broken fixture source" as *u8, t4, ctr) 207 208 let s_ref: i64 = og_lines2(rcptA, "cell=planted-refuse/PTR " as *u8, "verdict=REFUSED" as *u8) 209 ccg_val("planted_refused_lines" as *u8, s_ref) 210 var t5: i64 = 0 211 if s_ref == 1 { t5 = 1 } 212 gv_check("T5 planted-source-that-MUST-be-refused-under-a-live-mode-IS-counted-REFUSED" as *u8, t5, ctr) 213 214 let s_rule: i64 = og_lines2(rcptA, "cell=planted-refuse/PTR " as *u8, "reason=outside the allocation this pointer provably refers to" as *u8) 215 ccg_val("planted_rule_named_lines" as *u8, s_rule) 216 var t6: i64 = 0 217 if s_rule == 1 { t6 = 1 } 218 gv_check("T6 the-refusal-NAMES-the-declared-rule-not-merely-THAT-it-was-refused (a refusal for an unrelated reason must not wear the mode's name)" as *u8, t6, ctr) 219 220 let s_clean: i64 = og_lines2(rcptA, "cell=clean-control/PTR " as *u8, "verdict=ATTESTED" as *u8) 221 ccg_val("clean_attested_lines" as *u8, s_clean) 222 var t7: i64 = 0 223 if s_clean == 1 { t7 = 1 } 224 gv_check("T7 POSITIVE-CONTROL a clean source is still counted ATTESTED under that same live mode (an attester that refused everything scores perfectly on T5/T6 alone)" as *u8, t7, ctr) 225 226 let s_bog: i64 = og_lines2(rcptA, "axis=BOGUS " as *u8, "why=flag-not-enforcing" as *u8) 227 ccg_val("bogus_axis_not_enforcing_lines" as *u8, s_bog) 228 var t8: i64 = 0 229 if s_bog == 1 { t8 = 1 } 230 gv_check("T8 neg-control-SILENTLY-IGNORED-FLAG: a real-looking flag the compiler does not know is reported UNOBSERVABLE with that exact reason, never LIVE (the one-byte flag dispatch makes an unknown long flag a silent no-op returning 0)" as *u8, t8, ctr) 231 232 let s_bog_att: i64 = og_lines2(rcptA, "cell=clean-control/BOGUS " as *u8, "verdict=ATTESTED" as *u8) 233 ccg_val("bogus_counted_clean_lines" as *u8, s_bog_att) 234 var t9: i64 = 0 235 if s_bog_att == 0 { t9 = 1 } 236 gv_check("T9 an-UNOBSERVABLE-mode-is-NOT-counted-CLEAN (the abstention must not flatter the score)" as *u8, t9, ctr) 237 238 let s_bog_ref: i64 = og_lines2(rcptA, "cell=clean-control/BOGUS " as *u8, "verdict=REFUSED" as *u8) 239 ccg_val("bogus_counted_refused_lines" as *u8, s_bog_ref) 240 var t10: i64 = 0 241 if s_bog_ref == 0 { t10 = 1 } 242 gv_check("T10 an-UNOBSERVABLE-mode-is-NOT-counted-REFUSED either (it is a third state, not a rounding of the other two)" as *u8, t10, ctr) 243 244 let s_bog_uno: i64 = og_lines2(rcptA, "cell=clean-control/BOGUS " as *u8, "verdict=UNOBSERVABLE" as *u8) 245 ccg_val("bogus_unobservable_lines" as *u8, s_bog_uno) 246 var t11: i64 = 0 247 if s_bog_uno == 1 { t11 = 1 } 248 gv_check("T11 and-it-IS-positively-recorded-as-UNOBSERVABLE (T9+T10 alone would pass on a cell that vanished)" as *u8, t11, ctr) 249 250 let s_und: i64 = og_lines2(rcptA, "axis=UNDECL " as *u8, "why=flag-undeclared" as *u8) 251 ccg_val("undeclared_axis_lines" as *u8, s_und) 252 var t12: i64 = 0 253 if s_und == 1 { t12 = 1 } 254 gv_check("T12 a-rung-with-NO-compiler-flag-yet-reports-flag-undeclared, a DIFFERENT reason from a flag that exists and does not enforce" as *u8, t12, ctr) 255 256 let s_den: i64 = og_lines2(rcptA, "modes_live=2 of=4" as *u8, "unobservable_modes=BOGUS,UNDECL" as *u8) 257 ccg_val("denominator_and_names_lines" as *u8, s_den) 258 var t13: i64 = 0 259 if s_den == 1 { t13 = 1 } 260 gv_check("T13 the-DENOMINATOR-travels-with-the-score-and-the-missing-modes-are-NAMED (an abstention nobody reads is a lie nobody told)" as *u8, t13, ctr) 261 262 let s_cg: i64 = og_lines2(rcptA, "cell=clean-control/CG " as *u8, "reason=guard-marker-present-in-emitted-assembly" as *u8) 263 ccg_val("emit_axis_attested_lines" as *u8, s_cg) 264 var t14: i64 = 0 265 if s_cg == 1 { t14 = 1 } 266 gv_check("T14 the-EMIT-kind-axis-reads-the-crash-guard-out-of-the-baseline-assembly (a second kind of evidence, costing no extra compile)" as *u8, t14, ctr) 267 268 let s_cgprobe: i64 = og_lines2(rcptA, "axis=CG " as *u8, "why=two-sided-emit-probe-passed" as *u8) 269 ccg_val("emit_axis_twosided_lines" as *u8, s_cgprobe) 270 var t15: i64 = 0 271 if s_cgprobe == 1 { t15 = 1 } 272 gv_check("T15 the-emit-axis-is-proven-BOTH-WAYS: the marker appears by default AND vanishes under the opt-out, so its presence tracks the guard and not some unrelated string" as *u8, t15, ctr) 273 274 let s_cid: i64 = og_lines2(rcptA, "compiler=" as *u8, cc) 275 ccg_val("compiler_named_lines" as *u8, s_cid) 276 var t16: i64 = 0 277 if s_cid == 1 { t16 = 1 } 278 gv_check("T16 the-receipt-NAMES-the-compiler-it-measured (an attestation that cannot say what it measured is not evidence)" as *u8, t16, ctr) 279 280 // ---- fixture B: a subject that does not exist. It must ABSTAIN loudly, not attest. ---- 281 og_write(confB, "closurehash_elf=../nx_closurehash.elf\nclosurehash_root=.\nscratch_dir=/tmp/nxosattg\nclosures=1\nclosure0_name=absent-subject\nclosure0_target=nx_no_such_lr6_subject_exists\naxes=1\naxis0_id=PTR\naxis0_kind=refuse\naxis0_flag=--ptrprov\naxis0_probe=runtime/nx_boundscheck_constidx.nx\naxis0_accept=runtime/nx_boundscheck.nx\naxis0_rule=outside the allocation this pointer provably refers to\n" as *u8) 282 let rcB: i64 = og_run(organ, cc, confB, rcptB, outB, errB) 283 ccg_val("runB_exit" as *u8, rcB) 284 var t17: i64 = 0 285 if rcB == OG_RC_UNPROVEN { t17 = 1 } 286 gv_check("T17 neg-control-ABSENT-SUBJECT-exits-UNPROVEN-not-OK (a confident attestation over a subject that is not there is the worst outcome available to this organ)" as *u8, t17, ctr) 287 let s_sab: i64 = og_lines2(rcptB, "cell=absent-subject/PTR " as *u8, "verdict=SUBJECT-ABSENT" as *u8) 288 ccg_val("subject_absent_lines" as *u8, s_sab) 289 var t18: i64 = 0 290 if s_sab == 1 { t18 = 1 } 291 gv_check("T18 the-absent-subject-gets-its-OWN-bucket, never folded into a mode verdict" as *u8, t18, ctr) 292 var t19: i64 = 0 293 if ccg_file_has(rcptB, "NX-OSATTEST verdict=RED" as *u8) == 1 { t19 = 1 } 294 gv_check("T19 the-canonical-LAST-line-of-an-untrustworthy-attestation-reads-RED (positional anchor: nothing above it can be mistaken for the verdict)" as *u8, t19, ctr) 295 296 // ---- fixture C: a conf declaring an empty population ---- 297 og_write(confC, "closurehash_elf=../nx_closurehash.elf\nclosurehash_root=.\nscratch_dir=/tmp/nxosattg\nclosures=0\naxes=1\naxis0_id=PTR\naxis0_kind=refuse\naxis0_flag=--ptrprov\naxis0_probe=runtime/nx_boundscheck_constidx.nx\naxis0_accept=runtime/nx_boundscheck.nx\naxis0_rule=outside the allocation this pointer provably refers to\n" as *u8) 298 let rcC: i64 = og_run(organ, cc, confC, rcptC, outC, errC) 299 ccg_val("runC_exit" as *u8, rcC) 300 var t20: i64 = 0 301 if rcC == OG_RC_USAGE { t20 = 1 } 302 gv_check("T20 neg-control-EMPTY-POPULATION-is-REFUSED, never reported as a clean sweep (a tooth that passes on the empty set is not a tooth)" as *u8, t20, ctr) 303 304 // ---- fixture D: no compiler argument at all ---- 305 let rcD: i64 = og_run(organ, 0 as *u8, 0 as *u8, 0 as *u8, outD, errD) 306 ccg_val("runD_exit" as *u8, rcD) 307 var t21: i64 = 0 308 if rcD == OG_RC_USAGE { t21 = 1 } 309 gv_check("T21 neg-control-NO-COMPILER-ARGUMENT-is-REFUSED (no silent default: a verdict about an unnamed binary is not evidence)" as *u8, t21, ctr) 310 var t22: i64 = 0 311 if ccg_file_has(errD, "NO default compiler on purpose" as *u8) == 1 { t22 = 1 } 312 gv_check("T22 and-the-refusal-SAYS-WHICH-RULE-fired, so a caller cannot mistake it for a crash or a missing file" as *u8, t22, ctr) 313 314 let rc: i64 = gv_verdict("OSATTEST-LR6" as *u8, ctr, "nxos_lang_ring_attest end-to-end against a named compiler" as *u8) 315 sys_exit(rc) 316 return rc 317}