code wiki / _hdl_build / nx_ecomat_domtrend_gate.nx

nx_ecomat_domtrend_gate.nx source

↩ module page · 73 lines · 6726 B

1// nx_ecomat_domtrend_gate.nx -- proves EXACT attribution: a domain that CLIMBED is never confused 2// with a domain that was merely DECLARED. 3// 4// THE PAYOFF TOOTH IS T3+T4. The fixture moves sum_cur from 3 to 5 while the domain count goes 2->3. 5// Given only the AGGREGATE ledger that span is unattributable -- nx_ecomat_trend must bucket all of 6// it as AMBIGUOUS, which is exactly why live decomposability sat at 406 permil. Given the per-domain 7// ledger the same span resolves to advance=1 (alpha climbed 2->3) and expansion=1 (gamma declared 8// at 1). Same numbers in, a real answer out. That difference IS the debt being closed. 9// license_tier: ORIGINAL No hw writes (Rule 26). 10import "nx_ecomat_domtrend_lib.nx" 11import "nx_gate_verdict.nx" 12 13func dg2_eq(a: i64, b: i64) -> i64 { if a == b { return 1 } return 0 } 14 15func main(argc: i64, argv: *i64) -> i64 { 16 let ctr: *i64 = gv_ctr() 17 gv_head("nx_ecomat_domtrend -- a rung CLIMBED vs a domain DECLARED, told apart by name" as *u8) 18 19 let out: *i64 = sys_mmap(DT_OUT_SLOTS * 8) as *i64 20 21 let fx: *u8 = "ECOMATDOM epoch=100 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM epoch=100 domain=beta cur=1 bar=5 tri=1\nECOMATDOM-END epoch=100 domains=2 sum_cur=3 sum_bar=10 coverage_complete=1\nECOMATDOM epoch=200 domain=alpha cur=3 bar=5 tri=2\nECOMATDOM epoch=200 domain=beta cur=1 bar=5 tri=1\nECOMATDOM epoch=200 domain=gamma cur=1 bar=5 tri=0\nECOMATDOM-END epoch=200 domains=3 sum_cur=5 sum_bar=15 coverage_complete=1\n" as *u8 22 let TRUNCFX: *u8 = "ECOMATDOM epoch=100 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM epoch=100 domain=beta cur=2 bar=5 tri=1\nECOMATDOM-END epoch=100 domains=2 sum_cur=4 sum_bar=10 coverage_complete=1\nECOMATDOM epoch=200 domain=alpha cur=2 bar=5 tri=2\n" as *u8 23 let NOTDONEFX: *u8 = "ECOMATDOM epoch=100 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM-END epoch=100 domains=1 sum_cur=2 sum_bar=5 coverage_complete=1\nECOMATDOM epoch=200 domain=alpha cur=3 bar=5 tri=2\nECOMATDOM-END epoch=200 domains=1 sum_cur=3 sum_bar=5 coverage_complete=0\n" as *u8 24 let MISCOUNTFX: *u8 = "ECOMATDOM epoch=100 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM-END epoch=100 domains=1 sum_cur=2 sum_bar=5 coverage_complete=1\nECOMATDOM epoch=200 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM epoch=200 domain=beta cur=1 bar=5 tri=1\nECOMATDOM-END epoch=200 domains=3 sum_cur=5 sum_bar=15 coverage_complete=1\n" as *u8 25 let rc: i64 = em_domtrend_buf(fx, el_len(fx), out) 26 27 gv_check("T1 the per-domain ledger decomposes (rc=0)" as *u8, dg2_eq(rc, 0), ctr) 28 gv_check("T2 END rows carry no domain= and are skipped, not counted as a domain" as *u8, dg2_eq(out[DTO_ROWS], 5), ctr) 29 30 gv_check("T3 PAYOFF advancement is EXACTLY 1 -- only alpha actually climbed" as *u8, dg2_eq(out[DTO_ADVANCE], 1), ctr) 31 gv_check("T4 PAYOFF the newly declared domain is EXPANSION (cur 1), never advancement" as *u8, dg2_eq(out[DTO_EXPAND_CUR], 1), ctr) 32 gv_check("T5 expansion carries its bar too (+5)" as *u8, dg2_eq(out[DTO_EXPAND_BAR], 5), ctr) 33 gv_check("T6 two domains are common to both beats" as *u8, dg2_eq(out[DTO_COMMON], 2), ctr) 34 gv_check("T7 exactly one domain is new" as *u8, dg2_eq(out[DTO_NEW], 1), ctr) 35 gv_check("T8 attribution is TOTAL (1000 permil) -- nothing is left ambiguous" as *u8, dg2_eq(out[DTO_DECOMP_PERMIL], TR_PERMIL), ctr) 36 37 gv_check("T9 CONSERVATION advance + expansion == the aggregate delta (2)" as *u8, dg2_eq(out[DTO_ADVANCE] + out[DTO_EXPAND_CUR], 2), ctr) 38 39 let flat: *u8 = "ECOMATDOM epoch=100 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM-END epoch=100 domains=1 sum_cur=2 sum_bar=5 coverage_complete=1\nECOMATDOM epoch=200 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM-END epoch=200 domains=1 sum_cur=2 sum_bar=5 coverage_complete=1\n" as *u8 40 let rcf: i64 = em_domtrend_buf(flat, el_len(flat), out) 41 var t10: i64 = 0 42 if rcf == 0 { if dg2_eq(out[DTO_ADVANCE], 0) == 1 { if dg2_eq(out[DTO_NEW], 0) == 1 { t10 = 1 } } } 43 gv_check("T10 NEG-CONTROL identical beats => advancement 0, no phantom movement" as *u8, t10, ctr) 44 45 let drop: *u8 = "ECOMATDOM epoch=100 domain=alpha cur=3 bar=5 tri=2\nECOMATDOM-END epoch=100 domains=1 sum_cur=3 sum_bar=5 coverage_complete=1\nECOMATDOM epoch=200 domain=alpha cur=1 bar=5 tri=2\nECOMATDOM-END epoch=200 domains=1 sum_cur=1 sum_bar=5 coverage_complete=1\n" as *u8 46 let rcd: i64 = em_domtrend_buf(drop, el_len(drop), out) 47 var t11: i64 = 0 48 if rcd == 0 { if dg2_eq(out[DTO_ADVANCE], 0 - 2) == 1 { t11 = 1 } } 49 gv_check("T11 a demoted domain reports a SIGNED loss (-2), never clamped at zero" as *u8, t11, ctr) 50 51 let gone: *u8 = "ECOMATDOM epoch=100 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM epoch=100 domain=beta cur=2 bar=5 tri=1\nECOMATDOM-END epoch=100 domains=2 sum_cur=4 sum_bar=10 coverage_complete=1\nECOMATDOM epoch=200 domain=alpha cur=2 bar=5 tri=2\nECOMATDOM-END epoch=200 domains=1 sum_cur=2 sum_bar=5 coverage_complete=1\n" as *u8 52 let rcg: i64 = em_domtrend_buf(gone, el_len(gone), out) 53 var t12: i64 = 0 54 if rcg == 0 { if dg2_eq(out[DTO_RETIRED_CUR], 2) == 1 { if dg2_eq(out[DTO_ADVANCE], 0) == 1 { t12 = 1 } } } 55 gv_check("T12 a retired domain's levels are RETIRED, not charged against advancement" as *u8, t12, ctr) 56 57 let one: *u8 = "ECOMATDOM epoch=100 domain=alpha cur=2 bar=5 tri=2\n" as *u8 58 gv_check("T13 a single beat REFUSES (nothing to difference)" as *u8, dg2_eq(em_domtrend_buf(one, el_len(one), out), DT_ERR_ONEBEAT), ctr) 59 gv_check("T14 an empty ledger REFUSES (absent != flat)" as *u8, dg2_eq(em_domtrend_buf(one, 0, out), DT_ERR_NOLOG), ctr) 60 61 // ---- THE UGLY FIXTURES: a beat the writer did not finish. Added after self-audit: this gate 62 // passed 14/14 for an hour while the lib fabricated retirements, because EVERY fixture was 63 // well-formed. A GATE IS ONLY AS HONEST AS ITS UGLIEST FIXTURE. 64 // T15's rows are IDENTICAL to the `gone` fixture, so before the terminator check the lib 65 // returned rc=0 and reported retired=2 as FACT. It is the non-vacuity tooth. 66 gv_check("T15 UGLY final beat has NO terminator => REFUSE, never a fabricated retirement" as *u8, dg2_eq(em_domtrend_buf(TRUNCFX, el_len(TRUNCFX), out), DT_ERR_TRUNCATED), ctr) 67 gv_check("T16 UGLY terminator says coverage_complete=0 => REFUSE" as *u8, dg2_eq(em_domtrend_buf(NOTDONEFX, el_len(NOTDONEFX), out), DT_ERR_TRUNCATED), ctr) 68 gv_check("T17 UGLY terminator count disagrees with rows present => REFUSE" as *u8, dg2_eq(em_domtrend_buf(MISCOUNTFX, el_len(MISCOUNTFX), out), DT_ERR_TRUNCATED), ctr) 69 70 let rcv: i64 = gv_verdict("ECOMAT-DOMTREND" as *u8, ctr, "exact per-name attribution: climbed, declared, demoted and retired are four different things" as *u8) 71 sys_exit(rcv) 72 return rcv 73}