nx_plan_svc_test.nx source
↩ module page · 237 lines · 11338 B
1// nx_plan_svc_test.nx -- gate for the production-plan facade. Drives the
2// assess verb the way an operator would -- a product concept as one argv -- and
3// proves the plan JSON names the right next gap, action, and (when legally
4// blocked) the offending ingredient. Fourth facade, same base.
5// expect_exit: 0 license_tier: ORIGINAL
6import "nx_syscalls.nx"
7import "nx_service.nx"
8import "nx_supp_ingredient.nx"
9import "nx_prodready.nx"
10import "nx_plan_svc.nx"
11
12func t_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
13func t_putn(v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { m = 0 - m; sys_write(1, "-" as *u8, 1) } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, bb, k); return 0 }
14
15func j_has(j: *NxJson, needle: *u8) -> i64 {
16 var nn: i64 = 0
17 while needle[nn] != (0 as u8) { nn = nn + 1 }
18 if nn == 0 { return 0 }
19 let b: *u8 = j.buf
20 let last: i64 = j.off - nn
21 var i: i64 = 0
22 var found: i64 = 0
23 while i <= last {
24 if found == 0 {
25 var m: i64 = 0
26 var ok: i64 = 1
27 while m < nn { if b[i + m] != needle[m] { ok = 0 } m = m + 1 }
28 if ok == 1 { found = 1 }
29 }
30 i = i + 1
31 }
32 return found
33}
34
35func numstr(v: i64) -> *u8 {
36 let b: *u8 = sys_mmap(24)
37 var m: i64 = v
38 if m < 0 { m = 0 - m }
39 if m == 0 { b[0] = 48 as u8; b[1] = 0 as u8; return b }
40 let t: *u8 = sys_mmap(24)
41 var k: i64 = 0
42 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
43 var i: i64 = 0
44 while i < k { b[i] = t[k - 1 - i]; i = i + 1 }
45 b[k] = 0 as u8
46 return b
47}
48
49// Full 13-token argv for assess: verb + 11 concept args.
50func mk_assess(mask: i64, market: i64, fmt: i64, retail: i64, margin: i64, servings: i64, maxu: i64, idr: i64, gmp: i64, cl: i64, coa: i64) -> *i64 {
51 let av: *i64 = sys_mmap(128)
52 av[0] = "nx_plan_svc" as i64
53 av[1] = "assess" as i64
54 av[2] = numstr(mask) as i64
55 av[3] = numstr(market) as i64
56 av[4] = numstr(fmt) as i64
57 av[5] = numstr(retail) as i64
58 av[6] = numstr(margin) as i64
59 av[7] = numstr(servings) as i64
60 av[8] = numstr(maxu) as i64
61 av[9] = numstr(idr) as i64
62 av[10] = numstr(gmp) as i64
63 av[11] = numstr(cl) as i64
64 av[12] = numstr(coa) as i64
65 return av
66}
67
68func main() -> i64 {
69 var pass: i64 = 0
70 var total: i64 = 0
71
72 // masks
73 let mask_ready: i64 = (1 << SI_PYCNOGENOL) | (1 << SI_PANAX_GINSENG)
74 let mask_drug: i64 = mask_ready | (1 << SI_OXYTOCIN)
75
76 // --- T1 describe ---
77 total = total + 1
78 let j1: *NxJson = nx_json_new(4096)
79 let av1: *i64 = sys_mmap(64)
80 av1[0] = "nx_plan_svc" as i64
81 av1[1] = "describe" as i64
82 plan_dispatch(2, av1, j1)
83 let d1: i64 = j_has(j1, "\"svc\":\"plan\"" as *u8)
84 let d2: i64 = j_has(j1, "\"readiness_dimensions\":7" as *u8)
85 t_puts("T1 plan describe: svc=" as *u8); t_putn(d1); t_puts(" dims7=" as *u8); t_putn(d2); t_puts(": " as *u8)
86 if d1 == 1 { if d2 == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) } } else { t_puts("FAIL\n" as *u8) }
87
88 // --- T2 a fully-prepared powder product: PRODUCTION READY, score 1000 ---
89 total = total + 1
90 let j2: *NxJson = nx_json_new(4096)
91 let av2: *i64 = mk_assess(mask_ready, 0, 2, 3999, 700, 30, 2, 1, 1, 1, 1)
92 plan_dispatch(13, av2, j2)
93 let ready: i64 = j_has(j2, "\"production_ready\":true" as *u8)
94 let score: i64 = j_has(j2, "\"readiness_permil\":1000" as *u8)
95 let nogap: i64 = j_has(j2, "\"next_gap\":-1" as *u8)
96 t_puts("T2 prepared powder: ready=" as *u8); t_putn(ready); t_puts(" score1000=" as *u8); t_putn(score); t_puts(" nogap=" as *u8); t_putn(nogap); t_puts(": " as *u8)
97 var ok2: i64 = 1
98 if ready != 1 { ok2 = 0 }
99 if score != 1 { ok2 = 0 }
100 if nogap != 1 { ok2 = 0 }
101 if ok2 == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
102
103 // --- T3 THE KILL-ORDER PLAN: a drug ingredient blocks at LEGAL and the
104 // plan NAMES the offender + the action ---
105 total = total + 1
106 let j3: *NxJson = nx_json_new(4096)
107 let av3: *i64 = mk_assess(mask_drug, 0, 2, 3999, 700, 30, 2, 1, 1, 1, 1)
108 plan_dispatch(13, av3, j3)
109 let gap0: i64 = j_has(j3, "\"next_gap\":0" as *u8)
110 let named: i64 = j_has(j3, "\"unlawful_ingredient\":\"Oxytocin\"" as *u8)
111 let action: i64 = j_has(j3, "remove the unlawful ingredient" as *u8)
112 let notready: i64 = j_has(j3, "\"production_ready\":false" as *u8)
113 t_puts("T3 +oxytocin plan: gap0=" as *u8); t_putn(gap0); t_puts(" names-oxytocin=" as *u8); t_putn(named); t_puts(" action=" as *u8); t_putn(action); t_puts(" not-ready=" as *u8); t_putn(notready); t_puts(": " as *u8)
114 var ok3: i64 = 1
115 if gap0 != 1 { ok3 = 0 }
116 if named != 1 { ok3 = 0 }
117 if action != 1 { ok3 = 0 }
118 if notready != 1 { ok3 = 0 }
119 if ok3 == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
120
121 // --- T4 the reference stack in CAPSULES blocks at FORMAT with the
122 // switch-to-powder action ---
123 total = total + 1
124 let mask_full: i64 = (1 << SI_L_CITRULLINE) | (1 << SI_PYCNOGENOL) | (1 << SI_ASHWAGANDHA) | (1 << SI_MACA) | (1 << SI_TRIBULUS) | (1 << SI_PANAX_GINSENG) | (1 << SI_GINKGO)
125 let j4: *NxJson = nx_json_new(4096)
126 let av4: *i64 = mk_assess(mask_full, 0, 1, 3999, 700, 30, 2, 1, 1, 1, 1)
127 plan_dispatch(13, av4, j4)
128 let gap1: i64 = j_has(j4, "\"next_gap\":1" as *u8)
129 let powder_action: i64 = j_has(j4, "switch to powder" as *u8)
130 t_puts("T4 full stack in capsules: FORMAT gap=" as *u8); t_putn(gap1); t_puts(" powder-action=" as *u8); t_putn(powder_action); t_puts(": " as *u8)
131 if gap1 == 1 { if powder_action == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) } } else { t_puts("FAIL\n" as *u8) }
132
133 // --- T5 same full stack as POWDER at a margin it actually clears (600,
134 // since the 7-ingredient powder makes ~666): format+economics pass,
135 // so the gap correctly moves to the first open attestation, IDENTITY.
136 // (At a 700 target it would block at ECONOMICS -- the engine is right,
137 // the 7-stack is a low-margin product.) ---
138 total = total + 1
139 let j5: *NxJson = nx_json_new(4096)
140 let av5: *i64 = mk_assess(mask_full, 0, 2, 3999, 600, 30, 2, 0, 0, 0, 0)
141 plan_dispatch(13, av5, j5)
142 let gap3: i64 = j_has(j5, "\"next_gap\":3" as *u8)
143 let id_action: i64 = j_has(j5, "identity testing" as *u8)
144 let attest4: i64 = j_has(j5, "\"open_attestations\":4" as *u8)
145 let noblock: i64 = j_has(j5, "\"open_computed_blockers\":0" as *u8)
146 t_puts("T5 full powder, no attestations: gap3=" as *u8); t_putn(gap3); t_puts(" id-action=" as *u8); t_putn(id_action); t_puts(" 4-attest=" as *u8); t_putn(attest4); t_puts(" 0-blockers=" as *u8); t_putn(noblock); t_puts(": " as *u8)
147 var ok5: i64 = 1
148 if gap3 != 1 { ok5 = 0 }
149 if id_action != 1 { ok5 = 0 }
150 if attest4 != 1 { ok5 = 0 }
151 if noblock != 1 { ok5 = 0 }
152 if ok5 == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
153
154 // --- T6 ECONOMICS gap: a too-low price blocks at dimension 2 ---
155 total = total + 1
156 let j6: *NxJson = nx_json_new(4096)
157 let av6: *i64 = mk_assess(mask_ready, 0, 2, 300, 700, 30, 2, 1, 1, 1, 1)
158 plan_dispatch(13, av6, j6)
159 let gap2: i64 = j_has(j6, "\"next_gap\":2" as *u8)
160 let econ_action: i64 = j_has(j6, "raise price" as *u8)
161 t_puts("T6 $3.00 retail: ECONOMICS gap=" as *u8); t_putn(gap2); t_puts(" action=" as *u8); t_putn(econ_action); t_puts(": " as *u8)
162 if gap2 == 1 { if econ_action == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) } } else { t_puts("FAIL\n" as *u8) }
163
164 // --- T7 empty mask is a structured 400 ---
165 total = total + 1
166 let j7: *NxJson = nx_json_new(4096)
167 let av7: *i64 = mk_assess(0, 0, 2, 3999, 700, 30, 2, 1, 1, 1, 1)
168 plan_dispatch(13, av7, j7)
169 let e400: i64 = j_has(j7, "\"status\":400" as *u8)
170 t_puts("T7 empty mask -> 400=" as *u8); t_putn(e400); t_puts(": " as *u8)
171 if e400 == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
172
173 // --- T8 BELARUS/EAEU: same lawful stack, ready given attestations ---
174 total = total + 1
175 let j8: *NxJson = nx_json_new(4096)
176 let av8: *i64 = mk_assess(mask_ready, 1, 2, 3999, 700, 30, 2, 1, 1, 1, 1)
177 plan_dispatch(13, av8, j8)
178 let eaeu_ready: i64 = j_has(j8, "\"production_ready\":true" as *u8)
179 t_puts("T8 EAEU/Belarus prepared: ready=" as *u8); t_putn(eaeu_ready); t_puts(": " as *u8)
180 if eaeu_ready == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
181
182 // --- T9 unknown verb -> 404 + nonzero exit ---
183 total = total + 1
184 let j9: *NxJson = nx_json_new(4096)
185 let av9: *i64 = sys_mmap(64)
186 av9[0] = "nx_plan_svc" as i64
187 av9[1] = "bogus" as i64
188 let rc9: i64 = plan_dispatch(2, av9, j9)
189 let e404: i64 = j_has(j9, "\"status\":404" as *u8)
190 t_puts("T9 unknown verb rc=" as *u8); t_putn(rc9); t_puts(" 404=" as *u8); t_putn(e404); t_puts(": " as *u8)
191 if rc9 != 0 { if e404 == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) } } else { t_puts("FAIL\n" as *u8) }
192
193 // --- T10 WORKFLOW: the readiness score climbs monotonically as each
194 // attestation is closed -- a progress bar toward market ---
195 total = total + 1
196 var flags: i64 = 0
197 var prev: i64 = 0 - 1
198 var ok10: i64 = 1
199 var step: i64 = 0
200 while step <= 4 {
201 let idr: i64 = 0
202 let gmp: i64 = 0
203 let cl: i64 = 0
204 let coa: i64 = 0
205 var a: i64 = 0
206 var b: i64 = 0
207 var c: i64 = 0
208 var d: i64 = 0
209 if step >= 1 { a = 1 }
210 if step >= 2 { b = 1 }
211 if step >= 3 { c = 1 }
212 if step >= 4 { d = 1 }
213 let jx: *NxJson = nx_json_new(4096)
214 let avx: *i64 = mk_assess(mask_ready, 0, 2, 3999, 700, 30, 2, a, b, c, d)
215 plan_dispatch(13, avx, jx)
216 // read readiness by counting: 3 computed always pass here, +step attestations
217 let want: i64 = (3 + step) * 1000 / 7
218 let wbuf: *u8 = numstr(want)
219 let key: *u8 = sys_mmap(64)
220 var ki: i64 = 0
221 let pfx: *u8 = "\"readiness_permil\":" as *u8
222 while pfx[ki] != (0 as u8) { key[ki] = pfx[ki]; ki = ki + 1 }
223 var wi: i64 = 0
224 while wbuf[wi] != (0 as u8) { key[ki] = wbuf[wi]; ki = ki + 1; wi = wi + 1 }
225 key[ki] = 0 as u8
226 if j_has(jx, key) != 1 { ok10 = 0 }
227 if want < prev { ok10 = 0 }
228 prev = want
229 step = step + 1
230 }
231 t_puts("T10 readiness climbs monotonically as attestations close: " as *u8)
232 if ok10 == 1 { pass = pass + 1; t_puts("PASS\n" as *u8) } else { t_puts("FAIL\n" as *u8) }
233
234 t_puts("PLAN-SVC-GATE passed " as *u8); t_putn(pass); t_puts("/" as *u8); t_putn(total)
235 if pass == total { t_puts(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 }
236 t_puts(" verdict=RED\n" as *u8); sys_exit(1); return 1
237}