code wiki / _hdl_build / nx_vizsla_graph.nx
nx_vizsla_graph.nx source
↩ module page · 357 lines · 14027 B
1// nx_vizsla_graph.nx -- NISHI VIZSLA: INTRO-GRAPH / WHO-KNOWS-WHOM (PRM/CRM depth, the marquee feature Clay /
2// Affinity sell as "warm intro paths"). Operator 2026-06-23: real-system depth. Models the relationship NETWORK
3// as undirected edges between people ("a knows b") on the sovereign seg_store plane (additive "edge:" CID
4// records) and answers the killer question: to reach someone you don't know directly, WHO in your network can
5// introduce you? = BFS shortest path. Computed locally; the social graph never leaves the machine (no cloud
6// graph-mining / no contact-scraping for ad targeting -- the privacy exceed).
7// link <prefix> <a> <b> <date> record an undirected edge a--b (additive, idempotent)
8// neighbors <prefix> <id> everyone directly connected to <id>
9// path <prefix> <from> <to> shortest intro path from <from> to <to>; the intermediates = introducers
10// Integer-only, deterministic. license_tier: ORIGINAL
11import "nx_syscalls.nx"
12import "nx_canon_cid.nx"
13import "nx_seg_store.nx"
14const K_MAGIC_1970: i64 = 1970
15const K_MAGIC_4096: i64 = 4096
16const K_MAGIC_2048: i64 = 2048
17const K_MAGIC_1024: i64 = 1024
18const K_MAGIC_65536: i64 = 65536
19
20func vx_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
21func vx_p(s: *u8) -> i64 { sys_write(1, s, vx_slen(s)); return 0 }
22
23func vx_eq(a: *u8, b: *u8) -> i64 {
24 var i: i64 = 0
25 var go: i64 = 1
26 while go == 1 { if a[i] != b[i] { return 0 } if a[i] == (0 as u8) { return 1 } i = i + 1 }
27 return 0
28}
29
30func vx_dup(s: *u8) -> *u8 {
31 let n: i64 = vx_slen(s)
32 let d: *u8 = sys_mmap(n + 2)
33 var i: i64 = 0
34 while i <= n { d[i] = s[i]; i = i + 1 }
35 return d
36}
37
38// lexicographic a > b (byte compare) -- for canonical edge orientation so a--b and b--a dedup to one record
39func vx_lex_gt(a: *u8, b: *u8) -> i64 {
40 var i: i64 = 0
41 var go: i64 = 1
42 while go == 1 {
43 let ca: i64 = a[i] as i64
44 let cb: i64 = b[i] as i64
45 if ca != cb { if ca > cb { return 1 } return 0 }
46 if ca == 0 { return 0 }
47 i = i + 1
48 }
49 return 0
50}
51
52func vx_cat(dst: *u8, off: i64, s: *u8) -> i64 {
53 var i: i64 = 0
54 while s[i] != (0 as u8) { dst[off + i] = s[i]; i = i + 1 }
55 return off + i
56}
57
58func vx_catn(dst: *u8, off: i64, v: i64) -> i64 {
59 var o: i64 = off
60 var m: i64 = v
61 if m < 0 { dst[o] = 45 as u8; o = o + 1; m = 0 - m }
62 let t: *u8 = sys_mmap(28)
63 var k: i64 = 0
64 if m == 0 { t[0] = 48 as u8; k = 1 }
65 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
66 var i: i64 = 0
67 while i < k { dst[o + i] = t[k - 1 - i]; i = i + 1 }
68 return o + k
69}
70
71func vx_kmemeq(b: *u8, off: i64, n: i64, s: *u8) -> i64 {
72 if vx_slen(s) != n { return 0 }
73 var i: i64 = 0
74 while i < n { if b[off + i] != s[i] { return 0 } i = i + 1 }
75 return 1
76}
77
78func vx_iskind(b: *u8, koff: i64, kl: i64, pfx: *u8) -> i64 {
79 let pl: i64 = vx_slen(pfx)
80 if kl <= pl { return 0 }
81 return vx_kmemeq(b, koff, pl, pfx)
82}
83
84func vx_field(rec: *u8, rl: i64, want: *u8, out: *u8, cap: i64) -> i64 {
85 if rl < 8 { return 0 }
86 let nf: i64 = ss_r32(rec, 4)
87 var off: i64 = 8
88 var fi: i64 = 0
89 while fi < nf {
90 if off + 8 > rl { return 0 }
91 let kl: i64 = ss_r32(rec, off)
92 let koff: i64 = off + 4
93 let vl: i64 = ss_r32(rec, koff + kl)
94 let voff: i64 = koff + kl + 4
95 if vx_kmemeq(rec, koff, kl, want) == 1 {
96 var t: i64 = 0
97 while t < vl { if t < cap - 1 { out[t] = rec[voff + t] } t = t + 1 }
98 if t > cap - 1 { t = cap - 1 }
99 out[t] = 0 as u8
100 return 1
101 }
102 off = voff + vl
103 fi = fi + 1
104 }
105 return 0
106}
107
108func vx_datedays(s: *u8) -> i64 {
109 let nums: *i64 = sys_mmap(8 * 4) as *i64
110 var nn: i64 = 0
111 var cur: i64 = 0
112 var indig: i64 = 0
113 var i: i64 = 0
114 var go: i64 = 1
115 while go == 1 {
116 let c: i64 = s[i] as i64
117 var isd: i64 = 0
118 if c >= 48 { if c <= 57 { isd = 1 } }
119 if isd == 1 { cur = cur * 10 + (c - 48); indig = 1 }
120 if isd == 0 { if indig == 1 { if nn < 4 { nums[nn] = cur; nn = nn + 1 } cur = 0; indig = 0 } }
121 if c == 0 { go = 0 }
122 i = i + 1
123 }
124 if nn != 3 { return 0 - 1 }
125 var y: i64 = nums[0]
126 let m: i64 = nums[1]
127 let d: i64 = nums[2]
128 if y < K_MAGIC_1970 { return 0 - 1 }
129 if m < 1 { return 0 - 1 }
130 if m > 12 { return 0 - 1 }
131 if d < 1 { return 0 - 1 }
132 if d > 31 { return 0 - 1 }
133 return 1
134}
135
136// collect edge: records -> ef[],et[] (string ids); returns count
137func vx_collect_edges(prefix: *u8, ef: *i64, et: *i64) -> i64 {
138 var n: i64 = 0
139 let segs: *i64 = sys_mmap(8 * 260) as *i64
140 let nseg: i64 = ss_manifest(prefix, segs)
141 let fa: *u8 = sys_mmap(128)
142 let fb: *u8 = sys_mmap(128)
143 var s: i64 = 0
144 while s < nseg {
145 let path: *u8 = sys_mmap(512)
146 var po: i64 = 0
147 po = vx_cat(path, po, prefix); po = vx_cat(path, po, segs[s] as *u8); po = vx_cat(path, po, ".docs" as *u8)
148 path[po] = 0 as u8
149 let szp: *i64 = sys_mmap(16) as *i64
150 let b: *u8 = ss_readall(path, szp)
151 let sz: i64 = szp[0]
152 var j: i64 = 0
153 while j + 9 <= sz {
154 let kind: i64 = b[j]
155 let kl: i64 = ss_r32(b, j + 1)
156 let koff: i64 = j + 5
157 let vl: i64 = ss_r32(b, koff + kl)
158 let voff: i64 = koff + kl + 4
159 var take: i64 = 0
160 if kind == 1 { take = vx_iskind(b, koff, kl, "edge:" as *u8) }
161 if take == 1 {
162 let rec: *u8 = (b as i64 + voff) as *u8
163 if vx_field(rec, vl, "a" as *u8, fa, 128) == 1 {
164 vx_field(rec, vl, "b" as *u8, fb, 128)
165 if n < K_MAGIC_4096 { ef[n] = vx_dup(fa) as i64; et[n] = vx_dup(fb) as i64; n = n + 1 }
166 }
167 }
168 j = voff + vl
169 }
170 s = s + 1
171 }
172 return n
173}
174
175func vx_intern(nid: *i64, nnp: *i64, s: *u8) -> i64 {
176 var i: i64 = 0
177 while i < nnp[0] { if vx_eq(nid[i] as *u8, s) == 1 { return i } i = i + 1 }
178 if nnp[0] < K_MAGIC_2048 { nid[nnp[0]] = vx_dup(s) as i64; let r: i64 = nnp[0]; nnp[0] = nnp[0] + 1; return r }
179 return 0 - 1
180}
181
182// ---------------- LINK ----------------
183func vx_cmd_link(argc: i64, argv: *i64) -> i64 {
184 if argc < 6 { vx_p("VIZSLA-GRAPH link needs <prefix> <a> <b> <date> -- fail loud\n" as *u8); return 1 }
185 let prefix: *u8 = argv[2] as *u8
186 let a: *u8 = argv[3] as *u8
187 let b: *u8 = argv[4] as *u8
188 let date: *u8 = argv[5] as *u8
189 if vx_datedays(date) < 0 { vx_p("VIZSLA-GRAPH link: bad date (YYYY-MM-DD) -- fail loud\n" as *u8); return 1 }
190 if vx_eq(a, b) == 1 { vx_p("VIZSLA-GRAPH link: a==b refused (self-loop) -- fail loud\n" as *u8); return 1 }
191
192 // canonical edge orientation (lexicographic) so a--b and b--a dedup to one record
193 var lo: *u8 = a
194 var hi: *u8 = b
195 if vx_lex_gt(a, b) == 1 { lo = b; hi = a }
196
197 let keys: *i64 = sys_mmap(8 * 8) as *i64
198 let vals: *i64 = sys_mmap(8 * 8) as *i64
199 keys[0] = "kind" as *u8 as i64; keys[1] = "a" as *u8 as i64; keys[2] = "b" as *u8 as i64; keys[3] = "date" as *u8 as i64
200 vals[0] = "edge" as *u8 as i64; vals[1] = lo as i64; vals[2] = hi as i64; vals[3] = date as i64
201
202 let enc: *u8 = sys_mmap(K_MAGIC_2048)
203 let el: i64 = canon_encode(keys, vals, 4, enc)
204 let cid: *u8 = sys_mmap(96)
205 cid_of(enc, el, cid)
206 let kbuf: *u8 = sys_mmap(160)
207 var ko: i64 = 0
208 ko = vx_cat(kbuf, ko, "edge:" as *u8); ko = vx_cat(kbuf, ko, cid); kbuf[ko] = 0 as u8
209
210 var new: i64 = 1
211 let pp: *i64 = sys_mmap(16) as *i64
212 let ll: *i64 = sys_mmap(16) as *i64
213 if ss_get_idx(prefix, kbuf, pp, ll) == 1 { new = 0 }
214 var committed: i64 = 0
215 let segid: i64 = sys_now_us()
216 if new == 1 {
217 let wr: *i64 = ss_begin()
218 if ss_add(wr, 1, kbuf, enc, el) != 0 { vx_p("VIZSLA-GRAPH link: writer full -- fail loud\n" as *u8); return 1 }
219 if ss_commit(prefix, wr, segid) != 0 { vx_p("VIZSLA-GRAPH link: commit FAILED -- fail loud\n" as *u8); return 1 }
220 committed = 1
221 }
222 let rep: *u8 = sys_mmap(K_MAGIC_1024)
223 var o: i64 = 0
224 o = vx_cat(rep, o, "VIZSLA-GRAPH-LINK a=" as *u8); o = vx_cat(rep, o, a)
225 o = vx_cat(rep, o, " b=" as *u8); o = vx_cat(rep, o, b)
226 o = vx_cat(rep, o, " new=" as *u8); o = vx_catn(rep, o, new)
227 o = vx_cat(rep, o, " segment=" as *u8)
228 if committed == 1 { o = vx_cat(rep, o, "seg-" as *u8); o = vx_catn(rep, o, segid) } else { o = vx_cat(rep, o, "none" as *u8) }
229 o = vx_cat(rep, o, "\n" as *u8)
230 sys_write(1, rep, o)
231 return 0
232}
233
234// ---------------- NEIGHBORS ----------------
235func vx_cmd_neighbors(argc: i64, argv: *i64) -> i64 {
236 if argc < 4 { vx_p("VIZSLA-GRAPH neighbors needs <prefix> <id> -- fail loud\n" as *u8); return 1 }
237 let prefix: *u8 = argv[2] as *u8
238 let id: *u8 = argv[3] as *u8
239 let ef: *i64 = sys_mmap(8 * K_MAGIC_4096) as *i64
240 let et: *i64 = sys_mmap(8 * K_MAGIC_4096) as *i64
241 let ne: i64 = vx_collect_edges(prefix, ef, et)
242 let seen: *i64 = sys_mmap(8 * K_MAGIC_2048) as *i64
243 var nse: i64 = 0
244 let rep: *u8 = sys_mmap(K_MAGIC_65536)
245 var o: i64 = 0
246 o = vx_cat(rep, o, "VIZSLA-GRAPH-NEIGHBORS id=" as *u8); o = vx_cat(rep, o, id); o = vx_cat(rep, o, " nodes=" as *u8)
247 var cnt: i64 = 0
248 var e: i64 = 0
249 while e < ne {
250 var other: i64 = 0
251 if vx_eq(ef[e] as *u8, id) == 1 { other = et[e] }
252 if vx_eq(et[e] as *u8, id) == 1 { other = ef[e] }
253 if other != 0 {
254 var dup: i64 = 0
255 var k: i64 = 0
256 while k < nse { if vx_eq(seen[k] as *u8, other as *u8) == 1 { dup = 1; k = nse } k = k + 1 }
257 if dup == 0 { if nse < K_MAGIC_2048 { seen[nse] = other; nse = nse + 1 } if cnt > 0 { o = vx_cat(rep, o, "," as *u8) } o = vx_cat(rep, o, other as *u8); cnt = cnt + 1 }
258 }
259 e = e + 1
260 }
261 if cnt == 0 { o = vx_cat(rep, o, "-" as *u8) }
262 o = vx_cat(rep, o, " count=" as *u8); o = vx_catn(rep, o, cnt); o = vx_cat(rep, o, "\n" as *u8)
263 sys_write(1, rep, o)
264 return 0
265}
266
267// ---------------- PATH (BFS shortest intro path) ----------------
268func vx_cmd_path(argc: i64, argv: *i64) -> i64 {
269 if argc < 5 { vx_p("VIZSLA-GRAPH path needs <prefix> <from> <to> -- fail loud\n" as *u8); return 1 }
270 let prefix: *u8 = argv[2] as *u8
271 let from: *u8 = argv[3] as *u8
272 let to: *u8 = argv[4] as *u8
273 let ef: *i64 = sys_mmap(8 * K_MAGIC_4096) as *i64
274 let et: *i64 = sys_mmap(8 * K_MAGIC_4096) as *i64
275 let ne: i64 = vx_collect_edges(prefix, ef, et)
276
277 // intern nodes; build edge index pairs
278 let nid: *i64 = sys_mmap(8 * K_MAGIC_2048) as *i64
279 let nnp: *i64 = sys_mmap(16) as *i64
280 nnp[0] = 0
281 let eu: *i64 = sys_mmap(8 * K_MAGIC_4096) as *i64
282 let ev: *i64 = sys_mmap(8 * K_MAGIC_4096) as *i64
283 var e: i64 = 0
284 while e < ne { eu[e] = vx_intern(nid, nnp, ef[e] as *u8); ev[e] = vx_intern(nid, nnp, et[e] as *u8); e = e + 1 }
285 let si: i64 = vx_intern(nid, nnp, from)
286 let ti: i64 = vx_intern(nid, nnp, to)
287 let nn: i64 = nnp[0]
288
289 // BFS
290 let dist: *i64 = sys_mmap(8 * K_MAGIC_2048) as *i64
291 let par: *i64 = sys_mmap(8 * K_MAGIC_2048) as *i64
292 var z: i64 = 0
293 while z < nn { dist[z] = 0 - 1; par[z] = 0 - 1; z = z + 1 }
294 let q: *i64 = sys_mmap(8 * K_MAGIC_2048) as *i64
295 var qh: i64 = 0
296 var qt: i64 = 0
297 dist[si] = 0; q[qt] = si; qt = qt + 1
298 var found: i64 = 0
299 while qh < qt {
300 let u: i64 = q[qh]; qh = qh + 1
301 if u == ti { found = 1; qh = qt }
302 else {
303 var k: i64 = 0
304 while k < ne {
305 var v: i64 = 0 - 1
306 if eu[k] == u { v = ev[k] }
307 if ev[k] == u { v = eu[k] }
308 if v >= 0 { if dist[v] < 0 { dist[v] = dist[u] + 1; par[v] = u; q[qt] = v; qt = qt + 1 } }
309 k = k + 1
310 }
311 }
312 }
313
314 let rep: *u8 = sys_mmap(K_MAGIC_65536)
315 var o: i64 = 0
316 if dist[ti] < 0 {
317 o = vx_cat(rep, o, "VIZSLA-GRAPH-PATH from=" as *u8); o = vx_cat(rep, o, from)
318 o = vx_cat(rep, o, " to=" as *u8); o = vx_cat(rep, o, to)
319 o = vx_cat(rep, o, " length=-1 via=NONE path=NONE\n" as *u8)
320 sys_write(1, rep, o)
321 return 0
322 }
323 // reconstruct path ti -> si via parents, then reverse
324 let stack: *i64 = sys_mmap(8 * K_MAGIC_2048) as *i64
325 var sp: i64 = 0
326 var cur: i64 = ti
327 var go: i64 = 1
328 while go == 1 { stack[sp] = cur; sp = sp + 1; if cur == si { go = 0 } else { cur = par[cur] } }
329 let plen: i64 = dist[ti]
330 o = vx_cat(rep, o, "VIZSLA-GRAPH-PATH from=" as *u8); o = vx_cat(rep, o, from)
331 o = vx_cat(rep, o, " to=" as *u8); o = vx_cat(rep, o, to)
332 o = vx_cat(rep, o, " length=" as *u8); o = vx_catn(rep, o, plen)
333 // via = intermediates (exclude endpoints)
334 o = vx_cat(rep, o, " via=" as *u8)
335 var vc: i64 = 0
336 var i: i64 = sp - 2
337 while i >= 1 { if vc > 0 { o = vx_cat(rep, o, "," as *u8) } o = vx_cat(rep, o, nid[stack[i]] as *u8); vc = vc + 1; i = i - 1 }
338 if vc == 0 { o = vx_cat(rep, o, "-" as *u8) }
339 // full path from>..>to
340 o = vx_cat(rep, o, " path=" as *u8)
341 var p: i64 = sp - 1
342 var first: i64 = 1
343 while p >= 0 { if first == 0 { o = vx_cat(rep, o, ">" as *u8) } o = vx_cat(rep, o, nid[stack[p]] as *u8); first = 0; p = p - 1 }
344 o = vx_cat(rep, o, "\n" as *u8)
345 sys_write(1, rep, o)
346 return 0
347}
348
349func main(argc: i64, argv: *i64) -> i64 {
350 if argc < 2 { vx_p("VIZSLA-GRAPH usage: link|neighbors|path -- fail loud\n" as *u8); return 1 }
351 let cmd: *u8 = argv[1] as *u8
352 if vx_eq(cmd, "link" as *u8) == 1 { return vx_cmd_link(argc, argv) }
353 if vx_eq(cmd, "neighbors" as *u8) == 1 { return vx_cmd_neighbors(argc, argv) }
354 if vx_eq(cmd, "path" as *u8) == 1 { return vx_cmd_path(argc, argv) }
355 vx_p("VIZSLA-GRAPH unknown command (link|neighbors|path) -- fail loud\n" as *u8)
356 return 1
357}