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}