nx_share_rec.nx source
↩ module page · 105 lines · 4912 B
1// nx_share_rec.nx -- WHAT-TO-SHARE RECOMMENDATION (sharing ring rung 2; the number-one 2025/26 sharing-frontier
2// wave, gapmap momentum 205). Inverts SHARE-FIT: given an ITEM (a job with requirement skills), rank WHO in the
3// graph it fits BEFORE sharing -- so a share goes where it actually grows someone, not into the void.
4// SHARE-REC: for every person in the roster compute match_score (nx_career) -> rank by fit -> tier each as
5// STRONG / STRETCH / SKIP. Tier thresholds are ARGUMENTS (law: no hardcoded caps) -- the caller (UI/config)
6// owns them. Deterministic ranking (selection sort, ties keep roster order). Empty roster / empty reqs = LOUD.
7// Composes the nx_career pure core. Argless = selftest gate. license_tier: ORIGINAL expect_exit: 0
8import "nx_career.nx"
9
10// rank roster (names[i], profile csv[i]) against reqs; writes order[] (indices best-first) + scores[]; returns n or -1 loud
11func sr_rank(reqs: *u8, names: *i64, profs: *i64, n: i64, order: *i64, scores: *i64) -> i64 {
12 if n <= 0 { p("SHARE-REC empty roster -- fail loud\n" as *u8); return 0 - 1 }
13 if reqs[0] == (0 as u8) { p("SHARE-REC empty requirements -- fail loud\n" as *u8); return 0 - 1 }
14 let nb: *u8 = sys_mmap(64 * 16)
15 let nb2: *u8 = sys_mmap(64 * 16)
16 let rn: *i64 = sys_mmap(8 * 16) as *i64
17 let rl: *i64 = sys_mmap(8 * 16) as *i64
18 let rc: i64 = skills_parse(reqs, rn, rl, 16, nb2)
19 var i: i64 = 0
20 while i < n {
21 let hn: *i64 = sys_mmap(8 * 16) as *i64
22 let hl: *i64 = sys_mmap(8 * 16) as *i64
23 let hc: i64 = skills_parse(profs[i] as *u8, hn, hl, 16, nb)
24 scores[i] = match_score(hn, hl, hc, rn, rl, rc)
25 order[i] = i
26 i = i + 1
27 }
28 // selection sort best-first (stable for ties by taking the FIRST max)
29 var a: i64 = 0
30 while a < n {
31 var best: i64 = a
32 var b: i64 = a + 1
33 while b < n {
34 if scores[order[b]] > scores[order[best]] { best = b }
35 b = b + 1
36 }
37 if best != a {
38 let t: i64 = order[a]
39 order[a] = order[best]
40 order[best] = t
41 }
42 a = a + 1
43 }
44 return n
45}
46func sr_tier(score: i64, strong_min: i64, stretch_min: i64) -> *u8 {
47 if score >= strong_min { return "STRONG" as *u8 }
48 if score >= stretch_min { return "STRETCH" as *u8 }
49 return "SKIP" as *u8
50}
51
52func main() -> i64 {
53 p("=== NX-SHARE-REC SELFTEST (SHARE-REC: rank WHO an item fits, before sharing) ===\n" as *u8)
54 var ok: i64 = 1
55 let mt: *u8 = sys_mmap(4)
56 mt[0] = 0 as u8
57 // the item: Sales Director requirements
58 let reqs: *u8 = "sales:5,leadership:4,forecasting:3" as *u8
59 // the roster (from the graph / skills profiles)
60 let names: *i64 = sys_mmap(8 * 8) as *i64
61 let profs: *i64 = sys_mmap(8 * 8) as *i64
62 names[0]="Emma" as *u8 as i64; profs[0]="sales:4,crm:3,writing:5" as *u8 as i64
63 names[1]="Liam" as *u8 as i64; profs[1]="sales:5,leadership:4,forecasting:2" as *u8 as i64
64 names[2]="Ava" as *u8 as i64; profs[2]="writing:5,seo:4" as *u8 as i64
65 names[3]="Noah" as *u8 as i64; profs[3]="sales:3,leadership:2" as *u8 as i64
66 let order: *i64 = sys_mmap(8 * 8) as *i64
67 let scores: *i64 = sys_mmap(8 * 8) as *i64
68 let rn: i64 = sr_rank(reqs, names, profs, 4, order, scores)
69 if rn != 4 { ok = 0 }
70 p("-- recommend recipients for: Sales Director (thresholds strong=70 stretch=30, caller-owned) --\n" as *u8)
71 var i: i64 = 0
72 while i < 4 {
73 let idx: i64 = order[i]
74 p(" SHARE-REC rank=" as *u8); pn(i + 1)
75 p(" person=" as *u8); p(names[idx] as *u8)
76 p(" fit=" as *u8); pn(scores[idx])
77 p("/100 tier=" as *u8); p(sr_tier(scores[idx], 70, 30))
78 p("\n" as *u8)
79 i = i + 1
80 }
81 // oracle: Liam 88 > Noah 36 > Emma 26 > Ava 0, tiers STRONG/STRETCH/SKIP/SKIP
82 if order[0] != 1 { ok = 0 }
83 if order[1] != 3 { ok = 0 }
84 if order[2] != 0 { ok = 0 }
85 if order[3] != 2 { ok = 0 }
86 if scores[1] != 88 { ok = 0 }
87 if scores[3] != 36 { ok = 0 }
88 if scores[0] != 26 { ok = 0 }
89 if scores[2] != 0 { ok = 0 }
90 if seq(sr_tier(88, 70, 30), "STRONG" as *u8) != 1 { ok = 0 }
91 if seq(sr_tier(36, 70, 30), "STRETCH" as *u8) != 1 { ok = 0 }
92 if seq(sr_tier(26, 70, 30), "SKIP" as *u8) != 1 { ok = 0 }
93 // thresholds are caller-owned, not baked: a different bar re-tiers the SAME score
94 if seq(sr_tier(36, 70, 40), "SKIP" as *u8) != 1 { ok = 0 }
95 // loud-fail
96 let e1: i64 = sr_rank(reqs, names, profs, 0, order, scores)
97 let e2: i64 = sr_rank(mt, names, profs, 4, order, scores)
98 if e1 != (0 - 1) { ok = 0 }
99 if e2 != (0 - 1) { ok = 0 }
100
101 p("NX-SHARE-REC-SELFTEST ranked=4 best=Liam(88) " as *u8)
102 if ok == 1 { p("verdict=GREEN (share goes where it grows someone: ranked, tiered, thresholds caller-owned)\n" as *u8); return 0 }
103 p("verdict=RED\n" as *u8)
104 return 1
105}