code wiki / _hdl_build / nx_fabric_fec_gate.nx
nx_fabric_fec_gate.nx source
↩ module page · 103 lines · 5567 B
1import "nx_gate_gn.nx"
2// nx_fabric_fec_gate.nx -- LIVE GATE for R3 (built-in resiliency: FEC vs ARQ over a lossy RTT link).
3// Proves proactive Reed-Solomon FEC (composing nx_room_fec) recovers losses with ~no round-trips, where
4// ARQ stalls an RTT per loss round -- on the SAME loss pattern -- with negative controls.
5//
6// criteria:
7// 1 baseline(ARQ) p99 latency >= 3 * R3(FEC) p99 (FEC tail >= 3x lower = no RTT-per-loss stalls)
8// 2 R3 byte_exact == 1 (EVERY reconstruction matches the original)
9// 3 baseline p99 >= 1 + RTT (ARQ really stalls >=1 RTT -- non-vacuous loss)
10// 4 R3 recovered_fec >= 90% of blocks (the common case is zero-retransmit recovery)
11// negative controls:
12// NC1 FEC with m=0 (no parity) -> bloat >= 3*R3 (the PARITY does the work, not the framing)
13// NC2 loss=0 -> R3 p99 <= 2 (the exceed is LOSS-driven, not a rigged speedup)
14// NC3 byte_exact across R3 + NC1 + NC2 (recovered data is always correct -- liar-kill)
15//
16// D001-MIGRATED 2026-08-01 (hand: the dry-apply emitter SKIPped this counter idiom): verdict now
17// inherits nx_gate_verdict (gv_ctr/gv_check/gv_verdict) so nx_gate_green can judge it; the durable
18// knowledge/status log frame is kept.
19// expect_exit: 0 license_tier: ORIGINAL
20import "nx_gate_verdict.nx"
21import "nx_fabric_fec.nx"
22
23func gp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
24func fdn(fd: i64, v: i64) -> i64 {
25 let b: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { m = 0 - m }
26 let t: *u8 = sys_mmap(28); var k: i64 = 0
27 if m == 0 { t[0] = 48 as u8; k = 1 }
28 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
29 var i: i64 = 0
30 while i < k { b[i] = t[k - 1 - i]; i = i + 1 }
31 sys_write(fd, b, k); return 0
32}
33func show(tag: *u8, m: *FecMetrics) -> i64 {
34 gp(tag); gp(": lat_p50=" as *u8); gn(m.lat_p50); gp(" lat_p99=" as *u8); gn(m.lat_p99)
35 gp(" recovered_fec=" as *u8); gn(m.recovered_fec); gp("/" as *u8); gn(m.blocks)
36 gp(" shards_sent=" as *u8); gn(m.shards_sent); gp(" byte_exact=" as *u8); gn(m.byte_exact); gp("\n" as *u8); return 0
37}
38
39func main() -> i64 {
40 let NB: i64 = 400
41 let k: i64 = 8
42 let m: i64 = 4 // parity shards
43 let S: i64 = 4
44 let RTT: i64 = 10
45 let P: i64 = 80 // 8% per-shard loss
46 let SEED: i64 = 12345
47
48 let ctr: *i64 = gv_ctr()
49 gv_head("nx_fabric_fec R3 gate -- proactive FEC vs ARQ over a lossy RTT link" as *u8)
50 gp("blocks=" as *u8); gn(NB); gp(" k=" as *u8); gn(k); gp(" m=" as *u8); gn(m); gp(" RTT=" as *u8); gn(RTT)
51 gp(" loss=" as *u8); gn(P); gp("/1000 (composes nx_room_fec GF(256) Reed-Solomon)\n" as *u8)
52
53 let r3: *FecMetrics = sys_mmap(64) as *FecMetrics
54 let base: *FecMetrics = sys_mmap(64) as *FecMetrics
55 let nc1: *FecMetrics = sys_mmap(64) as *FecMetrics
56 let nc2: *FecMetrics = sys_mmap(64) as *FecMetrics
57
58 fec_run(FB_FEC, NB, k, m, S, RTT, P, SEED, r3) // R3: k+m FEC
59 fec_run(FB_ARQ, NB, k, m, S, RTT, P, SEED, base) // baseline: ARQ retransmit
60 fec_run(FB_FEC, NB, k, 0, S, RTT, P, SEED, nc1) // NC1: FEC with NO parity
61 fec_run(FB_FEC, NB, k, m, S, RTT, 0, SEED, nc2) // NC2: zero loss
62
63 show("R3 (FEC k+m)" as *u8, r3)
64 show("BASELINE (ARQ retransmit)" as *u8, base)
65 show("NC1 (FEC m=0, no parity)" as *u8, nc1)
66 show("NC2 (FEC, zero loss)" as *u8, nc2)
67
68 var c1: i64 = 0; if r3.lat_p99 >= 1 { if base.lat_p99 >= 3 * r3.lat_p99 { c1 = 1 } }
69 gv_check("1 baseline(ARQ) p99 >= 3 * R3(FEC) p99 (no RTT-per-loss stalls)" as *u8, c1, ctr)
70
71 var c2: i64 = 0; if r3.byte_exact == 1 { c2 = 1 }
72 gv_check("2 R3 byte_exact == 1 (every reconstruction matches the original)" as *u8, c2, ctr)
73
74 var c3: i64 = 0; if base.lat_p99 >= 1 + RTT { c3 = 1 }
75 gv_check("3 baseline p99 >= 1+RTT (ARQ really stalls -- non-vacuous loss)" as *u8, c3, ctr)
76
77 // cross-multiply, never divide: a truncated bar with >= banks a false PASS
78 var c4: i64 = 0; if r3.recovered_fec * 10 >= NB * 9 { c4 = 1 }
79 gv_check("4 R3 recovered_fec >= 90% (common case = zero-retransmit recovery)" as *u8, c4, ctr)
80
81 var cn1: i64 = 0; if r3.lat_p99 >= 1 { if nc1.lat_p99 >= 3 * r3.lat_p99 { cn1 = 1 } }
82 gv_check("NC1 no parity -> bloat >= 3*R3 (the PARITY does the work)" as *u8, cn1, ctr)
83
84 var cn2: i64 = 0; if nc2.lat_p99 <= 2 { cn2 = 1 }
85 gv_check("NC2 zero loss -> R3 p99 <= 2 (exceed is LOSS-driven, not rigged)" as *u8, cn2, ctr)
86
87 var cn3: i64 = 0
88 if r3.byte_exact == 1 { if nc1.byte_exact == 1 { if nc2.byte_exact == 1 { cn3 = 1 } } }
89 gv_check("NC3 byte_exact across R3+NC1+NC2 (recovered data always correct)" as *u8, cn3, ctr)
90
91 let rc: i64 = gv_verdict("FABRIC-FEC-GATE" as *u8, ctr, "fec zero-rtt recovery + byte-exact + NC1/2/3" as *u8)
92
93 let lfd: i64 = sys_openat_append("knowledge/status/fabric_nx_fabric_fec.log" as *u8, 0x1a4)
94 if lfd >= 0 {
95 sys_write(lfd, "R3-FABRIC-FEC organ=nx_fabric_fec checks=" as *u8, 41)
96 fdn(lfd, ctr[0]); sys_write(lfd, "/" as *u8, 1); fdn(lfd, ctr[1])
97 if rc == 0 { sys_write(lfd, " fec-zero-rtt-recovery+byte-exact+NC1/2/3 verdict=GREEN\n" as *u8, 56) }
98 if rc != 0 { sys_write(lfd, " verdict=RED\n" as *u8, 13) }
99 sys_close(lfd)
100 }
101 sys_exit(rc)
102 return 0
103}