nx_clock_reserved_native_v2_ar.nx source
↩ module page · 439 lines · 24042 B
1// Local-only V2 real-process scheduler harness. Positive closure uses production seams;
2// ownership selectors require the explicitly instrumented test-only scheduler closure.
3import "nx_clock_sched_reserved_v2_ar.nx"
4import "nx_gate_verdict.nx"
5import "nx_tool_run.nx"
6import "nx_build_canon_input_lib.nx"
7import "nx_rank_refresh_lib.nx"
8const RIG_PATH: i64 = 4096
9const RIG_PTR: i64 = 8
10const RIG_FILE_MODE: i64 = 384
11const RIG_DIR_MODE: i64 = 448
12const RIG_EINVAL: i64 = 0 - 22
13const RIG_SETUP: i64 = 90
14const RIG_GUARD: *u8 = "NISHI-CLOCK-RESERVE-FIXTURE\n"
15const CRG_EXCLUSIVE: i64 = 2
16const CRG_UNLOCK: i64 = 8
17const CRG_ROLES: i64 = 4
18const CRG_SLOW: i64 = 0
19const CRG_ESSENTIAL: i64 = 1
20const CRG_ORDINARY: i64 = 2
21const CRG_WINDOW: i64 = 3
22const CRG_START: i64 = 1
23const CRG_END: i64 = 0
24const CRG_MS_PER_SEC: i64 = 1000
25const CRG_MIN_COMPLETIONS: i64 = 2
26const CRG_FAULT_ROLE: i64 = 4
27const CRG_FAULT_POINT: i64 = 2
28const CRG_TEST_ECHILD: i64 = 0 - 10
29func rig_len(p: *u8) -> i64 { var n: i64 = 0; while p[n] != (0 as u8) { n = n + 1 } return n }
30func rig_eq(a: *u8, b: *u8) -> i64 {
31 var i: i64 = 0
32 while a[i] != (0 as u8) { if a[i] != b[i] { return 0 } i = i + 1 }
33 if b[i] != (0 as u8) { return 0 }
34 return 1
35}
36func rig_num(p: *u8) -> i64 {
37 let n: i64 = rig_len(p)
38 if n == 0 { return 0 - 1 }
39 var i: i64 = 0; var v: i64 = 0
40 while i < n {
41 let c: i64 = p[i] as i64
42 if c < BCI_ZERO { return 0 - 1 }
43 if c > BCI_NINE { return 0 - 1 }
44 let d: i64 = c - BCI_ZERO
45 if v > (BCI_I64_MAX-d)/BCI_DECIMAL_BASE { return 0 - 1 }
46 v = v*BCI_DECIMAL_BASE+d; i = i + 1
47 }
48 return v
49}
50func rig_join(root: *u8, rel: *u8) -> *u8 {
51 if rig_len(root)+rig_len(rel)+2 > RIG_PATH { return 0 as *u8 }
52 let p: *u8 = sys_mmap(RIG_PATH)
53 var o: i64 = gv_cat(p, 0, root)
54 o = gv_cat(p, o, "/" as *u8); o = gv_cat(p, o, rel); p[o] = 0 as u8
55 return p
56}
57func rig_exists(path: *u8) -> i64 {
58 if (path as i64) == 0 { return 0 }
59 let f: i64 = sys_openat_rd(path)
60 if f < 0 { return 0 }
61 sys_close(f); return 1
62}
63// Reject symlinks in every supplied parent component. No descendant is reused.
64func rig_parent(path: *u8) -> i64 {
65 let n: i64 = rig_len(path)
66 if n <= 1 { return 0 }
67 if n >= RIG_PATH { return 0 }
68 if path[0] != (BCI_SLASH as u8) { return 0 }
69 if bci_relative_path(path, 1, n-1, RIG_PATH-2) != 1 { return 0 }
70 let part: *u8 = sys_mmap(RIG_PATH)
71 let probe: *u8 = sys_mmap(RIG_PATH)
72 var i: i64 = 0
73 while i <= n {
74 var edge: i64 = 0
75 if i == n { edge = 1 } else { if i > 0 { if path[i] == (BCI_SLASH as u8) { edge = 1 } } }
76 if edge == 1 {
77 part[i] = 0 as u8
78 if sys_readlinkat(part, probe, RIG_PATH) != RIG_EINVAL { return 0 }
79 }
80 if i < n { part[i] = path[i] }
81 i = i + 1
82 }
83 return 1
84}
85func rig_write(path: *u8, buf: *u8, n: i64) -> i64 {
86 if (path as i64) == 0 { return 0 }
87 let fd: i64 = sys_openat_wr(path, RIG_FILE_MODE)
88 if fd < 0 { return 0 }
89 var w: i64 = 0
90 while w < n {
91 let got: i64 = sys_write(fd, (buf as i64+w) as *u8, n-w)
92 if got <= 0 { sys_close(fd); return 0 }
93 w = w + got
94 }
95 // Fixture visibility check only; persistence barriers belong to the subject under test.
96 let close: i64 = sys_close(fd)
97 if close != 0 { return 0 }
98 return rrf_file_equal(path, buf, n)
99}
100func rig_file(root: *u8, rel: *u8, val: *u8) -> i64 { return rig_write(rig_join(root,rel),val,rig_len(val)) }
101func rig_dir(root: *u8, rel: *u8) -> i64 {
102 let p: *u8 = rig_join(root, rel)
103 if (p as i64) == 0 { return 0 }
104 if sys_mkdir(p,RIG_DIR_MODE) != 0 { return 0 }
105 return 1
106}
107func rig_link(root: *u8, rel: *u8, target: *u8) -> i64 {
108 let p: *u8 = rig_join(root,rel)
109 if (p as i64) == 0 { return 0 }
110 if sys_symlinkat(target,p) != 0 { return 0 }
111 return 1
112}
113func rig_guard() -> i64 { return rrf_file_equal("fixture-root.guard" as *u8,RIG_GUARD,rig_len(RIG_GUARD)) }
114
115func crg_event(role: i64, phase: i64) -> i64 {
116 let lock: i64 = sys_openat_append("events.lock" as *u8,RIG_FILE_MODE)
117 if lock < 0 { return 0 }
118 if sys_flock(lock,CRG_EXCLUSIVE) != 0 { sys_close(lock); return 0 }
119 let b: *u8 = sys_mmap(RIG_PATH)
120 var o: i64 = gv_catn(b,0,role); o = gv_cat(b,o," " as *u8)
121 o = gv_catn(b,o,phase); o = gv_cat(b,o," " as *u8)
122 o = gv_catn(b,o,sys_now_ms()); o = gv_cat(b,o,"\n" as *u8)
123 let fd: i64 = sys_openat_append("events.tsv" as *u8,RIG_FILE_MODE)
124 var ok: i64 = 0
125 if fd >= 0 { if sys_write(fd,b,o) == o { ok = 1 }; if sys_close(fd) != 0 { ok = 0 } }
126 if sys_flock(lock,CRG_UNLOCK) != 0 { ok = 0 }; if sys_close(lock) != 0 { ok = 0 }
127 return ok
128}
129func crg_child(argc: i64, argv: *i64) -> i64 {
130 if argc != 4 { return RIG_SETUP }
131 if rig_guard() != 1 { return RIG_SETUP }
132 let role: i64 = rig_num(argv[2] as *u8); let duration: i64 = rig_num(argv[3] as *u8)
133 if role < 0 { return RIG_SETUP }; if role >= CRG_WINDOW { return RIG_SETUP }; if duration <= 0 { return RIG_SETUP }
134 if crg_event(role,CRG_START) != 1 { return RIG_SETUP }
135 let start: i64 = sys_now_ms()
136 var remaining: i64 = duration
137 while remaining > 0 { sys_sleep_ms(remaining); remaining = duration-(sys_now_ms()-start) }
138 if crg_event(role,CRG_END) != 1 { return RIG_SETUP }
139 return 0
140}
141func crg_command(dst: *u8, role: i64, duration: *u8) -> i64 {
142 var o: i64 = gv_cat(dst,0,"./child.elf child " as *u8)
143 o = gv_catn(dst,o,role); o = gv_cat(dst,o," " as *u8); o = gv_cat(dst,o,duration)
144 return o
145}
146// Subject runs the real scheduler entrypoints in an isolated cwd.
147func crg_subject(argc: i64, argv: *i64) -> i64 {
148 if argc != 9 { return RIG_SETUP }
149 if rig_guard() != 1 { return RIG_SETUP }
150 let mode: *u8 = argv[2] as *u8
151 let period: i64 = rig_num(argv[5] as *u8)
152 let budget: i64 = rig_num(argv[6] as *u8)
153 let tick: i64 = rig_num(argv[7] as *u8)
154 let ordinary: *u8 = argv[8] as *u8
155 let names: *u8 = sys_mmap(CLK_NAMEW*3)
156 let organs: *u8 = sys_mmap(CLK_NAMEW*3)
157 let intervals: *i64 = sys_mmap(3*8) as *i64
158 let due: *i64 = sys_mmap(3*8) as *i64
159 let out: *i64 = sys_mmap(CLKRS_OUT_N*8) as *i64
160 gv_cat(clk_slot(names,0),0,"slow" as *u8)
161 gv_cat(clk_slot(names,1),0,"essential" as *u8)
162 gv_cat(clk_slot(names,2),0,"ordinary" as *u8)
163 crg_command(clk_slot(organs,0),0,argv[3] as *u8)
164 crg_command(clk_slot(organs,1),1,argv[4] as *u8)
165 crg_command(clk_slot(organs,2),2,ordinary)
166 if rig_eq(mode,"alias" as *u8) == 1 { crg_command(clk_slot(organs,2),1,argv[4] as *u8) }
167 if rig_eq(mode,"ownership-foreground" as *u8) == 1 { if rig_file("." as *u8,"fault.mode" as *u8,"F" as *u8) != 1 { return RIG_SETUP } }
168 if rig_eq(mode,"ownership-essential" as *u8) == 1 { if rig_file("." as *u8,"fault.mode" as *u8,"E" as *u8) != 1 { return RIG_SETUP } }
169 let conf: *u8 = sys_mmap(CLK_NAMEW+RIG_PATH)
170 var co: i64 = gv_cat(conf,0,"essential\t" as *u8)
171 co = gv_cat(conf,co,clk_slot(organs,1)); co = gv_cat(conf,co,"\n" as *u8)
172 if rig_file("." as *u8,"knowledge/status/clock_reserved.conf" as *u8,conf) != 1 { return RIG_SETUP }
173 let now: i64 = sys_now_realtime_sec()
174 intervals[0] = budget; intervals[1] = period; intervals[2] = budget
175 due[0] = now-1; due[1] = now+period; due[2] = now-1
176 if crg_event(CRG_WINDOW,CRG_START) != 1 { return RIG_SETUP }
177 var window_rc: i64 = 0
178 if rig_eq(mode,"serial" as *u8) == 1 {
179 window_rc = clk_run_edf(organs,names,intervals,due,3,1,budget,tick,out)
180 } else { window_rc = clk_run_edf_reserved(organs,names,intervals,due,3,1,budget,tick,out) }
181 if crg_event(CRG_WINDOW,CRG_END) != 1 { return RIG_SETUP }
182 if crg_negative_mode(mode) == 1 {
183 if rig_write("subject.metrics" as *u8,out as *u8,CLKRS_OUT_N*8) != 1 { return RIG_SETUP }
184 let scalar: *i64 = sys_mmap(8) as *i64; scalar[0] = window_rc
185 if rig_write("subject.rc" as *u8,scalar as *u8,8) != 1 { return RIG_SETUP }
186 scalar[0] = clk_reserved_halt_required(out)
187 if rig_write("subject.halt" as *u8,scalar as *u8,8) != 1 { return RIG_SETUP }
188 if rig_eq(mode,"alias" as *u8) == 1 { return 0 }
189 // Same pure halt decision the real driver uses; no simulated second-window success.
190 if clk_reserved_halt_required(out) == 1 { return 0 }
191 }
192 gv_puts("window1_dispatch=" as *u8); gv_num(out[0]); gv_puts(" assisted=" as *u8); gv_num(out[11]); gv_puts("\n" as *u8)
193 // Drain-only boundary test: deadlines are explicitly reset. This does not test
194 // nx_clock_tickless persistence, state reload, or supervisor restart behavior.
195 let next: i64 = sys_now_realtime_sec()
196 due[0] = next+budget; due[1] = next+budget; due[2] = next-1
197 if crg_event(CRG_WINDOW,CRG_START) != 1 { return RIG_SETUP }
198 if rig_eq(mode,"serial" as *u8) == 1 {
199 clk_run_edf(organs,names,intervals,due,3,1,budget,tick,out)
200 } else { clk_run_edf_reserved(organs,names,intervals,due,3,1,budget,tick,out) }
201 if crg_event(CRG_WINDOW,CRG_END) != 1 { return RIG_SETUP }
202 return 0
203}
204func crg_setup(root: *u8, self: *u8) -> i64 {
205 if sys_mkdir(root,RIG_DIR_MODE) != 0 { return 0 }
206 if rig_dir(root,"knowledge" as *u8) != 1 { return 0 }
207 if rig_dir(root,"knowledge/status" as *u8) != 1 { return 0 }
208 if rig_dir(root,"sites" as *u8) != 1 { return 0 }
209 if rig_dir(root,"sites/nishifamily" as *u8) != 1 { return 0 }
210 if rig_dir(root,"logs" as *u8) != 1 { return 0 }
211 if rig_file(root,"fixture-root.guard" as *u8,RIG_GUARD) != 1 { return 0 }
212 if rig_file(root,"knowledge/status/actlog.jrnl" as *u8,"" as *u8) != 1 { return 0 }
213 if rig_file(root,"knowledge/status/clock_heavy.conf" as *u8,"" as *u8) != 1 { return 0 }
214 if rig_file(root,"events.lock" as *u8,"" as *u8) != 1 { return 0 }
215 if rig_file(root,"events.tsv" as *u8,"" as *u8) != 1 { return 0 }
216 let len: *i64 = sys_mmap(8) as *i64
217 let executable: *u8 = sys_read_file(self,len)
218 if (executable as i64) == 0 { return 0 }; if len[0] <= 0 { return 0 }
219 // A copy is required: scheduler chmod must never follow a symlink to the supplied binary.
220 let path: *u8 = rig_join(root,"child.elf" as *u8)
221 if rig_write(path,executable,len[0]) != 1 { return 0 }
222 if sys_fchmodat(path,MODE_0755) != 0 { return 0 }
223 return 1
224}
225func crg_analyze(root: *u8, mode: *u8, period: i64, ctr: *i64) -> i64 {
226 let size: *i64 = sys_mmap(8) as *i64
227 let buf: *u8 = sys_read_file(rig_join(root,"events.tsv" as *u8),size)
228 gv_check("event journal readable" as *u8,((buf as i64) != 0) as i64,ctr)
229 if (buf as i64) == 0 { return 0 }
230 let active: *i64 = sys_mmap(CRG_ROLES*8) as *i64
231 let starts: *i64 = sys_mmap(CRG_ROLES*8) as *i64
232 let ends: *i64 = sys_mmap(CRG_ROLES*8) as *i64
233 let val: *i64 = sys_mmap(3*8) as *i64
234 var p: i64 = 0; var valid: i64 = 1; var total: i64 = 0; var maximum: i64 = 0
235 var duplicate: i64 = 0; var ordinaryoverlap: i64 = 0; var boundarybusy: i64 = 0
236 var completions: i64 = 0; var slowended: i64 = 0; var drain: i64 = 0; var previous: i64 = 0
237 var slowstart: i64 = 0; var slowend: i64 = 0
238 while p < size[0] {
239 var f: i64 = 0
240 while f < 3 {
241 var v: i64 = 0; var digits: i64 = 0
242 while p < size[0] {
243 let c: i64 = buf[p] as i64
244 if c < BCI_ZERO { break }; if c > BCI_NINE { break }
245 if v > (BCI_I64_MAX-(c-BCI_ZERO))/BCI_DECIMAL_BASE { valid = 0; break }
246 v = v*BCI_DECIMAL_BASE+c-BCI_ZERO; p = p+1; digits = digits+1
247 }
248 val[f] = v
249 if digits == 0 { valid = 0 }
250 var separator: i64 = 32; if f == 2 { separator = 10 }
251 if p >= size[0] { valid = 0 } else { if buf[p] != (separator as u8) { valid = 0 } }
252 if valid == 0 { break }; p = p+1; f = f+1
253 }
254 if valid == 0 { break }
255 let role: i64 = val[0]; let phase: i64 = val[1]; let time: i64 = val[2]
256 if role >= CRG_ROLES { valid = 0; break }; if phase > 1 { valid = 0; break }
257 if time < previous { valid = 0; break }; previous = time
258 if role == CRG_WINDOW {
259 if total != 0 { boundarybusy = boundarybusy+1 }
260 }
261 if phase == CRG_START {
262 if role == CRG_SLOW { slowstart = time }
263 if active[role] != 0 { duplicate = duplicate+1 }
264 active[role] = active[role]+1; starts[role] = starts[role]+1
265 if role != CRG_WINDOW {
266 total = total+1
267 if total > maximum { maximum = total }
268 if role != CRG_ESSENTIAL { if active[CRG_SLOW]+active[CRG_ORDINARY] > 1 { ordinaryoverlap = ordinaryoverlap+1 } }
269 }
270 } else {
271 if active[role] <= 0 { valid = 0; break }
272 if role == CRG_ESSENTIAL { if active[CRG_SLOW] > 0 { completions = completions+1 }; if slowended == 1 { if ends[CRG_WINDOW] == 0 { drain = drain+1 } } }
273 if role == CRG_SLOW { slowended = 1; slowend = time }
274 active[role] = active[role]-1; ends[role] = ends[role]+1
275 if role != CRG_WINDOW { total = total-1 }
276 }
277 }
278 gv_check("strict complete monotonic event records" as *u8,(valid == 1) as i64,ctr)
279 gv_check("one slow child completed" as *u8,(ends[CRG_SLOW] == 1) as i64,ctr)
280 gv_check("slow child spans essential eligibility" as *u8,(slowend-slowstart > period*CRG_MS_PER_SEC) as i64,ctr)
281 gv_check("second window ordinary child completed" as *u8,(ends[CRG_ORDINARY] == 1) as i64,ctr)
282 gv_check("two window completions" as *u8,(ends[CRG_WINDOW] == 2) as i64,ctr)
283 gv_check("no duplicate role active" as *u8,(duplicate == 0) as i64,ctr)
284 gv_check("no ordinary overlap" as *u8,(ordinaryoverlap == 0) as i64,ctr)
285 gv_check("window entry and return have no live witnessed children" as *u8,(boundarybusy == 0) as i64,ctr)
286 gv_check("all witnessed children ended" as *u8,(total == 0) as i64,ctr)
287 gv_check("all windows ended" as *u8,(active[CRG_WINDOW] == 0) as i64,ctr)
288 gv_check("maximum two active child lifetimes" as *u8,(maximum <= 2) as i64,ctr)
289 if rig_eq(mode,"serial" as *u8) == 1 {
290 gv_check("serial baseline no essential progress during foreground" as *u8,(completions == 0) as i64,ctr)
291 gv_check("serial baseline maximum one child" as *u8,(maximum == 1) as i64,ctr)
292 } else {
293 gv_check("reserved path overlaps real child lifetimes" as *u8,(maximum == 2) as i64,ctr)
294 if rig_eq(mode,"drain" as *u8) == 1 {
295 gv_check("essential finishes after slow before first window returns" as *u8,(drain > 0) as i64,ctr)
296 } else { gv_check("repeated essential completions before slow ends" as *u8,(completions >= CRG_MIN_COMPLETIONS) as i64,ctr) }
297 }
298 gv_puts("max_active_child_lifetimes=" as *u8); gv_num(maximum)
299 gv_puts(" essential_completed_during_slow=" as *u8); gv_num(completions)
300 gv_puts(" drain_completions=" as *u8); gv_num(drain); gv_puts("\n" as *u8)
301 return valid
302}
303
304func crg_negative_mode(mode: *u8) -> i64 {
305 if rig_eq(mode,"alias" as *u8) == 1 { return 1 }
306 if rig_eq(mode,"ownership-foreground" as *u8) == 1 { return 1 }
307 if rig_eq(mode,"ownership-essential" as *u8) == 1 { return 1 }
308 return 0
309}
310func crg_number_file(path: *u8) -> i64 {
311 let n: *i64 = sys_mmap(8) as *i64; let p: *u8 = sys_read_file(path,n)
312 if (p as i64) == 0 { return BCI_I64_MAX }; if n[0] != 8 { return BCI_I64_MAX }
313 return (p as *i64)[0]
314}
315func crg_negative_analyze(root: *u8, mode: *u8, ctr: *i64) -> i64 {
316 let size: *i64 = sys_mmap(8) as *i64; let buf: *u8 = sys_read_file(rig_join(root,"events.tsv" as *u8),size)
317 gv_check("negative event journal readable" as *u8,((buf as i64) != 0) as i64,ctr)
318 if (buf as i64) == 0 { return 0 }
319 let active: *i64 = sys_mmap(CRG_ROLES*8) as *i64
320 let ends: *i64 = sys_mmap(CRG_ROLES*8) as *i64
321 let val: *i64 = sys_mmap(3*8) as *i64
322 var p: i64 = 0; var valid: i64 = 1; var total: i64 = 0; var maximum: i64 = 0
323 var fault: i64 = 0; var after: i64 = 0; var duplicate: i64 = 0; var busy: i64 = 0; var previous: i64 = 0
324 while p < size[0] {
325 var f: i64 = 0
326 while f < 3 {
327 var v: i64 = 0; var digits: i64 = 0
328 while p < size[0] {
329 let c: i64 = buf[p] as i64
330 if c < BCI_ZERO { break }; if c > BCI_NINE { break }
331 if v > (BCI_I64_MAX-(c-BCI_ZERO))/BCI_DECIMAL_BASE { valid = 0; break }
332 v = v*BCI_DECIMAL_BASE+c-BCI_ZERO; p = p+1; digits = digits+1
333 }
334 val[f] = v
335 if digits == 0 { valid = 0 }
336 var separator: i64 = 32; if f == 2 { separator = 10 }
337 if p >= size[0] { valid = 0 } else { if buf[p] != (separator as u8) { valid = 0 } }
338 if valid == 0 { break }; p = p+1; f = f+1
339 }
340 if valid == 0 { break }
341 let role: i64 = val[0]; let phase: i64 = val[1]; let time: i64 = val[2]
342 if time < previous { valid = 0; break }; previous = time
343 if role == CRG_FAULT_ROLE {
344 if phase != CRG_FAULT_POINT { valid = 0; break }
345 fault = fault+1
346 } else {
347 if role >= CRG_ROLES { valid = 0; break }; if phase > 1 { valid = 0; break }
348 if role == CRG_WINDOW { if total != 0 { busy = busy+1 } }
349 if phase == CRG_START {
350 if active[role] != 0 { duplicate = duplicate+1 }; active[role] = active[role]+1
351 if role != CRG_WINDOW {
352 if fault > 0 { after = after+1 }
353 total = total+1; if total > maximum { maximum = total }
354 }
355 } else {
356 if active[role] <= 0 { valid = 0; break }; active[role] = active[role]-1; ends[role] = ends[role]+1
357 if role != CRG_WINDOW { total = total-1 }
358 }
359 }
360 }
361 gv_check("negative journal complete and monotonic" as *u8,(valid == 1) as i64,ctr)
362 gv_check("no start after ownership loss marker" as *u8,(after == 0) as i64,ctr)
363 gv_check("no duplicate role" as *u8,(duplicate == 0) as i64,ctr)
364 gv_check("observed at most two children" as *u8,(maximum <= 2) as i64,ctr)
365 gv_check("all fixture children ended" as *u8,(total == 0) as i64,ctr)
366 gv_check("window drained witnessed children" as *u8,(busy == 0) as i64,ctr)
367 gv_check("exactly one window returned" as *u8,(ends[CRG_WINDOW] == 1) as i64,ctr)
368 gv_check("no second ordinary child" as *u8,(ends[CRG_ORDINARY] == 0) as i64,ctr)
369 gv_check("real foreground completed" as *u8,(ends[CRG_SLOW] == 1) as i64,ctr)
370 let mn: *i64 = sys_mmap(8) as *i64; let metrics: *u8 = sys_read_file(rig_join(root,"subject.metrics" as *u8),mn)
371 var ready: i64 = 0; if (metrics as i64) != 0 { if mn[0] == CLKRS_OUT_N*8 { ready = 1 } }
372 gv_check("complete actual scheduler outputs persisted" as *u8,ready,ctr)
373 if ready != 1 { return 0 }; let out: *i64 = metrics as *i64
374 let alias: i64 = rig_eq(mode,"alias" as *u8)
375 if alias == 1 {
376 gv_check_eq("alias refused reservation with diagnostic error" as *u8,out[CLKRS_OUT_ERRORS],1,ctr)
377 gv_check_eq("alias not an ownership failure" as *u8,out[CLKRS_OUT_FATAL],0,ctr)
378 gv_check_eq("alias serial fallback no essential run" as *u8,ends[CRG_ESSENTIAL],0,ctr)
379 gv_check_eq("alias no assisted dispatch" as *u8,out[11],0,ctr)
380 gv_check_eq("alias no injected fault" as *u8,fault,0,ctr)
381 gv_check_eq("alias serial foreground result" as *u8,crg_number_file(rig_join(root,"subject.rc" as *u8)),1,ctr)
382 } else {
383 gv_check_eq("exactly one post-reap injected ECHILD" as *u8,fault,1,ctr)
384 gv_check_eq("instrumented seam actually ran" as *u8,crg_number_file(rig_join(root,"fault.seam-active" as *u8)),1,ctr)
385 gv_check_eq("no forbidden wait attempt" as *u8,rig_exists(rig_join(root,"fault.forbidden-wait" as *u8)),0,ctr)
386 gv_check_eq("no forbidden signal attempt" as *u8,rig_exists(rig_join(root,"fault.forbidden-signal" as *u8)),0,ctr)
387 gv_check_eq("one explicit propagated error" as *u8,out[CLKRS_OUT_ERRORS],1,ctr)
388 gv_check_eq("fatal state reaches caller" as *u8,out[CLKRS_OUT_FATAL],1,ctr)
389 gv_check_eq("fatal return code reaches caller" as *u8,crg_number_file(rig_join(root,"subject.rc" as *u8)),CLKRS_FATAL_RC,ctr)
390 gv_check_eq("driver halt decision true" as *u8,crg_number_file(rig_join(root,"subject.halt" as *u8)),1,ctr)
391 gv_check_eq("actual ECHILD evidence preserved" as *u8,out[CLKRS_OUT_LOST_WAIT],CRG_TEST_ECHILD,ctr)
392 gv_check_eq("actual lost PID evidence preserved" as *u8,out[CLKRS_OUT_LOST_PID],crg_number_file(rig_join(root,"fault.lostpid" as *u8)),ctr)
393 gv_check_eq("only known-owned child drained" as *u8,out[CLKRS_OUT_KNOWN_OWNED],0,ctr)
394 gv_check("real essential completed" as *u8,(ends[CRG_ESSENTIAL] > 0) as i64,ctr)
395 var index: i64 = CRG_ESSENTIAL
396 if rig_eq(mode,"ownership-foreground" as *u8) == 1 { index = CRG_SLOW }
397 gv_check_eq("correct ownership-loss job index" as *u8,out[CLKRS_OUT_LOST_INDEX],index,ctr)
398 }
399 return valid
400}
401
402func main(argc: i64, argv: *i64) -> i64 {
403 if argc > 1 {
404 if rig_eq(argv[1] as *u8,"child" as *u8) == 1 { let rc: i64 = crg_child(argc,argv); sys_exit(rc); return rc }
405 if rig_eq(argv[1] as *u8,"subject" as *u8) == 1 { let rc: i64 = crg_subject(argc,argv); sys_exit(rc); return rc }
406 }
407 if argc != 12 { gv_puts("usage: gate self existing-parent serial|reserved|drain|alias|ownership-foreground|ownership-essential slow-ms essential-ms period-sec window-sec tick-ms ordinary-ms timeout-ms capture-bytes\n" as *u8); return RIG_SETUP }
408 let self: *u8 = argv[1] as *u8; let parent: *u8 = argv[2] as *u8; let mode: *u8 = argv[3] as *u8
409 if rig_eq(mode,"serial" as *u8)+rig_eq(mode,"reserved" as *u8)+rig_eq(mode,"drain" as *u8)+crg_negative_mode(mode) != 1 { return RIG_SETUP }
410 if rig_parent(parent) != 1 { return RIG_SETUP }; if self[0] != (BCI_SLASH as u8) { return RIG_SETUP }
411 var i: i64 = 4
412 while i < 12 { if rig_num(argv[i] as *u8) <= 0 { return RIG_SETUP }; i = i+1 }
413 let tag: *u8 = sys_mmap(RIG_PATH)
414 var o: i64 = gv_cat(tag,0,"clock-reserve-" as *u8); o = gv_catn(tag,o,sys_now_ms())
415 let root: *u8 = rig_join(parent,tag)
416 if (root as i64) == 0 { return RIG_SETUP }
417 let ctr: *i64 = gv_ctr()
418 gv_head("CLOCK RESERVED ACTUAL PROCESS INTEGRATION" as *u8)
419 gv_puts("fixture_root=" as *u8); gv_puts(root); gv_puts("\n" as *u8)
420 let setup: i64 = crg_setup(root,self); gv_check("isolated fixture complete with local actlog" as *u8,(setup == 1) as i64,ctr)
421 if setup != 1 { return RIG_SETUP }
422 if sys_chdir(root) != 0 { return RIG_SETUP }
423 let av: *i64 = sys_mmap(10*8) as *i64
424 av[0] = self as i64; av[1] = "subject" as *u8 as i64; av[2] = mode as i64
425 av[3] = argv[4]; av[4] = argv[5]; av[5] = argv[6]; av[6] = argv[7]; av[7] = argv[8]; av[8] = argv[9]; av[9] = 0
426 let cap: i64 = rig_num(argv[11] as *u8)
427 let output: *u8 = sys_mmap(cap); let olen: *i64 = sys_mmap(8) as *i64
428 let start: i64 = sys_now_ms()
429 let rc: i64 = tr_run_capture_cwd(self,av,output,cap,olen,rig_num(argv[10] as *u8),root)
430 gv_puts("subject_rc=" as *u8); gv_num(rc); gv_puts(" elapsed_ms=" as *u8); gv_num(sys_now_ms()-start); gv_puts("\n" as *u8)
431 gv_check("subject exited successfully" as *u8,(rc == 0) as i64,ctr)
432 gv_check("capture not full" as *u8,(olen[0] < cap-1) as i64,ctr)
433 gv_check("subject capture persisted and read back" as *u8,(rig_write(rig_join(root,"subject.out" as *u8),output,olen[0]) == 1) as i64,ctr)
434 // Timeout cannot prove drain; partial events remain evidence, never a passing verdict.
435 if crg_negative_mode(mode) == 1 { crg_negative_analyze(root,mode,ctr) }
436 else { crg_analyze(root,mode,rig_num(argv[6] as *u8),ctr) }
437 return gv_verdict("CLOCK-RESERVED-INTEGRATION",ctr,"real children; event-derived liveness; no live estate dispatch" as *u8)
438}
439