code wiki / _hdl_build / nx_issue_intake_candidate_t181.nx
nx_issue_intake_candidate_t181.nx source
↩ module page · 210 lines · 12229 B
1// nx_issue_intake.nx -- issue/opportunity observation intake and retained legacy demo.
2// record validates a closed typed event, writes immutable event identity through
3// the shared segment-store CAS, and verifies stored bytes. Producer stage claims
4// remain unqualified; recording does not dispatch a worker or certify a repair.
5// No-argument/demo mode retains historical fixture ranking, explicitly labeled.
6// license_tier: ORIGINAL
7import "nx_pm_decision_matrix.nx"
8import "nx_pm_review_log.nx"
9import "nx_syscalls.nx"
10
11func ii_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
12func ii_num(v: i64) -> i64 { let b: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)}; 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{b[i]=t[k-1-i];i=i+1}; sys_write(1,b,k); return 0 }
13
14func ii_demo() -> i64 {
15 ii_puts("=== ISSUE INTAKE -> PM auto-assignment (team auto-picks up; tutored where novel) ===\n\n" as *u8)
16 let N: i64 = 2
17 let title: *i64 = sys_mmap(8*N) as *i64
18 let sev: *i64 = sys_mmap(8*N) as *i64 // severity/impact 0..10 (how bad if unfixed)
19 let eff: *i64 = sys_mmap(8*N) as *i64 // build-units
20 let owned: *i64 = sys_mmap(8*N) as *i64 // 1 = team OWNS the fix capability (work now) ; 0 = pure tutor
21 let tutor: *i64 = sys_mmap(8*N) as *i64 // 1 = needs Claude tutoring on the fix approach
22 let fix: *i64 = sys_mmap(8*N) as *i64 // the routed fix approach
23
24 // --- Issue #1 (operator-named): nondeterministic compiler emits large-but-broken .s ---
25 title[0]="nondeterministic known-good compiler: large-but-broken .s (runs, exit 0, NO output)" as *u8 as i64
26 sev[0]=8; eff[0]=3; owned[0]=1; tutor[0]=1
27 fix[0]="TEAM builds a SMOKE-VERIFY+retry guard into nx_build_run: after link, run a tiny self-check of the ELF; if a known-good module produces no expected marker, recompile (current retry only catches EMPTY .s, not large-but-broken). Claude tutors the smoke-marker design." as *u8 as i64
28
29 // --- Issue #2 (observed): daemon build 10.72s slightly over the <10s target ---
30 title[1]="sites daemon build 10.72s > 10s target (baked wiki content bloats the translation unit)" as *u8 as i64
31 sev[1]=4; eff[1]=4; owned[1]=1; tutor[1]=0
32 fix[1]="TEAM moves the baked wiki/article BODY_* consts to FILES served by the router (data-driven); the daemon shrinks below the <10s threshold and content becomes hot-swappable. Already have the router." as *u8 as i64
33
34 // auto-prioritize: WSJF = (severity as Cost-of-Delay) / effort
35 let wsjf: *i64 = sys_mmap(8*N) as *i64
36 var i: i64 = 0
37 while i < N { wsjf[i] = dm_wsjf(sev[i]*10, eff[i]); i = i + 1 }
38
39 let ifd: i64 = sys_openat_append("/tmp/nishi_issues.log" as *u8, 0x1a4)
40 pm_w(ifd, "\n# ISSUE INTAKE 2026-06-06 (auto -> PM assignments)\n" as *u8)
41 let pm: i64 = pm_open("/tmp/nishi_pm_review.log" as *u8)
42
43 let picked: *i64 = sys_mmap(8*N) as *i64; i=0; while i<N { picked[i]=0; i=i+1 }
44 let ready: *i64 = sys_mmap(8*N) as *i64; i=0; while i<N { ready[i]=1; i=i+1 } // all filed issues are workable
45 var rank: i64 = 0
46 while rank < N {
47 let pick: i64 = dm_next_pick(wsjf, picked, ready, N)
48 if pick < 0 { rank = N } else {
49 picked[pick]=1
50 ii_puts("ISSUE #" as *u8); ii_num(rank+1); ii_puts(" wsjf=" as *u8); ii_num(wsjf[pick])
51 ii_puts(" sev=" as *u8); ii_num(sev[pick]); ii_puts("\n " as *u8); ii_puts(title[pick] as *u8); ii_puts("\n -> FIX: " as *u8); ii_puts(fix[pick] as *u8)
52 if tutor[pick]==1 { ii_puts("\n -> ROUTING: TEAM works it + CLAUDE TUTORS the approach.\n\n" as *u8) }
53 else { ii_puts("\n -> ROUTING: TEAM-OWNED (no tutoring needed).\n\n" as *u8) }
54 pm_w(ifd, "ASSIGN " as *u8); pm_w(ifd, title[pick] as *u8); if rank==0 { pm_w(ifd, " status=AUTO-PICKED\n" as *u8) } else { pm_w(ifd, " status=QUEUED\n" as *u8) }
55 if tutor[pick]==1 {
56 pm_flag(pm, "ISSUE-TUTOR" as *u8, "auto-intake" as *u8, "NEEDS-TUTOR" as *u8, title[pick] as *u8, fix[pick] as *u8)
57 } else {
58 pm_flag(pm, "ISSUE-ASSIGN" as *u8, "auto-intake" as *u8, "TEAM-OWNED" as *u8, title[pick] as *u8, fix[pick] as *u8)
59 }
60 rank = rank + 1
61 }
62 }
63 sys_close(ifd); sys_close(pm)
64
65 // auto-pickup: the top issue is now the team's next work item
66 var top: i64 = 0; var bs: i64 = 0-1; i=0
67 while i<N { if wsjf[i] > bs { bs = wsjf[i]; top = i } i=i+1 }
68 ii_puts(">>> TEAM AUTO-PICKS UP: " as *u8); ii_puts(title[top] as *u8); ii_puts("\n" as *u8)
69 if tutor[top]==1 { ii_puts(">>> Claude will TUTOR the fix; Engineer gates it before it lands.\n" as *u8) }
70
71 // self-check: intake ranks the higher-severity-per-effort issue first and files every issue
72 let r: *i64 = sys_mmap(8*4) as *i64
73 r[0]=0; if top==0 { r[0]=1 } // nondeterministic (sev8/eff3=266) outranks daemon-size (sev4/eff4=100)
74 r[1]=0; if wsjf[0] > wsjf[1] { r[1]=1 }
75 r[2]=0; if tutor[0]==1 { r[2]=1 } // novel-fix issue correctly flagged for tutoring
76 var pass: i64=0; var j: i64=0; while j<3 { pass=pass+r[j]; j=j+1 }
77 ii_puts("---- intake self-check passed " as *u8); ii_num(pass); ii_puts("/3 ----\n" as *u8)
78 if pass==3 { sys_exit(0); return 0 }
79 sys_exit(1); return 1
80}
81
82import "nx_json.nx"
83import "nx_json_lib.nx"
84import "nx_seg_store.nx"
85import "nx_sha256.nx"
86import "nx_resource_arbiter.nx"
87// Closed v1 observation schema. Stages are producer assertions, never acceptance.
88const IIV_FIELDS:i64=25
89const IIV_NAMES:*u8="schema|event_id|issue_id|origin|kind|observed_at|source_ref|source_sha256|source_offset|owner|operation|asserted_stage|reason|reproduction_ref|repair_ref|review_ref|verification_ref|release_ref|elapsed_ms|input_tokens|cached_input_tokens|output_tokens|quality_verdict|resource_ref|previous_event_id"
90func iiv_eq(a:*u8,b:*u8)->i64{var i:i64=0;while a[i]!=(0 as u8){if a[i]!=b[i]{return 0};i=i+1};if b[i]!=(0 as u8){return 0};return 1}
91func iiv_field_id(s:*u8)->i64{
92 var p:i64=0;var start:i64=0;var id:i64=0
93 while 1==1{if IIV_NAMES[p]==(124 as u8)||IIV_NAMES[p]==(0 as u8){
94 var k:i64=0;while start+k<p{if s[k]!=IIV_NAMES[start+k]{break};k=k+1}
95 if start+k==p&&s[k]==(0 as u8){return id}
96 if IIV_NAMES[p]==(0 as u8){return -1};id=id+1;start=p+1
97 };p=p+1};return -1
98}
99func iiv_uint(q:*u8,n:i64)->i64{
100 if n<=0{return -1};var i:i64=0;var v:i64=0
101 while i<n{let c:i64=q[i] as i64;if c<48||c>57{return -1};let d:i64=c-48
102 if v>(NX_RA_SIZE_MAX-d)/10{return -1};v=v*10+d;i=i+1};return v
103}
104func iiv_hex(s:*u8)->i64{
105 if ss_len(s)!=64{return 0}
106 var i:i64=0;while i<64{let c:i64=s[i] as i64;if (c<48||c>57)&&(c<97||c>102){return 0};i=i+1}
107 if s[64]!=(0 as u8){return 0};return 1
108}
109func iiv_parse(q:*u8,n:i64,strings:*i64,nums:*i64)->i64{
110 if n<=0||n>NX_RA_SIZE_MAX-1{return -1}
111 let t:*NxJsonTok=nx_json_new(q,n)
112 let scratch:*u8=sys_mmap_try(n+1);if (scratch as i64)<=0{return -2}
113 var rc:i64=-1;var mask:i64=0;var i:i64=0
114 while i<IIV_FIELDS{strings[i]=0;nums[i]=-1;i=i+1}
115 if nx_json_next(t)==NX_JSON_LBRACE{
116 var kind:i64=nx_json_next(t)
117 while kind==NX_JSON_STRING{
118 let kn:i64=jx_decode_span(q+t.tok_off+1,t.tok_len-2,scratch,n+1)
119 if kn<0{break};var ki:i64=0;while ki<kn{if scratch[ki]==(0 as u8){break};ki=ki+1};if ki!=kn{break};let ix:i64=iiv_field_id(scratch)
120 if ix<0{break};if (mask&(1<<ix))!=0{break}
121 if nx_json_next(t)!=NX_JSON_COLON{break};kind=nx_json_next(t)
122 var numeric:i64=0;if ix==5||ix==8||(ix>=18&&ix<=21){numeric=1}
123 if numeric==1{
124 if kind==NX_JSON_NUMBER{let v:i64=iiv_uint(q+t.tok_off,t.tok_len);if v<0{break};nums[ix]=v}
125 else{if kind!=NX_JSON_NULL||ix==5{break}}
126 }else{
127 if kind==NX_JSON_STRING{
128 let s:*u8=sys_mmap_try(t.tok_len);if (s as i64)<=0{rc=-2;break}
129 let sn:i64=jx_decode_span(q+t.tok_off+1,t.tok_len-2,s,t.tok_len)
130 strings[ix]=s as i64
131 if sn<=0{break};var j:i64=0;while j<sn{if s[j]==(0 as u8){break};j=j+1};if j!=sn{break}
132 }else{if kind!=NX_JSON_NULL{break}}
133 }
134 mask=mask|(1<<ix);kind=nx_json_next(t)
135 if kind==NX_JSON_RBRACE{if nx_json_next(t)==NX_JSON_EOF{rc=0};break}
136 if kind!=NX_JSON_COMMA{break};kind=nx_json_next(t)
137 }
138 }
139 sys_munmap(scratch,n+1)
140 if rc!=0{return rc};if mask!=(1<<IIV_FIELDS)-1{return -1}
141 i=0;while i<=12{if i!=5&&i!=7&&i!=8{if strings[i]==0{return -1}};i=i+1}
142 if iiv_eq(strings[0] as *u8,"nishi.issue-observation.v1")!=1{return -1}
143 if iiv_hex(strings[1] as *u8)!=1{return -1}
144 if strings[7]!=0{if iiv_hex(strings[7] as *u8)!=1{return -1}}
145 if strings[24]!=0{if iiv_hex(strings[24] as *u8)!=1{return -1}}
146 if iiv_eq(strings[3] as *u8,"internal")!=1&&iiv_eq(strings[3] as *u8,"external")!=1{return -1}
147 if iiv_eq(strings[4] as *u8,"failure")!=1&&iiv_eq(strings[4] as *u8,"opportunity")!=1{return -1}
148 let stage:*u8=strings[11] as *u8;var st:i64=-1
149 if iiv_eq(stage,"detected")==1{st=0}
150 if iiv_eq(stage,"triaged")==1{st=1}
151 if iiv_eq(stage,"candidate")==1{st=2}
152 if iiv_eq(stage,"independent-review")==1{st=3}
153 if iiv_eq(stage,"original-path-verified")==1{st=4}
154 if iiv_eq(stage,"deployed")==1{st=5}
155 if st<0{return -1}
156 if st>=2&&strings[14]==0{return -1}
157 if st>=3&&strings[15]==0{return -1}
158 if st>=4&&strings[16]==0{return -1}
159 if st>=5&&strings[17]==0{return -1}
160 if nums[19]>=0&&nums[20]>nums[19]{return -1}
161 return 0
162}
163// Exact event identity is immutable. CAS closes check-to-write races;
164// a stale plane is a conflict, never an implicit retry of a mutation.
165func iiv_record(prefix:*u8,q:*u8,n:i64)->i64{
166 let fields:*i64=sys_mmap(IIV_FIELDS*8) as *i64
167 let nums:*i64=sys_mmap(IIV_FIELDS*8) as *i64
168 let parsed:i64=iiv_parse(q,n,fields,nums);if parsed!=0{return -1}
169 // Storage substrate currently has a bounded path ABI; reject, never truncate.
170 if ss_len(prefix)+64>=SS_LOCKPATHCAP{return -2}
171 let key:*u8=sys_mmap(80);let o:i64=ss_cat(key,0,"ii:event:")
172 ss_cat(key,o,fields[1] as *u8)
173 let expected:i64=ss_max_segid(prefix)
174 let h:*i64=ss_open(prefix);let pq:*i64=sys_mmap(16) as *i64;let lq:*i64=sys_mmap(16) as *i64
175 let found:i64=ss_hget(h,key,pq,lq)
176 if found==1{
177 var same:i64=1;if lq[0]!=n{same=0}else{var i:i64=0;let old:*u8=pq[0] as *u8;while i<n{if old[i]!=q[i]{same=0;break};i=i+1}}
178 ss_close(h);if same==1{return 1};return -3
179 }
180 ss_close(h)
181 if n>NX_RA_SIZE_MAX-128{return -1}
182 let w:*i64=ss_begin_cap(n+128)
183 if ss_add(w,1,key,q,n)!=0{return -4}
184 let rc:i64=ss_commit_cas(prefix,w,1,expected)
185 if rc==SS_ERR_STALE{return -5}
186 if rc!=0{return -4}
187 // Read-after-write witnesses persistence; it does not qualify the issue's claim.
188 let vh:*i64=ss_open(prefix);let vr:i64=ss_hget(vh,key,pq,lq)
189 var ok:i64=0;if vr==1&&lq[0]==n{ok=1;var j:i64=0;let v:*u8=pq[0] as *u8;while j<n{if v[j]!=q[j]{ok=0;break};j=j+1}}
190 ss_close(vh);if ok!=1{return -6};return 0
191}
192func iiv_main(argc:i64,argv:*i64)->i64{
193 if argc!=4{ii_puts("usage: nx_issue_intake record <event.json> <store-prefix> | demo\n");return 2}
194 if iiv_eq(argv[1] as *u8,"record")!=1{return 2}
195 let sz:*i64=sys_mmap(16) as *i64;let q:*u8=ss_readall(argv[2] as *u8,sz)
196 if (q as i64)<=0||sz[0]<=0{ii_puts("{\"state\":\"refused\",\"reason\":\"event-unreadable\"}\n");return 3}
197 let rc:i64=iiv_record(argv[3] as *u8,q,sz[0])
198 ii_puts("{\"schema\":\"nishi.issue-intake-receipt.v1\",\"code\":");ii_num(rc)
199 ii_puts(",\"state\":\"");if rc==0{ii_puts("recorded")}else{if rc==1{ii_puts("already-recorded")}else{ii_puts("refused")}}
200 ii_puts("\",\"qualification\":\"recorded-not-independently-verified\",\"worker_dispatched\":false,\"artifact_sha256\":\"")
201 let digest:*u8=sys_mmap(32);sha256_digest(q,sz[0],digest)
202 var i:i64=0;let hx:*u8="0123456789abcdef";let pair:*u8=sys_mmap(2)
203 while i<32{let c:i64=digest[i] as i64;pair[0]=hx[(c>>4)&15];pair[1]=hx[c&15];sys_write(1,pair,2);i=i+1}
204 ii_puts("\"}\n");if rc<0{return 3};return 0
205}
206func main(argc:i64,argv:*i64)->i64{
207 if argc==1{ii_puts("DEMO ONLY: fixture ranking below does not dispatch or repair work.\n");return ii_demo()}
208 if argc==2{if iiv_eq(argv[1] as *u8,"demo")==1{ii_puts("DEMO ONLY: fixture ranking below does not dispatch or repair work.\n");return ii_demo()}}
209 return iiv_main(argc,argv)
210}