nx_wflow_identity_canonical_gate_t344.nx source
↩ module page · 184 lines · 20791 B
1// Native integration qualification of additive workflow result commands.
2import "nx_wflow_result.nx"
3import "nx_tool_run.nx"
4static wrt_pass:i64
5static wrt_fail:i64
6static wrt_timeout:i64
7static wrt_elf:*u8
8func wrt_check(ok:i64,label:*u8)->i64{p("RESULT-GATE ");p(label);if ok==1{p(" PASS\n");wrt_pass=wrt_pass+1}else{p(" FAIL\n");wrt_fail=wrt_fail+1};return ok}
9func wrt_path(base:*u8,leaf:*u8)->*u8{let b:*u8=sys_mmap(slen(base)+slen(leaf)+2);var at:i64=wf_cat(b,0,base);b[at]=47;wf_cat(b,at+1,leaf);return b}
10func wrt_file(path:*u8,body:*u8)->i64{let fd:i64=sys_openat_exclusive(path,MODE_0600);if fd<0{return 0};let rc:i64=wfr_write_all(fd,body,slen(body));let sync:i64=sys_fsync(fd);sys_close(fd);return rc==0 && sync==0}
11func wrt_capture(args:*i64,rcp:*i64)->*WfOwnedText{
12 let owned:*NxBufOwned=sys_mmap(__size_of(NxBufOwned)) as *NxBufOwned
13 let ev:*NxRunEvidence=sys_mmap(__size_of(NxRunEvidence)) as *NxRunEvidence
14 rcp[0]=tr_run_capture_owned_result(wrt_elf,args,owned,wrt_timeout,0,0 as *u8,ev)
15 let out:*WfOwnedText=wf_text_slice(owned.buf,0,owned.len);nx_bo_release(owned)
16 if ev.reaped!=1 || ev.capture_error!=0 || ev.signal!=0{rcp[0]=0-999}
17 return out
18}
19func wrt_result(ledger:*u8,log:*u8,filter:*u8,expected:i64,needle:*u8,label:*u8)->i64{
20 let args:*i64=sys_mmap(__size_of(i64)*6) as *i64
21 args[0]=wrt_elf as i64;args[1]="result" as *u8 as i64;args[2]=ledger as i64;args[3]=log as i64;args[4]=filter as i64
22 let rc:*i64=sys_mmap(__size_of(i64)) as *i64;let out:*WfOwnedText=wrt_capture(args,rc)
23 if out==(0 as *WfOwnedText){return wrt_check(0,label)}
24 p("RESPONSE bytes=");pn(out.len);p(" ");p(out.data)
25 return wrt_check(rc[0]==expected && wf_has(out.data,needle)==1,label)
26}
27func wrt_fire(flows:*u8,steps:*u8,ledger:*u8,cat:*u8,event:*u8,log:*u8,expected:i64,needle:*u8,label:*u8)->i64{
28 let args:*i64=sys_mmap(__size_of(i64)*9) as *i64
29 args[0]=wrt_elf as i64;args[1]="fire-result" as *u8 as i64;args[2]=flows as i64;args[3]=steps as i64;args[4]=ledger as i64;args[5]=cat as i64;args[6]=event as i64;args[7]=log as i64
30 let rc:*i64=sys_mmap(__size_of(i64)) as *i64;let out:*WfOwnedText=wrt_capture(args,rc)
31 if out==(0 as *WfOwnedText){return wrt_check(0,label)}
32 p("RESPONSE bytes=");pn(out.len);p(" ");p(out.data)
33 return wrt_check(rc[0]==expected && wf_has(out.data,needle)==1,label)
34}
35func wrt_identity_main(argc:i64,argv:*i64)->i64{
36 if argc==2{if seq(argv[1] as *u8,"--exit7-no-output")==1{return 7}}
37 if argc!=4{p("gate needs exclusive scratch, candidate ELF and capture timeout ms\n");return 2}
38 let base:*u8=argv[1] as *u8;wrt_elf=argv[2] as *u8;wrt_timeout=wf_atoi(argv[3] as *u8)
39 if wrt_timeout<=0{return 2};if sys_mkdir(base,MODE_0755)!=0{return 2}
40 let log:*u8=wrt_path(base,"full.log");if wrt_file(log,"fixture full evidence; not publication\n")!=1{return 2}
41 let failed:*u8=wrt_path(base,"failed.ledger")
42 let failedtext:*u8="WFRUN rid=x.f flow=f step=0 status=START att=0\nWFRUN rid=x.f flow=f step=1 status=ATT att=1\nWFRUN rid=x.f flow=f step=1 status=FAILSTEP att=1\nWFRUN rid=x.f flow=f step=0 status=FAILED att=0\n"
43 if wrt_file(failed,failedtext)!=1{return 2}
44 wrt_result(failed,log,"x.f",1,"\"state\":\"FAILED\"","failed-not-started-success")
45 let parked:*u8=wrt_path(base,"parked.ledger")
46 if wrt_file(parked,"WFRUN rid=x.f flow=f step=0 status=START att=0\nWFRUN rid=x.f flow=f step=1 status=WAIT att=0\n")!=1{return 2}
47 wrt_result(parked,log,"x.f",0,"\"state\":\"waiting-decision\"","parked-is-waiting")
48 let uncertain:*u8=wrt_path(base,"uncertain.ledger")
49 if wrt_file(uncertain,"WFRUN rid=x.f flow=f step=0 status=START att=0\nWFRUN rid=x.f flow=f step=1 status=ATT att=1\n")!=1{return 2}
50 wrt_result(uncertain,log,"x.f",1,"\"state\":\"UNCERTAIN\"","uncertain-att-no-ok")
51 let truncated:*u8=wrt_path(base,"truncated.ledger")
52 if wrt_file(truncated,"WFRUN rid=x.f flow=f step=0 status=START att=0\nWFRUN rid=x.f flow=f step=0 status=DONE")!=1{return 2}
53 wrt_result(truncated,log,"x.f",2,"\"journal_state\":\"truncated-record\"","truncated-journal-not-done")
54 wrt_result(wrt_path(base,"missing.ledger"),log,"x.f",2,"\"journal_state\":\"missing\"","missing-journal-distinct")
55 wrt_result(failed,wrt_path(base,"missing.log"),"x.f",2,"\"state\":\"missing\"","missing-log-distinct")
56 let capped:*u8=wrt_path(base,"capped.log")
57 if wrt_file(capped,"diagnostics\n[NX-JOB CAPTURE-TRUNCATED cap=100]\n")!=1{return 2}
58 wrt_result(failed,capped,"x.f",2,"\"evidence_truncation_marker\":1","truncated-log-not-complete")
59 let malformed:*u8=wrt_path(base,"malformed.ledger")
60 if wrt_file(malformed,"WFRUN rid=x.f flow=f step=0 status=START att=0\nWFRUN rid=x.f flow=f step=0 status=DONE att=0\nWFRUN rid=x.f flow=f step=0 status=FAILED att=0\n")!=1{return 2}
61 wrt_result(malformed,log,"x.f",2,"\"journal_state\":\"malformed-record\"","conflicting-terminal-not-done")
62 let flows:*u8=wrt_path(base,"test.flows");let steps:*u8=wrt_path(base,"test.steps");let ledger:*u8=wrt_path(base,"native.ledger");let cat:*u8=wrt_path(base,"catalog")
63 if wrt_file(flows,"@version 1\nf|go|-\np|park|-\nb|bad|-\n")!=1{return 2}
64 if wrt_file(steps,"f|1|set-var|-|delivery_state=test-only-no-publication|1\np|1|approve|reviewer|test-decision|1\nb|1|exec-organ|failing|unknown|1\n")!=1{return 2}
65 let ct:*u8=sys_mmap(slen(wrt_elf)+slen("failing\t\tGREEN\n")+1);var co:i64=wf_cat(ct,0,"failing\t");co=wf_cat(ct,co,wrt_elf);wf_cat(ct,co,"\tGREEN\n")
66 if wrt_file(cat,ct)!=1{return 2}
67 let successlog:*u8=wrt_path(base,"success.log")
68 wrt_fire(flows,steps,ledger,cat,"go~id=first",successlog,0,"\"state\":\"DONE\"","native-fire-result-done")
69 wrt_fire(wrt_path(base,"missing.flows"),steps,ledger,cat,"go~id=first",wrt_path(base,"setup-failed.log"),2,"\"state\":\"needs-intervention\"","command-failure-not-hidden-by-prior-done")
70 let before:*WfrFile=wfr_read(ledger)
71 wrt_fire(flows,steps,ledger,cat,"go~id=second",successlog,2,"\"effects\":\"none\"","existing-evidence-refuses-before-effects")
72 let after:*WfrFile=wfr_read(ledger);wrt_check(seq(before.hash,after.hash)==1,"refusal-ledger-unchanged")
73
74
75 // New identity accepts complete IDs with colliding old prefixes.
76 let longA:*u8=sys_mmap(4104);let longB:*u8=sys_mmap(4104);var la:i64=wf_cat(longA,0,"go~id=");var lb:i64=wf_cat(longB,0,"go~id=");var ix:i64=0
77 while ix<4096{longA[la+ix]=97;longB[lb+ix]=97;ix=ix+1};longA[la+4095]=88;longB[lb+4095]=89
78 let longLedger:*u8=wrt_path(base,"long.ledger")
79 let first:i64=wf_fire_files(flows,steps,longLedger,cat,longA);let second:i64=wf_fire_files(flows,steps,longLedger,cat,longB)
80 wrt_check(first==1&&second==1,"complete-long-colliding-prefix-identities-distinct")
81 let longBefore:*WfrFile=wfr_read(longLedger);let repeated:i64=wf_fire_files(flows,steps,longLedger,cat,longA);let longAfter:*WfrFile=wfr_read(longLedger)
82 wrt_check(repeated==(0-100)&&seq(longBefore.hash,longAfter.hash)==1,"long-exact-dedup-no-rewrite")
83 let longEvent:*WfOwnedText=wf_id_event(longA);let longRid:*WfOwnedText=wf_id_hex(longEvent.data,"f")
84 wrt_check(longRid.len==4+(longEvent.len+1)*2&&wf_id_binding(longAfter.text.data,longAfter.text.len,longRid.data,longEvent.data,"f",2)==1,"lossless-versioned-identity-roundtrip")
85 let html:*u8=wrt_path(base,"long.html");let board:i64=wf_obs_board(longLedger);let rendered:i64=wf_obs_html(longLedger,html);let page:*WfrFile=wfr_read(html)
86 wrt_check(board==2&&rendered==2&&page.status==1&&wf_has(page.text.data,longRid.data)==1,"board-and-html-complete-long-identities")
87 p("IDENTITY-OVERHEAD event_bytes=");pn(longEvent.len);p(" rid_bytes=");pn(longRid.len);p(" journal_bytes=");pn(longAfter.text.len);p(" html_bytes=");pn(page.text.len);p("\n")
88 let prefix:*u8=sys_mmap(128);ix=0;while ix<127{prefix[ix]=97;ix=ix+1};let oldRid:*WfOwnedText=wf_id_join(prefix,".","f")
89 let oldLines:*u8=sys_mmap(16384);var ol:i64=wf_cat(oldLines,0,"WFRUN rid=");ol=wf_cat(oldLines,ol,oldRid.data);ol=wf_cat(oldLines,ol," flow=f step=0 status=START att=0\nWFVAR rid=");ol=wf_cat(oldLines,ol,oldRid.data);ol=wf_cat(oldLines,ol," k=id v=");ol=wf_cat(oldLines,ol,longEvent.data);ol=wf_cat(oldLines,ol,"\nWFRUN rid=");ol=wf_cat(oldLines,ol,oldRid.data);wf_cat(oldLines,ol," flow=f step=0 status=DONE att=0\n")
90 let historical:*u8=wrt_path(base,"historical.ledger");if wrt_file(historical,oldLines)!=1{return 2};let histBefore:*WfrFile=wfr_read(historical)
91 let historicalSame:i64=wf_fire_files(flows,steps,historical,cat,longA);let historicalConflict:i64=wf_fire_files(flows,steps,historical,cat,longB);let histAfter:*WfrFile=wfr_read(historical)
92 wrt_check(historicalSame==(0-100)&&historicalConflict==WF_EVIDENCE_ERROR&&seq(histBefore.hash,histAfter.hash)==1,"legacy-prefix-binding-preserved-conflict-refused-without-rewrite")
93 let dottedFlows:*u8=wrt_path(base,"dotted.flows");let dottedSteps:*u8=wrt_path(base,"dotted.steps");let dottedLedger:*u8=wrt_path(base,"dotted.ledger")
94 if wrt_file(dottedFlows,"f|one|-\nb.f|two|-\n")!=1{return 2};if wrt_file(dottedSteps,"f|1|set-var|-|x=1|1\nb.f|1|set-var|-|x=2|1\n")!=1{return 2}
95 wrt_check(wf_fire_files(dottedFlows,dottedSteps,dottedLedger,cat,"one~id=a.b")==1&&wf_fire_files(dottedFlows,dottedSteps,dottedLedger,cat,"two~id=a")==1,"dotted-event-flow-pairs-do-not-alias")
96 let missingBinding:*u8=wrt_path(base,"missing-binding.ledger");if wrt_file(missingBinding,"WFRUN rid=missing.f flow=f step=0 status=START att=0\n")!=1{return 2};let mbBefore:*WfrFile=wfr_read(missingBinding)
97 let mbFire:i64=wf_fire_files(flows,steps,missingBinding,cat,"go~id=missing");let mbResume:i64=wf_resume_files(flows,steps,missingBinding,cat);let mbAfter:*WfrFile=wfr_read(missingBinding)
98 wrt_check(mbFire==WF_EVIDENCE_ERROR&&mbResume==WF_EVIDENCE_ERROR&&seq(mbBefore.hash,mbAfter.hash)==1,"missing-historical-binding-no-dispatch")
99 let collisionRid:*WfOwnedText=wf_id_hex("reserved","f");let collisionText:*u8=sys_mmap(collisionRid.len+slen("WFRUN rid= flow=f step=0 status=START att=0\n")+1);var ci:i64=wf_cat(collisionText,0,"WFRUN rid=");ci=wf_cat(collisionText,ci,collisionRid.data);wf_cat(collisionText,ci," flow=f step=0 status=START att=0\n")
100 let collision:*u8=wrt_path(base,"namespace.ledger");if wrt_file(collision,collisionText)!=1{return 2};let colBefore:*WfrFile=wfr_read(collision);let colFire:i64=wf_fire_files(flows,steps,collision,cat,"go~id=reserved");let colAfter:*WfrFile=wfr_read(collision)
101 wrt_check(colFire==WF_EVIDENCE_ERROR&&seq(colBefore.hash,colAfter.hash)==1,"unversioned-namespace-collision-refused")
102 let incomplete:*u8=wrt_path(base,"incomplete-v2.ledger");if wf_emit_start2(incomplete,collisionRid.data,"f")!=0{return 2};let incBefore:*WfrFile=wfr_read(incomplete);let incResume:i64=wf_resume_files(flows,steps,incomplete,cat);let incAfter:*WfrFile=wfr_read(incomplete)
103 wrt_check(incResume==WF_EVIDENCE_ERROR&&seq(incBefore.hash,incAfter.hash)==1,"atomic-versioned-start-incomplete-binding-remains-uncertain")
104 wrt_fire(flows,steps,ledger,cat,"go~id=first~id=other",wrt_path(base,"duplicate-id.log"),2,"invalid-or-aliased-event-identity","duplicate-event-id-refused")
105 wrt_fire(flows,steps,ledger,cat,"go~id=two words",wrt_path(base,"space-id.log"),2,"invalid-or-aliased-event-identity","token-splitting-id-refused")
106 wrt_fire(flows,steps,ledger,cat,"go~id=",wrt_path(base,"empty-id.log"),2,"invalid-or-aliased-event-identity","empty-event-id-refused")
107 wrt_fire(flows,steps,ledger,cat,"go~id=first.child",wrt_path(base,"prefix-child.log"),0,"\"selected_runs\":1","distinct-dotted-event")
108 wrt_fire(flows,steps,ledger,cat,"go~id=first",wrt_path(base,"prefix-parent.log"),0,"\"selected_runs\":1","summary-does-not-include-prefix-sibling")
109 wrt_check(wfr_summary(ledger,successlog,"*",0,1,7)==2,"command-exit7-never-masked-by-success-envelope")
110
111 wrt_fire(flows,steps,ledger,cat,"bad~id=failed",wrt_path(base,"failed.log"),1,"\"state\":\"FAILED\"","native-connector-failure-not-success")
112 wrt_fire(flows,steps,ledger,cat,"park~id=waiting",wrt_path(base,"waiting.log"),0,"\"state\":\"PARKED\"","native-approval-parked")
113 let args:*i64=sys_mmap(__size_of(i64)*8) as *i64
114 args[0]=wrt_elf as i64;args[1]="resume-result" as *u8 as i64;args[2]=flows as i64;args[3]=steps as i64;args[4]=ledger as i64;args[5]=cat as i64;args[6]=wrt_path(base,"resume.log") as i64
115 let rc:*i64=sys_mmap(__size_of(i64)) as *i64;let resumed:*WfOwnedText=wrt_capture(args,rc)
116 p("RESPONSE bytes=");pn(resumed.len);p(" ");p(resumed.data)
117 wrt_check(rc[0]==0 && wf_has(resumed.data,"\"selected_runs\":1")==1 && wf_has(resumed.data,"\"state\":\"PARKED\"")==1,"resume-selects-eligible-only")
118
119
120 if wf_emit_var(incomplete,collisionRid.data,"id","reserved")!=0{return 2};let partialBefore:*WfrFile=wfr_read(incomplete);let partialResume:i64=wf_resume_files(flows,steps,incomplete,cat);let partialAfter:*WfrFile=wfr_read(incomplete)
121 wrt_check(partialResume==WF_EVIDENCE_ERROR&&seq(partialBefore.hash,partialAfter.hash)==1,"initial-id-without-bound-marker-never-executes")
122 let largeLedger:*u8=wrt_path(base,"large.ledger");let largeSize:i64=WF_LEDCAP+4096;let large:*u8=sys_mmap(largeSize+1);var lp:i64=wf_cat(large,0,"WFVAR rid=fixture.f k=retained v=");while lp<largeSize-1{large[lp]=122;lp=lp+1};large[lp]=10
123 if wrt_file(largeLedger,large)!=1{return 2};let oldSize:*i64=sys_mmap(__size_of(i64)) as *i64;let oldBuf:*u8=wf_readall(largeLedger,oldSize)
124 wrt_check(oldBuf==(0 as *u8),"legacy-reader-contract-retains-loud-extent-refusal")
125 let newSize:*i64=sys_mmap(__size_of(i64)) as *i64;let snapshot:*u8=wf_read_snapshot(largeLedger,newSize)
126 wrt_check(snapshot!=(0 as *u8)&&newSize[0]==largeSize&&wf_text_match(snapshot,0,newSize[0],large,largeSize)==1,"dynamic-snapshot-over-old-journal-ceiling")
127 if snapshot!=(0 as *u8){sys_munmap_direct(snapshot,newSize[0]+1)}
128 let largeFire:i64=wf_fire_files(flows,steps,largeLedger,cat,"go~id=after-large-history");let largeAfter:*WfrFile=wfr_read(largeLedger)
129 wrt_check(largeFire==1&&largeAfter.status==1&&largeAfter.text.len>largeSize&&wf_text_match(largeAfter.text.data,0,largeAfter.text.len,large,largeSize)==1,"fire-and-owned-substitution-preserve-over-cap-history")
130
131 // A long flow name exercises all writer, decision, replay and version paths.
132 let longFlow:*u8=sys_mmap(1025);var fi:i64=0;while fi<1024{longFlow[fi]=113;fi=fi+1}
133 let flowFile:*u8=wrt_path(base,"long-flow.flows");let flowV2:*u8=wrt_path(base,"long-flow-v2.flows");let stepFile:*u8=wrt_path(base,"long-flow.steps");let flowLedger:*u8=wrt_path(base,"long-flow.ledger")
134 let header:*WfOwnedText=wf_id_join("@version 1\n",longFlow,"|go|-\n");let header2:*WfOwnedText=wf_id_join("@version 2\n",longFlow,"|go|-\n");let stepRow:*WfOwnedText=wf_id_join(longFlow,"|1|approve|reviewer|fixture-decision|1\n","")
135 if wrt_file(flowFile,header.data)!=1||wrt_file(flowV2,header2.data)!=1||wrt_file(stepFile,stepRow.data)!=1{return 2}
136 let longPark:i64=wf_fire_files(flowFile,stepFile,flowLedger,cat,longA);let flowRid:*WfOwnedText=wf_id_hex(longEvent.data,longFlow)
137 let flowCx:*i64=sys_mmap(__size_of(i64)*5) as *i64;flowCx[2]=flowLedger as i64
138 let decision:i64=wf_decide(flowCx,flowRid.data,1,"APPROVED","fixture-reviewer");let replay:i64=wf_resume_files(flowV2,stepFile,flowLedger,cat);let flowOut:*WfrFile=wfr_read(flowLedger)
139 let token:*WfOwnedText=wf_id_tok(flowRid.data)
140 wrt_check(longPark==1&&decision==0&&replay==1&&wf_lines_with2(flowOut.text.data,flowOut.text.len,token.data,"status=DONE")==1&&wf_lines_with2(flowOut.text.data,flowOut.text.len,token.data,"WFVERDRIFT")==1,"long-flow-park-decision-version-drift-resume")
141 let sumArgs:*i64=sys_mmap(__size_of(i64)*6) as *i64;sumArgs[0]=wrt_elf as i64;sumArgs[1]="result" as *u8 as i64;sumArgs[2]=flowLedger as i64;sumArgs[3]=log as i64;sumArgs[4]=flowRid.data as i64
142 let sumRc:*i64=sys_mmap(__size_of(i64)) as *i64;let fullSummary:*WfOwnedText=wrt_capture(sumArgs,sumRc)
143 wrt_check(sumRc[0]==0&&wf_has(fullSummary.data,longEvent.data)==1&&wf_has(fullSummary.data,longFlow)==1&&wf_has(fullSummary.data,"\"identity_binding\":\"verified\"")==1,"complete-machine-and-human-identities-in-result")
144 p("IDENTITY-OVERHEAD flow_bytes=");pn(slen(longFlow));p(" event_bytes=");pn(longEvent.len);p(" rid_bytes=");pn(flowRid.len);p(" complete_response_bytes=");pn(fullSummary.len);p(" journal_bytes=");pn(flowOut.text.len);p("\n")
145 wrt_fire(flows,steps,ledger,cat,"go~id=é.nishi",wrt_path(base,"utf8.log"),0,"\"event_id\":\"é.nishi\"","utf8-identity-lossless")
146
147
148 let oldDots:*u8=wrt_path(base,"legacy-dotted.ledger");if wrt_file(oldDots,"WFRUN rid=a.b.f flow=f step=0 status=START att=0\nWFVAR rid=a.b.f k=id v=a.b\nWFRUN rid=a.b.f flow=f step=0 status=DONE att=0\n")!=1{return 2};let dotsBefore:*WfrFile=wfr_read(oldDots)
149 let sameDot:i64=wf_fire_files(dottedFlows,dottedSteps,oldDots,cat,"one~id=a.b");let otherDot:i64=wf_fire_files(dottedFlows,dottedSteps,oldDots,cat,"two~id=a");let dotsAfter:*WfrFile=wfr_read(oldDots)
150 wrt_check(sameDot==(0-100)&&otherDot==WF_EVIDENCE_ERROR&&seq(dotsBefore.hash,dotsAfter.hash)==1,"ambiguous-dotted-history-never-reinterpreted")
151 let orderLedger:*u8=wrt_path(base,"out-of-order.ledger")
152 if wf_emit(orderLedger,collisionRid.data,"f",0,"BOUND",0)!=0||wf_emit_start2(orderLedger,collisionRid.data,"f")!=0||wf_emit_var(orderLedger,collisionRid.data,"id","reserved")!=0{return 2}
153 let orderBefore:*WfrFile=wfr_read(orderLedger);let ordered:i64=wf_resume_files(flows,steps,orderLedger,cat);let orderAfter:*WfrFile=wfr_read(orderLedger)
154 wrt_check(ordered==WF_EVIDENCE_ERROR&&seq(orderBefore.hash,orderAfter.hash)==1,"out-of-order-bound-record-refuses-before-effects")
155 let earlyId:*u8=wrt_path(base,"id-before-start.ledger")
156 if wf_emit_var(earlyId,collisionRid.data,"id","reserved")!=0||wf_emit_start2(earlyId,collisionRid.data,"f")!=0||wf_emit(earlyId,collisionRid.data,"f",0,"BOUND",0)!=0{return 2}
157 let earlyBefore:*WfrFile=wfr_read(earlyId);let earlyResume:i64=wf_resume_files(flows,steps,earlyId,cat);let earlyFire:i64=wf_fire_files(flows,steps,earlyId,cat,"go~id=reserved");let earlyAfter:*WfrFile=wfr_read(earlyId)
158 wrt_check(earlyResume==WF_EVIDENCE_ERROR&&earlyFire==WF_EVIDENCE_ERROR&&seq(earlyBefore.hash,earlyAfter.hash)==1,"id-before-start-refuses-fire-and-resume-before-effects")
159 let htmlLedger:*u8=wrt_path(base,"large-html.ledger");var hi:i64=0
160 while hi<9{let num:*WfOwnedText=wf_text_decimal(hi);let rowid:*WfOwnedText=wf_id_join(longRid.data,".",num.data);if wf_emit(htmlLedger,rowid.data,"f",0,"START",0)!=0||wf_emit(htmlLedger,rowid.data,"f",0,"DONE",0)!=0{return 2};wf_text_free(num);wf_text_free(rowid);hi=hi+1}
161 let htmlLargePath:*u8=wrt_path(base,"large-html.html");let htmlResult:i64=wf_obs_html(htmlLedger,htmlLargePath);let htmlLarge:*WfrFile=wfr_read(htmlLargePath)
162 wrt_check(htmlResult==9&&htmlLarge.status==1&&htmlLarge.text.len>WF_MAGIC_65536,"html-over-prior-cap-complete")
163 let zeroFlows:*u8=wrt_path(base,"zero.flows");let zeroSteps:*u8=wrt_path(base,"zero.steps");let zeroCat:*u8=wrt_path(base,"zero.catalog");let zeroLedger:*u8=wrt_path(base,"zero.ledger");let zeroLog:*u8=wrt_path(base,"zero.log")
164 if wrt_file(zeroFlows,"z|zero|-\n")!=1||wrt_file(zeroSteps,"z|1|exec-organ|zero|--exit7-no-output|1\n")!=1{return 2};let zeroRow:*WfOwnedText=wf_id_join("zero\t",argv[0] as *u8,"\tGREEN\n");if wrt_file(zeroCat,zeroRow.data)!=1{return 2}
165 wrt_fire(zeroFlows,zeroSteps,zeroLedger,zeroCat,"zero~id=exit7",zeroLog,1,"\"state\":\"FAILED\"","actual-zero-output-exit7-connector-fails")
166 let zeroEvidence:*WfrFile=wfr_read(zeroLog);wrt_check(zeroEvidence.status==1&&wf_has(zeroEvidence.text.data," exit=7")==1,"complete-native-exit7-evidence-retained")
167
168 // Read-only representative real release. This never replays its connectors.
169 wrt_result("/volume1/homes/elderwesto/nishihost/knowledge/status/wflow_runs.log","/volume1/homes/elderwesto/nishihost/buildroot/knowledge/gates/alpha-person-workflow-run-t343.log","person-alpha-t343-75baa30cd054.component-alpha-experimental",0,"\"effects\":\"connector-receipts-required\"","real-release-ledger-read-only")
170 p("RESULT-GATE TOTAL pass=");pn(wrt_pass);p(" fail=");pn(wrt_fail);p("\n");if wrt_fail>0{return 1};return 0
171}
172
173func main(argc:i64,argv:*i64)->i64{
174 var automatic:i64=0
175 if argc==1{automatic=1}
176 if argc==3{if seq(argv[1] as *u8,"board")==1{automatic=1}}
177 if automatic==1{
178 let epoch:*WfOwnedText=wf_text_decimal(sys_now_realtime_sec());if epoch==(0 as *WfOwnedText){return 2}
179 let scratch:*WfOwnedText=wf_id_join("/tmp/wflow-canonical-ship-t344-",epoch.data,"");wf_text_free(epoch);if scratch==(0 as *WfOwnedText){return 2}
180 let args:*i64=sys_mmap_try(__size_of(i64)*5) as *i64;if (args as i64)<=0{wf_text_free(scratch);return 2}
181 args[0]=argv[0];args[1]=scratch.data as i64;args[2]="/volume1/homes/elderwesto/nishihost/buildroot/_build/nx_wflow.sov.elf" as *u8 as i64;args[3]="10000" as *u8 as i64
182 let rc:i64=wrt_identity_main(4,args);sys_munmap_direct(args as *u8,__size_of(i64)*5);wf_text_free(scratch);return rc
183 };return wrt_identity_main(argc,argv)
184}