code wiki / _hdl_build / nx_worldgen_gate.nx
nx_worldgen_gate.nx source
↩ module page · 127 lines · 6478 B
1// nx_worldgen_gate.nx -- prove SOVEREIGN INFINIGEN rung 1: seeds grow whole LANDSCAPES (terrain+water+sky+weather).
2// T1 a world renders (terrain + sky + water pixels all present -- a coherent scene)
3// T2 ★VARIETY: different seeds -> measurably different worlds (pairwise render L1 large)
4// T3 weather modes retint the scene (clear vs sunset vs overcast differ) + determinism
5// T4 gallery PNG knowledge/nx_worldgen.png (4 worlds: 3 seeds clear + 1 sunset)
6// license_tier: ORIGINAL expect_exit: 0
7import "nx_syscalls.nx"
8import "nx_png.nx"
9import "nx_worldgen.nx"
10
11func hw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
12func pn(v: i64) -> i64 { let b: *u8=sys_mmap(32) as *u8; var x: i64=v; var ng: i64=0; if x<0{ng=1;x=0-x} var i: i64=31; if x==0{b[i]=48 as u8;i=i-1} while x>0{b[i]=(48+x%10) as u8;x=x/10;i=i-1} if ng==1{b[i]=45 as u8;i=i-1} sys_write(1,(b as i64+i+1) as *u8,31-i); return 0 }
13func L1(a: *i64, b: *i64, n: i64) -> i64 { var s: i64=0; var i: i64=0; while i<n { var d: i64=(a[i]&255)-(b[i]&255); if d<0{d=0-d} var e: i64=((a[i]>>8)&255)-((b[i]>>8)&255); if e<0{e=0-e} var f: i64=((a[i]>>16)&255)-((b[i]>>16)&255); if f<0{f=0-f} s=s+d+e+f; i=i+1 } return s }
14
15// SELF-RECORD THE VERDICT (2026-07-31, lib-reconcile). MEASURED: /api/gate_run cannot observe this gate --
16// the edge closes the response at ~14.5s for BOTH the sync lane AND _async=1, regardless of deadline_ms
17// (60000 was requested; the call died at 14140ms and 14486ms respectively). So a gate that runs longer than
18// the window is UNOBSERVABLE through its response, and "no output" says NOTHING about pass or fail.
19// The verdict therefore has to outlive the request. knowledge/status/ is where the rulers already look
20// (nx_gateverify compares a gate's printed N/M against its LOGGED passed=/total=), so writing there makes
21// this gate readable after the window closes instead of merely silent.
22// This call is the LAST act before exit on BOTH paths -- a record written before the work it records is a
23// false-green generator.
24func wg_log(fails: i64) -> i64 {
25 sys_mkdir("knowledge" as *u8, 0x1ed)
26 sys_mkdir("knowledge/status" as *u8, 0x1ed)
27 let fd: i64 = sys_openat_wr("knowledge/status/worldgen_gate.log" as *u8, 0x1a4)
28 if fd < 0 { return 0 }
29 let b: *u8 = sys_mmap(128)
30 var o: i64 = 0
31 let pre: *u8 = "WORLDGEN-GATE passed=" as *u8
32 var i: i64 = 0
33 while pre[i] != (0 as u8) { b[o] = pre[i]; o = o + 1; i = i + 1 }
34 var pass: i64 = 4 - fails
35 if pass < 0 { pass = 0 }
36 b[o] = (48 + pass) as u8
37 o = o + 1
38 let mid: *u8 = " total=4 verdict=" as *u8
39 i = 0
40 while mid[i] != (0 as u8) { b[o] = mid[i]; o = o + 1; i = i + 1 }
41 if fails == 0 {
42 let g: *u8 = "GREEN" as *u8
43 i = 0
44 while g[i] != (0 as u8) { b[o] = g[i]; o = o + 1; i = i + 1 }
45 } else {
46 let rr: *u8 = "RED" as *u8
47 i = 0
48 while rr[i] != (0 as u8) { b[o] = rr[i]; o = o + 1; i = i + 1 }
49 }
50 b[o] = 10 as u8
51 o = o + 1
52 sys_write(fd, b, o)
53 sys_close(fd)
54 return 1
55}
56
57func main() -> i64 {
58 hw("=== nx_worldgen_gate -- sovereign Infinigen rung 1: procedural landscapes ===\n" as *u8)
59 var fails: i64 = 0
60 let W: i64 = wg_w(); let H: i64 = wg_h(); let npx: i64 = W*H
61 let t0: *i64 = sys_mmap(npx*8) as *i64
62 let t1b: *i64 = sys_mmap(npx*8) as *i64
63 let t2b: *i64 = sys_mmap(npx*8) as *i64
64 let t3b: *i64 = sys_mmap(npx*8) as *i64
65
66 worldgen_render(11, 0, t0)
67 worldgen_render(77, 0, t1b)
68 worldgen_render(314, 0, t2b)
69 worldgen_render(11, 1, t3b) // seed 11 at SUNSET
70
71 // classify pixels of world 0 (sky = bluish/high, terrain = greenish/darker, water) -- just check all 3 bands exist
72 var sky: i64 = 0; var land: i64 = 0; var lowmid: i64 = 0
73 var i: i64 = 0
74 while i < npx {
75 let px: i64 = t0[i]; let r: i64 = px&255; let g: i64 = (px>>8)&255; let b: i64 = (px>>16)&255
76 if b > r + 20 { if b > 120 { sky = sky + 1 } } // bluish = sky/water
77 if g > r { if g > b { land = land + 1 } } // greenish = vegetation/terrain
78 if (r+g+b) < 330 { lowmid = lowmid + 1 }
79 i = i + 1
80 }
81 hw(" world seed=11: bluish(sky/water)="); pn(sky); hw(" greenish(land)="); pn(land); hw("\n" as *u8)
82 var T1: i64 = 0
83 if sky > 30000 { if land > 30000 { T1 = 1 } }
84 if T1 == 1 { hw("T1 PASS a coherent world renders (sky + terrain both present)\n" as *u8) }
85 else { fails=fails+1; hw("T1 FAIL scene incomplete\n" as *u8) }
86
87 let d01: i64 = L1(t0, t1b, npx); let d02: i64 = L1(t0, t2b, npx); let d12: i64 = L1(t1b, t2b, npx)
88 hw(" variety L1: s11-s77="); pn(d01); hw(" s11-s314="); pn(d02); hw(" s77-s314="); pn(d12); hw("\n" as *u8)
89 var T2: i64 = 0
90 if d01 > 4000000 { if d02 > 4000000 { if d12 > 4000000 { T2 = 1 } } }
91 if T2 == 1 { hw("T2 PASS VARIETY: different seeds -> different worlds\n" as *u8) }
92 else { fails=fails+1; hw("T2 FAIL worlds too similar\n" as *u8) }
93
94 let dw: i64 = L1(t0, t3b, npx)
95 hw(" weather L1 (clear vs sunset, same seed): "); pn(dw); hw("\n" as *u8)
96 let chk: *i64 = sys_mmap(npx*8) as *i64
97 worldgen_render(11, 1, chk)
98 var ddet: i64 = 0
99 i = 0
100 while i < npx { if chk[i]!=t3b[i] { ddet=ddet+1 } i=i+1 }
101 var T3: i64 = 0
102 if dw > 6000000 { if ddet == 0 { T3 = 1 } }
103 if T3 == 1 { hw("T3 PASS weather retints the scene (clear!=sunset) + deterministic\n" as *u8) }
104 else { fails=fails+1; hw("T3 FAIL weather="); pn(dw); hw(" ddet="); pn(ddet); hw("\n" as *u8) }
105
106 // gallery 2x2
107 let GW: i64 = W*2; let GH: i64 = H*2
108 let gal: *i64 = sys_mmap(GW*GH*8) as *i64
109 var y: i64 = 0
110 while y < H {
111 var x: i64 = 0
112 while x < W {
113 gal[y*GW+x] = t0[y*W+x]; gal[y*GW+W+x] = t1b[y*W+x]
114 gal[(H+y)*GW+x] = t2b[y*W+x]; gal[(H+y)*GW+W+x] = t3b[y*W+x]
115 x = x + 1
116 }
117 y = y + 1
118 }
119 write_png(gal, GW, GH, "knowledge/nx_worldgen.png" as *u8)
120 hw("T4 gallery -> knowledge/nx_worldgen.png (seed11 | seed77 | seed314 | seed11-sunset)\n" as *u8)
121
122 if fails == 0 { hw("WORLDGEN-GATE 4/4 GREEN -- sovereign Infinigen rung 1: seeds grow whole LANDSCAPES (fBm terrain + water + sky + sun + clouds + weather), integer + deterministic, no ML, no assets\n" as *u8); wg_log(0); sys_exit(0); return 0 }
123 hw("WORLDGEN-GATE RED fails="); pn(fails); hw("\n" as *u8)
124 wg_log(fails)
125 sys_exit(1)
126 return 1
127}