code wiki / _hdl_build / nx_food_menu_gate.nx

nx_food_menu_gate.nx source

↩ module page · 157 lines · 9019 B

1// nx_food_menu_gate.nx -- GATE: R-MENU. Per-restaurant availability (the original ask). Proves: T1 every 2// restaurant yields a complete build from ONLY its menu, T2 availability honored (Green Wok has no red meat -> 3// never recommends Beef), T3 availability MATTERS (different restaurants -> different recommendations), T4 the 4// directory lists every restaurant, T5 sovereign + availability visible in the rendered pages (Golden Wok page 5// shows Beef, Green Wok page does not), T6 the bundle SHIPS through the publisher. license_tier: ORIGINAL 6import "nx_food_menu.nx" 7import "nx_publisher.nx" 8import "nx_syscalls.nx" 9 10const MG_STORE: *u8 = "knowledge/store/food-" 11const MG_CAT: *u8 = "knowledge/registry/nishi_builder.tsv" 12const MG_Q: *u8 = "knowledge/publish/food-queue.tsv" 13const MG_LED: *u8 = "knowledge/publish/food-ledger.tsv" 14const MG_STAGE: *u8 = "knowledge/publish/food-stage" 15const MG_LIVE: *u8 = "knowledge/publish/food-live" 16 17func g_p(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 18func g_i(v: i64) -> i64 { 19 let bb: *u8 = sys_mmap(28); var m: i64 = v 20 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 21 let t: *u8 = sys_mmap(28); var k: i64 = 0 22 if m == 0 { t[0] = 48 as u8; k = 1 } 23 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 24 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, bb, k); return 0 25} 26func g_exists(path: *u8) -> i64 { let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 } sys_close(fd); return 1 } 27 28// choose for a restaurant's menu (neutral pref); fills build/roles, returns slots filled 29func mg_choose(store: *u8, rest_id: *u8, build: *i64, roles: *i64, prefw: *i64) -> i64 { 30 let avail: *i64 = sys_mmap(8 * 64) as *i64 31 let avoid: *i64 = sys_mmap(8 * 64) as *i64 32 let name: *u8 = sys_mmap(128) 33 if fs_restaurant_avail(store, rest_id, avail, name) == 0 { return 0 } 34 let h: *i64 = fd_world_open(store) 35 fd_set_all(avoid, h[0], 0) 36 let frame: *i64 = sys_mmap(8 * 16) as *i64 37 let nf: i64 = fd_load_frame(store, frame) 38 let wts: *i64 = sys_mmap(8 * 8) as *i64 39 fd_load_weights(store, wts) 40 return fd_choose(h, avail, avoid, prefw, frame, nf, wts, build, roles) 41} 42 43// render restaurant -> stage knowledge/staging/food/<id>.html -> pub_submit; returns submit rc 44func mg_ship_restaurant(store: *u8, cat: *u8, rest_id: *u8) -> i64 { 45 let page: *u8 = sys_mmap(65536) 46 let np: i64 = fs_render_restaurant(store, cat, rest_id, page) 47 if np == 0 { return 0 } 48 let sp: *u8 = sys_mmap(160) 49 var o: i64 = 0 50 o = as_append(sp, o, "knowledge/staging/food/" as *u8); o = as_append(sp, o, rest_id); o = as_append(sp, o, ".html" as *u8); sp[o] = 0 as u8 51 let fd: i64 = sys_openat_wr(sp, 420); if fd >= 0 { sys_write(fd, page, np); sys_close(fd) } 52 let dest: *u8 = sys_mmap(64) 53 var d: i64 = 0 54 d = as_append(dest, d, rest_id); d = as_append(dest, d, ".html" as *u8); dest[d] = 0 as u8 55 return pub_submit_to(MG_Q, sp, dest, "nishifoodfamily" as *u8, "nishi-food" as *u8, "internal" as *u8) 56} 57 58func main() -> i64 { 59 g_p("=== nx_food_menu_gate (R-MENU: best stir-fry from YOUR restaurant's menu) ===\n" as *u8) 60 fd_seed(MG_STORE) 61 fc_seed_veg(MG_STORE) 62 let rs: i64 = fd_seed_restaurants(MG_STORE) 63 fs_teach(MG_CAT) 64 g_p("restaurants seeded this run=" as *u8); g_i(rs); g_p("\n" as *u8) 65 66 let world: *i64 = fd_world_open(MG_STORE) 67 let names: *i64 = world[4] as *i64 68 let beefidx: i64 = fd_index_of(world, "beef" as *u8) 69 let prefw: *i64 = sys_mmap(8 * 8) as *i64 70 var z: i64 = 0; while z < FOOD_NAX { prefw[z] = 0; z = z + 1 } 71 72 let bg: *i64 = sys_mmap(8 * 16) as *i64; let rg: *i64 = sys_mmap(8 * 16) as *i64 73 let bw: *i64 = sys_mmap(8 * 16) as *i64; let rw: *i64 = sys_mmap(8 * 16) as *i64 74 let bs: *i64 = sys_mmap(8 * 16) as *i64; let rsr: *i64 = sys_mmap(8 * 16) as *i64 75 let bm: *i64 = sys_mmap(8 * 16) as *i64; let rm: *i64 = sys_mmap(8 * 16) as *i64 76 let nbg: i64 = mg_choose(MG_STORE, "goldenwok" as *u8, bg, rg, prefw) 77 let nbw: i64 = mg_choose(MG_STORE, "greenwok" as *u8, bw, rw, prefw) 78 let nbs: i64 = mg_choose(MG_STORE, "spicehouse" as *u8, bs, rsr, prefw) 79 let nbm: i64 = mg_choose(MG_STORE, "mongoliangrill" as *u8, bm, rm, prefw) 80 let pgold: *u8 = names[bg[0]] as *u8 81 let pgreen: *u8 = names[bw[0]] as *u8 82 g_p("Golden Wok protein=" as *u8); g_p(pgold); g_p(" | Green Wok protein=" as *u8); g_p(pgreen) 83 g_p(" | Spice House protein=" as *u8); g_p(names[bs[0]] as *u8); g_p("\n" as *u8) 84 85 var pass: i64 = 0 86 var tot: i64 = 0 87 88 // T1 every restaurant builds complete from only its menu 89 tot = tot + 1 90 var ok1: i64 = 1 91 if nbg != 5 { ok1 = 0 } 92 if nbw != 5 { ok1 = 0 } 93 if nbs != 5 { ok1 = 0 } 94 if nbm != 5 { ok1 = 0 } 95 if ok1 == 1 { pass = pass + 1; g_p("PASS T1 all 4 restaurants yield a complete stir-fry from only their menu\n" as *u8) } else { g_p("FAIL T1\n" as *u8) } 96 97 // T2 availability honored: Green Wok carries no red meat -> beef never appears in its build 98 var greenhasbeef: i64 = 0 99 var i: i64 = 0 100 while i < nbw { if bw[i] == beefidx { greenhasbeef = 1 } i = i + 1 } 101 tot = tot + 1 102 if greenhasbeef == 0 { pass = pass + 1; g_p("PASS T2 availability honored: Green Wok (no red meat) never recommends Beef\n" as *u8) } else { g_p("FAIL T2 beef leaked into Green Wok\n" as *u8) } 103 104 // T3 availability MATTERS: different menus -> different recommended protein 105 tot = tot + 1 106 if fd_streq(pgold, pgreen) == 0 { pass = pass + 1; g_p("PASS T3 availability matters: Golden Wok and Green Wok recommend different proteins\n" as *u8) } else { g_p("FAIL T3 same protein\n" as *u8) } 107 108 // render directory + representative pages 109 let dir: *u8 = sys_mmap(65536); let ndir: i64 = fs_render_directory(MG_STORE, MG_CAT, dir) 110 let pgg: *u8 = sys_mmap(65536); let npgg: i64 = fs_render_restaurant(MG_STORE, MG_CAT, "goldenwok" as *u8, pgg) 111 let pgw: *u8 = sys_mmap(65536); let npgw: i64 = fs_render_restaurant(MG_STORE, MG_CAT, "greenwok" as *u8, pgw) 112 113 // T4 directory lists every restaurant + links 114 tot = tot + 1 115 var ok4: i64 = 1 116 if as_contains(dir, ndir, "Golden Wok" as *u8) != 1 { ok4 = 0 } 117 if as_contains(dir, ndir, "Green Wok" as *u8) != 1 { ok4 = 0 } 118 if as_contains(dir, ndir, "Sichuan Spice House" as *u8) != 1 { ok4 = 0 } 119 if as_contains(dir, ndir, "greenwok.html" as *u8) != 1 { ok4 = 0 } 120 if ok4 == 1 { pass = pass + 1; g_p("PASS T4 directory lists all restaurants with links (" as *u8); g_i(ndir); g_p(" bytes)\n" as *u8) } else { g_p("FAIL T4\n" as *u8) } 121 122 // T5 sovereign + availability visible in rendered output 123 tot = tot + 1 124 var ok5: i64 = 1 125 if as_has_thirdparty_js(dir, ndir) != 0 { ok5 = 0 } 126 if as_has_thirdparty_js(pgg, npgg) != 0 { ok5 = 0 } 127 if as_has_thirdparty_js(pgw, npgw) != 0 { ok5 = 0 } 128 if as_contains(pgg, npgg, "Beef" as *u8) != 1 { ok5 = 0 } // Golden Wok serves beef -> on its page 129 if as_contains(pgw, npgw, "Beef" as *u8) != 0 { ok5 = 0 } // Green Wok does not -> never on its page 130 if ok5 == 1 { pass = pass + 1; g_p("PASS T5 sovereign + availability visible (Golden Wok page shows Beef, Green Wok page does not)\n" as *u8) } else { g_p("FAIL T5\n" as *u8) } 131 132 // T6 SHIP the bundle through the publisher 133 sys_mkdir("knowledge/staging" as *u8, 0x1ed) 134 sys_mkdir("knowledge/staging/food" as *u8, 0x1ed) 135 pub_init() 136 sys_mkdir(MG_STAGE, 0x1ed) 137 sys_mkdir(MG_LIVE, 0x1ed) 138 let difd: i64 = sys_openat_wr("knowledge/staging/food/index.html" as *u8, 420); if difd >= 0 { sys_write(difd, dir, ndir); sys_close(difd) } 139 pub_submit_to(MG_Q, "knowledge/staging/food/index.html" as *u8, "index.html" as *u8, "nishifoodfamily" as *u8, "nishi-food" as *u8, "internal" as *u8) 140 mg_ship_restaurant(MG_STORE, MG_CAT, "goldenwok" as *u8) 141 mg_ship_restaurant(MG_STORE, MG_CAT, "greenwok" as *u8) 142 mg_ship_restaurant(MG_STORE, MG_CAT, "spicehouse" as *u8) 143 mg_ship_restaurant(MG_STORE, MG_CAT, "mongoliangrill" as *u8) 144 let pubd: i64 = pub_run_full(MG_Q, MG_LED, MG_STAGE, MG_LIVE, "publish:food-menu" as *u8) 145 g_p(" pub_run_full -> published_this_pass=" as *u8); g_i(pubd); g_p("\n" as *u8) 146 tot = tot + 1 147 var ok6: i64 = 1 148 if g_exists("knowledge/publish/food-live/index.html" as *u8) != 1 { ok6 = 0 } 149 if g_exists("knowledge/publish/food-live/greenwok.html" as *u8) != 1 { ok6 = 0 } 150 if g_exists("knowledge/publish/food-live/goldenwok.html" as *u8) != 1 { ok6 = 0 } 151 if ok6 == 1 { pass = pass + 1; g_p("PASS T6 SHIPPED the restaurant bundle (directory + per-restaurant pages) to liveroot\n" as *u8) } else { g_p("FAIL T6\n" as *u8) } 152 153 g_p("nx_food_menu_gate pass=" as *u8); g_i(pass); g_p("/" as *u8); g_i(tot) 154 if pass == tot { g_p(" verdict=GREEN (per-restaurant availability LIVE: your local menu -> your best stir-fry)\n" as *u8); return 0 } 155 g_p(" verdict=RED\n" as *u8) 156 return 1 157}