code wiki / _hdl_build / nx_ecomat_beat_gate.nx
nx_ecomat_beat_gate.nx source
↩ module page · 56 lines · 3336 B
1// nx_ecomat_beat_gate.nx -- proves the flywheel BEAT composes: on a test store, MEASURE (with the
2// live-derive) -> TARGET -> PUBLISH all succeed and chain. Uses /tmp fixtures, never the real loop.
3// license_tier: ORIGINAL
4import "nx_ecomat_lib.nx"
5import "nx_registry_lock.nx"
6
7func main() -> i64 {
8 var fails: i64 = 0
9 let szp: *i64 = sys_mmap(16) as *i64
10 // controlled live autonomy meter
11 ss_writefile("/tmp/ecomat_beat_autolog" as *u8, "AUTMETER permil=341\n" as *u8, 20)
12 // test store: gdom (cur1<bar4 -> a target) + autonomy (stored cur5, but live-derives to level 2)
13 let w: *i64 = ss_begin()
14 ec_seed_one(w, 0, 1, 16, 1, 4, 8, 1, "gdom" as *u8, "b" as *u8, "nrung" as *u8)
15 ec_seed_one_ev(w, 1, 2, 13, 5, 5, 9, 1, 1, "autonomy" as *u8, "b" as *u8, "n" as *u8, "/tmp/ecomat_beat_autolog" as *u8, "permil=" as *u8)
16 ss_commit("/tmp/ecomat_beatstore" as *u8, w, sys_now_realtime_sec())
17 let alog: *u8 = "/tmp/ecomat_beat_autolog" as *u8
18
19 // STAGE 1 MEASURE: gdom 1/bar4 + autonomy live-derived 2/bar5 => sum 3/9 => 333 (proves live-derive composed)
20 let out: *i64 = sys_mmap(256)
21 let v1: i64 = em_rollup_store("/tmp/ecomat_beatstore" as *u8, alog, out, 0)
22 _p("S1 measure : permil=" as *u8); _fn(1, out[0]); _p(" domains=" as *u8); _fn(1, out[2]); _p(" verdict=" as *u8); _fn(1, v1); _p("\n" as *u8)
23 if out[2] != 2 { fails = fails + 1 }
24 if out[0] != 333 { fails = fails + 1 }
25 if v1 != 0 { fails = fails + 1 }
26
27 // STAGE 2 TARGET: fresh test queue -> gdom emits 1 target (autonomy stored>=bar -> at-bar, no target)
28 ss_writefile("/tmp/ecomat_beatqueue" as *u8, "" as *u8, 0)
29 let qb: *u8 = ss_readall("/tmp/ecomat_beatqueue" as *u8, szp)
30 var qn: i64 = szp[0]; if qn < 0 { qn = 0 }
31 let lk: i64 = rt_lock("/tmp/ecomat_beatqueue.lock" as *u8)
32 let qf: i64 = sys_openat_append("/tmp/ecomat_beatqueue" as *u8, 0x1a4)
33 let tout: *i64 = sys_mmap(32)
34 et_emit_targets_core("/tmp/ecomat_beatstore" as *u8, qb, qn, qf, 0 - 1, tout)
35 if qf >= 0 { sys_close(qf) }
36 rt_unlock("/tmp/ecomat_beatqueue.lock" as *u8, lk)
37 _p("S2 target : emitted=" as *u8); _fn(1, tout[0]); _p(" done_marks=" as *u8); _fn(1, tout[1]); _p("\n" as *u8)
38 if tout[0] != 1 { fails = fails + 1 }
39 let q2: *u8 = ss_readall("/tmp/ecomat_beatqueue" as *u8, szp)
40 var qn2: i64 = szp[0]; if qn2 < 0 { qn2 = 0 }
41 if el_contains(q2, qn2, "GEN-MAT-gdom" as *u8) == 0 { fails = fails + 1 }
42
43 // STAGE 3 PUBLISH: page written, contains the live overall (333) + a domain
44 let pv: i64 = em_emit_page("/tmp/ecomat_beatstore" as *u8, alog, "/tmp/ecomat_beatpage.html" as *u8)
45 if pv != 0 { fails = fails + 1 }
46 let html: *u8 = ss_readall("/tmp/ecomat_beatpage.html" as *u8, szp)
47 var hn: i64 = szp[0]; if hn < 0 { hn = 0 }
48 if el_contains(html, hn, "333" as *u8) == 0 { fails = fails + 1 }
49 if el_contains(html, hn, "gdom" as *u8) == 0 { fails = fails + 1 }
50
51 _p("beat-gate compose (measure->target->publish) ... fails=" as *u8); _fn(1, fails); _p("\n" as *u8)
52 if fails == 0 { _p("GATE nx_ecomat_beat verdict=GREEN pass=8/8 (full flywheel cycle composes on a test store, live-derive included)\n" as *u8); sys_exit(0); return 0 }
53 _p("GATE nx_ecomat_beat verdict=RED fails=" as *u8); _fn(1, fails); _p("\n" as *u8)
54 sys_exit(1)
55 return 1
56}