code wiki / _hdl_build / nx_product_score.nx
nx_product_score.nx source
↩ module page · 167 lines · 11978 B
1// nx_product_score.nx -- dmkt lane (atlas-product arc). The DECISION layer the design-to-market model was
2// missing: an HONEST product-viability scorecard. Reads the sibling foundation (dmktneeds- needs plane +
3// dmktcap- capability plane), matches each need to a fulfilling LIVE capability (need-id substring in a
4// cap's keyword note, cap status=LIVE = the same fulfilment edge nx_product_atlas_build uses), and emits a
5// per-need coverage + a GO/NO-GO-class verdict. ★NO FAKE NUMBERS (operator law): a need covered by a
6// *_research_fetch cap is DATA-PENDING (the fetch must RUN for real demand/cost figures) -- reported as
7// PENDING, never as a fabricated GO. Composition: fork-captures nx_store_put.elf load (no schema drift).
8// READ-ONLY; scorecard to stdout + atomic knowledge/status/product_score.out.
9// nx_product_score [needs-prefix] [caps-prefix]
10// ENVELOPE: 64 needs, 64 caps, declared. exit: 0 | 4 planes-unreadable | 2 usage-ok(defaults).
11// license_tier: ORIGINAL expect_exit: 0
12import "nx_tool_run.nx"
13const K_MAGIC_60000: i64 = 60000
14const K_MAGIC_131072: i64 = 131072
15const K_MAGIC_65536: i64 = 65536
16
17func pc_b(rep: *u8, pos: i64, s: *u8) -> i64 { var p: i64 = pos; var i: i64 = 0; while s[i] != (0 as u8) { if p < K_MAGIC_60000 { rep[p] = s[i]; p = p + 1 } i = i + 1 } return p }
18func pc_bn(rep: *u8, pos: i64, v: i64) -> i64 { var p: i64 = pos; var m: i64 = v; if m < 0 { if p < K_MAGIC_60000 { rep[p] = 45 as u8; p = p + 1 } m = 0 - m } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } var i: i64 = 0; while i < k { if p < K_MAGIC_60000 { rep[p] = t[k - 1 - i]; p = p + 1 } i = i + 1 } return p }
19func pc_q(rep: *u8, pos: i64) -> i64 { var p: i64 = pos; if p < K_MAGIC_60000 { rep[p] = 34 as u8; p = p + 1 } return p }
20func pc_je(rep: *u8, pos: i64, src: *u8, s: i64, e: i64) -> i64 {
21 var p: i64 = pos; var i: i64 = s
22 while i < e { let c: i64 = src[i]; if c == 34 { if p < K_MAGIC_60000 { rep[p] = 92 as u8; p = p + 1 } if p < K_MAGIC_60000 { rep[p] = 34 as u8; p = p + 1 } } else { if c == 92 { if p < K_MAGIC_60000 { rep[p] = 92 as u8; p = p + 1 } if p < K_MAGIC_60000 { rep[p] = 92 as u8; p = p + 1 } } else { if c < 32 { if p < K_MAGIC_60000 { rep[p] = 32 as u8; p = p + 1 } } else { if p < K_MAGIC_60000 { rep[p] = c as u8; p = p + 1 } } } } i = i + 1 }
23 return p
24}
25func pc_load(prefix: *u8, out: *u8, cap: i64) -> i64 {
26 let SP: *u8 = "/volume1/homes/elderwesto/nishihost/nx_store_put.elf" as *u8
27 let av: *i64 = sys_mmap(16 * 8) as *i64
28 av[0] = SP as i64; av[1] = prefix as i64; av[2] = "load" as *u8 as i64; av[3] = 0
29 let olen: *i64 = sys_mmap(16) as *i64
30 let rc: i64 = tr_run_capture(SP, av, out, cap, olen)
31 if rc == 127 { return 0 - 1 }
32 return olen[0]
33}
34// field [idx] of row [ls,le): returns fstart, writes fend to feo[0]
35func pc_field(buf: *u8, ls: i64, le: i64, idx: i64, feo: *i64) -> i64 {
36 var f: i64 = 0
37 var s: i64 = ls
38 var i: i64 = ls
39 while i <= le {
40 var isend: i64 = 0
41 if i == le { isend = 1 } else { if buf[i] == (9 as u8) { isend = 1 } }
42 if isend == 1 { if f == idx { feo[0] = i; return s } f = f + 1; s = i + 1 }
43 i = i + 1
44 }
45 feo[0] = le
46 return le
47}
48// is [na,nb) of a present as substring in [cs,ce) of c?
49func pc_sub(a: *u8, na: i64, nb: i64, c: *u8, cs: i64, ce: i64) -> i64 {
50 let pl: i64 = nb - na
51 if pl < 3 { return 0 }
52 var i: i64 = cs
53 while i + pl <= ce {
54 var k: i64 = 0; var m: i64 = 1
55 while k < pl { if c[i + k] != a[na + k] { m = 0; k = pl } else { k = k + 1 } }
56 if m == 1 { return 1 }
57 i = i + 1
58 }
59 return 0
60}
61func pc_islive(buf: *u8, s: i64, e: i64) -> i64 { if e - s < 4 { return 0 } if buf[s] == (76 as u8) { if buf[s+1] == (73 as u8) { if buf[s+2] == (86 as u8) { if buf[s+3] == (69 as u8) { return 1 } } } } return 0 }
62// does [s,e) of buf contain 'fetch'?
63func pc_isfetch(buf: *u8, s: i64, e: i64) -> i64 {
64 var i: i64 = s
65 while i + 5 <= e { if buf[i] == (102 as u8) { if buf[i+1] == (101 as u8) { if buf[i+2] == (116 as u8) { if buf[i+3] == (99 as u8) { if buf[i+4] == (104 as u8) { return 1 } } } } } i = i + 1 }
66 return 0
67}
68func main(argc: i64, argv: *i64) -> i64 {
69 var needsp: *u8 = "knowledge/store/dmktneeds-" as *u8
70 var capsp: *u8 = "knowledge/store/dmktcap-" as *u8
71 if argc >= 2 { needsp = argv[1] as *u8 }
72 if argc >= 3 { capsp = argv[2] as *u8 }
73 let cap: i64 = K_MAGIC_131072
74 let nbuf: *u8 = sys_mmap(cap + 16)
75 let cbuf: *u8 = sys_mmap(cap + 16)
76 let nn: i64 = pc_load(needsp, nbuf, cap)
77 let cn: i64 = pc_load(capsp, cbuf, cap)
78 if nn < 0 { sys_write(1, "PRODUCT-SCORE verdict=PLANES-UNREADABLE needs\n" as *u8, 45); sys_exit(4); return 4 }
79 if cn < 0 { sys_write(1, "PRODUCT-SCORE verdict=PLANES-UNREADABLE caps\n" as *u8, 44); sys_exit(4); return 4 }
80 // index cap rows
81 let cls: *i64 = sys_mmap(64 * 8) as *i64
82 let cle: *i64 = sys_mmap(64 * 8) as *i64
83 var ncap: i64 = 0
84 var i: i64 = 0
85 var s: i64 = 0
86 while i <= cn { var isend: i64 = 0; if i == cn { isend = 1 } else { if cbuf[i] == (10 as u8) { isend = 1 } } if isend == 1 { if i > s { if ncap < 64 { cls[ncap] = s; cle[ncap] = i; ncap = ncap + 1 } } s = i + 1 } i = i + 1 }
87 let rep: *u8 = sys_mmap(K_MAGIC_65536)
88 let feo: *i64 = sys_mmap(16) as *i64
89 var p: i64 = 0
90 p = pc_b(rep, p, "{" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "v" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":1," as *u8)
91 p = pc_q(rep, p); p = pc_b(rep, p, "kind" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "product_viability" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "," as *u8)
92 p = pc_q(rep, p); p = pc_b(rep, p, "source" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "dmktneeds- x dmktcap- (need-id-in-cap-note && cap=LIVE)" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "," as *u8)
93 p = pc_q(rep, p); p = pc_b(rep, p, "needs" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":[" as *u8)
94 var total: i64 = 0
95 var covered: i64 = 0
96 var design_ready: i64 = 0
97 var data_pending: i64 = 0
98 var first: i64 = 1
99 // iterate need rows
100 var ni: i64 = 0
101 var ns: i64 = 0
102 while ni <= nn {
103 var isend: i64 = 0
104 if ni == nn { isend = 1 } else { if nbuf[ni] == (10 as u8) { isend = 1 } }
105 if isend == 1 {
106 if ni > ns {
107 total = total + 1
108 let nid_s: i64 = pc_field(nbuf, ns, ni, 0, feo); let nid_e: i64 = feo[0]
109 // find a LIVE cap whose note (field6) contains this need-id
110 var cover: i64 = 0
111 var matchcap_s: i64 = 0
112 var matchcap_e: i64 = 0
113 var isfetch: i64 = 0
114 var k: i64 = 0
115 while k < ncap {
116 let cst_s: i64 = pc_field(cbuf, cls[k], cle[k], 3, feo); let cst_e: i64 = feo[0]
117 if pc_islive(cbuf, cst_s, cst_e) == 1 {
118 let cnote_s: i64 = pc_field(cbuf, cls[k], cle[k], 6, feo); let cnote_e: i64 = feo[0]
119 if pc_sub(nbuf, nid_s, nid_e, cbuf, cnote_s, cnote_e) == 1 {
120 cover = 1
121 let cid_s: i64 = pc_field(cbuf, cls[k], cle[k], 0, feo); let cid_e: i64 = feo[0]
122 matchcap_s = cid_s; matchcap_e = cid_e
123 if pc_isfetch(cbuf, cid_s, cid_e) == 1 { isfetch = 1 }
124 k = ncap
125 } else { k = k + 1 }
126 } else { k = k + 1 }
127 }
128 if first == 1 { first = 0 } else { p = pc_b(rep, p, "," as *u8) }
129 p = pc_b(rep, p, "{" as *u8)
130 p = pc_q(rep, p); p = pc_b(rep, p, "need" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p); p = pc_je(rep, p, nbuf, nid_s, nid_e); p = pc_q(rep, p); p = pc_b(rep, p, "," as *u8)
131 if cover == 1 {
132 covered = covered + 1
133 p = pc_q(rep, p); p = pc_b(rep, p, "covered_by" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p); p = pc_je(rep, p, cbuf, matchcap_s, matchcap_e); p = pc_q(rep, p); p = pc_b(rep, p, "," as *u8)
134 p = pc_q(rep, p); p = pc_b(rep, p, "class" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p)
135 if isfetch == 1 { data_pending = data_pending + 1; p = pc_b(rep, p, "data-fetch-PENDING" as *u8) } else { design_ready = design_ready + 1; p = pc_b(rep, p, "design-deterministic" as *u8) }
136 p = pc_q(rep, p)
137 } else {
138 p = pc_q(rep, p); p = pc_b(rep, p, "covered_by" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":null," as *u8)
139 p = pc_q(rep, p); p = pc_b(rep, p, "class" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "UNCOVERED-gap" as *u8); p = pc_q(rep, p)
140 }
141 p = pc_b(rep, p, "}" as *u8)
142 }
143 ns = ni + 1
144 }
145 ni = ni + 1
146 }
147 p = pc_b(rep, p, "]," as *u8)
148 p = pc_q(rep, p); p = pc_b(rep, p, "coverage" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":{" as *u8)
149 p = pc_q(rep, p); p = pc_b(rep, p, "total" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_bn(rep, p, total); p = pc_b(rep, p, "," as *u8)
150 p = pc_q(rep, p); p = pc_b(rep, p, "covered" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_bn(rep, p, covered); p = pc_b(rep, p, "," as *u8)
151 p = pc_q(rep, p); p = pc_b(rep, p, "design_ready" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_bn(rep, p, design_ready); p = pc_b(rep, p, "," as *u8)
152 p = pc_q(rep, p); p = pc_b(rep, p, "data_pending" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_bn(rep, p, data_pending); p = pc_b(rep, p, "}," as *u8)
153 p = pc_q(rep, p); p = pc_b(rep, p, "verdict" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p)
154 if covered < total { p = pc_b(rep, p, "NO-GO-CAPABILITY-GAP" as *u8) } else { if data_pending > 0 { p = pc_b(rep, p, "DESIGN-READY / DATA-PENDING" as *u8) } else { p = pc_b(rep, p, "READY" as *u8) } }
155 p = pc_q(rep, p); p = pc_b(rep, p, "," as *u8)
156 p = pc_q(rep, p); p = pc_b(rep, p, "verdict_detail" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "coverage=covered/total; design_ready caps are deterministic (CAD/render); data_pending caps are *_research_fetch that MUST RUN for real demand/cost before an honest GO-NO-GO -- NO fabricated market/cost figures here (operator no-fake-numbers law)." as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "," as *u8)
157 p = pc_q(rep, p); p = pc_b(rep, p, "envelope" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":{" as *u8)
158 p = pc_q(rep, p); p = pc_b(rep, p, "needs_scanned" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_bn(rep, p, total); p = pc_b(rep, p, "," as *u8)
159 p = pc_q(rep, p); p = pc_b(rep, p, "caps_scanned" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_bn(rep, p, ncap); p = pc_b(rep, p, "," as *u8)
160 p = pc_q(rep, p); p = pc_b(rep, p, "note" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, ":" as *u8); p = pc_q(rep, p); p = pc_b(rep, p, "single-product model (nx_product_atlas_build foundation); multi-product RANKING rides a product-scoped needs plane = next rung" as *u8); p = pc_q(rep, p)
161 p = pc_b(rep, p, "}}" as *u8)
162 sys_write(1, rep, p)
163 let tfd: i64 = sys_openat_wr("knowledge/status/product_score.out.tmp" as *u8, 420)
164 if tfd >= 0 { sys_write(tfd, rep, p); sys_close(tfd); sys_renameat("knowledge/status/product_score.out.tmp" as *u8, "knowledge/status/product_score.out" as *u8) }
165 sys_exit(0)
166 return 0
167}