code wiki / (root) / nx_share_rec.nx

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}