nx_flow_state_test.nx source
↩ module page · 248 lines · 8555 B
1// nx_flow_state_test.nx -- KAT for F1 flow classifier.
2
3import "nx_syscalls.nx"
4import "nx_etg.nx"
5import "nx_flow_state.nx"
6
7func main() -> i64 {
8 // ----- T1 Sealed-enum completeness -----
9 var i: i64 = 0
10 while i < NX_FLOW_STATE_N {
11 if nx_flow_state_is_valid(i) != 1 { return 1 + i }
12 i = i + 1
13 }
14 if nx_flow_state_is_valid(0 - 1) != 0 { return 100 }
15 if nx_flow_state_is_valid(NX_FLOW_STATE_N) != 0 { return 101 }
16 if nx_flow_state_is_valid(9999) != 0 { return 102 }
17
18 let buf: *u8 = sys_mmap(256)
19 let s: *NxFlowState = buf as *NxFlowState
20
21 // ----- T2 Initial state is NONE with all unsignaled -----
22 nx_flow_state_init(s, 0xDEADBEEF)
23 if s.verdict != NX_FLOW_STATE_NONE { return 110 }
24 if s.conditions_total != 9 { return 111 }
25 if s.cond_clear_goals != -1 { return 112 }
26 if s.cardinal_paywall_honored != 0 { return 113 }
27
28 // ----- T3 All 9 conditions met -> FLOW -----
29 nx_flow_state_init(s, 0xDEADBEEF)
30 s.cond_clear_goals = 1
31 s.cond_immediate_feedback = 1
32 s.cond_challenge_balance = 1
33 s.cond_action_merged = 1
34 s.cond_overhead_invisible = 1
35 s.cond_autotelic = 1
36 s.cond_concentration = 1
37 s.cond_control = 1
38 s.cond_cross_arch_parity = 1
39 let r3: i64 = nx_flow_classify(s)
40 if r3 != NX_FLOW_STATE_FLOW { return 120 }
41 if s.conditions_met != 9 { return 121 }
42
43 // ----- T4 7 conditions met -> NEAR_FLOW -----
44 nx_flow_state_init(s, 0xDEADBEEF)
45 s.cond_clear_goals = 1
46 s.cond_immediate_feedback = 1
47 s.cond_challenge_balance = 1
48 s.cond_action_merged = 1
49 s.cond_overhead_invisible = 1
50 s.cond_autotelic = 1
51 s.cond_concentration = 1
52 s.cond_control = 0 // explicitly not met
53 s.cond_cross_arch_parity = 0
54 let r4: i64 = nx_flow_classify(s)
55 if r4 != NX_FLOW_STATE_NEAR_FLOW { return 130 }
56 if s.conditions_met != 7 { return 131 }
57
58 // ----- T5 5 conditions met -> SLIPPING -----
59 nx_flow_state_init(s, 0xDEADBEEF)
60 s.cond_clear_goals = 1
61 s.cond_immediate_feedback = 1
62 s.cond_challenge_balance = 1
63 s.cond_action_merged = 1
64 s.cond_overhead_invisible = 1
65 s.cond_autotelic = 0
66 s.cond_concentration = 0
67 s.cond_control = 0
68 s.cond_cross_arch_parity = 0
69 let r5: i64 = nx_flow_classify(s)
70 if r5 != NX_FLOW_STATE_SLIPPING { return 140 }
71 if s.conditions_met != 5 { return 141 }
72
73 // ----- T6 3 conditions met -> NONE -----
74 nx_flow_state_init(s, 0xDEADBEEF)
75 s.cond_clear_goals = 1
76 s.cond_immediate_feedback = 1
77 s.cond_challenge_balance = 1
78 s.cond_action_merged = 0
79 s.cond_overhead_invisible = 0
80 s.cond_autotelic = 0
81 s.cond_concentration = 0
82 s.cond_control = 0
83 s.cond_cross_arch_parity = 0
84 let r6: i64 = nx_flow_classify(s)
85 if r6 != NX_FLOW_STATE_NONE { return 150 }
86
87 // ----- T7 Cardinal violation -> TILT regardless of condition count -----
88 nx_flow_state_init(s, 0xDEADBEEF)
89 s.cond_clear_goals = 1
90 s.cond_immediate_feedback = 1
91 s.cond_challenge_balance = 1
92 s.cond_action_merged = 1
93 s.cond_overhead_invisible = 1
94 s.cond_autotelic = 1
95 s.cond_concentration = 1
96 s.cond_control = 1
97 s.cond_cross_arch_parity = 1
98 s.cardinal_paywall_honored = 1 // P11 -- cardinal violation
99 let r7: i64 = nx_flow_classify(s)
100 if r7 != NX_FLOW_STATE_TILT { return 160 }
101
102 // ----- T8 Second-class resource cardinal -> TILT -----
103 nx_flow_state_init(s, 0xDEADBEEF)
104 s.cond_clear_goals = 1
105 s.cond_immediate_feedback = 1
106 s.cond_challenge_balance = 1
107 s.cond_action_merged = 1
108 s.cond_overhead_invisible = 1
109 s.cond_autotelic = 1
110 s.cond_concentration = 1
111 s.cond_control = 1
112 s.cond_cross_arch_parity = 1
113 s.cardinal_second_class_idle = 1 // P10
114 let r8: i64 = nx_flow_classify(s)
115 if r8 != NX_FLOW_STATE_TILT { return 170 }
116
117 // ----- T9 Single-arch overfit cardinal -> TILT -----
118 nx_flow_state_init(s, 0xDEADBEEF)
119 s.cond_clear_goals = 1
120 s.cond_immediate_feedback = 1
121 s.cond_challenge_balance = 1
122 s.cond_action_merged = 1
123 s.cond_overhead_invisible = 1
124 s.cond_autotelic = 1
125 s.cond_concentration = 1
126 s.cond_control = 1
127 s.cond_cross_arch_parity = 1
128 s.cardinal_single_arch_overfit = 1
129 let r9: i64 = nx_flow_classify(s)
130 if r9 != NX_FLOW_STATE_TILT { return 180 }
131
132 // ----- T10 Latency spike cardinal -> TILT -----
133 nx_flow_state_init(s, 0xDEADBEEF)
134 s.cond_clear_goals = 1
135 s.cond_immediate_feedback = 1
136 s.cond_challenge_balance = 1
137 s.cond_action_merged = 1
138 s.cond_overhead_invisible = 1
139 s.cond_autotelic = 1
140 s.cond_concentration = 1
141 s.cond_control = 1
142 s.cond_cross_arch_parity = 1
143 s.cardinal_latency_spike = 1
144 let r10: i64 = nx_flow_classify(s)
145 if r10 != NX_FLOW_STATE_TILT { return 190 }
146
147 // ----- T11 Insufficient signals -> BROKEN -----
148 nx_flow_state_init(s, 0xDEADBEEF)
149 s.cond_clear_goals = 1
150 s.cond_immediate_feedback = 1
151 s.cond_challenge_balance = 1
152 // remaining 6 conditions left at -1 (unsignaled)
153 let r11: i64 = nx_flow_classify(s)
154 if r11 != NX_FLOW_STATE_BROKEN { return 200 }
155
156 // ----- T12 BROKEN supersedes count-based verdicts -----
157 // Even if 7 of 8 signaled conditions are met, 1 unsignaled
158 // means we cannot claim NEAR_FLOW honestly.
159 nx_flow_state_init(s, 0xDEADBEEF)
160 s.cond_clear_goals = 1
161 s.cond_immediate_feedback = 1
162 s.cond_challenge_balance = 1
163 s.cond_action_merged = 1
164 s.cond_overhead_invisible = 1
165 s.cond_autotelic = 1
166 s.cond_concentration = 1
167 s.cond_control = 1
168 // cond_cross_arch_parity left -1
169 let r12: i64 = nx_flow_classify(s)
170 if r12 != NX_FLOW_STATE_BROKEN { return 210 }
171
172 // ----- T13 TILT supersedes BROKEN (cardinal violation found
173 // even with insufficient other signals -- the cardinal hit is
174 // substrate-honest definitive) -----
175 nx_flow_state_init(s, 0xDEADBEEF)
176 s.cardinal_paywall_honored = 1
177 // all conditions still -1
178 let r13: i64 = nx_flow_classify(s)
179 if r13 != NX_FLOW_STATE_TILT { return 220 }
180
181 // ----- T14 Attestation: FLOW -> CONFIRMED outcome -----
182 nx_flow_state_init(s, 0xDEADBEEF)
183 s.cond_clear_goals = 1
184 s.cond_immediate_feedback = 1
185 s.cond_challenge_balance = 1
186 s.cond_action_merged = 1
187 s.cond_overhead_invisible = 1
188 s.cond_autotelic = 1
189 s.cond_concentration = 1
190 s.cond_control = 1
191 s.cond_cross_arch_parity = 1
192 nx_flow_classify(s)
193 let e_buf: *u8 = sys_mmap(128)
194 let e: *NxEtgEntry = e_buf as *NxEtgEntry
195 let rc14: i64 = nx_flow_attest(s, e, NX_ETG_PROBE_CPU_ISA, 1, 20260520)
196 if rc14 != 0 { return 230 }
197 if e.outcome != NX_ETG_OUTCOME_CONFIRMED { return 231 }
198 if e.claim_value != 9 { return 232 }
199 if e.measurement_value != 9 { return 233 }
200 if s.attestation_hash == 0 { return 234 }
201
202 // ----- T15 Attestation: TILT -> FALSIFIED outcome -----
203 nx_flow_state_init(s, 0xDEADBEEF)
204 s.cardinal_paywall_honored = 1
205 nx_flow_classify(s)
206 let e15_buf: *u8 = sys_mmap(128)
207 let e15: *NxEtgEntry = e15_buf as *NxEtgEntry
208 let rc15: i64 = nx_flow_attest(s, e15, NX_ETG_PROBE_CPU_ISA, 1, 20260520)
209 if rc15 != 0 { return 240 }
210 if e15.outcome != NX_ETG_OUTCOME_FALSIFIED { return 241 }
211
212 // ----- T16 Attestation determinism: same inputs -> same hash -----
213 nx_flow_state_init(s, 0xC0DEC0DE)
214 s.cond_clear_goals = 1
215 s.cond_immediate_feedback = 1
216 s.cond_challenge_balance = 1
217 s.cond_action_merged = 1
218 s.cond_overhead_invisible = 1
219 s.cond_autotelic = 1
220 s.cond_concentration = 1
221 s.cond_control = 1
222 s.cond_cross_arch_parity = 1
223 nx_flow_classify(s)
224 let e16a_buf: *u8 = sys_mmap(128)
225 let e16a: *NxEtgEntry = e16a_buf as *NxEtgEntry
226 nx_flow_attest(s, e16a, NX_ETG_PROBE_CPU_ISA, 1, 20260520)
227 let hash_a: i64 = e16a.attestation_hash
228
229 let s2_buf: *u8 = sys_mmap(256)
230 let s2: *NxFlowState = s2_buf as *NxFlowState
231 nx_flow_state_init(s2, 0xC0DEC0DE)
232 s2.cond_clear_goals = 1
233 s2.cond_immediate_feedback = 1
234 s2.cond_challenge_balance = 1
235 s2.cond_action_merged = 1
236 s2.cond_overhead_invisible = 1
237 s2.cond_autotelic = 1
238 s2.cond_concentration = 1
239 s2.cond_control = 1
240 s2.cond_cross_arch_parity = 1
241 nx_flow_classify(s2)
242 let e16b_buf: *u8 = sys_mmap(128)
243 let e16b: *NxEtgEntry = e16b_buf as *NxEtgEntry
244 nx_flow_attest(s2, e16b, NX_ETG_PROBE_CPU_ISA, 1, 20260520)
245 if e16b.attestation_hash != hash_a { return 250 }
246
247 return 0
248}