nx_share.nx source
↩ module page · 303 lines · 14366 B
1// nx_share.nx -- SHARING ring of the Relationship OS. Operator 2026-07-09: "share jobs or resources or all that
2// ... how a shared item can be stored and used and grow that persons opportunities."
3// SHARE-ITEM : a typed shared item -- job | resource | intro -- from one person in the graph to another,
4// PERSISTED on the sovereign append-only seg_store ("shr:"+cid canon records: itype,title,from,to,
5// note,reqs). Stored = never lost, tamper-evident, on your hardware.
6// SHARE-FIT : the GROWTH wire -- a shared JOB carries its requirement skill-csv; on receipt the recipient's
7// profile runs through the career matcher (nx_career match_score + skill_gap), so the share lands
8// WITH "your match: N/100" + the concrete gap plan. A share is not a link; it is a scored
9// opportunity + what to do about it.
10// SHARE-USE : the usage lifecycle (seen -> used -> outcome), additive "usg:" records -- what happened to the
11// share is part of the history.
12// SHARE-ATTR : warm-channel attribution -- per sharer: shared vs used counts -> strength permil. Measures WHOSE
13// shares actually move you (the nx_vizsla_recruiter warm-beats-cold doctrine, quantified).
14// Composes nx_career (matcher) + canon_cid + seg_store. Argless = selftest gate. license_tier: ORIGINAL expect_exit: 0
15import "nx_career.nx"
16import "nx_canon_cid.nx"
17import "nx_seg_store.nx"
18const K_MAGIC_4096: i64 = 4096
19const K_MAGIC_2048: i64 = 2048
20
21func sh_kmemeq(b: *u8, off: i64, n: i64, s: *u8) -> i64 {
22 if slen(s) != n { return 0 }
23 var i: i64 = 0
24 while i < n { if b[off + i] != s[i] { return 0 } i = i + 1 }
25 return 1
26}
27func sh_iskind(b: *u8, koff: i64, kl: i64, pfx: *u8) -> i64 {
28 if kl <= 4 { return 0 }
29 return sh_kmemeq(b, koff, 4, pfx)
30}
31func sh_field(rec: *u8, rl: i64, want: *u8, out: *u8, cap: i64) -> i64 {
32 if rl < 8 { return 0 }
33 let nf: i64 = ss_r32(rec, 4)
34 var off: i64 = 8
35 var fi: i64 = 0
36 while fi < nf {
37 if off + 8 > rl { return 0 }
38 let kl: i64 = ss_r32(rec, off)
39 let koff: i64 = off + 4
40 let vl: i64 = ss_r32(rec, koff + kl)
41 let voff: i64 = koff + kl + 4
42 if sh_kmemeq(rec, koff, kl, want) == 1 {
43 var t: i64 = 0
44 while t < vl { if t < cap - 1 { out[t] = rec[voff + t] } t = t + 1 }
45 if t > cap - 1 { t = cap - 1 }
46 out[t] = 0 as u8
47 return 1
48 }
49 off = voff + vl
50 fi = fi + 1
51 }
52 return 0
53}
54func sh_itype_ok(t: *u8) -> i64 {
55 if seq(t, "job" as *u8) == 1 { return 1 }
56 if seq(t, "resource" as *u8) == 1 { return 1 }
57 if seq(t, "intro" as *u8) == 1 { return 1 }
58 return 0
59}
60func sh_status_ok(s: *u8) -> i64 {
61 if seq(s, "seen" as *u8) == 1 { return 1 }
62 if seq(s, "used" as *u8) == 1 { return 1 }
63 if seq(s, "outcome" as *u8) == 1 { return 1 }
64 return 0
65}
66// save a share; a = [itype, title, from, to, note, reqs-or-empty]. VALIDATED (unknown itype = -1, nothing added)
67func sh_save(w: *i64, a: *i64) -> i64 {
68 if sh_itype_ok(a[0] as *u8) == 0 { p("SHARE-ITEM unknown type -- fail loud\n" as *u8); return 0 - 1 }
69 let keys: *i64 = sys_mmap(8 * 8) as *i64
70 let vals: *i64 = sys_mmap(8 * 8) as *i64
71 keys[0]="kind" as *u8 as i64; keys[1]="itype" as *u8 as i64; keys[2]="title" as *u8 as i64
72 keys[3]="from" as *u8 as i64; keys[4]="to" as *u8 as i64; keys[5]="note" as *u8 as i64; keys[6]="reqs" as *u8 as i64
73 vals[0]="shr" as *u8 as i64; vals[1]=a[0]; vals[2]=a[1]; vals[3]=a[2]; vals[4]=a[3]; vals[5]=a[4]; vals[6]=a[5]
74 let enc: *u8 = sys_mmap(K_MAGIC_4096)
75 let el: i64 = canon_encode(keys, vals, 7, enc)
76 let cid: *u8 = sys_mmap(96)
77 cid_of(enc, el, cid)
78 let key: *u8 = sys_mmap(128)
79 var ko: i64 = 0
80 ko = ss_cat(key, ko, "shr:" as *u8)
81 ko = ss_cat(key, ko, cid)
82 key[ko] = 0 as u8
83 return ss_add(w, 1, key, enc, el)
84}
85// record what happened to a share (join key = title + to). VALIDATED status.
86func sh_use(w: *i64, title: *u8, to: *u8, status: *u8) -> i64 {
87 if sh_status_ok(status) == 0 { p("SHARE-USE unknown status -- fail loud\n" as *u8); return 0 - 1 }
88 let keys: *i64 = sys_mmap(8 * 8) as *i64
89 let vals: *i64 = sys_mmap(8 * 8) as *i64
90 keys[0]="kind" as *u8 as i64; keys[1]="title" as *u8 as i64; keys[2]="to" as *u8 as i64; keys[3]="status" as *u8 as i64
91 vals[0]="usg" as *u8 as i64; vals[1]=title as i64; vals[2]=to as i64; vals[3]=status as i64
92 let enc: *u8 = sys_mmap(K_MAGIC_2048)
93 let el: i64 = canon_encode(keys, vals, 4, enc)
94 let cid: *u8 = sys_mmap(96)
95 cid_of(enc, el, cid)
96 let key: *u8 = sys_mmap(128)
97 var ko: i64 = 0
98 ko = ss_cat(key, ko, "usg:" as *u8)
99 ko = ss_cat(key, ko, cid)
100 key[ko] = 0 as u8
101 return ss_add(w, 1, key, enc, el)
102}
103// the recipient's inbox: every share to `person`, each JOB scored against `profile` ON RECEIPT (fitp[0] = last fit,
104// gapp[0] = last gap count -- the gate's oracles). returns item count.
105func sh_inbox(prefix: *u8, person: *u8, profile: *u8, fitp: *i64, gapp: *i64) -> i64 {
106 let segp: *i64 = sys_mmap(16) as *i64
107 let ns: i64 = ss_manifest_dyn(prefix, segp) // uncapped: sees the WHOLE store
108 let segs: *i64 = segp[0] as *i64
109 let f1: *u8 = sys_mmap(128)
110 let f2: *u8 = sys_mmap(256)
111 let f3: *u8 = sys_mmap(256)
112 let f4: *u8 = sys_mmap(256)
113 let f5: *u8 = sys_mmap(512)
114 let f6: *u8 = sys_mmap(512)
115 var cnt: i64 = 0
116 var s: i64 = 0
117 while s < ns {
118 let path: *u8 = sys_mmap(512)
119 var po: i64 = 0
120 po = ss_cat(path, po, prefix)
121 po = ss_cat(path, po, segs[s] as *u8)
122 po = ss_cat(path, po, ".docs" as *u8)
123 path[po] = 0 as u8
124 let szp: *i64 = sys_mmap(16) as *i64
125 let b: *u8 = ss_readall(path, szp)
126 let sz: i64 = szp[0]
127 var j: i64 = 0
128 while j + 9 <= sz {
129 let kl: i64 = ss_r32(b, j + 1)
130 let koff: i64 = j + 5
131 let vl: i64 = ss_r32(b, koff + kl)
132 let voff: i64 = koff + kl + 4
133 if b[j] == 1 {
134 if sh_iskind(b, koff, kl, "shr:" as *u8) == 1 {
135 let rec: *u8 = (b as i64 + voff) as *u8
136 sh_field(rec, vl, "to" as *u8, f4, 256)
137 if seq(f4, person) == 1 {
138 sh_field(rec, vl, "itype" as *u8, f1, 128)
139 sh_field(rec, vl, "title" as *u8, f2, 256)
140 sh_field(rec, vl, "from" as *u8, f3, 256)
141 sh_field(rec, vl, "note" as *u8, f5, 512)
142 sh_field(rec, vl, "reqs" as *u8, f6, 512)
143 cnt = cnt + 1
144 p(" SHARE-ITEM " as *u8); p(f1); p(" from=" as *u8); p(f3); p(" title=" as *u8); p(f2); p(" note=" as *u8); p(f5); p("\n" as *u8)
145 if seq(f1, "job" as *u8) == 1 {
146 if f6[0] != (0 as u8) {
147 // SHARE-FIT: score the shared job against the recipient's profile, gap plan included
148 let nb: *u8 = sys_mmap(64 * 16)
149 let nb2: *u8 = sys_mmap(64 * 16)
150 let hn: *i64 = sys_mmap(8 * 16) as *i64
151 let hl: *i64 = sys_mmap(8 * 16) as *i64
152 let rn: *i64 = sys_mmap(8 * 16) as *i64
153 let rl: *i64 = sys_mmap(8 * 16) as *i64
154 let hc: i64 = skills_parse(profile, hn, hl, 16, nb)
155 let rc: i64 = skills_parse(f6, rn, rl, 16, nb2)
156 let fit: i64 = match_score(hn, hl, hc, rn, rl, rc)
157 p(" SHARE-FIT your-match=" as *u8); pn(fit); p("/100 -- gap plan:\n" as *u8)
158 let g: i64 = skill_gap(hn, hl, hc, rn, rl, rc)
159 fitp[0] = fit
160 gapp[0] = g
161 }
162 }
163 }
164 }
165 }
166 j = voff + vl
167 }
168 s = s + 1
169 }
170 return cnt
171}
172// warm-channel attribution for one sharer: outp[0]=shared, outp[1]=used; returns strength permil (used*1000/shared)
173func sh_attribution(prefix: *u8, sharer: *u8, outp: *i64) -> i64 {
174 outp[0] = 0
175 outp[1] = 0
176 let segp: *i64 = sys_mmap(16) as *i64
177 let ns: i64 = ss_manifest_dyn(prefix, segp) // uncapped: sees the WHOLE store
178 let segs: *i64 = segp[0] as *i64
179 let f2: *u8 = sys_mmap(256)
180 let f3: *u8 = sys_mmap(256)
181 let st: *u8 = sys_mmap(128)
182 // collect this sharer's titles (bounded 64)
183 let titles: *i64 = sys_mmap(8 * 64) as *i64
184 var nt: i64 = 0
185 var s: i64 = 0
186 while s < ns {
187 let path: *u8 = sys_mmap(512)
188 var po: i64 = 0
189 po = ss_cat(path, po, prefix)
190 po = ss_cat(path, po, segs[s] as *u8)
191 po = ss_cat(path, po, ".docs" as *u8)
192 path[po] = 0 as u8
193 let szp: *i64 = sys_mmap(16) as *i64
194 let b: *u8 = ss_readall(path, szp)
195 let sz: i64 = szp[0]
196 var j: i64 = 0
197 while j + 9 <= sz {
198 let kl: i64 = ss_r32(b, j + 1)
199 let koff: i64 = j + 5
200 let vl: i64 = ss_r32(b, koff + kl)
201 let voff: i64 = koff + kl + 4
202 if b[j] == 1 {
203 let rec: *u8 = (b as i64 + voff) as *u8
204 if sh_iskind(b, koff, kl, "shr:" as *u8) == 1 {
205 sh_field(rec, vl, "from" as *u8, f3, 256)
206 if seq(f3, sharer) == 1 {
207 outp[0] = outp[0] + 1
208 sh_field(rec, vl, "title" as *u8, f2, 256)
209 if nt < 64 {
210 let dup: *u8 = sys_mmap(slen(f2) + 2)
211 var q: i64 = 0
212 while f2[q] != (0 as u8) { dup[q] = f2[q]; q = q + 1 }
213 dup[q] = 0 as u8
214 titles[nt] = dup as i64
215 nt = nt + 1
216 }
217 }
218 }
219 if sh_iskind(b, koff, kl, "usg:" as *u8) == 1 {
220 sh_field(rec, vl, "status" as *u8, st, 128)
221 if seq(st, "used" as *u8) == 1 {
222 sh_field(rec, vl, "title" as *u8, f2, 256)
223 var t: i64 = 0
224 while t < nt { if seq(titles[t] as *u8, f2) == 1 { outp[1] = outp[1] + 1; t = nt } else { t = t + 1 } }
225 }
226 }
227 }
228 j = voff + vl
229 }
230 s = s + 1
231 }
232 if outp[0] == 0 { return 0 }
233 return (outp[1] * 1000) / outp[0]
234}
235
236func main() -> i64 {
237 p("=== NX-SHARE SELFTEST (SHARE-ITEM stored -> SHARE-FIT grows opportunities -> SHARE-USE -> SHARE-ATTR) ===\n" as *u8)
238 var ok: i64 = 1
239 let mt: *u8 = sys_mmap(4)
240 mt[0] = 0 as u8
241 let prefix: *u8 = sys_mmap(128)
242 var po: i64 = 0
243 po = ss_cat(prefix, po, "/tmp/share_" as *u8)
244 po = ss_catn(prefix, po, sys_now_us())
245 po = ss_cat(prefix, po, "_" as *u8)
246 prefix[po] = 0 as u8
247
248 // Marcus (recruiter) shares a JOB with its requirements; Dana shares a resource
249 let w: *i64 = ss_begin()
250 let a1: *i64 = sys_mmap(8 * 8) as *i64
251 a1[0]="job" as *u8 as i64; a1[1]="Sales Director at Riverside" as *u8 as i64; a1[2]="Marcus" as *u8 as i64
252 a1[3]="Emma" as *u8 as i64; a1[4]="They want someone exactly like you in two years" as *u8 as i64
253 a1[5]="sales:5,leadership:4,forecasting:3" as *u8 as i64
254 if sh_save(w, a1) != 0 { ok = 0 }
255 let a2: *i64 = sys_mmap(8 * 8) as *i64
256 a2[0]="resource" as *u8 as i64; a2[1]="Negotiation masterclass notes" as *u8 as i64; a2[2]="Dana" as *u8 as i64
257 a2[3]="Emma" as *u8 as i64; a2[4]="Read chapter 3 before your review" as *u8 as i64; a2[5]=mt as i64
258 if sh_save(w, a2) != 0 { ok = 0 }
259 if ss_commit(prefix, w, sys_now_us()) != 0 { p("commit1 FAILED -- fail loud\n" as *u8); return 1 }
260
261 // Emma's inbox: shares land WITH the fit + gap plan (opportunities grown, measurably)
262 p("-- Emma's share inbox (profile sales:4,crm:3,writing:5) --\n" as *u8)
263 let fitp: *i64 = sys_mmap(16) as *i64
264 let gapp: *i64 = sys_mmap(16) as *i64
265 fitp[0] = 0 - 1
266 gapp[0] = 0 - 1
267 let inb: i64 = sh_inbox(prefix, "Emma" as *u8, "sales:4,crm:3,writing:5" as *u8, fitp, gapp)
268 if inb != 2 { ok = 0 }
269 if fitp[0] != 26 { ok = 0 }
270 if gapp[0] != 3 { ok = 0 }
271
272 // Emma USES the shared job (applies through Marcus)
273 let w2: *i64 = ss_begin()
274 if sh_use(w2, "Sales Director at Riverside" as *u8, "Emma" as *u8, "used" as *u8) != 0 { ok = 0 }
275 if ss_commit(prefix, w2, sys_now_us()) != 0 { p("commit2 FAILED -- fail loud\n" as *u8); return 1 }
276
277 // attribution: Marcus's shares get USED (strength 1000), Dana's not yet (0)
278 let at: *i64 = sys_mmap(8 * 4) as *i64
279 let sm: i64 = sh_attribution(prefix, "Marcus" as *u8, at)
280 p(" SHARE-ATTR Marcus shared=" as *u8); pn(at[0]); p(" used=" as *u8); pn(at[1]); p(" strength=" as *u8); pn(sm); p(" permil\n" as *u8)
281 if at[0] != 1 { ok = 0 }
282 if at[1] != 1 { ok = 0 }
283 if sm != 1000 { ok = 0 }
284 let sd: i64 = sh_attribution(prefix, "Dana" as *u8, at)
285 p(" SHARE-ATTR Dana shared=" as *u8); pn(at[0]); p(" used=" as *u8); pn(at[1]); p(" strength=" as *u8); pn(sd); p(" permil\n" as *u8)
286 if at[0] != 1 { ok = 0 }
287 if at[1] != 0 { ok = 0 }
288 if sd != 0 { ok = 0 }
289
290 // loud-fail: unknown item type / unknown status never land
291 let w3: *i64 = ss_begin()
292 let ab: *i64 = sys_mmap(8 * 8) as *i64
293 ab[0]="gossip" as *u8 as i64; ab[1]="X" as *u8 as i64; ab[2]="Y" as *u8 as i64; ab[3]="Z" as *u8 as i64; ab[4]=mt as i64; ab[5]=mt as i64
294 let b1: i64 = sh_save(w3, ab)
295 let b2: i64 = sh_use(w3, "X" as *u8, "Y" as *u8, "ghosted" as *u8)
296 if b1 != (0 - 1) { ok = 0 }
297 if b2 != (0 - 1) { ok = 0 }
298
299 p("NX-SHARE-SELFTEST inbox=" as *u8); pn(inb); p(" fit=" as *u8); pn(fitp[0]); p(" gaps=" as *u8); pn(gapp[0]); p(" " as *u8)
300 if ok == 1 { p("verdict=GREEN (shared items stored + scored on receipt + usage tracked + warm channels attributed)\n" as *u8); return 0 }
301 p("verdict=RED\n" as *u8)
302 return 1
303}