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}