code wiki / _hdl_build / nx_cap_type_classify.nx

nx_cap_type_classify.nx source

↩ module page · 153 lines · 6842 B

1// nx_cap_type_classify.nx -- the census CAPABILITY-TYPE classifier (L7 of the 2// sovereign-data-substrate roadmap). Pure NishiLang, NO SQL. Maps a capability's 3// name/path to a normalized capability-type via a DATA-DRIVEN keyword rule table 4// (Rule #11), first-match-wins, so nx_dedup_audit's clustering can run ACROSS 5// subsystems. Tutored by Claude (the LLM novel-module rung); the gate below is 6// self-contained (no enumerator dependency) so the Engineer can verify it now. 7// license_tier: ORIGINAL 8import "nx_syscalls.nx" 9 10const CT_OTHER: i64 = 0 11const CT_IMAGE_GEN: i64 = 1 12const CT_GARMENT: i64 = 2 13const CT_CHARACTER: i64 = 3 14const CT_SCENE: i64 = 4 15const CT_CAPTION: i64 = 5 16const CT_QUALITY: i64 = 6 17const CT_FORENSICS: i64 = 7 18const CT_SCRAPE: i64 = 8 19const CT_STORAGE: i64 = 9 20const CT_SEARCH: i64 = 10 21const CT_UI: i64 = 11 22const CT_API: i64 = 12 23const CT_DEPLOY: i64 = 13 24const CT_ORCH: i64 = 14 25const CT_GOVERN: i64 = 15 26const CT_TRAIN: i64 = 16 27const MAXR: i64 = 64 28 29func pr_n(v: i64) -> i64 { 30 let b: *u8 = sys_mmap(28); var m: i64 = v; let t: *u8 = sys_mmap(28); var k: i64 = 0 31 if m == 0 { t[0] = 48 as u8; k = 1 } 32 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 33 var i: i64 = 0 34 while i < k { b[i] = t[k - 1 - i]; i = i + 1 } 35 sys_write(1, b, k); return 0 36} 37 38func _puts(s: *u8) -> i64 { 39 var n: i64 = 0 40 while (s[n] as i64) != 0 { n = n + 1 } 41 sys_write(1, s, n); return 0 42} 43 44func _slen(s: *u8) -> i64 { 45 var n: i64 = 0 46 while (s[n] as i64) != 0 { n = n + 1 } 47 return n 48} 49 50// substring search: is `needle` (len nn) anywhere in `hay` (len hn)? 51func _contains(hay: *u8, hn: i64, needle: *u8, nn: i64) -> i64 { 52 if nn <= 0 { return 0 } 53 if nn > hn { return 0 } 54 var i: i64 = 0 55 while i + nn <= hn { 56 var k: i64 = 0 57 var matched: i64 = 1 58 while k < nn { 59 let a: i64 = (hay[i + k] as i64) & 255 60 let b: i64 = (needle[k] as i64) & 255 61 if a != b { matched = 0; k = nn } 62 else { k = k + 1 } 63 } 64 if matched == 1 { return 1 } 65 i = i + 1 66 } 67 return 0 68} 69 70// classify a capability name/path -> capability-type (first matching rule wins; 71// order = specific-before-generic; SEARCH before bare "arc" since "search" contains "arc") 72func classify(name: *u8, nlen: i64) -> i64 { 73 let kw: *i64 = sys_mmap(8 * MAXR) as *i64 74 let kl: *i64 = sys_mmap(8 * MAXR) as *i64 75 let kt: *i64 = sys_mmap(8 * MAXR) as *i64 76 var r: i64 = 0 77 kw[r]="tryon" as *u8 as i64; kl[r]=5; kt[r]=CT_GARMENT; r=r+1 78 kw[r]="vton" as *u8 as i64; kl[r]=4; kt[r]=CT_GARMENT; r=r+1 79 kw[r]="garment" as *u8 as i64; kl[r]=7; kt[r]=CT_GARMENT; r=r+1 80 kw[r]="clothing" as *u8 as i64;kl[r]=8; kt[r]=CT_GARMENT; r=r+1 81 kw[r]="outfit" as *u8 as i64; kl[r]=6; kt[r]=CT_GARMENT; r=r+1 82 kw[r]="wardrobe" as *u8 as i64;kl[r]=8; kt[r]=CT_GARMENT; r=r+1 83 kw[r]="caption" as *u8 as i64; kl[r]=7; kt[r]=CT_CAPTION; r=r+1 84 kw[r]="forensic" as *u8 as i64;kl[r]=8; kt[r]=CT_FORENSICS; r=r+1 85 kw[r]="anatomy" as *u8 as i64; kl[r]=7; kt[r]=CT_FORENSICS; r=r+1 86 kw[r]="realism" as *u8 as i64; kl[r]=7; kt[r]=CT_FORENSICS; r=r+1 87 kw[r]="continuity" as *u8 as i64; kl[r]=10; kt[r]=CT_SCENE; r=r+1 88 kw[r]="scene" as *u8 as i64; kl[r]=5; kt[r]=CT_SCENE; r=r+1 89 kw[r]="character" as *u8 as i64;kl[r]=9; kt[r]=CT_CHARACTER; r=r+1 90 kw[r]="persona" as *u8 as i64; kl[r]=7; kt[r]=CT_CHARACTER; r=r+1 91 kw[r]="scrap" as *u8 as i64; kl[r]=5; kt[r]=CT_SCRAPE; r=r+1 92 kw[r]="crawl" as *u8 as i64; kl[r]=5; kt[r]=CT_SCRAPE; r=r+1 93 kw[r]="ingest" as *u8 as i64; kl[r]=6; kt[r]=CT_SCRAPE; r=r+1 94 kw[r]="download" as *u8 as i64;kl[r]=8; kt[r]=CT_SCRAPE; r=r+1 95 kw[r]="beauty" as *u8 as i64; kl[r]=6; kt[r]=CT_QUALITY; r=r+1 96 kw[r]="quality" as *u8 as i64; kl[r]=7; kt[r]=CT_QUALITY; r=r+1 97 kw[r]="aesthetic" as *u8 as i64;kl[r]=9; kt[r]=CT_QUALITY; r=r+1 98 kw[r]="lora" as *u8 as i64; kl[r]=4; kt[r]=CT_TRAIN; r=r+1 99 kw[r]="kohya" as *u8 as i64; kl[r]=5; kt[r]=CT_TRAIN; r=r+1 100 kw[r]="bm25" as *u8 as i64; kl[r]=4; kt[r]=CT_SEARCH; r=r+1 101 kw[r]="search" as *u8 as i64; kl[r]=6; kt[r]=CT_SEARCH; r=r+1 102 kw[r]="retriev" as *u8 as i64; kl[r]=7; kt[r]=CT_SEARCH; r=r+1 103 kw[r]="arc" as *u8 as i64; kl[r]=3; kt[r]=CT_SCENE; r=r+1 104 kw[r]="vault" as *u8 as i64; kl[r]=5; kt[r]=CT_STORAGE; r=r+1 105 kw[r]="storage" as *u8 as i64; kl[r]=7; kt[r]=CT_STORAGE; r=r+1 106 kw[r]="catalog" as *u8 as i64; kl[r]=7; kt[r]=CT_STORAGE; r=r+1 107 kw[r]="img" as *u8 as i64; kl[r]=3; kt[r]=CT_IMAGE_GEN; r=r+1 108 kw[r]="diffus" as *u8 as i64; kl[r]=6; kt[r]=CT_IMAGE_GEN; r=r+1 109 kw[r]="comfy" as *u8 as i64; kl[r]=5; kt[r]=CT_IMAGE_GEN; r=r+1 110 kw[r]="sdcpp" as *u8 as i64; kl[r]=5; kt[r]=CT_IMAGE_GEN; r=r+1 111 kw[r]="deploy" as *u8 as i64; kl[r]=6; kt[r]=CT_DEPLOY; r=r+1 112 kw[r]="docker" as *u8 as i64; kl[r]=6; kt[r]=CT_DEPLOY; r=r+1 113 kw[r]="daemon" as *u8 as i64; kl[r]=6; kt[r]=CT_ORCH; r=r+1 114 kw[r]="queue" as *u8 as i64; kl[r]=5; kt[r]=CT_ORCH; r=r+1 115 kw[r]="registr" as *u8 as i64; kl[r]=7; kt[r]=CT_GOVERN; r=r+1 116 kw[r]="audit" as *u8 as i64; kl[r]=5; kt[r]=CT_GOVERN; r=r+1 117 kw[r]="frontend" as *u8 as i64;kl[r]=8; kt[r]=CT_UI; r=r+1 118 kw[r]="svelte" as *u8 as i64; kl[r]=6; kt[r]=CT_UI; r=r+1 119 kw[r]="server" as *u8 as i64; kl[r]=6; kt[r]=CT_API; r=r+1 120 kw[r]="service" as *u8 as i64; kl[r]=7; kt[r]=CT_API; r=r+1 121 var i: i64 = 0 122 while i < r { 123 if _contains(name, nlen, kw[i] as *u8, kl[i]) == 1 { return kt[i] } 124 i = i + 1 125 } 126 return CT_OTHER 127} 128 129func ck(name: *u8, want: i64) -> i64 { 130 let got: i64 = classify(name, _slen(name)) 131 if got == want { return 1 } 132 _puts(" FAIL " as *u8); _puts(name); _puts(" want=" as *u8); pr_n(want) 133 _puts(" got=" as *u8); pr_n(got); _puts("\n" as *u8) 134 return 0 135} 136 137func main() -> i64 { 138 var ok: i64 = 0 139 let total: i64 = 9 140 ok = ok + ck("companion_clothing_tryon" as *u8, CT_GARMENT) 141 ok = ok + ck("nx_bm25" as *u8, CT_SEARCH) 142 ok = ok + ck("svc-nishicaption" as *u8, CT_CAPTION) 143 ok = ok + ck("universal_scraper" as *u8, CT_SCRAPE) 144 ok = ok + ck("companion_vault.db" as *u8, CT_STORAGE) 145 ok = ok + ck("gen-img" as *u8, CT_IMAGE_GEN) 146 ok = ok + ck("svc-scene-engine" as *u8, CT_SCENE) 147 ok = ok + ck("beauty.db" as *u8, CT_QUALITY) 148 ok = ok + ck("characters.db" as *u8, CT_CHARACTER) 149 _puts("nx_cap_type_classify: " as *u8); pr_n(ok); _puts("/" as *u8); pr_n(total); _puts(" PASS\n" as *u8) 150 if ok == total { sys_exit(0) } 151 sys_exit(1) 152 return 0 153}