nx_swcompare_research.nx source
↩ module page · 64 lines · 3127 B
1// nx_swcompare_research.nx -- the GENERATIVE researcher stage of Nishi Compare. Generalizes the hardcoded
2// nx_frontier_research_fetch: reads a per-domain QUERY SPEC (data, not code) and banks the CURRENT (2024-2026)
3// frontier for that domain over sovereign TLS via the KEYLESS scholarly APIs (OpenAlex/arXiv/Crossref). This is
4// "use the nishi researcher on 25/26 gaps" made reusable -- a new domain = a new spec file, zero new code.
5// Spec format (knowledge/compare/<domain>.q): one query per line "<bankname><TAB><url>"; lines without a TAB
6// (or starting with '#') are skipped. Banks -> knowledge/library/<bankname>.txt (the researcher's evidence corpus,
7// consumed by nx_swcompare's gap-map). Usage: nx_swcompare_research <spec-path> license_tier: ORIGINAL expect_exit:0
8import "nx_research_engine.nx"
9const K_MAGIC_131072: i64 = 131072
10const K_MAGIC_8388608: i64 = 8388608
11const K_MAGIC_8192: i64 = 8192
12const K_MAGIC_2200: i64 = 2200
13
14func sr_read(path: *u8, buf: *u8, cap: i64) -> i64 {
15 let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 - 1 }
16 var tot: i64 = 0
17 while tot < cap { let r: i64 = sys_read(fd, (buf as i64 + tot) as *u8, cap - tot); if r <= 0 { break } tot = tot + r }
18 sys_close(fd); return tot
19}
20
21func main(argc: i64, argv: *i64) -> i64 {
22 var spec: *u8 = "knowledge/compare/compute.q" as *u8
23 if argc >= 2 { spec = argv[1] as *u8 }
24 let store: *TrustStore = rf_init()
25 if (store as i64) == 0 { rf_puts("swc-research: trust store load failed\n" as *u8); return 1 }
26 rf_puts("SWC-RESEARCH CA roots="); rf_putn(trust_store_count(store)); rf_puts(" spec="); rf_puts(spec); rf_puts("\n" as *u8)
27
28 let sbuf: *u8 = sys_mmap(K_MAGIC_131072)
29 let sn: i64 = sr_read(spec, sbuf, K_MAGIC_131072)
30 if sn <= 0 { rf_puts("swc-research: spec not found or empty\n" as *u8); return 1 }
31
32 let cap: i64 = K_MAGIC_8388608
33 let out: *u8 = sys_mmap(cap)
34 let namebuf: *u8 = sys_mmap(256)
35 let urlbuf: *u8 = sys_mmap(K_MAGIC_8192)
36
37 var i: i64 = 0
38 var ok: i64 = 0
39 var tot: i64 = 0
40 while i < sn {
41 var j: i64 = i
42 var t: i64 = 0 - 1
43 while j < sn { if sbuf[j] == (10 as u8) { break } if sbuf[j] == (9 as u8) { if t < 0 { t = j } } j = j + 1 }
44 if t > i {
45 var k: i64 = 0
46 while (i + k) < t { namebuf[k] = sbuf[i+k]; k = k + 1 }
47 namebuf[k] = 0 as u8
48 var u: i64 = 0
49 var p: i64 = t + 1
50 while p < j { urlbuf[u] = sbuf[p]; u = u + 1; p = p + 1 }
51 urlbuf[u] = 0 as u8
52 if namebuf[0] != (35 as u8) {
53 rf_sleep_ms(K_MAGIC_2200)
54 let r: i64 = rf_fetch_bank(urlbuf, namebuf, store, out, cap)
55 ok = ok + r
56 tot = tot + 1
57 rf_puts(" banked "); rf_puts(namebuf); rf_puts(" r="); rf_putn(r); rf_puts("\n" as *u8)
58 }
59 }
60 i = j + 1
61 }
62 rf_puts("SWC-RESEARCH banked "); rf_putn(ok); rf_puts("/"); rf_putn(tot); rf_puts(" frontier sources (knowledge/library/<bankname>.txt) -- 2024-2026, sovereign TLS, keyless\n" as *u8)
63 return 0
64}