code wiki / (root) / nx_twinreport_gate.nx

nx_twinreport_gate.nx source

↩ module page · 111 lines · 6955 B

1// nx_twinreport_gate.nx -- gate for the card-to-visible-result call (aesthetictwin AT42, 2026-09-17). In-process over 2// nx_twinreport_lib, composed with nx_compare_results_lib so the rows this organ writes are held to the grammar the results 3// page actually parses: a planted card is fitted, rendered from three views and appended; a card with no known axis and an 4// empty seed range refuse without writing; a repeated append supersedes itself on the page. Scratch lives in /tmp. 5// license_tier: ORIGINAL No hw writes (Rule 26). 6import "nx_syscalls.nx" 7import "nx_gate_verdict.nx" 8import "nx_twinreport_lib.nx" 9import "nx_compare_results_lib.nx" 10 11const RG_DIR: *u8 = "/tmp/nx_twinreport_gate" 12const RG_TARGET: *u8 = "/tmp/nx_twinreport_gate/planted.target" 13const RG_EMPTY_TARGET: *u8 = "/tmp/nx_twinreport_gate/empty.target" 14const RG_RESULTS: *u8 = "/tmp/nx_twinreport_gate/gate.results" 15const RG_HREF: *u8 = "/compare/fixtureboard/results/img/" 16const RG_SLUG: *u8 = "planted_card" 17const RG_CLOSE_PNG: *u8 = "/tmp/nx_twinreport_gate/planted_card_close.png" 18const RG_SEED_PNG: *u8 = "/tmp/nx_twinreport_gate/seed_3.png" 19const RG_MODE755: i64 = 493 20const RG_MODE644: i64 = 420 21const RG_PNG_SIG0: i64 = 137 22const RG_PNG_SIG1: i64 = 80 23const RG_VIEWS: i64 = 3 24const RG_SEED: i64 = 3 25const RG_PAGE_CAP: i64 = 262144 26const RG_REACHED: i64 = 4 27const RG_BYTE: i64 = 255 28 29func rg_write(path: *u8, s: *u8) -> i64 { 30 let fd: i64 = sys_openat_wr(path, RG_MODE644) 31 if fd < 0 { return 0 - 1 } 32 let n: i64 = ri_slen(s) 33 let k: i64 = sys_write(fd, s, n) 34 sys_close(fd) 35 return k 36} 37func rg_size(path: *u8) -> i64 { 38 let fl: *i64 = sys_mmap(2 * TW_I64) as *i64 39 fl[0] = 0 40 let b: *u8 = sys_read_file(path, fl) 41 if (b as i64) == 0 { return 0 - 1 } 42 return fl[0] 43} 44func rg_is_png(path: *u8) -> i64 { 45 let fl: *i64 = sys_mmap(2 * TW_I64) as *i64 46 fl[0] = 0 47 let b: *u8 = sys_read_file(path, fl) 48 if (b as i64) == 0 { return 0 } 49 if fl[0] < 2 { return 0 } 50 if ((b[0] as i64) & RG_BYTE) != RG_PNG_SIG0 { return 0 } 51 if ((b[1] as i64) & RG_BYTE) != RG_PNG_SIG1 { return 0 } 52 return 1 53} 54func main(argc: i64, argv: *i64) -> i64 { 55 gv_head("nx_twinreport_gate: a card becomes renders and result rows in one call" as *u8) 56 let ctr: *i64 = gv_ctr() 57 sys_mkdir(RG_DIR, RG_MODE755) 58 // a clean slate every run: the results file starts empty, so a second run of this gate reads the same counts 59 rg_write(RG_RESULTS, "" as *u8) 60 gv_need("fixture-the-planted-card-is-on-disk" as *u8, (rg_write(RG_TARGET, "axis|canthal_tilt_R|76|33\naxis|canthal_tilt_L|91|18\naxis|intercanthal_index|354|11\naxis|intercanthal_eq_fissure|1087|46\naxis|upper_over_lower_lip|607|130\n" as *u8) > 0) as i64, ctr) 61 gv_need("fixture-the-axisless-card-is-on-disk" as *u8, (rg_write(RG_EMPTY_TARGET, "axis|no_such_axis|1|1\n" as *u8) > 0) as i64, ctr) 62 let base: i64 = sys_mmap(sdf_bytes()) as i64 63 let rep: *i64 = sys_mmap(TWR_R_N * TW_I64) as *i64 64 // refusals first, against the empty results file: neither may write a byte 65 gv_check_eq("neg-control-a-card-with-no-known-axis-refuses" as *u8, twr_fit_report(base, RG_SLUG, RG_EMPTY_TARGET, RG_DIR, RG_HREF, RG_RESULTS, rep), TWR_E_NOTARGET, ctr) 66 gv_check_eq("neg-control-an-empty-seed-range-refuses" as *u8, twr_seed_report(base, 2, 1, RG_DIR, RG_HREF, RG_RESULTS, rep), TWR_E_RANGE, ctr) 67 gv_check_eq("neg-control-a-refusal-appends-nothing" as *u8, rg_size(RG_RESULTS), 0, ctr) 68 // the planted card 69 gv_check_eq("the-planted-card-reports" as *u8, twr_fit_report(base, RG_SLUG, RG_TARGET, RG_DIR, RG_HREF, RG_RESULTS, rep), 0, ctr) 70 gv_check_eq("three-views-rendered" as *u8, rep[TWR_R_RENDERS], RG_VIEWS, ctr) 71 gv_check_eq("three-rows-appended" as *u8, rep[TWR_R_ROWS], RG_VIEWS, ctr) 72 gv_check_eq("the-four-stated-eye-axes-are-reached" as *u8, rep[TWR_R_REACHED], RG_REACHED, ctr) 73 gv_check_eq("the-lip-axis-the-generator-cannot-state-is-unstated" as *u8, rep[TWR_R_UNSTATED], 1, ctr) 74 gv_check_eq("the-answer-is-confirmed-on-the-surface" as *u8, rep[TWR_R_CONFIRMED], 1, ctr) 75 gv_check_eq("the-close-up-on-disk-is-a-png" as *u8, rg_is_png(RG_CLOSE_PNG), 1, ctr) 76 gv_check_eq("the-appended-bytes-are-the-file" as *u8, rg_size(RG_RESULTS), rep[TWR_R_ROW_BYTES], ctr) 77 let fit_evals: i64 = rep[TWR_R_EVALS] 78 let fit_row_bytes: i64 = rep[TWR_R_ROW_BYTES] 79 // one synthetic person 80 gv_check_eq("one-seed-reports" as *u8, twr_seed_report(base, RG_SEED, RG_SEED, RG_DIR, RG_HREF, RG_RESULTS, rep), 0, ctr) 81 gv_check_eq("one-seed-row-appended" as *u8, rep[TWR_R_ROWS], 1, ctr) 82 gv_check_eq("the-seed-render-on-disk-is-a-png" as *u8, rg_is_png(RG_SEED_PNG), 1, ctr) 83 // the standing plan runs daily: a second identical report must not grow the results file 84 let size_before: i64 = rg_size(RG_RESULTS) 85 gv_check_eq("a-second-identical-seed-report-still-reports" as *u8, twr_seed_report(base, RG_SEED, RG_SEED, RG_DIR, RG_HREF, RG_RESULTS, rep), 0, ctr) 86 gv_check_eq("neg-control-and-appends-no-row" as *u8, rep[TWR_R_ROWS], 0, ctr) 87 gv_check_eq("the-unchanged-row-is-counted" as *u8, rep[TWR_R_UNCHANGED], 1, ctr) 88 gv_check_eq("the-results-file-did-not-grow" as *u8, rg_size(RG_RESULTS), size_before, ctr) 89 // the rows are held to the grammar the results page parses: every row well formed, none malformed 90 let fl: *i64 = sys_mmap(2 * TW_I64) as *i64 91 fl[0] = 0 92 let buf: *u8 = sys_read_file(RG_RESULTS, fl) 93 let out: *u8 = sys_mmap(RG_PAGE_CAP) 94 let crep: *i64 = sys_mmap(CRES_R_N * CRES_I64) as *i64 95 let hn: i64 = cres_render("fixtureboard" as *u8, buf, fl[0], 0 as *u8, 0, out, RG_PAGE_CAP, crep) 96 gv_check("the-results-page-renders-from-these-rows" as *u8, (hn > 0) as i64, ctr) 97 gv_check_eq("every-row-parses-as-a-result" as *u8, crep[CRES_R_ROWS], RG_VIEWS + 1, ctr) 98 gv_check_eq("neg-control-no-row-is-malformed" as *u8, crep[CRES_R_MALFORMED], 0, ctr) 99 gv_check_eq("every-image-is-click-to-open" as *u8, crep[CRES_R_CLICK], RG_VIEWS + 1, ctr) 100 gv_check_eq("no-bare-media-on-the-page" as *u8, crep[CRES_R_BARE], 0, ctr) 101 // a repeated report supersedes itself: the same rows appended again leave the same live set 102 twr_append(RG_RESULTS, buf, fl[0]) 103 fl[0] = 0 104 let buf2: *u8 = sys_read_file(RG_RESULTS, fl) 105 cres_render("fixtureboard" as *u8, buf2, fl[0], 0 as *u8, 0, out, RG_PAGE_CAP, crep) 106 gv_check_eq("a-repeated-report-supersedes-its-own-rows" as *u8, crep[CRES_R_SUPERSEDED], RG_VIEWS + 1, ctr) 107 gv_check_eq("and-the-live-set-is-unchanged" as *u8, crep[CRES_R_LIVE], RG_VIEWS + 1, ctr) 108 gv_values_head() 109 gv_kv("fit_genomes_evaluated" as *u8, fit_evals); gv_kv("fit_row_bytes" as *u8, fit_row_bytes); gv_kv("page_bytes" as *u8, hn) 110 return gv_verdict("nx_twinreport_gate" as *u8, ctr, "a planted card fitted, rendered and appended as result rows the results page parses, with both refusals writing nothing" as *u8) 111}