code wiki / _hdl_build / nx_hosting_pm.nx
nx_hosting_pm.nx source
↩ module page · 94 lines · 6047 B
1// nx_hosting_pm.nx -- the PM runs the "Sovereign S-class Hosting Platform" project and RE-PRIORITIZES
2// as work completes (operator: "work with the pm push this work"). Now done-aware + full Cost-of-Delay
3// (hardware/software/user/time-criticality) via the team's decision matrix, not just value/effort.
4// DONE items drop out; dep-gated items unblock when their deps complete; blocked-by-gap -> TUTOR.
5// license_tier: ORIGINAL
6import "nx_pm_decision_matrix.nx"
7import "nx_pm_review_log.nx"
8import "nx_syscalls.nx"
9
10func hp_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
11func hp_num(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=48+(m%10);m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 }
12
13func main() -> i64 {
14 hp_puts("=== PM RE-PRIORITIZES: Sovereign S-class Hosting Platform (after #1,#3 done) ===\n" as *u8)
15 hp_puts(" full Cost-of-Delay (hw/sw/user/time-criticality) / effort -- team decision matrix\n\n" as *u8)
16 let N: i64 = 5
17 let nm: *i64 = sys_mmap(8*N) as *i64
18 let done: *i64 = sys_mmap(8*N) as *i64
19 let ready:*i64 = sys_mmap(8*N) as *i64
20 let hw: *i64 = sys_mmap(8*N) as *i64
21 let sw: *i64 = sys_mmap(8*N) as *i64
22 let usr: *i64 = sys_mmap(8*N) as *i64
23 let tcr: *i64 = sys_mmap(8*N) as *i64
24 let eff: *i64 = sys_mmap(8*N) as *i64
25
26 nm[0]="sys_renameat (atomic publish)" as *u8 as i64; done[0]=1; ready[0]=0; hw[0]=0;sw[0]=2;usr[0]=1;tcr[0]=2; eff[0]=1
27 nm[1]="source-hash build cache (compile S-class)" as *u8 as i64; done[1]=0; ready[1]=1; hw[1]=0;sw[1]=3;usr[1]=0;tcr[1]=2; eff[1]=3
28 nm[2]="nx_host_router (multi-site + hot serve)" as *u8 as i64; done[2]=1; ready[2]=0; hw[2]=1;sw[2]=2;usr[2]=2;tcr[2]=3; eff[2]=5
29 // #3 integrate -- DEPS (#0 renameat + #2 router) now DONE -> UNBLOCKED. High user value + time-critical
30 // (this is the operator's visible deliverable: andelinwest.com live + multi-site hot-load).
31 nm[3]="integrate router into TLS daemon -> SITE LIVE" as *u8 as i64; done[3]=0; ready[3]=1; hw[3]=1;sw[3]=2;usr[3]=5;tcr[3]=8; eff[3]=4
32 // #4 supervisor -- still gap-blocked (sendmsg/recvmsg+SCM_RIGHTS absent) -> TUTOR
33 nm[4]="FD-passing supervisor (zero-downtime swap)" as *u8 as i64; done[4]=0; ready[4]=0; hw[4]=1;sw[4]=2;usr[4]=3;tcr[4]=3; eff[4]=8
34
35 // WSJF = CoD/effort for READY & not-done; equal MCDA weights (1,1,1,1) provisional.
36 let wsjf: *i64 = sys_mmap(8*N) as *i64
37 var i: i64 = 0
38 while i < N {
39 if done[i]==0 { if ready[i]==1 {
40 let cod: i64 = dm_cost_of_delay(hw[i],sw[i],usr[i],tcr[i],1,1,1,1)
41 wsjf[i] = dm_wsjf(cod, eff[i])
42 } else { wsjf[i]=0 } } else { wsjf[i]=0 }
43 i = i + 1
44 }
45
46 // mark done items as already-picked so dm_next_pick skips them
47 let picked: *i64 = sys_mmap(8*N) as *i64; let order: *i64 = sys_mmap(8*N) as *i64
48 i = 0; while i < N { picked[i]=done[i]; i=i+1 }
49
50 let fd: i64 = sys_openat_append("/tmp/nishi_pm_plan.log" as *u8, 0x1a4)
51 pm_w(fd, "\n# HOSTING re-prioritization 2026-06-06 (after #1,#3 DONE; CoD incl time-criticality)\n" as *u8)
52 hp_puts(" DONE: sys_renameat (gate PASS), nx_host_router (9/9 incl hot-swap)\n\n" as *u8)
53 hp_puts(" READY queue (WSJF = CoD[hw+sw+user+timecrit]/effort):\n" as *u8)
54 var rank: i64 = 0; var remaining: i64 = N
55 while rank < N {
56 let pick: i64 = dm_next_pick(wsjf, picked, ready, N)
57 if pick < 0 { rank = N } else {
58 picked[pick]=1; order[rank]=pick
59 hp_puts(" #" as *u8); hp_num(rank+1); hp_puts(" wsjf=" as *u8); hp_num(wsjf[pick]); hp_puts(" " as *u8); hp_puts(nm[pick] as *u8); hp_puts("\n" as *u8)
60 pm_w(fd, "READY " as *u8); pm_w(fd, nm[pick] as *u8); if rank==0 { pm_w(fd, " status=WORKING-NEXT\n" as *u8) } else { pm_w(fd, " status=QUEUED\n" as *u8) }
61 rank = rank + 1
62 }
63 }
64
65 hp_puts("\n BLOCKED -> TUTOR:\n" as *u8)
66 let pm: i64 = pm_open("/tmp/nishi_pm_review.log" as *u8)
67 i = 0; while i < N { if done[i]==0 { if ready[i]==0 {
68 hp_puts(" - " as *u8); hp_puts(nm[i] as *u8); hp_puts(" (syscall gap: sendmsg/recvmsg+SCM_RIGHTS)\n" as *u8)
69 pm_flag(pm, "TUTOR" as *u8, "hosting/blocked" as *u8, "NEEDS-DECISION" as *u8, nm[i] as *u8, "FD-passing needs sendmsg/recvmsg+cmsg syscalls (absent) + novel logic" as *u8)
70 } } i = i + 1 }
71 sys_close(fd)
72
73 // top pick = what the team works next
74 let top: i64 = dm_next_pick(wsjf, sys_mmap(8*N) as *i64, ready, N)
75 // (rebuild a clean not-picked array to read the true top -- done items have wsjf 0 so won't win)
76 var best: i64 = 0-1; var bs: i64 = 0-1; i=0
77 while i<N { if done[i]==0 { if ready[i]==1 { if wsjf[i]>bs { bs=wsjf[i]; best=i } } } i=i+1 }
78 pm_flag(pm, "BEGIN" as *u8, "hosting/work" as *u8, "OK" as *u8, "team works next hosting assignment" as *u8, nm[best] as *u8)
79 sys_close(pm)
80 hp_puts("\n >>> TEAM WORKS NEXT: " as *u8); hp_puts(nm[best] as *u8); hp_puts("\n" as *u8)
81
82 // self-check: integrate (#3) now outranks the cache (#1) on time-criticality, and is the top pick
83 let r: *i64 = sys_mmap(8*8) as *i64
84 r[0]=0; if best==3 { r[0]=1 } // integrate is the top pick (time-critical deliverable)
85 r[1]=0; if wsjf[3] > wsjf[1] { r[1]=1 } // integrate outranks cache once time-crit is counted
86 r[2]=0; if ready[3]==1 { r[2]=1 } // integrate unblocked (deps done)
87 r[3]=0; if wsjf[4]==0 { r[3]=1 } // supervisor still unranked (gap-blocked)
88 r[4]=0; if wsjf[0]==0 { if wsjf[2]==0 { r[4]=1 } } // done items not re-ranked
89 var pass: i64 = 0; var j: i64 = 0
90 while j < 5 { pass = pass + r[j]; j = j + 1 }
91 hp_puts("---- PM re-rank self-check passed " as *u8); hp_num(pass); hp_puts("/5 ----\n" as *u8)
92 if pass == 5 { sys_exit(0); return 0 }
93 hp_puts(" FAIL\n" as *u8); sys_exit(1); return 1
94}