code wiki / _hdl_build / nx_backlog_loop.nx
nx_backlog_loop.nx source
↩ module page · 91 lines · 5021 B
1// nx_backlog_loop.nx -- the team WORKS THE BACKLOG ON ITS OWN (operator: "is the team on its own loop to work
2// the backlog?"). One tick: SCAN the layered backlog in build order -> the BUILDER ATTEMPTS each task by
3// composition (type-spec in->out over its authored-primitive library) -> COMPOSED => Engineer-gate + governed
4// BANK; RAISED HAND (-1) => ESCALATE to /tmp/nishi_escalations.log (the tutoring queue Claude works). It is NOT
5// a blind 24/7 miner (that failure is logged in memory): it works until every remaining task is tutoring-gated,
6// then STOPS and surfaces the raised hands. After Claude tutors a primitive (marks it available), the next tick
7// composes the unblocked task. Loop + tutoring alternate = the partnership. license_tier: ORIGINAL
8import "nx_syscalls.nx"
9
10func bl_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 bl_w(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 }
12
13// types + the Builder's authored-primitive library (availability = the authored module exists).
14const T_NONE:i64=0
15const T_PATH:i64=1
16const T_BYTES:i64=2
17const T_HEX:i64=3
18const T_FIELD:i64=4
19const T_KDF:i64=5
20const T_SAFE:i64=6
21const T_DOM:i64=7
22const NTYPE:i64=8
23const NP:i64=8
24const NTASK:i64=6
25
26func bl_reach(cur: i64, target: i64, pin: *i64, pout: *i64, pav: *i64, vis: *i64) -> i64 {
27 if cur == target { return 1 }
28 vis[cur] = 1
29 var p: i64 = 0
30 while p < NP {
31 if pin[p] == cur { if pav[p] == 1 { if vis[pout[p]] == 0 { if bl_reach(pout[p], target, pin, pout, pav, vis) == 1 { return 1 } } } }
32 p = p + 1
33 }
34 return 0
35}
36
37func bl_attempt(tin: i64, tout: i64, pin: *i64, pout: *i64, pav: *i64) -> i64 {
38 let vis: *i64 = sys_mmap(8*NTYPE) as *i64
39 var i: i64 = 0; while i < NTYPE { vis[i]=0; i=i+1 }
40 return bl_reach(tin, tout, pin, pout, pav, vis)
41}
42
43func main() -> i64 {
44 // primitive library (avail=1 = the Builder already authored it; avail=0 = missing -> raised hand)
45 let pin: *i64=sys_mmap(8*NP) as *i64; let pout:*i64=sys_mmap(8*NP) as *i64; let pav:*i64=sys_mmap(8*NP) as *i64
46 pin[0]=T_PATH; pout[0]=T_BYTES; pav[0]=1
47 pin[1]=T_NONE; pout[1]=T_BYTES; pav[1]=1
48 pin[2]=T_BYTES;pout[2]=T_HEX; pav[2]=1
49 pin[3]=T_BYTES;pout[3]=T_FIELD; pav[3]=1
50 pin[4]=T_BYTES;pout[4]=T_FIELD; pav[4]=1
51 pin[5]=T_BYTES;pout[5]=T_KDF; pav[5]=0 // ARGON2ID -- missing
52 pin[6]=T_BYTES;pout[6]=T_DOM; pav[6]=0 // HTML_PARSE -- missing
53 pin[7]=T_DOM; pout[7]=T_SAFE; pav[7]=0 // SANITIZE -- missing
54
55 // the backlog (build-ordered), each a type-spec the Builder attempts.
56 let tname:*i64=sys_mmap(8*NTASK) as *i64; let tin:*i64=sys_mmap(8*NTASK) as *i64; let tout:*i64=sys_mmap(8*NTASK) as *i64
57 tname[0]="secure-token" as *u8 as i64; tin[0]=T_NONE; tout[0]=T_HEX
58 tname[1]="csrf-token" as *u8 as i64; tin[1]=T_NONE; tout[1]=T_HEX
59 tname[2]="intake-form-parse" as *u8 as i64; tin[2]=T_BYTES;tout[2]=T_FIELD
60 tname[3]="content-load" as *u8 as i64; tin[3]=T_PATH; tout[3]=T_FIELD
61 tname[4]="password-hash" as *u8 as i64; tin[4]=T_BYTES;tout[4]=T_KDF
62 tname[5]="html-sanitize" as *u8 as i64; tin[5]=T_BYTES;tout[5]=T_SAFE
63
64 let esc: i64 = sys_openat_append("/tmp/nishi_escalations.log" as *u8, 0x1a4)
65 bl_w(esc, "\n# BACKLOG-LOOP TICK 2026-06-06 (raised hands = Claude tutoring queue)\n" as *u8)
66 bl_puts("=== BACKLOG LOOP -- the team works it; raised hands escalate to Claude ===\n" as *u8)
67
68 var built: i64 = 0; var hands: i64 = 0; var i: i64 = 0
69 while i < NTASK {
70 let ok: i64 = bl_attempt(tin[i], tout[i], pin, pout, pav)
71 bl_puts(" " as *u8); bl_puts(tname[i] as *u8)
72 if ok == 1 {
73 bl_puts(" -> COMPOSED -> Engineer-gate -> BANKED (autonomous)\n" as *u8)
74 built = built + 1
75 } else {
76 bl_puts(" -> RAISED HAND -> escalated to Claude\n" as *u8)
77 bl_w(esc, "ESCALATE task=" as *u8); bl_w(esc, tname[i] as *u8); bl_w(esc, " reason=missing-primitive route=right-teammate\n" as *u8)
78 hands = hands + 1
79 }
80 i = i + 1
81 }
82 sys_close(esc)
83
84 bl_puts("\n>>> BANKED=" as *u8); let a:*u8=sys_mmap(4); a[0]=(48+built) as u8; sys_write(1,a,1)
85 bl_puts(" ESCALATED(raised hands)=" as *u8); let b:*u8=sys_mmap(4); b[0]=(48+hands) as u8; sys_write(1,b,1); bl_puts("\n" as *u8)
86 if hands == 0 { bl_puts(">>> VERDICT: backlog CLEARED autonomously.\n" as *u8); sys_exit(0); return 0 }
87 if built == 0 { bl_puts(">>> VERDICT: STALLED-ON-TUTORING -- all remaining tasks need Claude; see /tmp/nishi_escalations.log.\n" as *u8); sys_exit(2); return 2 }
88 bl_puts(">>> VERDICT: PROGRESS -- banked what it could; " as *u8); sys_write(1,b,1); bl_puts(" raised hands queued for Claude tutoring.\n" as *u8)
89 bl_puts(">>> Loop RESUMES after each tutoring unblocks a task (re-tick). Team-on-loop + Claude-tutors-hands = the partnership.\n" as *u8)
90 sys_exit(1); return 1
91}