nx_frontier_scan.nx source
↩ module page · 1659 lines · 90504 B
1// nx_frontier_scan.nx -- THE AUTONOMOUS FRONTIER-NOTICER for a /compare domain.
2// Operator 2026-08-20: "we want to be able to notice things like the metahuman gap without needing claude
3// by having our own research on /compare sota and best of breed and workflowed and mcp and api etc".
4//
5// WHAT THE METAHUMAN GAP ACTUALLY WAS (mined from the transcripts, not assumed -- writer session
6// 55724797-9f7b-4f68-81aa-fd2de7997175, 2026-08-18 18:15:25Z): the operator said the characters looked
7// wrong, a seat ran FIVE WebSearch calls, and appended four citations to charsim.refs whose URLs IT NEVER
8// OPENED (three carry mirror '-' pin '-'; the fourth points at a page fetched three days earlier from a
9// DIFFERENT url). The gap therefore had TWO halves and only ONE of them needed the outside:
10// (A) the INTERNAL deficit signal -- rivals coded Best on skin/hair rows where our symbol is _ABSENT_.
11// Already mechanical, already in our own data, and NOBODY HAD EVER COMPUTED IT.
12// (B) the OUTSIDE BAR -- the 2026 numbers. That genuinely needed the live web.
13// This organ computes (A) from the domain's own files and pulls (B) through the sovereign fetcher.
14//
15// IT EMITS PROPOSALS AND NEVER ADMITS ONE. It does not write <domain>.matrix, <domain>.refs, or any watch
16// cell. The measured law it obeys: no margin threshold makes auto-declaration safe (nx_memsugg, precision
17// 808->890 permil at 24 percent coverage), and A COMPLETION SIGNAL THAT KEYS ON A NAME REWARDS WRITING THE
18// NAME. The list is the answer; a seat adjudicates it.
19//
20// SEEDS ARE DATA, NEVER HAND-TYPED. They come from the domain's own board:
21// <domain>.axes field 4 is literally "frontier-kw;frontier-kw" -- the estate ALREADY declares per-row
22// frontier keywords and nothing had ever consumed them.
23// <domain>.matrix field 1 (the row label) -- always, so a domain without .axes still has seeds.
24// SOURCES ARE DATA TOO: knowledge/frontier_sources.conf. Both endpoints shipped with it were PROVEN
25// reachable through nx_research_fetch before a line of this was written (arXiv API 200/12267 B, HN Algolia
26// 200/17063 B) -- necessary because nx_websearch is OUR OWN CRAWL INDEX (0 results for "metahuman"), so
27// it structurally cannot see the outside.
28//
29// VERBS
30// seeds <domain> -- what this domain is about, from its own data. No network.
31// deficit <domain> -- the internal signal, ranked, WITH THE REASON PER ROW. No network.
32// scan <domain> [maxrows] [maxitems] -- fetch + diff + print proposals. Network. Writes nothing.
33// propose <domain> [maxrows] [maxitems] -- scan, then file the worklist + the frontierprop- plane rows.
34//
35// RESOURCE ENVELOPE (a shipping criterion, not an afterthought): outbound requests are exactly
36// rows_scanned x sources, both bounded by conf and echoed in every run line; buffers are sized FROM THE
37// INPUT (sys_read_file, matrix+refs bytes, source count) so there is no ceiling to guess; the only writes
38// are one worklist file and at most rows x sources x 2 plane upserts, keyed by url hash so a re-scan
39// UPSERTS rather than grows.
40//
41// EXIT: 0 = ran (PROPOSALS may be zero -- that is a RESULT, not a failure) | 1 = REFUSED (named reason)
42// 2 = usage | 3 = domain unreadable
43// 100% sovereign. No hardware writes (Rule 26). license_tier: ORIGINAL expect_exit: 0
44import "nx_syscalls.nx"
45import "nx_deploy_lib.nx"
46// THE ONE RESOLVER FOR A /compare DATA FILE THAT LIVES IN TWO TREES (adopted 2026-09-01).
47// WHY: this organ built its compare paths with a hardcoded "buildroot/knowledge/compare/", and .axes
48// is an AUTHORED file class that lives in the BARE knowledge/ tree. So `seeds` printed
49// "SEED-SOURCE axes ABSENT" for EVERY domain and silently fell back to matrix row LABELS -- which means
50// the per-row `frontier-kw;frontier-kw` field the estate deliberately declares, in 49 .axes files, has
51// never once been used by the frontier noticer it was written for.
52// MEASURED 2026-09-01: buildroot/knowledge/compare/search.axes is ABSENT, knowledge/compare/search.axes
53// is 2533 B. The visible cost: the label "Warm index across index updates" seeded arXiv as
54// warm AND index AND across and returned a paper on tidally locked exoplanets.
55// COMPOSED, NOT HAND-ROLLED: nx_comparetree_lib is the estate's incumbent for exactly this, and the
56// comparetree_adoption ratchet measures 75 offenders against 2 adopters and RISING. Patching a second
57// hardcoded path here would have made this organ offender 76 in the same edit that fixed its symptom.
58import "nx_comparetree_lib.nx"
59// ATTEST (2026-09-06): the bar ruler's month arithmetic and its plan-row readers are COMPOSED, never re-implemented --
60// one parser for sotabar| rows and one YYYY-MM reader, so this organ and nx_barfresh cannot disagree about a month.
61import "nx_barfresh_lib.nx"
62
63const FS_PIPE: i64 = 124
64const FS_NL: i64 = 10
65const FS_HASH: i64 = 35
66const FS_AT: i64 = 64
67const FS_SEMI: i64 = 59
68const FS_SPACE: i64 = 32
69const FS_PLUS: i64 = 43
70const FS_ZERO: i64 = 48
71const FS_NINE: i64 = 57
72const FS_UPA: i64 = 65
73const FS_UPZ: i64 = 90
74const FS_LOA: i64 = 97
75const FS_LOZ: i64 = 122
76const FS_USCORE: i64 = 95
77const FS_SLASH: i64 = 47
78const FS_COLON: i64 = 58
79const FS_LBRACE: i64 = 123
80// A SECTION TAG is the short word before a colon at the head of a board label -- CREATOR, SKIN, BODY,
81// ANIM, SIM, WORLD, PLATFORM, MESH, HAIR on charsim alone. It names a group, never the subject, so it
82// poisons a query. 16 bytes clears the longest of those with headroom and is short enough that it can
83// never swallow a sentence that merely happens to contain a colon later on.
84const FS_SECTION_MAX: i64 = 16
85const FS_PATHCAP: i64 = 1024
86const FS_URLCAP: i64 = 2048
87const FS_TXTCAP: i64 = 4096
88const FS_MAXP: i64 = 12
89const FS_MAXROWS: i64 = 64
90const FS_RIVALS: i64 = 4
91const FS_CODE_BEST: i64 = 2
92const FS_CODE_YES: i64 = 1
93const FS_HASH_BASE: i64 = 131
94const FS_HASH_MASK: i64 = 0xffffffff
95const FS_HEXDIG: i64 = 8
96const FS_HEXSHIFT: i64 = 4
97const FS_HEXRADIX: i64 = 16
98const FS_PERMIL: i64 = 1000
99const FS_DIRMODE: i64 = 0x1ed
100const FS_PLANE_ARGS: i64 = 10
101// A worklist line carries a label, a title, a url and a mirror path. Each of those four is already bounded
102// by FS_URLCAP or FS_PATHCAP elsewhere in this organ, so the line bound is DERIVED from those bounds
103// rather than picked: it is not a ceiling anyone has to guess.
104const FS_LINECAP: i64 = 4 * 2048 + 1024
105// At most TWO outside items may be proposed against any ONE deficit row. A third is evidence the seed is
106// too broad, not that the gap is bigger -- so this is a discrimination bound, not a budget.
107const FS_PROPS_PER_ROW: i64 = 2
108
109func fs_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
110func fs_w(s: *u8) -> i64 { sys_write(1, s, fs_slen(s)); return 0 }
111func fs_wn(base: *u8, off: i64, len: i64) -> i64 {
112 if len <= 0 { return 0 }
113 sys_write(1, ((base as i64) + off) as *u8, len)
114 return 0
115}
116func fs_n(v: i64) -> i64 { nxi_fd(1, v); return 0 }
117func fs_cat(dst: *u8, pos: i64, s: *u8) -> i64 {
118 var p: i64 = pos
119 var i: i64 = 0
120 let n: i64 = fs_slen(s)
121 while i < n { dst[p] = s[i]; p = p + 1; i = i + 1 }
122 return p
123}
124func fs_catn(dst: *u8, pos: i64, src: *u8, a: i64, b: i64) -> i64 {
125 var p: i64 = pos
126 var i: i64 = a
127 while i < b { dst[p] = src[i]; p = p + 1; i = i + 1 }
128 return p
129}
130func fs_eol(buf: *u8, n: i64, i: i64) -> i64 {
131 var e: i64 = i
132 while e < n { if buf[e] == (FS_NL as u8) { return e } e = e + 1 }
133 return n
134}
135// literal search of buf[from..n) -- index of the FIRST byte of the match, or -1.
136func fs_find(buf: *u8, n: i64, from: i64, lit: *u8) -> i64 {
137 let l: i64 = fs_slen(lit)
138 if l <= 0 { return 0 - 1 }
139 if n < l { return 0 - 1 }
140 var i: i64 = from
141 if i < 0 { i = 0 }
142 while i <= n - l {
143 var j: i64 = 0
144 var m: i64 = 1
145 while j < l { if buf[i+j] != lit[j] { m = 0; j = l } else { j = j + 1 } }
146 if m == 1 { return i }
147 i = i + 1
148 }
149 return 0 - 1
150}
151// THE ITEM BOUNDARY. Returns the offset one past this item's last byte: the next delimiter after this
152// one, or n when this is the last item. Every field extraction is bounded by it, so a field absent from
153// an item can never be satisfied by the NEXT item's copy of that field.
154func fs_item_end(buf: *u8, n: i64, it: i64, idlm: *u8) -> i64 {
155 let e: i64 = fs_find(buf, n, it + fs_slen(idlm), idlm)
156 if e < 0 { return n }
157 return e
158}
159// alphanumeric fold: letters lowered, digits kept, everything else -> 0 (a separator).
160func fs_fold(c: i64) -> i64 {
161 if c >= FS_ZERO { if c <= FS_NINE { return c } }
162 if c >= FS_LOA { if c <= FS_LOZ { return c } }
163 if c >= FS_UPA { if c <= FS_UPZ { return c + (FS_LOA - FS_UPA) } }
164 return 0
165}
166func fs_streq(a: *u8, ao: i64, ae: i64, lit: *u8) -> i64 {
167 let l: i64 = fs_slen(lit)
168 if ae - ao != l { return 0 }
169 var i: i64 = 0
170 while i < l { if a[ao+i] != lit[i] { return 0 } i = i + 1 }
171 return 1
172}
173func fs_prefix(a: *u8, ao: i64, ae: i64, lit: *u8) -> i64 {
174 let l: i64 = fs_slen(lit)
175 if ae - ao < l { return 0 }
176 var i: i64 = 0
177 while i < l { if a[ao+i] != lit[i] { return 0 } i = i + 1 }
178 return 1
179}
180func fs_is_row(buf: *u8, i: i64, le: i64) -> i64 {
181 if le <= i { return 0 }
182 let f: i64 = buf[i] as i64
183 if f == FS_HASH { return 0 }
184 if f == FS_AT { return 0 }
185 if f == FS_NL { return 0 }
186 return 1
187}
188func fs_pipes(buf: *u8, i: i64, le: i64, pos: *i64) -> i64 {
189 var n: i64 = 0
190 var k: i64 = i
191 while k < le {
192 if buf[k] == (FS_PIPE as u8) {
193 if n < FS_MAXP { pos[n] = k; n = n + 1 }
194 }
195 k = k + 1
196 }
197 return n
198}
199func fs_digit_at(buf: *u8, a: i64, b: i64) -> i64 {
200 var i: i64 = a
201 while i < b {
202 let c: i64 = buf[i] as i64
203 if c >= FS_ZERO { if c <= FS_NINE { return c - FS_ZERO } }
204 i = i + 1
205 }
206 return 0 - 1
207}
208func fs_atoi(s: *u8) -> i64 {
209 var v: i64 = 0
210 var any: i64 = 0
211 var i: i64 = 0
212 while s[i] != (0 as u8) {
213 let c: i64 = s[i] as i64
214 if c >= FS_ZERO { if c <= FS_NINE { v = v * 10 + (c - FS_ZERO); any = 1 } }
215 i = i + 1
216 }
217 if any == 0 { return 0 - 1 }
218 return v
219}
220
221// -------------------------------------------------------------------------------------------------
222// CONFIG. Every threshold lives in knowledge/frontier_scan.conf WITH ITS DERIVATION IN THE ROW.
223// A MISSING CONF REFUSES AND NAMES THE FIX -- it never falls back to a number nobody measured, because
224// AN UNMEASURED BUDGET IS NOT CONSERVATIVE JUST BECAUSE IT IS SMALL.
225// -------------------------------------------------------------------------------------------------
226func fs_conf_get(cb: *u8, cn: i64, key: *u8) -> i64 {
227 let pos: *i64 = sys_mmap(8 * FS_MAXP) as *i64
228 var i: i64 = 0
229 while i < cn {
230 let le: i64 = fs_eol(cb, cn, i)
231 if fs_is_row(cb, i, le) == 1 {
232 let np: i64 = fs_pipes(cb, i, le, pos)
233 if np >= 2 {
234 if fs_streq(cb, i, pos[0], key) == 1 {
235 let v: i64 = fs_digit_at(cb, pos[0] + 1, pos[1])
236 if v < 0 { return 0 - 1 }
237 var acc: i64 = 0
238 var q: i64 = pos[0] + 1
239 var any: i64 = 0
240 while q < pos[1] {
241 let c: i64 = cb[q] as i64
242 if c >= FS_ZERO { if c <= FS_NINE { acc = acc * 10 + (c - FS_ZERO); any = 1 } }
243 q = q + 1
244 }
245 if any == 1 { return acc }
246 return 0 - 1
247 }
248 }
249 }
250 i = le + 1
251 }
252 return 0 - 1
253}
254
255// -------------------------------------------------------------------------------------------------
256// TOKEN COVERAGE. "Is this outside title already described by something on our own board?"
257// COVERED when at least cover_permil of its content tokens already appear in the domain's labels, row
258// notes and citation prose. Tokens shorter than min_token are dropped as stopword-class noise.
259// The direction of error is deliberate: a FALSE COVERED silently loses a proposal, a FALSE NEW costs a
260// seat one glance -- so the bar sits where a HALF-described title still counts as new.
261// -------------------------------------------------------------------------------------------------
262func fs_tok_in(hay: *u8, hn: i64, tok: *u8, tl: i64) -> i64 {
263 if tl <= 0 { return 0 }
264 var i: i64 = 0
265 while i <= hn - tl {
266 var j: i64 = 0
267 var m: i64 = 1
268 while j < tl {
269 if fs_fold(hay[i+j] as i64) != (tok[j] as i64) { m = 0; j = tl } else { j = j + 1 }
270 }
271 if m == 1 {
272 var okl: i64 = 1
273 if i > 0 { if fs_fold(hay[i-1] as i64) != 0 { okl = 0 } }
274 if i + tl < hn { if fs_fold(hay[i+tl] as i64) != 0 { okl = 0 } }
275 if okl == 1 { return 1 }
276 }
277 i = i + 1
278 }
279 return 0
280}
281func fs_cover_permil(title: *u8, a: i64, b: i64, corp: *u8, cn: i64, min_token: i64, tok: *u8) -> i64 {
282 var total: i64 = 0
283 var hit: i64 = 0
284 var i: i64 = a
285 var tl: i64 = 0
286 while i <= b {
287 var c: i64 = 0
288 if i < b { c = fs_fold(title[i] as i64) }
289 if c == 0 {
290 if tl >= min_token {
291 total = total + 1
292 if fs_tok_in(corp, cn, tok, tl) == 1 { hit = hit + 1 }
293 }
294 tl = 0
295 } else {
296 if tl < FS_TXTCAP - 1 { tok[tl] = c as u8; tl = tl + 1 }
297 }
298 i = i + 1
299 }
300 // A TITLE WITH NO SCORABLE TOKEN IS UNOBSERVABLE, NOT NEW. Returning full coverage makes it COVERED,
301 // i.e. the instrument abstains instead of manufacturing a proposal out of nothing.
302 if total == 0 { return FS_PERMIL }
303 return (hit * FS_PERMIL) / total
304}
305
306// URL-SAFE SEED, AND THE FIRST CUT OF THIS FUNCTION IS WHY THE FIRST REPLAY MISSED.
307// v1 kept the first maxtok alphanumeric runs of the row label verbatim. On a real board that produced
308// `anim+paired+two+character` and `skin+albedo+driven+by`: the SECTION TAG ("ANIM:", "SKIN:") and the
309// stopwords ("two", "by", "in") went into the query, arXiv matched nothing usable, and -- because the
310// request still returned HTTP 200 with the newest submissions -- the loop happily proposed a Bose-Einstein
311// condensate paper against a skin-shader row. ★★★★★★A SEED THAT MATCHES NOTHING RETURNS A SUCCESSFUL
312// RESPONSE FULL OF THE WRONG THING, AND EVERY DOWNSTREAM FILTER THEN SCORES NOISE HONESTLY.
313// v2 therefore: drop the section tag, drop tokens below min_token, cap at maxtok, and JOIN WITH THE
314// SOURCE'S OWN OPERATOR (arXiv needs +AND+ or it ORs into the whole archive; HN wants plain +).
315func fs_seed_q(dst: *u8, src: *u8, a: i64, b: i64, cap: i64, maxtok: i64, min_token: i64, join: *u8) -> i64 {
316 // A section tag is a short word before a colon at the head of a board label (CREATOR, SKIN, BODY,
317 // ANIM, SIM, WORLD, PLATFORM, MESH, HAIR). FS_SECTION_MAX covers the longest of those with headroom
318 // and is short enough that it can never swallow a sentence that merely contains a colon.
319 var s: i64 = a
320 var k: i64 = a
321 var lim: i64 = a + FS_SECTION_MAX
322 if lim > b { lim = b }
323 while k < lim { if src[k] == (FS_COLON as u8) { s = k + 1; k = lim } else { k = k + 1 } }
324 let jl: i64 = fs_slen(join)
325 var p: i64 = 0
326 var toks: i64 = 0
327 var tl: i64 = 0
328 let tok: *u8 = sys_mmap(FS_TXTCAP)
329 var i: i64 = s
330 var stop: i64 = 0
331 while i <= b {
332 if stop == 0 {
333 var c: i64 = 0
334 if i < b { c = fs_fold(src[i] as i64) }
335 if c == 0 {
336 if tl >= min_token {
337 if p + tl + jl < cap - 2 {
338 if toks > 0 { var jj: i64 = 0; while jj < jl { dst[p] = join[jj]; p = p + 1; jj = jj + 1 } }
339 var m: i64 = 0
340 while m < tl { dst[p] = tok[m]; p = p + 1; m = m + 1 }
341 toks = toks + 1
342 if toks >= maxtok { stop = 1 }
343 }
344 }
345 tl = 0
346 } else {
347 if tl < FS_TXTCAP - 1 { tok[tl] = c as u8; tl = tl + 1 }
348 }
349 }
350 i = i + 1
351 }
352 dst[p] = 0 as u8
353 return p
354}
355
356// Stable 32-bit id for a url, printed as 8 hex digits. THIS IS WHAT MAKES THE PLANE PUT IDEMPOTENT:
357// the same proposal re-scanned tomorrow upserts its own row instead of growing a duplicate every beat.
358func fs_urlhash(buf: *u8, a: i64, b: i64) -> i64 {
359 var h: i64 = 0
360 var i: i64 = a
361 while i < b { h = ((h * FS_HASH_BASE) + (buf[i] as i64)) & FS_HASH_MASK; i = i + 1 }
362 return h
363}
364func fs_hex(dst: *u8, pos: i64, v: i64) -> i64 {
365 let digits: *u8 = "0123456789abcdef" as *u8
366 var p: i64 = pos
367 var k: i64 = FS_HEXDIG - 1
368 while k >= 0 {
369 let nib: i64 = (v / (1 << (FS_HEXSHIFT * k))) % FS_HEXRADIX
370 dst[p] = digits[nib]
371 p = p + 1
372 k = k - 1
373 }
374 return p
375}
376
377// A <domain> CONTAINING A SLASH IS A PATH PREFIX, NOT A DOMAIN NAME. That one branch is what lets the
378// gate assemble its fixtures under /tmp/<gate>/ (a gate must not share its fixture with a production
379// beat) and lets the metahuman REPLAY reconstruct a historical board WITHOUT writing anything into the
380// live knowledge/compare tree, where nx_domain_admit --all and the regen census would both consume it.
381func fs_has_slash(s: *u8) -> i64 {
382 var i: i64 = 0
383 while s[i] != (0 as u8) { if s[i] == (FS_SLASH as u8) { return 1 } i = i + 1 }
384 return 0
385}
386func fs_basename(s: *u8) -> i64 {
387 var i: i64 = 0
388 var last: i64 = 0 - 1
389 while s[i] != (0 as u8) { if s[i] == (FS_SLASH as u8) { last = i } i = i + 1 }
390 return last + 1
391}
392func fs_cmp_path(dst: *u8, dom: *u8, ext: *u8) -> i64 {
393 var p: i64 = 0
394 if fs_has_slash(dom) == 0 { p = fs_cat(dst, 0, "buildroot/knowledge/compare/" as *u8) }
395 p = fs_cat(dst, p, dom)
396 p = fs_cat(dst, p, ext)
397 dst[p] = 0 as u8
398 return p
399}
400
401// -------------------------------------------------------------------------------------------------
402// SEEDS. .axes field 4 first, then matrix labels ALWAYS. Emitting the SOURCE of each seed is the point:
403// a seed nobody can trace back to the board is a hand-typed seed wearing a data costume.
404// -------------------------------------------------------------------------------------------------
405func fs_emit_seeds(dom: *u8) -> i64 {
406 let path: *u8 = sys_mmap(FS_PATHCAP)
407 let pos: *i64 = sys_mmap(8 * FS_MAXP) as *i64
408 let alen: *i64 = sys_mmap(16) as *i64
409 var seeds: i64 = 0
410
411 // .axes NOW RESOLVES ACROSS BOTH COMPARE TREES (2026-09-01), STRICTLY ADDITIVELY.
412 // The original single read is kept EXACTLY as it was and runs FIRST, so no case that worked before
413 // can change; the two-tree resolver is consulted ONLY when that read missed. This can turn an ABSENT
414 // into a FOUND and never a FOUND into anything else -- the same shape da_read_2dir uses one organ over.
415 // A SLASH IN dom IS A LITERAL FIXTURE PATH (the gate passes /tmp/...), and it must never be redirected
416 // into a knowledge tree, so the fallback is gated on a bare domain name -- the same discrimination
417 // fs_cmp_path already makes.
418 // AUTHORED ORDER: .axes is hand-written and rendered by no page, so the bare knowledge tree is asked
419 // first. ct_readall_2dir sizes from the file, so there is no cap to guess and no silent truncation.
420 // The reported path is rebuilt from PRIMARY rather than assumed: the buildroot read above has already
421 // missed, and secondary IS buildroot, so a hit here can only have come from primary.
422 let awhich: *i64 = sys_mmap(16) as *i64
423 awhich[0] = CT_TREE_NONE
424 fs_cmp_path(path, dom, ".axes" as *u8)
425 var ab: *u8 = sys_read_file(path, alen)
426 if fs_has_slash(dom) == 0 {
427 if (ab as i64) == 0 {
428 ab = ct_readall_2dir(ct_first_authored(), ct_second_authored(), dom, ".axes" as *u8, alen, awhich)
429 if (ab as i64) != 0 {
430 var q: i64 = fs_cat(path, 0, CT_DIR_PRIMARY)
431 q = fs_cat(path, q, dom)
432 q = fs_cat(path, q, ".axes" as *u8)
433 path[q] = 0 as u8
434 }
435 }
436 }
437 if (ab as i64) != 0 {
438 let an: i64 = alen[0]
439 if an > 0 {
440 fs_w("SEED-SOURCE axes " as *u8); fs_w(path); fs_w("\n" as *u8)
441 var i: i64 = 0
442 while i < an {
443 let le: i64 = fs_eol(ab, an, i)
444 if fs_is_row(ab, i, le) == 1 {
445 let np: i64 = fs_pipes(ab, i, le, pos)
446 if np >= 3 {
447 var s: i64 = pos[2] + 1
448 var k: i64 = s
449 while k <= le {
450 var cut: i64 = 0
451 if k == le { cut = 1 } else { if ab[k] == (FS_SEMI as u8) { cut = 1 } }
452 if cut == 1 {
453 if k > s { fs_w("SEED axes " as *u8); fs_wn(ab, s, k - s); fs_w("\n" as *u8); seeds = seeds + 1 }
454 s = k + 1
455 }
456 k = k + 1
457 }
458 }
459 }
460 i = le + 1
461 }
462 }
463 } else { fs_w("SEED-SOURCE axes ABSENT (matrix labels carry the whole seed set for this domain)\n" as *u8) }
464
465 fs_cmp_path(path, dom, ".matrix" as *u8)
466 let mlen: *i64 = sys_mmap(16) as *i64
467 let mb: *u8 = sys_read_file(path, mlen)
468 if (mb as i64) == 0 { fs_w("SEEDS-REFUSED no-matrix " as *u8); fs_w(path); fs_w("\n" as *u8); return 0 - 1 }
469 let mn: i64 = mlen[0]
470 fs_w("SEED-SOURCE matrix " as *u8); fs_w(path); fs_w("\n" as *u8)
471 var j: i64 = 0
472 while j < mn {
473 let le2: i64 = fs_eol(mb, mn, j)
474 if fs_is_row(mb, j, le2) == 1 {
475 let np2: i64 = fs_pipes(mb, j, le2, pos)
476 if np2 >= 1 {
477 fs_w("SEED matrix " as *u8); fs_wn(mb, j, pos[0] - j); fs_w("\n" as *u8)
478 seeds = seeds + 1
479 }
480 }
481 j = le2 + 1
482 }
483 fs_w("SEEDS total=" as *u8); fs_n(seeds); fs_w("\n" as *u8)
484 return seeds
485}
486
487// -------------------------------------------------------------------------------------------------
488// CAPABILITY RANK FOR A NOMINAL CODE (2026-09-01) -- the fix for a comparison that contradicted its
489// own conf's stated derivation.
490// The matrix codebook is 0=No 1=Yes 2=Best 3=Part. That is NOMINAL, not ordinal: Part is a WEAKER
491// capability than Yes, but it is a LARGER integer. fs_deficit compared the raw code with
492// `c >= lead_code`, so at the shipped lead_code=2 a rival coded 3 (Part) COUNTED AS LEADING while a
493// rival coded 1 (Yes) did NOT -- the exact inverse of what knowledge/frontier_scan.conf says that key
494// means: "2 is exactly the statement a rival is Best at this".
495// WORSE THAN A MIS-SCORE, IT IS A BLIND SPOT: with no rival coded 2 or 3, `leads` stays 0 and the row
496// is never a deficit at all -- so the single clearest gap class, EVERY RIVAL FULLY HAS THIS AND WE DO
497// NOT (all rivals coded 1), was invisible to the estate's only autonomous frontier-noticer.
498// MEASURED CONSEQUENCE on the live search board: is_shard -- where Mojeek's own pinned mirror records
499// nine billion pages, coded 1=Yes -- ranked BELOW hs_render, where two rivals are merely Part.
500// FIX: rank by CAPABILITY STRENGTH and compare ranks, so the conf key keeps its declared meaning and
501// any future value of lead_code also means what it says. No(0)=0 Part(3)=1 Yes(1)=2 Best(2)=3.
502// SCOPE HELD DELIBERATELY NARROW: only the LEAD test changes. The score line below is left alone --
503// widening the scoring policy in the same edit as a correctness fix would make the two impossible to
504// tell apart in the next measurement.
505// ★A NUMERIC COMPARISON ON A NOMINAL CODE IS A BUG WEARING ARITHMETIC.
506// -------------------------------------------------------------------------------------------------
507const FS_CODE_PART: i64 = 3
508func fs_code_rank(c: i64) -> i64 {
509 if c == FS_CODE_BEST { return 3 }
510 if c == FS_CODE_YES { return 2 }
511 if c == FS_CODE_PART { return 1 }
512 return 0
513}
514
515// -------------------------------------------------------------------------------------------------
516// DEFICIT. THE REASON TRAVELS WITH THE COUNT: every row prints how many rivals lead and what our own
517// symbol is, so the worklist is triageable without re-running anything.
518// -------------------------------------------------------------------------------------------------
519func fs_deficit(mb: *u8, mn: i64, lead_code: i64, rowa: *i64, rowb: *i64, score: *i64, verbose: i64) -> i64 {
520 let pos: *i64 = sys_mmap(8 * FS_MAXP) as *i64
521 var found: i64 = 0
522 var rows: i64 = 0
523 var i: i64 = 0
524 while i < mn {
525 let le: i64 = fs_eol(mb, mn, i)
526 if fs_is_row(mb, i, le) == 1 {
527 let np: i64 = fs_pipes(mb, i, le, pos)
528 if np >= 8 {
529 rows = rows + 1
530 let exceed: i64 = fs_digit_at(mb, pos[2] + 1, pos[3])
531 var absent: i64 = 0
532 if fs_prefix(mb, pos[1] + 1, pos[2], "_ABSENT_" as *u8) == 1 { absent = 1 }
533 var sc: i64 = 0
534 var leads: i64 = 0
535 var k: i64 = 0
536 while k < FS_RIVALS {
537 let c: i64 = fs_digit_at(mb, pos[3+k] + 1, pos[4+k])
538 if fs_code_rank(c) >= fs_code_rank(lead_code) { leads = leads + 1; sc = sc + FS_CODE_BEST }
539 if c == FS_CODE_YES { sc = sc + FS_CODE_YES }
540 k = k + 1
541 }
542 var deficit: i64 = 0
543 if exceed != 1 { if leads > 0 { deficit = 1 } }
544 if deficit == 1 {
545 if absent == 1 { sc = sc + FS_CODE_BEST }
546 if found < FS_MAXROWS {
547 rowa[found] = i
548 rowb[found] = pos[0]
549 score[found] = sc
550 found = found + 1
551 }
552 if verbose == 1 {
553 fs_w("DEFICIT score=" as *u8); fs_n(sc)
554 fs_w(" rivals_leading=" as *u8); fs_n(leads)
555 fs_w(" our_symbol=" as *u8); fs_wn(mb, pos[1] + 1, pos[2] - (pos[1] + 1))
556 fs_w(" row=" as *u8); fs_wn(mb, i, pos[0] - i)
557 fs_w("\n" as *u8)
558 }
559 }
560 }
561 }
562 i = le + 1
563 }
564 var a: i64 = 0
565 while a < found {
566 var best: i64 = a
567 var b: i64 = a + 1
568 while b < found { if score[b] > score[best] { best = b } b = b + 1 }
569 if best != a {
570 let ts: i64 = score[a]; score[a] = score[best]; score[best] = ts
571 let ta: i64 = rowa[a]; rowa[a] = rowa[best]; rowa[best] = ta
572 let tb: i64 = rowb[a]; rowb[a] = rowb[best]; rowb[best] = tb
573 }
574 a = a + 1
575 }
576 if verbose == 1 {
577 fs_w("DEFICIT-PARTITION rows_total=" as *u8); fs_n(rows)
578 fs_w(" deficit=" as *u8); fs_n(found)
579 fs_w(" not_deficit=" as *u8); fs_n(rows - found)
580 fs_w(" (deficit plus not_deficit equals rows_total)\n" as *u8)
581 }
582 return found
583}
584
585// -------------------------------------------------------------------------------------------------
586// FETCH ONE SOURCE by COMPOSING nx_research_fetch -- the estate's ONE fetcher, which mirrors into
587// knowledge/fetched and can be pinned by nx_filehash. TLS is never re-implemented here.
588// Writes the saved raw path into savepath; returns its length, or -1.
589// -------------------------------------------------------------------------------------------------
590func fs_fetch(url: *u8, tmpout: *u8, savepath: *u8, olen: *i64) -> i64 {
591 let args: *i64 = sys_mmap(32) as *i64
592 args[0] = url as i64
593 var rc: i64 = dep_run_capture("./nx_research_fetch.elf" as *u8, args, 1, tmpout)
594 if rc == 127 { rc = dep_run_capture("_offc/nx_research_fetch.elf" as *u8, args, 1, tmpout) }
595 let ob: *u8 = sys_read_file(tmpout, olen)
596 if (ob as i64) == 0 { return 0 - 1 }
597 let on: i64 = olen[0]
598 let s: i64 = fs_find(ob, on, 0, "SAVED " as *u8)
599 if s < 0 { return 0 - 1 }
600 let p: i64 = s + 6
601 // separate cursor + explicit flag: A LOOP THAT BREAKS BY CLOBBERING ITS OWN CURSOR CANNOT ALSO REPORT
602 // WHERE IT STOPPED, and the answer here IS where it stopped.
603 var q: i64 = p
604 var end: i64 = p
605 var stop: i64 = 0
606 while stop == 0 {
607 if q >= on { end = q; stop = 1 } else {
608 let c: i64 = ob[q] as i64
609 if c == FS_SPACE { end = q; stop = 1 } else {
610 if c == FS_NL { end = q; stop = 1 } else { q = q + 1 }
611 }
612 }
613 }
614 let n: i64 = fs_catn(savepath, 0, ob, p, end)
615 savepath[n] = 0 as u8
616 return n
617}
618
619// -------------------------------------------------------------------------------------------------
620// EXTRACT + DIFF for one source over one seed. Prints proposals; returns how many it emitted.
621// Partition printed and summed: seen = already_cited + covered_by_board + proposed + over_row_cap + unpaired.
622// EVERY FIELD IS SEARCHED INSIDE ITS OWN ITEM'S EXTENT, never to the end of the buffer. v1 did the latter,
623// so an item missing a field silently borrowed the NEXT item's -- see fs_item_end and the block below.
624// -------------------------------------------------------------------------------------------------
625func fs_scan_source(dom: *u8, kind: *u8, url: *u8, idlm: *u8, topen: *u8, tclose: *u8,
626 uopen: *u8, uclose: *u8, corp: *u8, corpn: i64, refs: *u8, refsn: i64,
627 label: *u8, la: i64, lb: i64, max_items: i64, cover_permil: i64, min_token: i64,
628 wl: *u8, wlout: *i64, tok: *u8, savepath: *u8, olen: *i64, rlen: *i64) -> i64 {
629 let tmpout: *u8 = "/tmp/nx_frontier_scan/fetch.out" as *u8
630 let got: i64 = fs_fetch(url, tmpout, savepath, olen)
631 if got <= 0 {
632 fs_w(" SOURCE-UNREACHABLE kind=" as *u8); fs_w(kind)
633 fs_w(" url=" as *u8); fs_w(url)
634 fs_w(" (UNOBSERVABLE, not zero -- an axis that cannot see must abstain, not acquit)\n" as *u8)
635 return 0
636 }
637 let rb: *u8 = sys_read_file(savepath, rlen)
638 if (rb as i64) == 0 {
639 fs_w(" SOURCE-UNREADABLE mirror=" as *u8); fs_w(savepath); fs_w("\n" as *u8)
640 return 0
641 }
642 let rn: i64 = rlen[0]
643 fs_w(" SOURCE kind=" as *u8); fs_w(kind)
644 fs_w(" mirror=" as *u8); fs_w(savepath)
645 fs_w(" bytes=" as *u8); fs_n(rn); fs_w("\n" as *u8)
646
647 var seen: i64 = 0
648 var cited: i64 = 0
649 var covered: i64 = 0
650 var proposed: i64 = 0
651 var overcap: i64 = 0
652 var unpaired: i64 = 0
653 var wp: i64 = wlout[0]
654 var cur: i64 = 0
655 var go: i64 = 1
656 while go == 1 {
657 if seen >= max_items { go = 0 } else {
658 let it: i64 = fs_find(rb, rn, cur, idlm)
659 if it < 0 { go = 0 } else {
660 // ---- ITEM EXTENT: THE FIX (2026-08-20, lane E) ----------------------------------------
661 // ★★★★★★A PROPOSAL WHOSE URL DOES NOT BELONG TO ITS TITLE IS A FABRICATED CITATION IN THE
662 // MAKING -- the same defect class this lane spent a day retracting off /compare/charsim,
663 // caught one step UPSTREAM, before it can ever reach a refs row.
664 // v1 searched every field from the item delimiter TO THE END OF THE BUFFER, so an item
665 // that lacks a field silently borrowed the next item's. MEASURED LIVE on HN Algolia:
666 // Ask HN and Launch HN text posts carry NO "url" key at all (the mirror holds story_text
667 // instead), and TWO ADJACENT url-less items both reported the SAME downstream url under
668 // DIFFERENT titles. The bound is the item's own end; a field absent from it makes the
669 // item UNPAIRED, which is its own bucket -- never a borrowed neighbour.
670 // fs_find's own contract does the bounding for free: it requires the WHOLE literal inside
671 // [0,n), so passing the item end as n cannot match a literal straddling the boundary.
672 let ie: i64 = fs_item_end(rb, rn, it, idlm)
673 let ts: i64 = fs_find(rb, ie, it, topen)
674 let us: i64 = fs_find(rb, ie, it, uopen)
675 if ts < 0 { seen = seen + 1; unpaired = unpaired + 1; cur = it + fs_slen(idlm) } else {
676 if us < 0 { seen = seen + 1; unpaired = unpaired + 1; cur = it + fs_slen(idlm) } else {
677 let ta: i64 = ts + fs_slen(topen)
678 let te: i64 = fs_find(rb, ie, ta, tclose)
679 let ua: i64 = us + fs_slen(uopen)
680 let ue: i64 = fs_find(rb, ie, ua, uclose)
681 if te < 0 { seen = seen + 1; unpaired = unpaired + 1; cur = it + fs_slen(idlm) } else {
682 if ue < 0 { seen = seen + 1; unpaired = unpaired + 1; cur = it + fs_slen(idlm) } else {
683 seen = seen + 1
684 cur = it + fs_slen(idlm)
685 // ALREADY CITED? the refs file carries the url verbatim in field 4.
686 var already: i64 = 0
687 if refsn > 0 {
688 let ul: i64 = ue - ua
689 var z: i64 = 0
690 var hit: i64 = 0
691 while z <= refsn - ul {
692 var j: i64 = 0
693 var m: i64 = 1
694 while j < ul { if refs[z+j] != rb[ua+j] { m = 0; j = ul } else { j = j + 1 } }
695 if m == 1 { hit = 1; z = refsn }
696 z = z + 1
697 }
698 already = hit
699 }
700 if already == 1 { cited = cited + 1 } else {
701 let cov: i64 = fs_cover_permil(rb, ta, te, corp, corpn, min_token, tok)
702 if cov >= cover_permil { covered = covered + 1 } else {
703 if proposed >= FS_PROPS_PER_ROW { overcap = overcap + 1 } else {
704 proposed = proposed + 1
705 fs_w(" PROPOSAL domain=" as *u8); fs_w(dom)
706 fs_w(" kind=" as *u8); fs_w(kind)
707 fs_w(" cover_permil=" as *u8); fs_n(cov)
708 fs_w("\n" as *u8)
709 fs_w(" challenges_row: " as *u8); fs_wn(label, la, lb - la); fs_w("\n" as *u8)
710 fs_w(" title: " as *u8); fs_wn(rb, ta, te - ta); fs_w("\n" as *u8)
711 fs_w(" url: " as *u8); fs_wn(rb, ua, ue - ua); fs_w("\n" as *u8)
712 fs_w(" mirror: " as *u8); fs_w(savepath); fs_w("\n" as *u8)
713 wp = fs_cat(wl, wp, "PROPOSAL|" as *u8)
714 wp = fs_cat(wl, wp, dom)
715 wp = fs_cat(wl, wp, "|" as *u8)
716 wp = fs_catn(wl, wp, label, la, lb)
717 wp = fs_cat(wl, wp, "|" as *u8)
718 wp = fs_catn(wl, wp, rb, ta, te)
719 wp = fs_cat(wl, wp, "|" as *u8)
720 wp = fs_catn(wl, wp, rb, ua, ue)
721 wp = fs_cat(wl, wp, "|" as *u8)
722 wp = fs_cat(wl, wp, savepath)
723 wp = fs_cat(wl, wp, "|" as *u8)
724 wp = fs_cat(wl, wp, kind)
725 wp = fs_cat(wl, wp, "|OPEN" as *u8)
726 wl[wp] = FS_NL as u8
727 wp = wp + 1
728 }
729 }
730 }
731 }
732 }
733 }
734 }
735 }
736 }
737 }
738 fs_w(" ITEMS seen=" as *u8); fs_n(seen)
739 fs_w(" already_cited=" as *u8); fs_n(cited)
740 fs_w(" covered_by_board=" as *u8); fs_n(covered)
741 fs_w(" proposed=" as *u8); fs_n(proposed)
742 fs_w(" over_row_cap=" as *u8); fs_n(overcap)
743 fs_w(" unpaired=" as *u8); fs_n(unpaired)
744 fs_w(" (the five buckets sum to seen)\n" as *u8)
745 wlout[0] = wp
746 return proposed
747}
748
749// =================================================================================================
750// ATTEST (2026-09-06). Operator: "use and upgrade the nishi research fetch system and expand its fan out
751// ... so siggraph 2026 and all those other state of the art research areas like github gitea etc all get
752// evaluated." Two legs over the SAME source rows the scan reads (a DATED row carries two more fields:
753// date-open and date-close, or month=YYYY-MM in date-open when a listing has one month for every item,
754// as a conference index does):
755// ATTEST LEG re-fetch the listing each sotabar| row cites (its ref's url), read the newest month in it,
756// append barscan|<today>|<ref>|newest=<YYYY-MM> to the plan -- idempotent per date and ref --
757// so nx_barfresh reads ATTESTED (or STALE when the listing moved) from the estate's own
758// re-reading: "nothing newer this month" is re-earned by a beat, never remembered by a seat.
759// FAN-OUT LEG ask every OTHER dated source the bar's subject, print NEWER / SAME / OLDER / UNDATED per
760// source with the newest item named, and write the NEWER items to a worklist a seat adjudicates.
761// STILL ADMITS NOTHING: a barscan row records that a listing was fetched and read and what its newest
762// month was; the claim about what that month SAYS stays the sotabar| row a seat writes from the worklist.
763// A STATIC listing (no {q} in its url) is FILTERED BY THE BAR'S SUBJECT: an item sharing no content token
764// with the subject is not evidence about it, so a 283-paper conference index reads as the papers on the
765// subject; it is fan-out only, the scan verb never proposes from it (see main).
766// UNDATED is its own answer, never zero: a listing whose items carry no readable date cannot attest a month.
767// =================================================================================================
768const FS_DASH: i64 = 45
769const FS_CR: i64 = 13
770const FS_MONTH_TAG: *u8 = "month="
771const FS_MONTH_TAG_LEN: i64 = 6
772const FS_DATED_PIPES: i64 = 10 // src|kind|url|item|topen|tclose|uopen|uclose|join|dopen|dclose
773const FS_ATT_C_BARS: i64 = 0
774const FS_ATT_C_APPENDED: i64 = 1
775const FS_ATT_C_ALREADY: i64 = 2
776const FS_ATT_C_UNATTESTABLE: i64 = 3
777const FS_ATT_C_FETCHES: i64 = 4
778const FS_ATT_C_NEWER: i64 = 5
779const FS_ATT_C_STALE: i64 = 6
780const FS_ATT_C_N: i64 = 8
781const FS_YMBUF: i64 = 16
782const FS_TODAYBUF: i64 = 32
783
784// the month index of the YYYY-MM at rb[a..b), or -1 -- ONE reader, the bar ruler's
785func fs_ym_at(rb: *u8, a: i64, b: i64) -> i64 {
786 if b - a < BF_YM_LEN { return 0 - 1 }
787 let v: i64 = bf_parse_ym(((rb as i64) + a) as *u8, b - a)
788 if v == BF_NONE { return 0 - 1 }
789 return v
790}
791// month=YYYY-MM in a date-open field -> that month; anything else -> -1 (read the item's own date)
792func fs_fixed_month(spec: *u8) -> i64 {
793 let n: i64 = fs_slen(spec)
794 if fs_prefix(spec, 0, n, FS_MONTH_TAG) == 0 { return 0 - 1 }
795 return fs_ym_at(spec, FS_MONTH_TAG_LEN, n)
796}
797func fs_w_ym(b: *u8, ix: i64) -> i64 { bf_ym_write(b, 0, ix); fs_w(b); return 0 }
798func fs_catn_num(dst: *u8, pos: i64, v: i64) -> i64 {
799 var p: i64 = pos
800 if v == 0 { dst[p] = FS_ZERO as u8; return p + 1 }
801 var m: i64 = v
802 if m < 0 { dst[p] = FS_DASH as u8; p = p + 1; m = 0 - m }
803 let tmp: *u8 = sys_mmap(FS_TODAYBUF)
804 var k: i64 = 0
805 while m > 0 { tmp[k] = (FS_ZERO + (m - (m / 10) * 10)) as u8; m = m / 10; k = k + 1 }
806 while k > 0 { k = k - 1; dst[p] = tmp[k]; p = p + 1 }
807 return p
808}
809// today as YYYY-MM-DD through the estate's civil date -- the barscan row's date field
810func fs_today(dst: *u8) -> i64 {
811 let ts: *i64 = sys_mmap(BF_CLOCK_WORDS * BF_I64) as *i64
812 ts[0] = 0
813 sys_clock_gettime_real(ts)
814 let y: *i64 = sys_mmap(BF_I64) as *i64
815 let m: *i64 = sys_mmap(BF_I64) as *i64
816 let d: *i64 = sys_mmap(BF_I64) as *i64
817 civil_from_days(ts[0] / BF_SECS_PER_DAY, y, m, d)
818 var o: i64 = bf_ym_write(dst, 0, bf_ym_index(y[0], m[0]))
819 dst[o] = FS_DASH as u8; o = o + 1
820 dst[o] = (d[0] / 10 + FS_ZERO) as u8; o = o + 1
821 dst[o] = (d[0] - (d[0] / 10) * 10 + FS_ZERO) as u8; o = o + 1
822 dst[o] = 0 as u8
823 return o
824}
825// does the item [it,ie) mention ANY content token (min_token or longer) of the subject subj[so..so+sn)?
826func fs_item_mentions(rb: *u8, it: i64, ie: i64, subj: *u8, so: i64, sn: i64, min_token: i64, tok: *u8) -> i64 {
827 let hay: *u8 = ((rb as i64) + it) as *u8
828 let hn: i64 = ie - it
829 var tl: i64 = 0
830 var i: i64 = so
831 while i <= so + sn {
832 var c: i64 = 0
833 if i < so + sn { c = fs_fold(subj[i] as i64) }
834 if c == 0 {
835 if tl >= min_token { if fs_tok_in(hay, hn, tok, tl) == 1 { return 1 } }
836 tl = 0
837 } else { if tl < FS_TXTCAP - 1 { tok[tl] = c as u8; tl = tl + 1 } }
838 i = i + 1
839 }
840 return 0
841}
842// a field (open..close) INSIDE the item's own extent: its length with off[0]=start, or -1
843func fs_item_field(rb: *u8, it: i64, ie: i64, open: *u8, close: *u8, off: *i64) -> i64 {
844 let s: i64 = fs_find(rb, ie, it, open)
845 if s < 0 { return 0 - 1 }
846 let a: i64 = s + fs_slen(open)
847 let e: i64 = fs_find(rb, ie, a, close)
848 if e < 0 { return 0 - 1 }
849 off[0] = a
850 return e - a
851}
852// THE MONTH READER. Walks the items of a mirrored listing (each bounded by its own extent), reads the date
853// between dopen and dclose -- or takes the FIXED month when the source declares one -- and returns the
854// newest month index, or -1 when no item could be dated (UNDATED, never the epoch). With sn > 0 only items
855// mentioning the subject count (a static listing is filtered by the bar's subject).
856// cnt[0]=items seen, cnt[1]=items dated, cnt[2]=offset of the newest item (-1 if none), cnt[3..4]=its date span.
857func fs_newest_month(rb: *u8, rn: i64, idlm: *u8, dopen: *u8, dclose: *u8, fixed: i64, max_items: i64,
858 subj: *u8, so: i64, sn: i64, min_token: i64, tok: *u8, cnt: *i64) -> i64 {
859 var best: i64 = 0 - 1
860 var seen: i64 = 0
861 var dated: i64 = 0
862 var cur: i64 = 0
863 var go: i64 = 1
864 cnt[2] = 0 - 1; cnt[3] = 0; cnt[4] = 0
865 while go == 1 {
866 if seen >= max_items { go = 0 } else {
867 let it: i64 = fs_find(rb, rn, cur, idlm)
868 if it < 0 { go = 0 } else {
869 let ie: i64 = fs_item_end(rb, rn, it, idlm)
870 cur = it + fs_slen(idlm)
871 var take: i64 = 1
872 if sn > 0 { take = fs_item_mentions(rb, it, ie, subj, so, sn, min_token, tok) }
873 if take == 1 {
874 seen = seen + 1
875 var ym: i64 = 0 - 1
876 var da: i64 = 0
877 var de: i64 = 0
878 if fixed >= 0 { ym = fixed } else {
879 let ds: i64 = fs_find(rb, ie, it, dopen)
880 if ds >= 0 {
881 da = ds + fs_slen(dopen)
882 de = fs_find(rb, ie, da, dclose)
883 if de > da { ym = fs_ym_at(rb, da, de) }
884 }
885 }
886 if ym >= 0 {
887 dated = dated + 1
888 if ym > best { best = ym; cnt[2] = it; cnt[3] = da; cnt[4] = de }
889 }
890 }
891 }
892 }
893 }
894 cnt[0] = seen
895 cnt[1] = dated
896 return best
897}
898// Append ONE barscan row to a plan, idempotent per (date, ref): the same attestation re-run the same day is a
899// no-op, so a beat cannot grow a plan by a row per tick. 1 appended, 0 already present, -1 unwritable.
900func fs_attest_row(plan: *u8, refkey: *u8, today: *u8, ym: i64, note: *u8) -> i64 {
901 let plen: *i64 = sys_mmap(16) as *i64
902 let pb: *u8 = sys_read_file(plan, plen)
903 if (pb as i64) == 0 { return 0 - 1 }
904 let pn: i64 = plen[0]
905 let key: *u8 = sys_mmap(FS_TXTCAP)
906 var k: i64 = fs_cat(key, 0, BF_SCAN_TAG)
907 k = fs_cat(key, k, today)
908 k = fs_cat(key, k, "|" as *u8)
909 k = fs_cat(key, k, refkey)
910 k = fs_cat(key, k, "|" as *u8)
911 key[k] = 0 as u8
912 if fs_find(pb, pn, 0, key) >= 0 { return 0 }
913 let row: *u8 = sys_mmap(FS_LINECAP)
914 var r: i64 = fs_cat(row, 0, key)
915 r = fs_cat(row, r, BF_NEWEST_TAG)
916 r = bf_ym_write(row, r, ym)
917 r = fs_cat(row, r, "|" as *u8)
918 r = fs_cat(row, r, note)
919 row[r] = FS_NL as u8; r = r + 1
920 let fd: i64 = sys_openat_append(plan, MODE_0644)
921 if fd < 0 { return 0 - 1 }
922 // a plan whose last byte is not a newline would glue this row onto its previous line
923 if pn > 0 { if pb[pn - 1] != (FS_NL as u8) { sys_write(fd, "\n" as *u8, 1) } }
924 sys_write(fd, row, r)
925 sys_close(fd)
926 return 1
927}
928// ref|<key>|<cite>|<url>|... -> the url span of the row whose key matches; length with off[0]=start, or -1
929func fs_ref_url(refs: *u8, refsn: i64, key: *u8, klen: i64, off: *i64) -> i64 {
930 let pos: *i64 = sys_mmap(8 * FS_MAXP) as *i64
931 var i: i64 = 0
932 while i < refsn {
933 let le: i64 = fs_eol(refs, refsn, i)
934 if fs_is_row(refs, i, le) == 1 {
935 let np: i64 = fs_pipes(refs, i, le, pos)
936 if np >= 4 { if fs_streq(refs, i, pos[0], "ref" as *u8) == 1 {
937 if pos[1] - (pos[0] + 1) == klen {
938 var m: i64 = 1
939 var j: i64 = 0
940 while j < klen { if refs[pos[0] + 1 + j] != key[j] { m = 0; j = klen } else { j = j + 1 } }
941 if m == 1 { off[0] = pos[2] + 1; return pos[3] - (pos[2] + 1) }
942 }
943 } }
944 }
945 i = le + 1
946 }
947 return 0 - 1
948}
949// the nine fields of a DATED source row into NUL-terminated buffers (spos from fs_pipes, sle the row end)
950func fs_src_fields(sb: *u8, spos: *i64, sle: i64, kind: *u8, idlm: *u8, topen: *u8, tclos: *u8, uopen: *u8, uclos: *u8, join: *u8, dopen: *u8, dclos: *u8) -> i64 {
951 var q: i64 = fs_catn(kind, 0, sb, spos[0] + 1, spos[1]); kind[q] = 0 as u8
952 q = fs_catn(idlm, 0, sb, spos[2] + 1, spos[3]); idlm[q] = 0 as u8
953 q = fs_catn(topen, 0, sb, spos[3] + 1, spos[4]); topen[q] = 0 as u8
954 q = fs_catn(tclos, 0, sb, spos[4] + 1, spos[5]); tclos[q] = 0 as u8
955 q = fs_catn(uopen, 0, sb, spos[5] + 1, spos[6]); uopen[q] = 0 as u8
956 q = fs_catn(uclos, 0, sb, spos[6] + 1, spos[7]); uclos[q] = 0 as u8
957 q = fs_catn(join, 0, sb, spos[7] + 1, spos[8]); join[q] = 0 as u8
958 q = fs_catn(dopen, 0, sb, spos[8] + 1, spos[9]); dopen[q] = 0 as u8
959 q = fs_catn(dclos, 0, sb, spos[9] + 1, sle); dclos[q] = 0 as u8
960 return 0
961}
962// substitute {q} in the template sb[a..b) with qbuf into url; returns 1 when the template had a slot, 0 (static) otherwise
963func fs_build_url(url: *u8, sb: *u8, a: i64, b: i64, qbuf: *u8) -> i64 {
964 var up: i64 = 0
965 var t: i64 = a
966 var had: i64 = 0
967 while t < b {
968 var sub: i64 = 0
969 if sb[t] == (FS_LBRACE as u8) { if fs_prefix(sb, t, b, "{q}" as *u8) == 1 { sub = 1 } }
970 if sub == 1 { up = fs_cat(url, up, qbuf); t = t + 3; had = 1 } else { url[up] = sb[t]; up = up + 1; t = t + 1 }
971 }
972 url[up] = 0 as u8
973 return had
974}
975func fs_attest_domain(dom: *u8, dbase: *u8, sb: *u8, sn: i64, today: *u8, max_items: i64, min_token: i64, seed_tokens: i64, tot: *i64) -> i64 {
976 let path: *u8 = sys_mmap(FS_PATHCAP)
977 fs_cmp_path(path, dom, ".plan" as *u8)
978 let plen: *i64 = sys_mmap(16) as *i64
979 let pb: *u8 = sys_read_file(path, plen)
980 if (pb as i64) == 0 { fs_w("ATTEST-REFUSED domain=" as *u8); fs_w(dom); fs_w(" reason=no-plan path=" as *u8); fs_w(path); fs_w("\n" as *u8); return 0 - 1 }
981 let pn: i64 = plen[0]
982 let nbars: i64 = bf_count_rows(pb, pn, BF_BAR_TAG)
983 fs_w("=== nx_frontier_scan attest " as *u8); fs_w(dom); fs_w(" bars=" as *u8); fs_n(nbars); fs_w(" today=" as *u8); fs_w(today); fs_w("\n" as *u8)
984 if nbars == 0 { fs_w("NO-BAR domain=" as *u8); fs_w(dom); fs_w(" -- no sotabar row, nothing to attest (a domain opts in by declaring its first bar)\n" as *u8); return 0 }
985 let rpath: *u8 = sys_mmap(FS_PATHCAP)
986 fs_cmp_path(rpath, dom, ".refs" as *u8)
987 let rflen: *i64 = sys_mmap(16) as *i64
988 let refs: *u8 = sys_read_file(rpath, rflen)
989 var refsn: i64 = 0
990 if (refs as i64) != 0 { refsn = rflen[0] }
991 let spos: *i64 = sys_mmap(8 * FS_MAXP) as *i64
992 var ndated: i64 = 0
993 var s0: i64 = 0
994 while s0 < sn {
995 let sle0: i64 = fs_eol(sb, sn, s0)
996 if fs_is_row(sb, s0, sle0) == 1 { if fs_pipes(sb, s0, sle0, spos) >= FS_DATED_PIPES { if fs_streq(sb, s0, spos[0], "src" as *u8) == 1 { ndated = ndated + 1 } } }
997 s0 = sle0 + 1
998 }
999 fs_w("DATED-SOURCES " as *u8); fs_n(ndated); fs_w(" (source rows carrying a date spec; the undated ones are scan-only)\n" as *u8)
1000 let wl: *u8 = sys_mmap((nbars + 1) * (ndated + 1) * FS_LINECAP + FS_TXTCAP)
1001 var wp: i64 = 0
1002 sys_mkdir("/tmp/nx_frontier_scan" as *u8, FS_DIRMODE)
1003 let tmpout: *u8 = "/tmp/nx_frontier_scan/attest_fetch.out" as *u8
1004 let url: *u8 = sys_mmap(FS_URLCAP)
1005 let qbuf: *u8 = sys_mmap(FS_URLCAP)
1006 let kind: *u8 = sys_mmap(FS_TXTCAP)
1007 let idlm: *u8 = sys_mmap(FS_TXTCAP)
1008 let topen: *u8 = sys_mmap(FS_TXTCAP)
1009 let tclos: *u8 = sys_mmap(FS_TXTCAP)
1010 let uopen: *u8 = sys_mmap(FS_TXTCAP)
1011 let uclos: *u8 = sys_mmap(FS_TXTCAP)
1012 let join: *u8 = sys_mmap(FS_TXTCAP)
1013 let dopen: *u8 = sys_mmap(FS_TXTCAP)
1014 let dclos: *u8 = sys_mmap(FS_TXTCAP)
1015 let akind: *u8 = sys_mmap(FS_TXTCAP)
1016 let refkey: *u8 = sys_mmap(FS_TXTCAP)
1017 let tok: *u8 = sys_mmap(FS_TXTCAP)
1018 let note: *u8 = sys_mmap(FS_LINECAP)
1019 let savepath: *u8 = sys_mmap(FS_PATHCAP)
1020 let olen: *i64 = sys_mmap(16) as *i64
1021 let rlen: *i64 = sys_mmap(16) as *i64
1022 let cnt: *i64 = sys_mmap(8 * 8) as *i64
1023 let fo: *i64 = sys_mmap(16) as *i64
1024 let uo: *i64 = sys_mmap(16) as *i64
1025 let ymb: *u8 = sys_mmap(FS_YMBUF)
1026 var p: i64 = 0
1027 while p < pn {
1028 let e: i64 = bf_line_end(pb, pn, p)
1029 if bf_line_starts(pb, p, e, BF_BAR_TAG) == 1 {
1030 tot[FS_ATT_C_BARS] = tot[FS_ATT_C_BARS] + 1
1031 let idl: i64 = bf_field(pb, p, e, BF_F_BAR_ID, fo)
1032 let ido: i64 = fo[0]
1033 let yml: i64 = bf_field(pb, p, e, BF_F_BAR_YM, fo)
1034 let ymo: i64 = fo[0]
1035 let sjl: i64 = bf_field(pb, p, e, BF_F_BAR_SUBJECT, fo)
1036 let sjo: i64 = fo[0]
1037 let rkl: i64 = bf_field(pb, p, e, BF_F_BAR_REF, fo)
1038 let rko: i64 = fo[0]
1039 var bar_ym: i64 = 0 - 1
1040 if yml > 0 { bar_ym = fs_ym_at(pb, ymo, ymo + yml) }
1041 var rk: i64 = 0
1042 if rkl > 0 { rk = fs_catn(refkey, 0, pb, rko, rko + rkl) }
1043 refkey[rk] = 0 as u8
1044 fs_w("BAR " as *u8); fs_wn(pb, ido, idl); fs_w(" month=" as *u8); fs_wn(pb, ymo, yml)
1045 fs_w(" ref=" as *u8); fs_w(refkey); fs_w(" subject=" as *u8); fs_wn(pb, sjo, sjl); fs_w("\n" as *u8)
1046 if bar_ym < 0 { fs_w(" ATTEST-UNATTESTABLE reason=bar-month-malformed\n" as *u8); tot[FS_ATT_C_UNATTESTABLE] = tot[FS_ATT_C_UNATTESTABLE] + 1 } else {
1047 // ---- ATTEST LEG: the listing the bar itself cites ----
1048 akind[0] = 0 as u8
1049 let ul: i64 = fs_ref_url(refs, refsn, refkey, rk, uo)
1050 if ul <= 0 { fs_w(" ATTEST-UNATTESTABLE reason=ref-not-in-refs ref=" as *u8); fs_w(refkey); fs_w("\n" as *u8); tot[FS_ATT_C_UNATTESTABLE] = tot[FS_ATT_C_UNATTESTABLE] + 1 } else {
1051 let un: i64 = fs_catn(url, 0, refs, uo[0], uo[0] + ul)
1052 url[un] = 0 as u8
1053 var srow: i64 = 0 - 1
1054 var si: i64 = 0
1055 while si < sn {
1056 let sle: i64 = fs_eol(sb, sn, si)
1057 if fs_is_row(sb, si, sle) == 1 { if fs_pipes(sb, si, sle, spos) >= FS_DATED_PIPES { if fs_streq(sb, si, spos[0], "src" as *u8) == 1 {
1058 var pe: i64 = fs_find(sb, spos[2], spos[1] + 1, "{q}" as *u8)
1059 if pe < 0 { pe = spos[2] }
1060 let pl: i64 = pe - (spos[1] + 1)
1061 if pl > 0 { if pl <= un {
1062 var m: i64 = 1
1063 var j: i64 = 0
1064 while j < pl { if url[j] != sb[spos[1] + 1 + j] { m = 0; j = pl } else { j = j + 1 } }
1065 if m == 1 { if srow < 0 { srow = si } }
1066 } }
1067 } } }
1068 si = sle + 1
1069 }
1070 if srow < 0 { fs_w(" ATTEST-UNATTESTABLE reason=no-dated-source-row-knows-this-listing url=" as *u8); fs_w(url); fs_w("\n" as *u8); tot[FS_ATT_C_UNATTESTABLE] = tot[FS_ATT_C_UNATTESTABLE] + 1 } else {
1071 let sle2: i64 = fs_eol(sb, sn, srow)
1072 fs_pipes(sb, srow, sle2, spos)
1073 fs_src_fields(sb, spos, sle2, kind, idlm, topen, tclos, uopen, uclos, join, dopen, dclos)
1074 let akl: i64 = fs_cat(akind, 0, kind)
1075 akind[akl] = 0 as u8
1076 tot[FS_ATT_C_FETCHES] = tot[FS_ATT_C_FETCHES] + 1
1077 let got: i64 = fs_fetch(url, tmpout, savepath, olen)
1078 if got <= 0 { fs_w(" ATTEST-UNATTESTABLE reason=source-unreachable kind=" as *u8); fs_w(kind); fs_w(" (UNOBSERVABLE, not zero)\n" as *u8); tot[FS_ATT_C_UNATTESTABLE] = tot[FS_ATT_C_UNATTESTABLE] + 1 } else {
1079 let rb: *u8 = sys_read_file(savepath, rlen)
1080 if (rb as i64) == 0 { fs_w(" ATTEST-UNATTESTABLE reason=mirror-unreadable\n" as *u8); tot[FS_ATT_C_UNATTESTABLE] = tot[FS_ATT_C_UNATTESTABLE] + 1 } else {
1081 let rn: i64 = rlen[0]
1082 let fixed: i64 = fs_fixed_month(dopen)
1083 let newest: i64 = fs_newest_month(rb, rn, idlm, dopen, dclos, fixed, max_items, pb, 0, 0, min_token, tok, cnt)
1084 if newest < 0 { fs_w(" ATTEST-UNATTESTABLE reason=no-dated-item kind=" as *u8); fs_w(kind); fs_w(" items=" as *u8); fs_n(cnt[0]); fs_w("\n" as *u8); tot[FS_ATT_C_UNATTESTABLE] = tot[FS_ATT_C_UNATTESTABLE] + 1 } else {
1085 fs_w(" ATTEST kind=" as *u8); fs_w(kind); fs_w(" items=" as *u8); fs_n(cnt[0]); fs_w(" dated=" as *u8); fs_n(cnt[1])
1086 fs_w(" newest=" as *u8); fs_w_ym(ymb, newest); fs_w(" bar=" as *u8); fs_w_ym(ymb, bar_ym)
1087 if newest > bar_ym { fs_w(" verdict=NEWER (the listing moved past the bar -- nx_barfresh reads STALE until a seat re-adjudicates the sotabar row)" as *u8); tot[FS_ATT_C_STALE] = tot[FS_ATT_C_STALE] + 1 } else { if newest == bar_ym { fs_w(" verdict=SAME" as *u8) } else { fs_w(" verdict=OLDER (the listing carries nothing newer than the bar)" as *u8) } }
1088 fs_w("\n" as *u8)
1089 var np9: i64 = fs_cat(note, 0, "attested by nx_frontier_scan attest: " as *u8)
1090 np9 = fs_catn_num(note, np9, cnt[0]); np9 = fs_cat(note, np9, " items read, " as *u8)
1091 np9 = fs_catn_num(note, np9, cnt[1]); np9 = fs_cat(note, np9, " dated, newest item " as *u8)
1092 if cnt[4] > cnt[3] { np9 = fs_catn(note, np9, rb, cnt[3], cnt[4]) } else { np9 = fs_cat(note, np9, "(fixed month)" as *u8) }
1093 np9 = fs_cat(note, np9, ", mirror " as *u8); np9 = fs_cat(note, np9, savepath)
1094 note[np9] = 0 as u8
1095 let arc: i64 = fs_attest_row(path, refkey, today, newest, note)
1096 if arc == 1 { fs_w(" BARSCAN-APPENDED plan=" as *u8); fs_w(path); fs_w("\n" as *u8); tot[FS_ATT_C_APPENDED] = tot[FS_ATT_C_APPENDED] + 1 } else { if arc == 0 { fs_w(" BARSCAN-ALREADY-PRESENT (same date and ref: idempotent)\n" as *u8); tot[FS_ATT_C_ALREADY] = tot[FS_ATT_C_ALREADY] + 1 } else { fs_w(" BARSCAN-UNWRITABLE plan=" as *u8); fs_w(path); fs_w("\n" as *u8); tot[FS_ATT_C_UNATTESTABLE] = tot[FS_ATT_C_UNATTESTABLE] + 1 } }
1097 }
1098 }
1099 }
1100 }
1101 }
1102 // ---- FAN-OUT LEG: every OTHER dated source, asked the bar's own subject ----
1103 var fi: i64 = 0
1104 while fi < sn {
1105 let fle: i64 = fs_eol(sb, sn, fi)
1106 if fs_is_row(sb, fi, fle) == 1 { if fs_pipes(sb, fi, fle, spos) >= FS_DATED_PIPES { if fs_streq(sb, fi, spos[0], "src" as *u8) == 1 {
1107 fs_src_fields(sb, spos, fle, kind, idlm, topen, tclos, uopen, uclos, join, dopen, dclos)
1108 if fs_streq(kind, 0, fs_slen(kind), akind) == 0 {
1109 fs_seed_q(qbuf, pb, sjo, sjo + sjl, FS_URLCAP, seed_tokens, min_token, join)
1110 let had: i64 = fs_build_url(url, sb, spos[1] + 1, spos[2], qbuf)
1111 tot[FS_ATT_C_FETCHES] = tot[FS_ATT_C_FETCHES] + 1
1112 let fgot: i64 = fs_fetch(url, tmpout, savepath, olen)
1113 if fgot <= 0 { fs_w(" FANOUT kind=" as *u8); fs_w(kind); fs_w(" verdict=UNREACHABLE (UNOBSERVABLE, not zero) url=" as *u8); fs_w(url); fs_w("\n" as *u8) } else {
1114 let fb: *u8 = sys_read_file(savepath, rlen)
1115 if (fb as i64) == 0 { fs_w(" FANOUT kind=" as *u8); fs_w(kind); fs_w(" verdict=MIRROR-UNREADABLE\n" as *u8) } else {
1116 let fn9: i64 = rlen[0]
1117 let ffix: i64 = fs_fixed_month(dopen)
1118 var subjn: i64 = 0
1119 if had == 0 { subjn = sjl }
1120 let fnew: i64 = fs_newest_month(fb, fn9, idlm, dopen, dclos, ffix, max_items, pb, sjo, subjn, min_token, tok, cnt)
1121 fs_w(" FANOUT kind=" as *u8); fs_w(kind); fs_w(" q=" as *u8)
1122 if had == 0 { fs_w("(static listing, filtered by the subject tokens)" as *u8) } else { fs_w(qbuf) }
1123 fs_w(" items=" as *u8); fs_n(cnt[0]); fs_w(" dated=" as *u8); fs_n(cnt[1]); fs_w(" newest=" as *u8)
1124 if fnew < 0 { fs_w("NONE verdict=UNDATED\n" as *u8) } else {
1125 fs_w_ym(ymb, fnew); fs_w(" vs_bar=" as *u8); fs_w_ym(ymb, bar_ym)
1126 if fnew > bar_ym {
1127 fs_w(" verdict=NEWER\n" as *u8)
1128 tot[FS_ATT_C_NEWER] = tot[FS_ATT_C_NEWER] + 1
1129 let bit: i64 = cnt[2]
1130 if bit >= 0 {
1131 let bie: i64 = fs_item_end(fb, fn9, bit, idlm)
1132 let tl9: i64 = fs_item_field(fb, bit, bie, topen, tclos, fo)
1133 let to9: i64 = fo[0]
1134 let ul9: i64 = fs_item_field(fb, bit, bie, uopen, uclos, fo)
1135 let uo9: i64 = fo[0]
1136 fs_w(" newest: " as *u8)
1137 if tl9 > 0 { fs_wn(fb, to9, tl9) } else { fs_w("(untitled)" as *u8) }
1138 fs_w(" | " as *u8)
1139 if ul9 > 0 { fs_wn(fb, uo9, ul9) } else { fs_w("(no url)" as *u8) }
1140 fs_w(" | mirror " as *u8); fs_w(savepath); fs_w("\n" as *u8)
1141 wp = fs_cat(wl, wp, "NEWER|" as *u8); wp = fs_cat(wl, wp, dbase); wp = fs_cat(wl, wp, "|" as *u8)
1142 wp = fs_catn(wl, wp, pb, ido, ido + idl); wp = fs_cat(wl, wp, "|" as *u8)
1143 wp = fs_cat(wl, wp, kind); wp = fs_cat(wl, wp, "|" as *u8)
1144 wp = bf_ym_write(wl, wp, fnew); wp = fs_cat(wl, wp, "|" as *u8)
1145 if tl9 > 0 { wp = fs_catn(wl, wp, fb, to9, to9 + tl9) }
1146 wp = fs_cat(wl, wp, "|" as *u8)
1147 if ul9 > 0 { wp = fs_catn(wl, wp, fb, uo9, uo9 + ul9) }
1148 wp = fs_cat(wl, wp, "|" as *u8); wp = fs_cat(wl, wp, savepath)
1149 wl[wp] = FS_NL as u8; wp = wp + 1
1150 }
1151 } else { if fnew == bar_ym { fs_w(" verdict=SAME\n" as *u8) } else { fs_w(" verdict=OLDER\n" as *u8) } }
1152 }
1153 }
1154 }
1155 }
1156 } } }
1157 fi = fle + 1
1158 }
1159 }
1160 }
1161 p = e + 1
1162 }
1163 if wp > 0 {
1164 let fld: *u8 = sys_mmap(FS_PATHCAP)
1165 var lp: i64 = 0
1166 if fs_has_slash(dom) == 1 { lp = fs_cat(fld, 0, "/tmp/nx_frontier_scan/frontier_attest_" as *u8) } else { lp = fs_cat(fld, 0, "knowledge/status/frontier_attest_" as *u8) }
1167 lp = fs_cat(fld, lp, dbase); lp = fs_cat(fld, lp, ".txt" as *u8); fld[lp] = 0 as u8
1168 let wrote: i64 = dp_writefile(fld, wl, wp)
1169 fs_w("WORKLIST path=" as *u8); fs_w(fld); fs_w(" bytes=" as *u8); fs_n(wp); fs_w(" wrote=" as *u8); fs_n(wrote); fs_w(" (NEWER rows a seat adjudicates into sotabar rows -- never admitted here)\n" as *u8)
1170 }
1171 return 0
1172}
1173
1174func main(argc: i64, argv: *i64) -> i64 {
1175 if argc < 3 {
1176 fs_w("usage: nx_frontier_scan seeds <domain>\n" as *u8)
1177 fs_w(" nx_frontier_scan attest <domain>|all [YYYY-MM-DD] re-earn every sotabar row's month: barscan rows + the fan-out\n" as *u8)
1178 fs_w(" nx_frontier_scan monthprobe <file> <item-delim> <date-open|month=YYYY-MM> <date-close> (offline)\n" as *u8)
1179 fs_w(" nx_frontier_scan attestfile <plan> <ref-key> <YYYY-MM-DD> <YYYY-MM> <note> (offline, idempotent)\n" as *u8)
1180 fs_w(" nx_frontier_scan deficit <domain>\n" as *u8)
1181 fs_w(" nx_frontier_scan scan <domain> [maxrows] [maxitems]\n" as *u8)
1182 fs_w(" nx_frontier_scan propose <domain> [maxrows] [maxitems]\n" as *u8)
1183 fs_w(" <domain> is a /compare domain name, OR a path prefix if it contains a slash -- e.g.\n" as *u8)
1184 fs_w(" /tmp/nx_frontier_scan_gate/fx reads /tmp/nx_frontier_scan_gate/fx.matrix and fx.refs,\n" as *u8)
1185 fs_w(" which is how a gate keeps its fixture out of the live board and how the replay harness\n" as *u8)
1186 fs_w(" reconstructs a historical domain without writing into knowledge/compare.\n" as *u8)
1187 fs_w(" the autonomous frontier-noticer: seeds from the domain's OWN data, outside pulled through\n" as *u8)
1188 fs_w(" nx_research_fetch, diffed against the board, PROPOSALS ONLY -- it never writes .matrix or\n" as *u8)
1189 fs_w(" .refs and never flips a watch cell.\n" as *u8)
1190 sys_exit(2); return 2
1191 }
1192 let verb: *u8 = argv[1] as *u8
1193 let dom: *u8 = argv[2] as *u8
1194 // dom BUILDS PATHS; dbase LABELS OUTPUT. Keeping them separate is what stops a fixture path leaking
1195 // into a plane id or a status filename.
1196 let dbase: *u8 = ((dom as i64) + fs_basename(dom)) as *u8
1197 let vlen: i64 = fs_slen(verb)
1198
1199 if fs_streq(verb, 0, vlen, "seeds" as *u8) == 1 {
1200 fs_w("=== nx_frontier_scan seeds " as *u8); fs_w(dom); fs_w(" ===\n" as *u8)
1201 if fs_emit_seeds(dom) < 0 { sys_exit(3); return 3 }
1202 sys_exit(0); return 0
1203 }
1204
1205 if fs_streq(verb, 0, vlen, "pairprobe" as *u8) == 1 {
1206 // OFFLINE EXTRACTOR PROBE (2026-08-20). The pairing rule -- every field belongs to its OWN item --
1207 // is the one thing in this organ that can manufacture a fabricated citation, and until now it was
1208 // reachable ONLY through a live network fetch, which no gate may do. ★★★★★A RULE THAT CAN ONLY BE
1209 // EXERCISED OVER THE NETWORK IS A RULE NO GATE CAN HOLD. This verb runs the SAME fs_item_end bound
1210 // over a file, so the rule is testable hermetically and a mutant that drops the bound is killable.
1211 if argc < 8 {
1212 fs_w("usage: nx_frontier_scan pairprobe <file> <item-delim> <title-open> <title-close> <url-open> <url-close>\n" as *u8)
1213 sys_exit(2); return 2
1214 }
1215 let plen: *i64 = sys_mmap(16) as *i64
1216 let pb: *u8 = sys_read_file(dom, plen)
1217 if (pb as i64) == 0 {
1218 fs_w("PAIRPROBE REFUSED verdict=RED reason=unreadable file=" as *u8); fs_w(dom); fs_w("\n" as *u8)
1219 sys_exit(1); return 1
1220 }
1221 let pn: i64 = plen[0]
1222 let pidlm: *u8 = argv[3] as *u8
1223 let ptop: *u8 = argv[4] as *u8
1224 let ptcl: *u8 = argv[5] as *u8
1225 let puop: *u8 = argv[6] as *u8
1226 let pucl: *u8 = argv[7] as *u8
1227 fs_w("=== nx_frontier_scan pairprobe " as *u8); fs_w(dom); fs_w(" ===\n" as *u8)
1228 var pcur: i64 = 0
1229 var pitems: i64 = 0
1230 var ppaired: i64 = 0
1231 var punpaired: i64 = 0
1232 var pgo: i64 = 1
1233 while pgo == 1 {
1234 let pit: i64 = fs_find(pb, pn, pcur, pidlm)
1235 if pit < 0 { pgo = 0 } else {
1236 let pie: i64 = fs_item_end(pb, pn, pit, pidlm)
1237 pcur = pit + fs_slen(pidlm)
1238 pitems = pitems + 1
1239 let pts: i64 = fs_find(pb, pie, pit, ptop)
1240 let pus: i64 = fs_find(pb, pie, pit, puop)
1241 var pok: i64 = 1
1242 if pts < 0 { pok = 0 }
1243 if pus < 0 { pok = 0 }
1244 var pta: i64 = 0
1245 var pte: i64 = 0
1246 var pua: i64 = 0
1247 var pue: i64 = 0
1248 if pok == 1 {
1249 pta = pts + fs_slen(ptop)
1250 pte = fs_find(pb, pie, pta, ptcl)
1251 pua = pus + fs_slen(puop)
1252 pue = fs_find(pb, pie, pua, pucl)
1253 if pte < 0 { pok = 0 }
1254 if pue < 0 { pok = 0 }
1255 }
1256 if pok == 1 {
1257 ppaired = ppaired + 1
1258 var pin: i64 = 0
1259 if pua >= pit { if pue <= pie { pin = 1 } }
1260 fs_w("ITEM n=" as *u8); fs_n(pitems)
1261 fs_w(" span=" as *u8); fs_n(pit); fs_w("-" as *u8); fs_n(pie)
1262 fs_w(" url_in_own_item=" as *u8); fs_n(pin)
1263 fs_w(" title=" as *u8); fs_wn(pb, pta, pte - pta)
1264 fs_w(" url=" as *u8); fs_wn(pb, pua, pue - pua)
1265 fs_w("\n" as *u8)
1266 } else {
1267 punpaired = punpaired + 1
1268 fs_w("ITEM n=" as *u8); fs_n(pitems)
1269 fs_w(" span=" as *u8); fs_n(pit); fs_w("-" as *u8); fs_n(pie)
1270 fs_w(" UNPAIRED -- a field is absent from THIS item and is NOT borrowed from the next\n" as *u8)
1271 }
1272 }
1273 }
1274 fs_w("PAIRPROBE items=" as *u8); fs_n(pitems)
1275 fs_w(" paired=" as *u8); fs_n(ppaired)
1276 fs_w(" unpaired=" as *u8); fs_n(punpaired)
1277 fs_w(" bound=item-extent (paired plus unpaired equals items -- and every url above lies inside its own item, which is the invariant this verb exists to state out loud)\n" as *u8)
1278 sys_exit(0); return 0
1279 }
1280
1281 if fs_streq(verb, 0, vlen, "monthprobe" as *u8) == 1 {
1282 // OFFLINE MONTH READER (2026-09-06): the newest-month rule is the one thing that can make a bar read
1283 // ATTESTED, so it must be testable hermetically -- a gate may never fetch the live web on a beat.
1284 if argc < 6 {
1285 fs_w("usage: nx_frontier_scan monthprobe <file> <item-delim> <date-open|month=YYYY-MM> <date-close>\n" as *u8)
1286 sys_exit(2); return 2
1287 }
1288 let mlen9: *i64 = sys_mmap(16) as *i64
1289 let mb9: *u8 = sys_read_file(dom, mlen9)
1290 if (mb9 as i64) == 0 { fs_w("MONTHPROBE REFUSED reason=unreadable file=" as *u8); fs_w(dom); fs_w("\n" as *u8); sys_exit(1); return 1 }
1291 let cnt9: *i64 = sys_mmap(8 * 8) as *i64
1292 let tok9: *u8 = sys_mmap(FS_TXTCAP)
1293 let ymb9: *u8 = sys_mmap(FS_YMBUF)
1294 let dop9: *u8 = argv[4] as *u8
1295 // every item counts: the bound is the file's own length (an item is at least one byte), so nothing is capped in silence
1296 let nw9: i64 = fs_newest_month(mb9, mlen9[0], argv[3] as *u8, dop9, argv[5] as *u8, fs_fixed_month(dop9), mlen9[0], mb9, 0, 0, 1, tok9, cnt9)
1297 fs_w("MONTHPROBE items=" as *u8); fs_n(cnt9[0]); fs_w(" dated=" as *u8); fs_n(cnt9[1]); fs_w(" newest=" as *u8)
1298 if nw9 < 0 { fs_w("NONE (no item carried a date the reader could parse -- UNDATED abstains, it never reads as a month)\n" as *u8) } else { fs_w_ym(ymb9, nw9); fs_w("\n" as *u8) }
1299 sys_exit(0); return 0
1300 }
1301
1302 if fs_streq(verb, 0, vlen, "attestfile" as *u8) == 1 {
1303 // OFFLINE ATTESTATION WRITER: the idempotence rule (one barscan row per date and ref) held to a fixture plan.
1304 if argc < 7 {
1305 fs_w("usage: nx_frontier_scan attestfile <plan> <ref-key> <YYYY-MM-DD> <YYYY-MM> <note>\n" as *u8)
1306 sys_exit(2); return 2
1307 }
1308 let aym9: i64 = fs_ym_at(argv[5] as *u8, 0, fs_slen(argv[5] as *u8))
1309 if aym9 < 0 { fs_w("ATTESTFILE REFUSED reason=month-malformed month=" as *u8); fs_w(argv[5] as *u8); fs_w("\n" as *u8); sys_exit(1); return 1 }
1310 let arc9: i64 = fs_attest_row(dom, argv[3] as *u8, argv[4] as *u8, aym9, argv[6] as *u8)
1311 fs_w("ATTESTFILE rc=" as *u8); fs_n(arc9); fs_w(" (1=appended 0=already-present -1=unwritable) plan=" as *u8); fs_w(dom); fs_w("\n" as *u8)
1312 sys_exit(0); return 0
1313 }
1314
1315 if fs_streq(verb, 0, vlen, "attest" as *u8) == 1 {
1316 let aclen: *i64 = sys_mmap(16) as *i64
1317 let acb: *u8 = sys_read_file("knowledge/frontier_scan.conf" as *u8, aclen)
1318 if (acb as i64) == 0 { fs_w("ATTEST REFUSED verdict=RED reason=missing-conf path=knowledge/frontier_scan.conf\n" as *u8); sys_exit(1); return 1 }
1319 let acn: i64 = aclen[0]
1320 let a_items: i64 = fs_conf_get(acb, acn, "max_items" as *u8)
1321 let a_mintok: i64 = fs_conf_get(acb, acn, "min_token" as *u8)
1322 let a_seedtok: i64 = fs_conf_get(acb, acn, "seed_tokens" as *u8)
1323 if a_items < 0 { fs_w("ATTEST REFUSED reason=conf-missing-key key=max_items\n" as *u8); sys_exit(1); return 1 }
1324 if a_mintok < 0 { fs_w("ATTEST REFUSED reason=conf-missing-key key=min_token\n" as *u8); sys_exit(1); return 1 }
1325 if a_seedtok < 0 { fs_w("ATTEST REFUSED reason=conf-missing-key key=seed_tokens\n" as *u8); sys_exit(1); return 1 }
1326 let slen9: *i64 = sys_mmap(16) as *i64
1327 let sb9: *u8 = sys_read_file("knowledge/frontier_sources.conf" as *u8, slen9)
1328 if (sb9 as i64) == 0 { fs_w("ATTEST REFUSED verdict=RED reason=missing-conf path=knowledge/frontier_sources.conf\n" as *u8); sys_exit(1); return 1 }
1329 let today9: *u8 = sys_mmap(FS_TODAYBUF)
1330 if argc >= 4 { let tl9: i64 = fs_cat(today9, 0, argv[3] as *u8); today9[tl9] = 0 as u8 } else { fs_today(today9) }
1331 let tot9: *i64 = sys_mmap(8 * FS_ATT_C_N) as *i64
1332 var ti9: i64 = 0
1333 while ti9 < FS_ATT_C_N { tot9[ti9] = 0; ti9 = ti9 + 1 }
1334 var doms9: i64 = 0
1335 if fs_streq(dom, 0, fs_slen(dom), "all" as *u8) == 1 {
1336 let llen9: *i64 = sys_mmap(16) as *i64
1337 let lb9: *u8 = sys_read_file("buildroot/knowledge/compare/regen.list" as *u8, llen9)
1338 if (lb9 as i64) == 0 { fs_w("ATTEST REFUSED reason=no-regen-list path=buildroot/knowledge/compare/regen.list\n" as *u8); sys_exit(1); return 1 }
1339 let ln9: i64 = llen9[0]
1340 let dbuf9: *u8 = sys_mmap(FS_TXTCAP)
1341 var li9: i64 = 0
1342 while li9 < ln9 {
1343 let le9: i64 = fs_eol(lb9, ln9, li9)
1344 if fs_is_row(lb9, li9, le9) == 1 { if le9 > li9 {
1345 var dl9: i64 = fs_catn(dbuf9, 0, lb9, li9, le9)
1346 // a list edited on another host carries CR before LF; a domain name never does
1347 if dl9 > 0 { if dbuf9[dl9 - 1] == (FS_CR as u8) { dl9 = dl9 - 1 } }
1348 dbuf9[dl9] = 0 as u8
1349 doms9 = doms9 + 1
1350 fs_attest_domain(dbuf9, dbuf9, sb9, slen9[0], today9, a_items, a_mintok, a_seedtok, tot9)
1351 } }
1352 li9 = le9 + 1
1353 }
1354 } else { doms9 = 1; fs_attest_domain(dom, dbase, sb9, slen9[0], today9, a_items, a_mintok, a_seedtok, tot9) }
1355 fs_w("ATTEST-DONE domains=" as *u8); fs_n(doms9)
1356 fs_w(" bars=" as *u8); fs_n(tot9[FS_ATT_C_BARS])
1357 fs_w(" appended=" as *u8); fs_n(tot9[FS_ATT_C_APPENDED])
1358 fs_w(" already=" as *u8); fs_n(tot9[FS_ATT_C_ALREADY])
1359 fs_w(" unattestable=" as *u8); fs_n(tot9[FS_ATT_C_UNATTESTABLE])
1360 fs_w(" (appended plus already plus unattestable equals bars)" as *u8)
1361 fs_w(" fetches=" as *u8); fs_n(tot9[FS_ATT_C_FETCHES])
1362 fs_w(" newer_sources=" as *u8); fs_n(tot9[FS_ATT_C_NEWER])
1363 fs_w(" stale_bars=" as *u8); fs_n(tot9[FS_ATT_C_STALE])
1364 var vb9: i64 = 0
1365 if tot9[FS_ATT_C_STALE] > 0 { vb9 = 1 }
1366 if vb9 == 1 { fs_w(" verdict=STALE-BARS (a cited listing moved past its bar: re-adjudicate the sotabar row)\n" as *u8) } else { fs_w(" verdict=ATTESTED\n" as *u8) }
1367 sys_exit(vb9); return vb9
1368 }
1369
1370 let clen: *i64 = sys_mmap(16) as *i64
1371 let cb: *u8 = sys_read_file("knowledge/frontier_scan.conf" as *u8, clen)
1372 if (cb as i64) == 0 {
1373 fs_w("FRONTIER-SCAN REFUSED verdict=RED reason=missing-conf path=knowledge/frontier_scan.conf" as *u8)
1374 fs_w(" fix=seed the thresholds file with rows lead_code, cover_permil, min_token, max_rows, max_items -- each row carrying its derivation\n" as *u8)
1375 sys_exit(1); return 1
1376 }
1377 let cn: i64 = clen[0]
1378 let lead_code: i64 = fs_conf_get(cb, cn, "lead_code" as *u8)
1379 let cover_permil: i64 = fs_conf_get(cb, cn, "cover_permil" as *u8)
1380 let min_token: i64 = fs_conf_get(cb, cn, "min_token" as *u8)
1381 var max_rows: i64 = fs_conf_get(cb, cn, "max_rows" as *u8)
1382 var max_items: i64 = fs_conf_get(cb, cn, "max_items" as *u8)
1383 let seed_tokens: i64 = fs_conf_get(cb, cn, "seed_tokens" as *u8)
1384 var bad: i64 = 0
1385 if seed_tokens < 0 { fs_w("FRONTIER-SCAN REFUSED reason=conf-missing-key key=seed_tokens\n" as *u8); bad = 1 }
1386 if lead_code < 0 { fs_w("FRONTIER-SCAN REFUSED reason=conf-missing-key key=lead_code\n" as *u8); bad = 1 }
1387 if cover_permil < 0 { fs_w("FRONTIER-SCAN REFUSED reason=conf-missing-key key=cover_permil\n" as *u8); bad = 1 }
1388 if min_token < 0 { fs_w("FRONTIER-SCAN REFUSED reason=conf-missing-key key=min_token\n" as *u8); bad = 1 }
1389 if max_rows < 0 { fs_w("FRONTIER-SCAN REFUSED reason=conf-missing-key key=max_rows\n" as *u8); bad = 1 }
1390 if max_items < 0 { fs_w("FRONTIER-SCAN REFUSED reason=conf-missing-key key=max_items\n" as *u8); bad = 1 }
1391 if bad == 1 { sys_exit(1); return 1 }
1392 if argc >= 4 { let v: i64 = fs_atoi(argv[3] as *u8); if v > 0 { max_rows = v } }
1393 if argc >= 5 { let v2: i64 = fs_atoi(argv[4] as *u8); if v2 > 0 { max_items = v2 } }
1394
1395 let path: *u8 = sys_mmap(FS_PATHCAP)
1396 fs_cmp_path(path, dom, ".matrix" as *u8)
1397 let mlen: *i64 = sys_mmap(16) as *i64
1398 let mb: *u8 = sys_read_file(path, mlen)
1399 if (mb as i64) == 0 {
1400 fs_w("FRONTIER-SCAN REFUSED verdict=RED reason=no-matrix path=" as *u8); fs_w(path); fs_w("\n" as *u8)
1401 sys_exit(3); return 3
1402 }
1403 let mn: i64 = mlen[0]
1404
1405 fs_w("=== nx_frontier_scan " as *u8); fs_w(verb); fs_w(" " as *u8); fs_w(dom); fs_w(" ===\n" as *u8)
1406 fs_w("CONF lead_code=" as *u8); fs_n(lead_code)
1407 fs_w(" cover_permil=" as *u8); fs_n(cover_permil)
1408 fs_w(" min_token=" as *u8); fs_n(min_token)
1409 fs_w(" max_rows=" as *u8); fs_n(max_rows)
1410 fs_w(" max_items=" as *u8); fs_n(max_items)
1411 fs_w(" seed_tokens=" as *u8); fs_n(seed_tokens)
1412 fs_w(" props_per_row=" as *u8); fs_n(FS_PROPS_PER_ROW); fs_w("\n" as *u8)
1413
1414 let rowa: *i64 = sys_mmap(8 * FS_MAXROWS) as *i64
1415 let rowb: *i64 = sys_mmap(8 * FS_MAXROWS) as *i64
1416 let score: *i64 = sys_mmap(8 * FS_MAXROWS) as *i64
1417 let nd: i64 = fs_deficit(mb, mn, lead_code, rowa, rowb, score, 1)
1418
1419 if fs_streq(verb, 0, vlen, "deficit" as *u8) == 1 {
1420 fs_w("DEFICIT-ROWS=" as *u8); fs_n(nd); fs_w("\n" as *u8)
1421 sys_exit(0); return 0
1422 }
1423
1424 var filing: i64 = 0
1425 if fs_streq(verb, 0, vlen, "propose" as *u8) == 1 { filing = 1 }
1426
1427 if nd == 0 {
1428 // THE POSITIVE CONTROL PATH, and it is why this organ is not a guard that refuses everything.
1429 // A domain where no rival leads a row we do not exceed yields ZERO proposals and ZERO outbound
1430 // fetches -- the input that MUST come back empty, answered without touching the network.
1431 fs_w("NO-DEFICIT domain=" as *u8); fs_w(dom)
1432 fs_w(" -- no row where a rival leads and we do not exceed; nothing to research\n" as *u8)
1433 fs_w("SCAN-DONE domain=" as *u8); fs_w(dom)
1434 fs_w(" deficit_rows=0 rows_scanned=0 fetches=0 PROPOSALS=0\n" as *u8)
1435 sys_exit(0); return 0
1436 }
1437
1438 // ---- the corpus we diff against: this domain's own labels, row notes and citation prose ----
1439 fs_cmp_path(path, dom, ".refs" as *u8)
1440 let rflen: *i64 = sys_mmap(16) as *i64
1441 let refs: *u8 = sys_read_file(path, rflen)
1442 var refsn: i64 = 0
1443 if (refs as i64) != 0 { refsn = rflen[0] }
1444 // sized FROM THE INPUT, so there is no ceiling to guess and no silent truncation to hide.
1445 let corp: *u8 = sys_mmap(mn + refsn + FS_TXTCAP)
1446 var corpn: i64 = 0
1447 let cpos: *i64 = sys_mmap(8 * FS_MAXP) as *i64
1448 var ci: i64 = 0
1449 while ci < mn {
1450 let cle: i64 = fs_eol(mb, mn, ci)
1451 if fs_is_row(mb, ci, cle) == 1 {
1452 let cnp: i64 = fs_pipes(mb, ci, cle, cpos)
1453 if cnp >= 1 {
1454 corpn = fs_catn(corp, corpn, mb, ci, cpos[0])
1455 corp[corpn] = FS_SPACE as u8; corpn = corpn + 1
1456 if cnp >= 8 {
1457 corpn = fs_catn(corp, corpn, mb, cpos[7] + 1, cle)
1458 corp[corpn] = FS_SPACE as u8; corpn = corpn + 1
1459 }
1460 }
1461 }
1462 ci = cle + 1
1463 }
1464 if refsn > 0 { corpn = fs_catn(corp, corpn, refs, 0, refsn) }
1465 fs_w("BOARD-CORPUS bytes=" as *u8); fs_n(corpn)
1466 fs_w(" refs_bytes=" as *u8); fs_n(refsn); fs_w("\n" as *u8)
1467
1468 sys_mkdir("/tmp/nx_frontier_scan" as *u8, FS_DIRMODE)
1469
1470 let slen: *i64 = sys_mmap(16) as *i64
1471 let sb: *u8 = sys_read_file("knowledge/frontier_sources.conf" as *u8, slen)
1472 if (sb as i64) == 0 {
1473 fs_w("FRONTIER-SCAN REFUSED verdict=RED reason=missing-conf path=knowledge/frontier_sources.conf" as *u8)
1474 fs_w(" fix=seed source rows src|<kind>|<url-template-with-brace-q>|<item>|<title-open>|<title-close>|<url-open>|<url-close>\n" as *u8)
1475 sys_exit(1); return 1
1476 }
1477 let sn: i64 = slen[0]
1478 // count the sources FIRST so the worklist buffer is derived, not guessed.
1479 let spos: *i64 = sys_mmap(8 * FS_MAXP) as *i64
1480 var nsrc: i64 = 0
1481 var sc0: i64 = 0
1482 while sc0 < sn {
1483 let sle0: i64 = fs_eol(sb, sn, sc0)
1484 if fs_is_row(sb, sc0, sle0) == 1 {
1485 let np0: i64 = fs_pipes(sb, sc0, sle0, spos)
1486 if np0 >= 8 { if fs_streq(sb, sc0, spos[0], "src" as *u8) == 1 { nsrc = nsrc + 1 } }
1487 }
1488 sc0 = sle0 + 1
1489 }
1490 if nsrc == 0 {
1491 fs_w("FRONTIER-SCAN REFUSED verdict=RED reason=no-src-rows path=knowledge/frontier_sources.conf\n" as *u8)
1492 sys_exit(1); return 1
1493 }
1494 if max_rows > nd { max_rows = nd }
1495 let wl: *u8 = sys_mmap(max_rows * nsrc * FS_PROPS_PER_ROW * FS_LINECAP + FS_TXTCAP)
1496 let wlout: *i64 = sys_mmap(16) as *i64
1497 wlout[0] = 0
1498
1499 // every buffer the inner loops need, allocated ONCE (never allocate in a hot loop)
1500 let qbuf: *u8 = sys_mmap(FS_URLCAP)
1501 let url: *u8 = sys_mmap(FS_URLCAP)
1502 let kind: *u8 = sys_mmap(FS_TXTCAP)
1503 let idlm: *u8 = sys_mmap(FS_TXTCAP)
1504 let topen: *u8 = sys_mmap(FS_TXTCAP)
1505 let tclos: *u8 = sys_mmap(FS_TXTCAP)
1506 let uopen: *u8 = sys_mmap(FS_TXTCAP)
1507 let uclos: *u8 = sys_mmap(FS_TXTCAP)
1508 let join: *u8 = sys_mmap(FS_TXTCAP)
1509 let tok: *u8 = sys_mmap(FS_TXTCAP)
1510 let savepath: *u8 = sys_mmap(FS_PATHCAP)
1511 let olen: *i64 = sys_mmap(16) as *i64
1512 let rlen: *i64 = sys_mmap(16) as *i64
1513
1514 var total_props: i64 = 0
1515 var fetches: i64 = 0
1516 var r: i64 = 0
1517 while r < max_rows {
1518 fs_w("ROW " as *u8); fs_n(r)
1519 fs_w(" score=" as *u8); fs_n(score[r])
1520 fs_w(" " as *u8); fs_wn(mb, rowa[r], rowb[r] - rowa[r]); fs_w("\n" as *u8)
1521 var si: i64 = 0
1522 while si < sn {
1523 let sle: i64 = fs_eol(sb, sn, si)
1524 if fs_is_row(sb, si, sle) == 1 {
1525 let snp: i64 = fs_pipes(sb, si, sle, spos)
1526 if snp >= 8 {
1527 if fs_streq(sb, si, spos[0], "src" as *u8) == 1 {
1528 let kp: i64 = fs_catn(kind, 0, sb, spos[0] + 1, spos[1]); kind[kp] = 0 as u8
1529 // A STATIC LISTING (no {q} in its url: a conference index) cannot be asked a seed, so the scan would
1530 // propose its first max_items papers against EVERY deficit row regardless of subject. It is fan-out
1531 // only: `attest` reads it filtered by each bar's own subject tokens (2026-09-06).
1532 if fs_find(sb, spos[2], spos[1] + 1, "{q}" as *u8) < 0 {
1533 fs_w(" SOURCE-STATIC kind=" as *u8); fs_w(kind); fs_w(" -- no query slot, fan-out only (attest); skipped by scan\n" as *u8)
1534 } else {
1535 // THE JOIN IS THE SOURCE'S OWN OPERATOR, so the seed must be built INSIDE this loop.
1536 // arXiv's search_query needs +AND+ between terms or it matches the whole archive and
1537 // returns the newest submissions with HTTP 200; HN Algolia wants a plain +.
1538 // a DATED row (attest, 2026-09-06) carries two more fields after the join, so the join ends at the
1539 // ninth pipe when there is one; an eight-pipe row still runs to the end of its line
1540 var je: i64 = sle
1541 if snp >= 9 { je = spos[8] }
1542 let jp: i64 = fs_catn(join, 0, sb, spos[7] + 1, je); join[jp] = 0 as u8
1543 fs_seed_q(qbuf, mb, rowa[r], rowb[r], FS_URLCAP, seed_tokens, min_token, join)
1544 fs_w(" seed kind=" as *u8); fs_w(kind); fs_w(" q=" as *u8); fs_w(qbuf); fs_w("\n" as *u8)
1545 var up: i64 = 0
1546 var t: i64 = spos[1] + 1
1547 while t < spos[2] {
1548 var sub: i64 = 0
1549 if sb[t] == (FS_LBRACE as u8) {
1550 if fs_prefix(sb, t, spos[2], "{q}" as *u8) == 1 { sub = 1 }
1551 }
1552 if sub == 1 { up = fs_cat(url, up, qbuf); t = t + 3 }
1553 else { url[up] = sb[t]; up = up + 1; t = t + 1 }
1554 }
1555 url[up] = 0 as u8
1556 let q1: i64 = fs_catn(idlm, 0, sb, spos[2] + 1, spos[3]); idlm[q1] = 0 as u8
1557 let q2: i64 = fs_catn(topen, 0, sb, spos[3] + 1, spos[4]); topen[q2] = 0 as u8
1558 let q3: i64 = fs_catn(tclos, 0, sb, spos[4] + 1, spos[5]); tclos[q3] = 0 as u8
1559 let q4: i64 = fs_catn(uopen, 0, sb, spos[5] + 1, spos[6]); uopen[q4] = 0 as u8
1560 let q5: i64 = fs_catn(uclos, 0, sb, spos[6] + 1, spos[7]); uclos[q5] = 0 as u8
1561 fetches = fetches + 1
1562 let got: i64 = fs_scan_source(dbase, kind, url, idlm, topen, tclos, uopen, uclos,
1563 corp, corpn, refs, refsn, mb, rowa[r], rowb[r],
1564 max_items, cover_permil, min_token,
1565 wl, wlout, tok, savepath, olen, rlen)
1566 total_props = total_props + got
1567 }
1568 }
1569 }
1570 }
1571 si = sle + 1
1572 }
1573 r = r + 1
1574 }
1575 let wp: i64 = wlout[0]
1576
1577 fs_w("SCAN-DONE domain=" as *u8); fs_w(dom)
1578 fs_w(" deficit_rows=" as *u8); fs_n(nd)
1579 fs_w(" rows_scanned=" as *u8); fs_n(max_rows)
1580 fs_w(" sources=" as *u8); fs_n(nsrc)
1581 fs_w(" fetches=" as *u8); fs_n(fetches)
1582 fs_w(" PROPOSALS=" as *u8); fs_n(total_props); fs_w("\n" as *u8)
1583
1584 if filing == 1 {
1585 // FIXTURE MODE IS HERMETIC. A path-form domain writes its worklist and its plane rows under
1586 // /tmp, never into knowledge/status or the production frontierprop- plane. This is not tidiness:
1587 // A GATE MUST NOT SHARE ITS FIXTURE WITH A PRODUCTION BEAT, and the first cut of this organ had
1588 // its own gate filing fixture rows into the live plane and blocking on that plane's flock.
1589 var fixture: i64 = 0
1590 if fs_has_slash(dom) == 1 { fixture = 1 }
1591 let fld: *u8 = sys_mmap(FS_PATHCAP)
1592 let plane: *u8 = sys_mmap(FS_PATHCAP)
1593 var lp: i64 = 0
1594 var pp: i64 = 0
1595 if fixture == 1 {
1596 lp = fs_cat(fld, 0, "/tmp/nx_frontier_scan/frontier_proposals_" as *u8)
1597 pp = fs_cat(plane, 0, "/tmp/nx_frontier_scan/fxprop-" as *u8)
1598 fs_w("FIXTURE-MODE worklist and plane are redirected under /tmp -- no production surface is touched\n" as *u8)
1599 } else {
1600 // the worklist is named for the domain's BASENAME, so a real domain always lands on its own
1601 // stable, regenerated-each-run file.
1602 lp = fs_cat(fld, 0, "knowledge/status/frontier_proposals_" as *u8)
1603 pp = fs_cat(plane, 0, "frontierprop-" as *u8)
1604 }
1605 plane[pp] = 0 as u8
1606 lp = fs_cat(fld, lp, dbase)
1607 lp = fs_cat(fld, lp, ".txt" as *u8)
1608 fld[lp] = 0 as u8
1609 let wrote: i64 = dp_writefile(fld, wl, wp)
1610 fs_w("WORKLIST path=" as *u8); fs_w(fld)
1611 fs_w(" bytes=" as *u8); fs_n(wp)
1612 fs_w(" wrote=" as *u8); fs_n(wrote); fs_w("\n" as *u8)
1613 let ppos: *i64 = sys_mmap(8 * FS_MAXP) as *i64
1614 let idb: *u8 = sys_mmap(FS_TXTCAP)
1615 let f1: *u8 = sys_mmap(FS_LINECAP)
1616 let f2: *u8 = sys_mmap(FS_LINECAP)
1617 let f3: *u8 = sys_mmap(FS_LINECAP)
1618 let f4: *u8 = sys_mmap(FS_LINECAP)
1619 let pargs: *i64 = sys_mmap(8 * (FS_PLANE_ARGS + 2)) as *i64
1620 var pi: i64 = 0
1621 var filed: i64 = 0
1622 while pi < wp {
1623 let ple: i64 = fs_eol(wl, wp, pi)
1624 if ple > pi {
1625 let pnp: i64 = fs_pipes(wl, pi, ple, ppos)
1626 if pnp >= 6 {
1627 var ip: i64 = fs_catn(idb, 0, wl, ppos[0] + 1, ppos[1])
1628 idb[ip] = FS_USCORE as u8; ip = ip + 1
1629 ip = fs_hex(idb, ip, fs_urlhash(wl, ppos[3] + 1, ppos[4]))
1630 idb[ip] = 0 as u8
1631 let g1: i64 = fs_catn(f1, 0, wl, ppos[1] + 1, ppos[2]); f1[g1] = 0 as u8
1632 let g2: i64 = fs_catn(f2, 0, wl, ppos[2] + 1, ppos[3]); f2[g2] = 0 as u8
1633 let g3: i64 = fs_catn(f3, 0, wl, ppos[3] + 1, ppos[4]); f3[g3] = 0 as u8
1634 let g4: i64 = fs_catn(f4, 0, wl, ppos[4] + 1, ppos[5]); f4[g4] = 0 as u8
1635 pargs[0] = plane as i64
1636 pargs[1] = "put" as i64
1637 pargs[2] = "nx_frontier_scan" as i64
1638 pargs[3] = idb as i64
1639 pargs[4] = dbase as i64
1640 pargs[5] = f1 as i64
1641 pargs[6] = f2 as i64
1642 pargs[7] = f3 as i64
1643 pargs[8] = f4 as i64
1644 pargs[9] = "OPEN" as i64
1645 var prc: i64 = dep_run_capture("./nx_store_put.elf" as *u8, pargs, FS_PLANE_ARGS, "/tmp/nx_frontier_scan/put.out" as *u8)
1646 if prc == 127 { prc = dep_run_capture("_offc/nx_store_put.elf" as *u8, pargs, FS_PLANE_ARGS, "/tmp/nx_frontier_scan/put.out" as *u8) }
1647 if prc == 0 { filed = filed + 1 }
1648 }
1649 }
1650 pi = ple + 1
1651 }
1652 fs_w("PLANE " as *u8); fs_w(plane); fs_w(" filed=" as *u8); fs_n(filed)
1653 fs_w(" of=" as *u8); fs_n(total_props); fs_w("\n" as *u8)
1654 }
1655
1656 fs_w("NOTE proposals only -- this organ never writes .matrix, .refs, or a watch cell\n" as *u8)
1657 sys_exit(0)
1658 return 0
1659}