@nanobpm/nano-workforce 0.194.0 → 0.195.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +6 -0
- package/SPEC.md +19 -1
- package/app/agentCompletion.ts +5 -1
- package/app/convergeGate.test.ts +9 -2
- package/app/convergenceStaleRoundReset.test.ts +1 -1
- package/app/feature.test.ts +16 -0
- package/app/feature.ts +8 -0
- package/app/featureDelivery.test.ts +21 -0
- package/app/fineGrainedCells.test.ts +1 -1
- package/app/mcpToolSurface.ts +6 -1
- package/app/mergeApproval.test.ts +126 -0
- package/app/service.test.ts +105 -0
- package/app/service.ts +43 -4
- package/app/userTasks.ts +7 -0
- package/db/migrations/116_feature_runs_human_approval.sql +51 -0
- package/e2e/feature-run.e2e.ts +18 -0
- package/openapi.yaml +15 -0
- package/operations/startFeature.readiness.integration.test.ts +14 -0
- package/operations/startFeature.ts +4 -0
- package/package.json +1 -1
- package/pages/feature.page.json +1 -0
- package/resources/forms/merge-approval.form +36 -0
- package/resources/processes/convergence-loop.bpmn +216 -132
- package/resources/processes/feature.bpmn +2 -0
- package/resources/prompts/review-round.md +4 -3
- package/test/derivation-parity/README.md +4 -3
- package/test/derivation-parity/derivation-parity.test.ts +7 -7
- package/test/derivation-parity/flows.ts +6 -5
- package/workers/converge-feature/worker.ts +3 -1
|
@@ -157,6 +157,7 @@
|
|
|
157
157
|
<bpmn:incoming>f_answerLoop</bpmn:incoming>
|
|
158
158
|
<bpmn:incoming>f_huskRetry</bpmn:incoming>
|
|
159
159
|
<bpmn:incoming>f_ackRetry</bpmn:incoming>
|
|
160
|
+
<bpmn:incoming>f_revise</bpmn:incoming>
|
|
160
161
|
<bpmn:outgoing>f_capture</bpmn:outgoing>
|
|
161
162
|
</bpmn:serviceTask>
|
|
162
163
|
<bpmn:exclusiveGateway id="gw-status" name="status?" default="f_addressed">
|
|
@@ -331,6 +332,28 @@
|
|
|
331
332
|
<bpmn:incoming>f_answerRecord</bpmn:incoming>
|
|
332
333
|
<bpmn:outgoing>f_answerLoop</bpmn:outgoing>
|
|
333
334
|
</bpmn:serviceTask>
|
|
335
|
+
<bpmn:exclusiveGateway id="gw-approval" name="human approval?" default="f_noApproval">
|
|
336
|
+
<bpmn:incoming>f_scopeOk</bpmn:incoming>
|
|
337
|
+
<bpmn:outgoing>f_needApproval</bpmn:outgoing>
|
|
338
|
+
<bpmn:outgoing>f_noApproval</bpmn:outgoing>
|
|
339
|
+
</bpmn:exclusiveGateway>
|
|
340
|
+
<bpmn:userTask id="merge-approval" name="Approve merge (human)">
|
|
341
|
+
<bpmn:extensionElements>
|
|
342
|
+
<zeebe:formDefinition formId="merge-approval" />
|
|
343
|
+
<zeebe:userTask />
|
|
344
|
+
<zeebe:ioMapping>
|
|
345
|
+
<zeebe:input source="=prKey" target="prKey" />
|
|
346
|
+
<zeebe:output source="=0" target="huskRetries" />
|
|
347
|
+
</zeebe:ioMapping>
|
|
348
|
+
</bpmn:extensionElements>
|
|
349
|
+
<bpmn:incoming>f_needApproval</bpmn:incoming>
|
|
350
|
+
<bpmn:outgoing>f_toApproved</bpmn:outgoing>
|
|
351
|
+
</bpmn:userTask>
|
|
352
|
+
<bpmn:exclusiveGateway id="gw-approved" name="merge approved?" default="f_revise">
|
|
353
|
+
<bpmn:incoming>f_toApproved</bpmn:incoming>
|
|
354
|
+
<bpmn:outgoing>f_approve</bpmn:outgoing>
|
|
355
|
+
<bpmn:outgoing>f_revise</bpmn:outgoing>
|
|
356
|
+
</bpmn:exclusiveGateway>
|
|
334
357
|
<bpmn:serviceTask id="persist-converged" name="Mark converged">
|
|
335
358
|
<bpmn:extensionElements>
|
|
336
359
|
<zeebe:taskDefinition type="pr.finalize" />
|
|
@@ -338,7 +361,8 @@
|
|
|
338
361
|
<zeebe:property name="io.nanobpm.dataEnvelope.in" value="PrFinalizeIn" />
|
|
339
362
|
</zeebe:properties>
|
|
340
363
|
</bpmn:extensionElements>
|
|
341
|
-
<bpmn:incoming>
|
|
364
|
+
<bpmn:incoming>f_noApproval</bpmn:incoming>
|
|
365
|
+
<bpmn:incoming>f_approve</bpmn:incoming>
|
|
342
366
|
<bpmn:outgoing>f_finalize</bpmn:outgoing>
|
|
343
367
|
</bpmn:serviceTask>
|
|
344
368
|
<bpmn:serviceTask id="check-converge" name="Check review comments">
|
|
@@ -447,7 +471,16 @@
|
|
|
447
471
|
<bpmn:sequenceFlow id="f_scopeBlocked" name="scope under-delivered" sourceRef="gw-scope-gate" targetRef="persist-escalation-scope">
|
|
448
472
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=scopeBlocked = true</bpmn:conditionExpression>
|
|
449
473
|
</bpmn:sequenceFlow>
|
|
450
|
-
<bpmn:sequenceFlow id="f_scopeOk" name="scope delivered / default" sourceRef="gw-scope-gate" targetRef="
|
|
474
|
+
<bpmn:sequenceFlow id="f_scopeOk" name="scope delivered / default" sourceRef="gw-scope-gate" targetRef="gw-approval" />
|
|
475
|
+
<bpmn:sequenceFlow id="f_needApproval" name="approval required" sourceRef="gw-approval" targetRef="merge-approval">
|
|
476
|
+
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=humanApproval = true</bpmn:conditionExpression>
|
|
477
|
+
</bpmn:sequenceFlow>
|
|
478
|
+
<bpmn:sequenceFlow id="f_noApproval" name="no approval / default" sourceRef="gw-approval" targetRef="persist-converged" />
|
|
479
|
+
<bpmn:sequenceFlow id="f_toApproved" sourceRef="merge-approval" targetRef="gw-approved" />
|
|
480
|
+
<bpmn:sequenceFlow id="f_approve" name="approved" sourceRef="gw-approved" targetRef="persist-converged">
|
|
481
|
+
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=mergeDecision = "approve"</bpmn:conditionExpression>
|
|
482
|
+
</bpmn:sequenceFlow>
|
|
483
|
+
<bpmn:sequenceFlow id="f_revise" name="changes requested / default" sourceRef="gw-approved" targetRef="capture-head" />
|
|
451
484
|
<bpmn:sequenceFlow id="f_scopeEscGate" sourceRef="persist-escalation-scope" targetRef="gw-escalated" />
|
|
452
485
|
<bpmn:sequenceFlow id="f_blockedGate" sourceRef="persist-escalation-blockedcomments" targetRef="gw-escalated" />
|
|
453
486
|
<bpmn:sequenceFlow id="f_addressed" name="addressed / default" sourceRef="gw-status" targetRef="persist-round" />
|
|
@@ -508,73 +541,88 @@
|
|
|
508
541
|
</bpmndi:BPMNLabel>
|
|
509
542
|
</bpmndi:BPMNShape>
|
|
510
543
|
<bpmndi:BPMNShape id="BPMNShape_gw-guard" bpmnElement="gw-guard" isMarkerVisible="true">
|
|
511
|
-
<dc:Bounds x="
|
|
544
|
+
<dc:Bounds x="1741" y="735" width="50" height="50" />
|
|
512
545
|
<bpmndi:BPMNLabel>
|
|
513
|
-
<dc:Bounds x="
|
|
546
|
+
<dc:Bounds x="1724" y="716" width="85" height="14" />
|
|
514
547
|
</bpmndi:BPMNLabel>
|
|
515
548
|
</bpmndi:BPMNShape>
|
|
516
549
|
<bpmndi:BPMNShape id="BPMNShape_persist-round" bpmnElement="persist-round">
|
|
517
|
-
<dc:Bounds x="1116" y="
|
|
550
|
+
<dc:Bounds x="1116" y="720" width="100" height="80" />
|
|
518
551
|
</bpmndi:BPMNShape>
|
|
519
552
|
<bpmndi:BPMNShape id="BPMNShape_check-progress" bpmnElement="check-progress">
|
|
520
|
-
<dc:Bounds x="1316" y="
|
|
553
|
+
<dc:Bounds x="1316" y="720" width="100" height="80" />
|
|
521
554
|
</bpmndi:BPMNShape>
|
|
522
555
|
<bpmndi:BPMNShape id="BPMNShape_gw-progress" bpmnElement="gw-progress" isMarkerVisible="true">
|
|
523
|
-
<dc:Bounds x="1541" y="
|
|
556
|
+
<dc:Bounds x="1541" y="735" width="50" height="50" />
|
|
524
557
|
<bpmndi:BPMNLabel>
|
|
525
|
-
<dc:Bounds x="1536" y="
|
|
558
|
+
<dc:Bounds x="1536" y="702" width="60" height="28" />
|
|
526
559
|
</bpmndi:BPMNLabel>
|
|
527
560
|
</bpmndi:BPMNShape>
|
|
528
561
|
<bpmndi:BPMNShape id="BPMNShape_gw-husk" bpmnElement="gw-husk" isMarkerVisible="true">
|
|
529
|
-
<dc:Bounds x="
|
|
562
|
+
<dc:Bounds x="1741" y="1215" width="50" height="50" />
|
|
530
563
|
<bpmndi:BPMNLabel>
|
|
531
|
-
<dc:Bounds x="
|
|
564
|
+
<dc:Bounds x="1726" y="1182" width="81" height="28" />
|
|
532
565
|
</bpmndi:BPMNLabel>
|
|
533
566
|
</bpmndi:BPMNShape>
|
|
534
567
|
<bpmndi:BPMNShape id="BPMNShape_persist-escalation-noprogress" bpmnElement="persist-escalation-noprogress">
|
|
535
|
-
<dc:Bounds x="
|
|
568
|
+
<dc:Bounds x="1916" y="1200" width="100" height="80" />
|
|
536
569
|
</bpmndi:BPMNShape>
|
|
537
570
|
<bpmndi:BPMNShape id="BPMNShape_gw-review-wait" bpmnElement="gw-review-wait" isMarkerVisible="true">
|
|
538
|
-
<dc:Bounds x="
|
|
571
|
+
<dc:Bounds x="1941" y="735" width="50" height="50" />
|
|
539
572
|
<bpmndi:BPMNLabel>
|
|
540
|
-
<dc:Bounds x="
|
|
573
|
+
<dc:Bounds x="1922" y="702" width="88" height="28" />
|
|
541
574
|
</bpmndi:BPMNLabel>
|
|
542
575
|
</bpmndi:BPMNShape>
|
|
543
576
|
<bpmndi:BPMNShape id="BPMNShape_wait-review" bpmnElement="wait-review">
|
|
544
|
-
<dc:Bounds x="
|
|
577
|
+
<dc:Bounds x="2148" y="742" width="36" height="36" />
|
|
545
578
|
<bpmndi:BPMNLabel>
|
|
546
|
-
<dc:Bounds x="
|
|
579
|
+
<dc:Bounds x="2122" y="709" width="88" height="28" />
|
|
547
580
|
</bpmndi:BPMNLabel>
|
|
548
581
|
</bpmndi:BPMNShape>
|
|
549
582
|
<bpmndi:BPMNShape id="BPMNShape_wait-review-timeout" bpmnElement="wait-review-timeout">
|
|
550
|
-
<dc:Bounds x="
|
|
583
|
+
<dc:Bounds x="2148" y="902" width="36" height="36" />
|
|
551
584
|
<bpmndi:BPMNLabel>
|
|
552
|
-
<dc:Bounds x="
|
|
585
|
+
<dc:Bounds x="2138" y="943" width="56" height="42" />
|
|
553
586
|
</bpmndi:BPMNLabel>
|
|
554
587
|
</bpmndi:BPMNShape>
|
|
555
588
|
<bpmndi:BPMNShape id="BPMNShape_persist-review-stalled" bpmnElement="persist-review-stalled">
|
|
556
|
-
<dc:Bounds x="
|
|
589
|
+
<dc:Bounds x="2316" y="880" width="100" height="80" />
|
|
557
590
|
</bpmndi:BPMNShape>
|
|
558
591
|
<bpmndi:BPMNShape id="BPMNShape_persist-escalation" bpmnElement="persist-escalation">
|
|
559
|
-
<dc:Bounds x="766" y="
|
|
592
|
+
<dc:Bounds x="766" y="1360" width="100" height="80" />
|
|
560
593
|
</bpmndi:BPMNShape>
|
|
561
594
|
<bpmndi:BPMNShape id="BPMNShape_gw-escalated" bpmnElement="gw-escalated" isMarkerVisible="true">
|
|
562
|
-
<dc:Bounds x="
|
|
595
|
+
<dc:Bounds x="2516" y="415" width="50" height="50" />
|
|
563
596
|
<bpmndi:BPMNLabel>
|
|
564
|
-
<dc:Bounds x="
|
|
597
|
+
<dc:Bounds x="2504" y="382" width="74" height="28" />
|
|
565
598
|
</bpmndi:BPMNLabel>
|
|
566
599
|
</bpmndi:BPMNShape>
|
|
567
600
|
<bpmndi:BPMNShape id="BPMNShape_persist-escalation-maxrounds" bpmnElement="persist-escalation-maxrounds">
|
|
568
|
-
<dc:Bounds x="
|
|
601
|
+
<dc:Bounds x="1916" y="1040" width="100" height="80" />
|
|
569
602
|
</bpmndi:BPMNShape>
|
|
570
603
|
<bpmndi:BPMNShape id="BPMNShape_wait-answer" bpmnElement="wait-answer">
|
|
571
|
-
<dc:Bounds x="
|
|
604
|
+
<dc:Bounds x="2666" y="400" width="100" height="80" />
|
|
572
605
|
</bpmndi:BPMNShape>
|
|
573
606
|
<bpmndi:BPMNShape id="BPMNShape_record-answer" bpmnElement="record-answer">
|
|
574
|
-
<dc:Bounds x="
|
|
607
|
+
<dc:Bounds x="2866" y="400" width="100" height="80" />
|
|
608
|
+
</bpmndi:BPMNShape>
|
|
609
|
+
<bpmndi:BPMNShape id="BPMNShape_gw-approval" bpmnElement="gw-approval" isMarkerVisible="true">
|
|
610
|
+
<dc:Bounds x="1541" y="95" width="50" height="50" />
|
|
611
|
+
<bpmndi:BPMNLabel>
|
|
612
|
+
<dc:Bounds x="1533" y="62" width="67" height="28" />
|
|
613
|
+
</bpmndi:BPMNLabel>
|
|
614
|
+
</bpmndi:BPMNShape>
|
|
615
|
+
<bpmndi:BPMNShape id="BPMNShape_merge-approval" bpmnElement="merge-approval">
|
|
616
|
+
<dc:Bounds x="1716" y="240" width="100" height="80" />
|
|
617
|
+
</bpmndi:BPMNShape>
|
|
618
|
+
<bpmndi:BPMNShape id="BPMNShape_gw-approved" bpmnElement="gw-approved" isMarkerVisible="true">
|
|
619
|
+
<dc:Bounds x="1941" y="255" width="50" height="50" />
|
|
620
|
+
<bpmndi:BPMNLabel>
|
|
621
|
+
<dc:Bounds x="1996" y="266" width="67" height="28" />
|
|
622
|
+
</bpmndi:BPMNLabel>
|
|
575
623
|
</bpmndi:BPMNShape>
|
|
576
624
|
<bpmndi:BPMNShape id="BPMNShape_persist-converged" bpmnElement="persist-converged">
|
|
577
|
-
<dc:Bounds x="
|
|
625
|
+
<dc:Bounds x="2116" y="80" width="100" height="80" />
|
|
578
626
|
</bpmndi:BPMNShape>
|
|
579
627
|
<bpmndi:BPMNShape id="BPMNShape_check-converge" bpmnElement="check-converge">
|
|
580
628
|
<dc:Bounds x="766" y="80" width="100" height="80" />
|
|
@@ -586,13 +634,13 @@
|
|
|
586
634
|
</bpmndi:BPMNLabel>
|
|
587
635
|
</bpmndi:BPMNShape>
|
|
588
636
|
<bpmndi:BPMNShape id="BPMNShape_gw-ack-retry" bpmnElement="gw-ack-retry" isMarkerVisible="true">
|
|
589
|
-
<dc:Bounds x="1141" y="
|
|
637
|
+
<dc:Bounds x="1141" y="575" width="50" height="50" />
|
|
590
638
|
<bpmndi:BPMNLabel>
|
|
591
|
-
<dc:Bounds x="1136" y="
|
|
639
|
+
<dc:Bounds x="1136" y="528" width="60" height="42" />
|
|
592
640
|
</bpmndi:BPMNLabel>
|
|
593
641
|
</bpmndi:BPMNShape>
|
|
594
642
|
<bpmndi:BPMNShape id="BPMNShape_persist-escalation-blockedcomments" bpmnElement="persist-escalation-blockedcomments">
|
|
595
|
-
<dc:Bounds x="1316" y="
|
|
643
|
+
<dc:Bounds x="1316" y="560" width="100" height="80" />
|
|
596
644
|
</bpmndi:BPMNShape>
|
|
597
645
|
<bpmndi:BPMNShape id="BPMNShape_classify-scope" bpmnElement="classify-scope">
|
|
598
646
|
<dc:Bounds x="1116" y="80" width="100" height="80" />
|
|
@@ -604,12 +652,12 @@
|
|
|
604
652
|
</bpmndi:BPMNLabel>
|
|
605
653
|
</bpmndi:BPMNShape>
|
|
606
654
|
<bpmndi:BPMNShape id="BPMNShape_persist-escalation-scope" bpmnElement="persist-escalation-scope">
|
|
607
|
-
<dc:Bounds x="1516" y="
|
|
655
|
+
<dc:Bounds x="1516" y="400" width="100" height="80" />
|
|
608
656
|
</bpmndi:BPMNShape>
|
|
609
657
|
<bpmndi:BPMNShape id="BPMNShape_End" bpmnElement="End">
|
|
610
|
-
<dc:Bounds x="
|
|
658
|
+
<dc:Bounds x="2348" y="102" width="36" height="36" />
|
|
611
659
|
<bpmndi:BPMNLabel>
|
|
612
|
-
<dc:Bounds x="
|
|
660
|
+
<dc:Bounds x="2332" y="143" width="69" height="14" />
|
|
613
661
|
</bpmndi:BPMNLabel>
|
|
614
662
|
</bpmndi:BPMNShape>
|
|
615
663
|
<bpmndi:BPMNEdge id="BPMNEdge_f_start" bpmnElement="f_start">
|
|
@@ -648,210 +696,246 @@
|
|
|
648
696
|
</bpmndi:BPMNEdge>
|
|
649
697
|
<bpmndi:BPMNEdge id="BPMNEdge_f_scopeOk" bpmnElement="f_scopeOk">
|
|
650
698
|
<di:waypoint x="1391" y="120" />
|
|
651
|
-
<di:waypoint x="
|
|
699
|
+
<di:waypoint x="1541" y="120" />
|
|
652
700
|
<bpmndi:BPMNLabel>
|
|
653
|
-
<dc:Bounds x="
|
|
701
|
+
<dc:Bounds x="1427" y="73" width="78" height="42" />
|
|
702
|
+
</bpmndi:BPMNLabel>
|
|
703
|
+
</bpmndi:BPMNEdge>
|
|
704
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_noApproval" bpmnElement="f_noApproval">
|
|
705
|
+
<di:waypoint x="1591" y="120" />
|
|
706
|
+
<di:waypoint x="2116" y="120" />
|
|
707
|
+
<bpmndi:BPMNLabel>
|
|
708
|
+
<dc:Bounds x="1734" y="87" width="89" height="28" />
|
|
654
709
|
</bpmndi:BPMNLabel>
|
|
655
710
|
</bpmndi:BPMNEdge>
|
|
656
711
|
<bpmndi:BPMNEdge id="BPMNEdge_f_finalize" bpmnElement="f_finalize">
|
|
657
|
-
<di:waypoint x="
|
|
658
|
-
<di:waypoint x="
|
|
712
|
+
<di:waypoint x="2216" y="120" />
|
|
713
|
+
<di:waypoint x="2348" y="120" />
|
|
659
714
|
</bpmndi:BPMNEdge>
|
|
660
715
|
<bpmndi:BPMNEdge id="BPMNEdge_f_ackEscalate" bpmnElement="f_ackEscalate">
|
|
661
|
-
<di:waypoint x="1191" y="
|
|
662
|
-
<di:waypoint x="1316" y="
|
|
716
|
+
<di:waypoint x="1191" y="600" />
|
|
717
|
+
<di:waypoint x="1316" y="600" />
|
|
718
|
+
<bpmndi:BPMNLabel>
|
|
719
|
+
<dc:Bounds x="1220" y="553" width="67" height="42" />
|
|
720
|
+
</bpmndi:BPMNLabel>
|
|
721
|
+
</bpmndi:BPMNEdge>
|
|
722
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_revise" bpmnElement="f_revise">
|
|
723
|
+
<di:waypoint x="1966" y="305" />
|
|
724
|
+
<di:waypoint x="1966" y="340" />
|
|
725
|
+
<di:waypoint x="266" y="340" />
|
|
726
|
+
<di:waypoint x="266" y="160" />
|
|
663
727
|
<bpmndi:BPMNLabel>
|
|
664
|
-
<dc:Bounds x="
|
|
728
|
+
<dc:Bounds x="1077" y="293" width="78" height="42" />
|
|
665
729
|
</bpmndi:BPMNLabel>
|
|
666
730
|
</bpmndi:BPMNEdge>
|
|
667
731
|
<bpmndi:BPMNEdge id="BPMNEdge_f_blockedGate" bpmnElement="f_blockedGate">
|
|
668
|
-
<di:waypoint x="1416" y="
|
|
669
|
-
<di:waypoint x="
|
|
670
|
-
<di:waypoint x="
|
|
732
|
+
<di:waypoint x="1416" y="600" />
|
|
733
|
+
<di:waypoint x="2541" y="600" />
|
|
734
|
+
<di:waypoint x="2541" y="465" />
|
|
671
735
|
</bpmndi:BPMNEdge>
|
|
672
736
|
<bpmndi:BPMNEdge id="BPMNEdge_f_guardOk" bpmnElement="f_guardOk">
|
|
673
|
-
<di:waypoint x="
|
|
674
|
-
<di:waypoint x="
|
|
737
|
+
<di:waypoint x="1791" y="760" />
|
|
738
|
+
<di:waypoint x="1941" y="760" />
|
|
675
739
|
<bpmndi:BPMNLabel>
|
|
676
|
-
<dc:Bounds x="
|
|
740
|
+
<dc:Bounds x="1814" y="768" width="60" height="14" />
|
|
677
741
|
</bpmndi:BPMNLabel>
|
|
678
742
|
</bpmndi:BPMNEdge>
|
|
679
743
|
<bpmndi:BPMNEdge id="BPMNEdge_f_roundWait" bpmnElement="f_roundWait">
|
|
680
|
-
<di:waypoint x="1216" y="
|
|
681
|
-
<di:waypoint x="1316" y="
|
|
744
|
+
<di:waypoint x="1216" y="760" />
|
|
745
|
+
<di:waypoint x="1316" y="760" />
|
|
682
746
|
</bpmndi:BPMNEdge>
|
|
683
747
|
<bpmndi:BPMNEdge id="BPMNEdge_f_checkGate" bpmnElement="f_checkGate">
|
|
684
|
-
<di:waypoint x="1416" y="
|
|
685
|
-
<di:waypoint x="1541" y="
|
|
748
|
+
<di:waypoint x="1416" y="760" />
|
|
749
|
+
<di:waypoint x="1541" y="760" />
|
|
686
750
|
</bpmndi:BPMNEdge>
|
|
687
751
|
<bpmndi:BPMNEdge id="BPMNEdge_f_huskEscalate" bpmnElement="f_huskEscalate">
|
|
688
|
-
<di:waypoint x="
|
|
689
|
-
<di:waypoint x="
|
|
752
|
+
<di:waypoint x="1791" y="1240" />
|
|
753
|
+
<di:waypoint x="1916" y="1240" />
|
|
690
754
|
<bpmndi:BPMNLabel>
|
|
691
|
-
<dc:Bounds x="
|
|
755
|
+
<dc:Bounds x="1824" y="1218" width="60" height="14" />
|
|
692
756
|
</bpmndi:BPMNLabel>
|
|
693
757
|
</bpmndi:BPMNEdge>
|
|
694
758
|
<bpmndi:BPMNEdge id="BPMNEdge_f_progressOk" bpmnElement="f_progressOk">
|
|
695
|
-
<di:waypoint x="1591" y="
|
|
696
|
-
<di:waypoint x="
|
|
759
|
+
<di:waypoint x="1591" y="760" />
|
|
760
|
+
<di:waypoint x="1741" y="760" />
|
|
697
761
|
<bpmndi:BPMNLabel>
|
|
698
|
-
<dc:Bounds x="
|
|
762
|
+
<dc:Bounds x="1621" y="727" width="71" height="28" />
|
|
699
763
|
</bpmndi:BPMNLabel>
|
|
700
764
|
</bpmndi:BPMNEdge>
|
|
701
765
|
<bpmndi:BPMNEdge id="BPMNEdge_f_noprogressGate" bpmnElement="f_noprogressGate">
|
|
702
|
-
<di:waypoint x="
|
|
703
|
-
<di:waypoint x="
|
|
704
|
-
<di:waypoint x="
|
|
766
|
+
<di:waypoint x="2016" y="1240" />
|
|
767
|
+
<di:waypoint x="2541" y="1240" />
|
|
768
|
+
<di:waypoint x="2541" y="465" />
|
|
705
769
|
</bpmndi:BPMNEdge>
|
|
706
770
|
<bpmndi:BPMNEdge id="BPMNEdge_f_toReviewWait" bpmnElement="f_toReviewWait">
|
|
707
|
-
<di:waypoint x="
|
|
708
|
-
<di:waypoint x="
|
|
771
|
+
<di:waypoint x="1991" y="760" />
|
|
772
|
+
<di:waypoint x="2148" y="760" />
|
|
709
773
|
</bpmndi:BPMNEdge>
|
|
710
774
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reviewLoop" bpmnElement="f_reviewLoop">
|
|
711
|
-
<di:waypoint x="
|
|
712
|
-
<di:waypoint x="
|
|
713
|
-
<di:waypoint x="266" y="
|
|
775
|
+
<di:waypoint x="2166" y="778" />
|
|
776
|
+
<di:waypoint x="2166" y="820" />
|
|
777
|
+
<di:waypoint x="266" y="820" />
|
|
714
778
|
<di:waypoint x="266" y="160" />
|
|
715
779
|
</bpmndi:BPMNEdge>
|
|
716
780
|
<bpmndi:BPMNEdge id="BPMNEdge_f_escReenter" bpmnElement="f_escReenter">
|
|
717
|
-
<di:waypoint x="
|
|
718
|
-
<di:waypoint x="
|
|
719
|
-
<di:waypoint x="1166" y="
|
|
720
|
-
<di:waypoint x="1166" y="
|
|
781
|
+
<di:waypoint x="2541" y="465" />
|
|
782
|
+
<di:waypoint x="2541" y="820" />
|
|
783
|
+
<di:waypoint x="1166" y="820" />
|
|
784
|
+
<di:waypoint x="1166" y="800" />
|
|
721
785
|
<bpmndi:BPMNLabel>
|
|
722
|
-
<dc:Bounds x="
|
|
786
|
+
<dc:Bounds x="2317" y="773" width="74" height="42" />
|
|
723
787
|
</bpmndi:BPMNLabel>
|
|
724
788
|
</bpmndi:BPMNEdge>
|
|
725
789
|
<bpmndi:BPMNEdge id="BPMNEdge_f_convergeBlocked" bpmnElement="f_convergeBlocked">
|
|
726
790
|
<di:waypoint x="991" y="145" />
|
|
727
|
-
<di:waypoint x="991" y="
|
|
728
|
-
<di:waypoint x="1141" y="
|
|
791
|
+
<di:waypoint x="991" y="600" />
|
|
792
|
+
<di:waypoint x="1141" y="600" />
|
|
729
793
|
<bpmndi:BPMNLabel>
|
|
730
|
-
<dc:Bounds x="1026" y="
|
|
794
|
+
<dc:Bounds x="1026" y="567" width="81" height="28" />
|
|
731
795
|
</bpmndi:BPMNLabel>
|
|
732
796
|
</bpmndi:BPMNEdge>
|
|
733
797
|
<bpmndi:BPMNEdge id="BPMNEdge_f_convergeStale" bpmnElement="f_convergeStale">
|
|
734
798
|
<di:waypoint x="991" y="145" />
|
|
735
|
-
<di:waypoint x="991" y="
|
|
736
|
-
<di:waypoint x="1116" y="
|
|
799
|
+
<di:waypoint x="991" y="760" />
|
|
800
|
+
<di:waypoint x="1116" y="760" />
|
|
737
801
|
<bpmndi:BPMNLabel>
|
|
738
|
-
<dc:Bounds x="996" y="
|
|
802
|
+
<dc:Bounds x="996" y="673" width="88" height="14" />
|
|
739
803
|
</bpmndi:BPMNLabel>
|
|
740
804
|
</bpmndi:BPMNEdge>
|
|
741
805
|
<bpmndi:BPMNEdge id="BPMNEdge_f_scopeBlocked" bpmnElement="f_scopeBlocked">
|
|
742
806
|
<di:waypoint x="1366" y="145" />
|
|
743
|
-
<di:waypoint x="1366" y="
|
|
744
|
-
<di:waypoint x="1516" y="
|
|
807
|
+
<di:waypoint x="1366" y="440" />
|
|
808
|
+
<di:waypoint x="1516" y="440" />
|
|
809
|
+
<bpmndi:BPMNLabel>
|
|
810
|
+
<dc:Bounds x="1371" y="272" width="88" height="42" />
|
|
811
|
+
</bpmndi:BPMNLabel>
|
|
812
|
+
</bpmndi:BPMNEdge>
|
|
813
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_needApproval" bpmnElement="f_needApproval">
|
|
814
|
+
<di:waypoint x="1566" y="145" />
|
|
815
|
+
<di:waypoint x="1566" y="280" />
|
|
816
|
+
<di:waypoint x="1716" y="280" />
|
|
745
817
|
<bpmndi:BPMNLabel>
|
|
746
|
-
<dc:Bounds x="
|
|
818
|
+
<dc:Bounds x="1571" y="199" width="60" height="28" />
|
|
819
|
+
</bpmndi:BPMNLabel>
|
|
820
|
+
</bpmndi:BPMNEdge>
|
|
821
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_approve" bpmnElement="f_approve">
|
|
822
|
+
<di:waypoint x="1966" y="255" />
|
|
823
|
+
<di:waypoint x="1966" y="120" />
|
|
824
|
+
<di:waypoint x="2116" y="120" />
|
|
825
|
+
<bpmndi:BPMNLabel>
|
|
826
|
+
<dc:Bounds x="1971" y="181" width="60" height="14" />
|
|
747
827
|
</bpmndi:BPMNLabel>
|
|
748
828
|
</bpmndi:BPMNEdge>
|
|
749
829
|
<bpmndi:BPMNEdge id="BPMNEdge_f_addressed" bpmnElement="f_addressed">
|
|
750
830
|
<di:waypoint x="641" y="145" />
|
|
751
|
-
<di:waypoint x="641" y="
|
|
752
|
-
<di:waypoint x="1116" y="
|
|
831
|
+
<di:waypoint x="641" y="760" />
|
|
832
|
+
<di:waypoint x="1116" y="760" />
|
|
753
833
|
<bpmndi:BPMNLabel>
|
|
754
|
-
<dc:Bounds x="646" y="
|
|
834
|
+
<dc:Bounds x="646" y="439" width="78" height="28" />
|
|
755
835
|
</bpmndi:BPMNLabel>
|
|
756
836
|
</bpmndi:BPMNEdge>
|
|
757
837
|
<bpmndi:BPMNEdge id="BPMNEdge_f_waiting" bpmnElement="f_waiting">
|
|
758
838
|
<di:waypoint x="641" y="145" />
|
|
759
|
-
<di:waypoint x="641" y="
|
|
760
|
-
<di:waypoint x="1116" y="
|
|
839
|
+
<di:waypoint x="641" y="760" />
|
|
840
|
+
<di:waypoint x="1116" y="760" />
|
|
761
841
|
<bpmndi:BPMNLabel>
|
|
762
|
-
<dc:Bounds x="580" y="
|
|
842
|
+
<dc:Bounds x="580" y="446" width="56" height="14" />
|
|
763
843
|
</bpmndi:BPMNLabel>
|
|
764
844
|
</bpmndi:BPMNEdge>
|
|
765
845
|
<bpmndi:BPMNEdge id="BPMNEdge_f_escalate" bpmnElement="f_escalate">
|
|
766
846
|
<di:waypoint x="641" y="145" />
|
|
767
|
-
<di:waypoint x="641" y="
|
|
768
|
-
<di:waypoint x="766" y="
|
|
847
|
+
<di:waypoint x="641" y="1400" />
|
|
848
|
+
<di:waypoint x="766" y="1400" />
|
|
769
849
|
<bpmndi:BPMNLabel>
|
|
770
|
-
<dc:Bounds x="646" y="
|
|
850
|
+
<dc:Bounds x="646" y="1066" width="81" height="28" />
|
|
771
851
|
</bpmndi:BPMNLabel>
|
|
772
852
|
</bpmndi:BPMNEdge>
|
|
773
853
|
<bpmndi:BPMNEdge id="BPMNEdge_f_guardMax" bpmnElement="f_guardMax">
|
|
774
|
-
<di:waypoint x="
|
|
775
|
-
<di:waypoint x="
|
|
776
|
-
<di:waypoint x="
|
|
777
|
-
<di:waypoint x="
|
|
854
|
+
<di:waypoint x="1791" y="760" />
|
|
855
|
+
<di:waypoint x="1896" y="760" />
|
|
856
|
+
<di:waypoint x="1896" y="1080" />
|
|
857
|
+
<di:waypoint x="1916" y="1080" />
|
|
778
858
|
<bpmndi:BPMNLabel>
|
|
779
|
-
<dc:Bounds x="
|
|
859
|
+
<dc:Bounds x="1817" y="913" width="74" height="14" />
|
|
780
860
|
</bpmndi:BPMNLabel>
|
|
781
861
|
</bpmndi:BPMNEdge>
|
|
782
862
|
<bpmndi:BPMNEdge id="BPMNEdge_f_noProgress" bpmnElement="f_noProgress">
|
|
783
|
-
<di:waypoint x="1591" y="
|
|
784
|
-
<di:waypoint x="
|
|
785
|
-
<di:waypoint x="
|
|
786
|
-
<di:waypoint x="
|
|
863
|
+
<di:waypoint x="1591" y="760" />
|
|
864
|
+
<di:waypoint x="1721" y="760" />
|
|
865
|
+
<di:waypoint x="1721" y="1240" />
|
|
866
|
+
<di:waypoint x="1741" y="1240" />
|
|
787
867
|
<bpmndi:BPMNLabel>
|
|
788
|
-
<dc:Bounds x="
|
|
868
|
+
<dc:Bounds x="1726" y="993" width="78" height="14" />
|
|
789
869
|
</bpmndi:BPMNLabel>
|
|
790
870
|
</bpmndi:BPMNEdge>
|
|
791
871
|
<bpmndi:BPMNEdge id="BPMNEdge_f_toReviewTimeout" bpmnElement="f_toReviewTimeout">
|
|
792
|
-
<di:waypoint x="
|
|
793
|
-
<di:waypoint x="
|
|
794
|
-
<di:waypoint x="
|
|
872
|
+
<di:waypoint x="1966" y="785" />
|
|
873
|
+
<di:waypoint x="1966" y="920" />
|
|
874
|
+
<di:waypoint x="2148" y="920" />
|
|
875
|
+
</bpmndi:BPMNEdge>
|
|
876
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_toApproved" bpmnElement="f_toApproved">
|
|
877
|
+
<di:waypoint x="1816" y="280" />
|
|
878
|
+
<di:waypoint x="1941" y="280" />
|
|
795
879
|
</bpmndi:BPMNEdge>
|
|
796
880
|
<bpmndi:BPMNEdge id="BPMNEdge_f_scopeEscGate" bpmnElement="f_scopeEscGate">
|
|
797
|
-
<di:waypoint x="1616" y="
|
|
798
|
-
<di:waypoint x="
|
|
881
|
+
<di:waypoint x="1616" y="440" />
|
|
882
|
+
<di:waypoint x="2516" y="440" />
|
|
799
883
|
</bpmndi:BPMNEdge>
|
|
800
884
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reviewStalled" bpmnElement="f_reviewStalled">
|
|
801
|
-
<di:waypoint x="
|
|
802
|
-
<di:waypoint x="
|
|
885
|
+
<di:waypoint x="2184" y="920" />
|
|
886
|
+
<di:waypoint x="2316" y="920" />
|
|
803
887
|
</bpmndi:BPMNEdge>
|
|
804
888
|
<bpmndi:BPMNEdge id="BPMNEdge_f_stalledGate" bpmnElement="f_stalledGate">
|
|
805
|
-
<di:waypoint x="
|
|
806
|
-
<di:waypoint x="
|
|
807
|
-
<di:waypoint x="
|
|
808
|
-
<di:waypoint x="
|
|
809
|
-
<di:waypoint x="
|
|
889
|
+
<di:waypoint x="2416" y="920" />
|
|
890
|
+
<di:waypoint x="2586" y="920" />
|
|
891
|
+
<di:waypoint x="2586" y="465" />
|
|
892
|
+
<di:waypoint x="2586" y="440" />
|
|
893
|
+
<di:waypoint x="2566" y="440" />
|
|
810
894
|
</bpmndi:BPMNEdge>
|
|
811
895
|
<bpmndi:BPMNEdge id="BPMNEdge_f_escGate" bpmnElement="f_escGate">
|
|
812
|
-
<di:waypoint x="866" y="
|
|
813
|
-
<di:waypoint x="
|
|
814
|
-
<di:waypoint x="
|
|
815
|
-
<di:waypoint x="
|
|
816
|
-
<di:waypoint x="
|
|
896
|
+
<di:waypoint x="866" y="1400" />
|
|
897
|
+
<di:waypoint x="2586" y="1400" />
|
|
898
|
+
<di:waypoint x="2586" y="465" />
|
|
899
|
+
<di:waypoint x="2586" y="440" />
|
|
900
|
+
<di:waypoint x="2566" y="440" />
|
|
817
901
|
</bpmndi:BPMNEdge>
|
|
818
902
|
<bpmndi:BPMNEdge id="BPMNEdge_f_escWait" bpmnElement="f_escWait">
|
|
819
|
-
<di:waypoint x="
|
|
820
|
-
<di:waypoint x="
|
|
903
|
+
<di:waypoint x="2566" y="440" />
|
|
904
|
+
<di:waypoint x="2666" y="440" />
|
|
821
905
|
</bpmndi:BPMNEdge>
|
|
822
906
|
<bpmndi:BPMNEdge id="BPMNEdge_f_maxGate" bpmnElement="f_maxGate">
|
|
823
|
-
<di:waypoint x="
|
|
824
|
-
<di:waypoint x="
|
|
825
|
-
<di:waypoint x="
|
|
826
|
-
<di:waypoint x="
|
|
827
|
-
<di:waypoint x="
|
|
907
|
+
<di:waypoint x="2016" y="1080" />
|
|
908
|
+
<di:waypoint x="2586" y="1080" />
|
|
909
|
+
<di:waypoint x="2586" y="465" />
|
|
910
|
+
<di:waypoint x="2586" y="440" />
|
|
911
|
+
<di:waypoint x="2566" y="440" />
|
|
828
912
|
</bpmndi:BPMNEdge>
|
|
829
913
|
<bpmndi:BPMNEdge id="BPMNEdge_f_answerRecord" bpmnElement="f_answerRecord">
|
|
830
|
-
<di:waypoint x="
|
|
831
|
-
<di:waypoint x="
|
|
914
|
+
<di:waypoint x="2766" y="440" />
|
|
915
|
+
<di:waypoint x="2866" y="440" />
|
|
832
916
|
</bpmndi:BPMNEdge>
|
|
833
917
|
<bpmndi:BPMNEdge id="BPMNEdge_f_ackRetry" bpmnElement="f_ackRetry">
|
|
834
|
-
<di:waypoint x="1166" y="
|
|
835
|
-
<di:waypoint x="1166" y="
|
|
836
|
-
<di:waypoint x="266" y="
|
|
918
|
+
<di:waypoint x="1166" y="625" />
|
|
919
|
+
<di:waypoint x="1166" y="645" />
|
|
920
|
+
<di:waypoint x="266" y="645" />
|
|
837
921
|
<di:waypoint x="266" y="160" />
|
|
838
922
|
<bpmndi:BPMNLabel>
|
|
839
|
-
<dc:Bounds x="686" y="
|
|
923
|
+
<dc:Bounds x="686" y="598" width="60" height="42" />
|
|
840
924
|
</bpmndi:BPMNLabel>
|
|
841
925
|
</bpmndi:BPMNEdge>
|
|
842
926
|
<bpmndi:BPMNEdge id="BPMNEdge_f_huskRetry" bpmnElement="f_huskRetry">
|
|
843
|
-
<di:waypoint x="
|
|
844
|
-
<di:waypoint x="
|
|
845
|
-
<di:waypoint x="266" y="
|
|
927
|
+
<di:waypoint x="1766" y="1265" />
|
|
928
|
+
<di:waypoint x="1766" y="1285" />
|
|
929
|
+
<di:waypoint x="266" y="1285" />
|
|
846
930
|
<di:waypoint x="266" y="160" />
|
|
847
931
|
<bpmndi:BPMNLabel>
|
|
848
|
-
<dc:Bounds x="
|
|
932
|
+
<dc:Bounds x="975" y="1252" width="82" height="28" />
|
|
849
933
|
</bpmndi:BPMNLabel>
|
|
850
934
|
</bpmndi:BPMNEdge>
|
|
851
935
|
<bpmndi:BPMNEdge id="BPMNEdge_f_answerLoop" bpmnElement="f_answerLoop">
|
|
852
|
-
<di:waypoint x="
|
|
853
|
-
<di:waypoint x="
|
|
854
|
-
<di:waypoint x="266" y="
|
|
936
|
+
<di:waypoint x="2916" y="480" />
|
|
937
|
+
<di:waypoint x="2916" y="500" />
|
|
938
|
+
<di:waypoint x="266" y="500" />
|
|
855
939
|
<di:waypoint x="266" y="160" />
|
|
856
940
|
</bpmndi:BPMNEdge>
|
|
857
941
|
</bpmndi:BPMNPlane>
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
<nano:extend name="featureKey" type="string" />
|
|
18
18
|
<nano:extend name="prKey" type="string" optional="true" />
|
|
19
19
|
<nano:extend name="autoMerge" type="boolean" optional="true" />
|
|
20
|
+
<nano:extend name="humanApproval" type="boolean" optional="true" />
|
|
20
21
|
</nano:shape>
|
|
21
22
|
</nano:shapes>
|
|
22
23
|
</bpmn:extensionElements>
|
|
@@ -249,6 +250,7 @@
|
|
|
249
250
|
<zeebe:input source="=featureKey" target="featureKey" />
|
|
250
251
|
<zeebe:input source="=prKey" target="prKey" />
|
|
251
252
|
<zeebe:input source="=autoMerge" target="autoMerge" />
|
|
253
|
+
<zeebe:input source="=humanApproval" target="humanApproval" />
|
|
252
254
|
</zeebe:ioMapping>
|
|
253
255
|
</bpmn:extensionElements>
|
|
254
256
|
<bpmn:incoming>f_converge</bpmn:incoming>
|
|
@@ -23,7 +23,7 @@ cancel can land anytime.
|
|
|
23
23
|
| `repo` | `owner/name` |
|
|
24
24
|
| `prNumber` | PR number |
|
|
25
25
|
| `round` | 1-based round counter |
|
|
26
|
-
| `answer` | present only when resuming from an escalation
|
|
26
|
+
| `answer` | present only when resuming from a human: an escalation reply, or merge-approval change requests|
|
|
27
27
|
| `prompt` | this document |
|
|
28
28
|
|
|
29
29
|
## Workspace (host mode) — read this first
|
|
@@ -71,8 +71,9 @@ Because several agents may run on the same host at once:
|
|
|
71
71
|
"low confidence" list Copilot folds into the **review body** (`.../reviews`
|
|
72
72
|
`body`). These are NOT in the default inline-comment API set, so a plain
|
|
73
73
|
`.../comments` read misses them; scan the review body for them explicitly.
|
|
74
|
-
If `answer` is present,
|
|
75
|
-
raised last round
|
|
74
|
+
If `answer` is present, it is a human's instruction: either the decision on the
|
|
75
|
+
escalation you raised last round, or change requests from merge approval of this
|
|
76
|
+
converged PR. Act on it first, on this same PR branch (never open a new PR).
|
|
76
77
|
2. **Triage each item** into: *fix* (correct, worth doing), *nitpick* (apply
|
|
77
78
|
silently), *needs human input* (design/product/tradeoff you can't decide), or
|
|
78
79
|
*push back* (wrong / false positive — reply with evidence, make no change). Triage
|
|
@@ -72,9 +72,10 @@ sufficient_. Three golden features have no structured-builder derivation, each
|
|
|
72
72
|
pinned by a diagnostic in `derivation-parity.test.ts`:
|
|
73
73
|
|
|
74
74
|
1. **Task-level back-edge merge.** The loop head `capture-head` is a
|
|
75
|
-
`serviceTask` that merges **
|
|
76
|
-
`f_reviewLoop`, `f_answerLoop`, the #786 husk auto-retry `f_huskRetry`,
|
|
77
|
-
the bounded auto-ack re-entry `f_ackRetry` added in #796
|
|
75
|
+
`serviceTask` that merges **six** back-edges directly (`in=6`: `f_start`,
|
|
76
|
+
`f_reviewLoop`, `f_answerLoop`, the #786 husk auto-retry `f_huskRetry`,
|
|
77
|
+
the bounded auto-ack re-entry `f_ackRetry` added in #796, and the #826
|
|
78
|
+
merge-approval change request `f_revise`); `review-round`
|
|
78
79
|
then takes its single `f_capture` in-edge. But `loop()`
|
|
79
80
|
always inserts an exclusive-gateway loop head that absorbs the back-edge, so
|
|
80
81
|
the body task stays `in=1` — empirically demonstrated by the `loop() inserts a
|