nx_freshness_gate.nx source
↩ module page · 48 lines · 3084 B
1// nx_freshness_gate.nx -- proves adaptive re-crawl: changing pages crawled sooner, static pages back off, important
2// pages prioritized, all bounded. license_tier: ORIGINAL
3import "nx_freshness.nx"
4import "nx_gate.nx"
5
6func main() -> i64 {
7 gw("=== nx_freshness_gate: adaptive re-crawl scheduling (fresh index, finite crawler) ===\n" as *u8)
8 var pass: i64=0; var tot: i64=0
9
10 // T1 -- a page that changes every re-crawl converges to the MIN interval (crawled most often).
11 var iv: i64 = 86400 // start 1 day
12 var i: i64=0; while i<6 { iv = fr_update_interval(iv, 1); i=i+1 }
13 tot=tot+1; if iv==FR_MIN { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
14 gw("T1 changing page -> shorter interval (1d -> " as *u8); gn(iv); gw("s = MIN, crawled sooner)\n" as *u8)
15
16 // T2 -- a static page backs off to the MAX interval (saves crawl budget).
17 var iv2: i64 = 86400
18 i=0; while i<6 { iv2 = fr_update_interval(iv2, 0); i=i+1 }
19 tot=tot+1; if iv2==FR_MAX { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
20 gw("T2 static page -> longer interval (1d -> " as *u8); gn(iv2); gw("s = MAX, backs off)\n" as *u8)
21
22 // T3 -- due() correct: not due before last+interval, due after.
23 var t3: i64=0; if fr_due(1000,500,1400)==0 { if fr_due(1000,500,1600)==1 { t3=1 } }
24 tot=tot+1; if t3==1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
25 gw("T3 due(): not due at t=1400, due at t=1600 (last=1000 interval=500)\n" as *u8)
26
27 // T4 -- priority (PageRank) shortens the effective interval: the important head stays fresher.
28 let full: i64 = fr_effective_interval(86400, 0)
29 let imp: i64 = fr_effective_interval(86400, 1000)
30 var t4: i64=0; if imp < full { if full==86400 { t4=1 } }
31 tot=tot+1; if t4==1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
32 gw("T4 priority: important page effective " as *u8); gn(imp); gw("s < normal " as *u8); gn(full); gw("s\n" as *u8)
33
34 // T5 -- bounded: never below MIN on change, never above MAX on back-off.
35 var t5: i64=0; if fr_update_interval(FR_MIN, 1)==FR_MIN { if fr_update_interval(FR_MAX, 0)==FR_MAX { t5=1 } }
36 tot=tot+1; if t5==1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
37 gw("T5 bounded: MIN stays MIN on change, MAX stays MAX on back-off (no runaway)\n" as *u8)
38
39 gw("\n=== nx_freshness_gate " as *u8); gn(pass); gw("/" as *u8); gn(tot); gw(" ===\n" as *u8)
40 let lfd: i64=sys_openat_append("knowledge/status/freshness_gate.log" as *u8, 420)
41 if pass==tot {
42 if lfd>=0 { sys_write(lfd, "FRESHNESS-GATE verdict=GREEN adaptive-recrawl bounded priority\n" as *u8, 61); sys_close(lfd) }
43 gw("FRESHNESS GREEN -- adaptive re-crawl keeps a billion-page index current on a finite crawler; changing pages sooner, static back off, head prioritized\n" as *u8)
44 sys_exit(0); return 0
45 }
46 if lfd>=0 { sys_write(lfd, "FRESHNESS-GATE verdict=RED\n" as *u8, 26); sys_close(lfd) }
47 gw("FRESHNESS RED\n" as *u8); sys_exit(1); return 1
48}