harness-everything 0.36.3 → 0.36.4

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.
Files changed (47) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +10 -0
  4. package/ci/fixtures/doc-obligations/read-boundary/boundary-controls.json +211 -0
  5. package/ci/fixtures/doc-obligations/read-boundary/boundary-policy.json +325 -0
  6. package/ci/fixtures/doc-obligations/read-boundary/cases.json +14058 -0
  7. package/ci/fixtures/doc-obligations/read-boundary/expected.json +1 -0
  8. package/ci/fixtures/doc-obligations/read-boundary/identity-cases.json +119 -0
  9. package/ci/fixtures/doc-obligations/read-boundary/identity-expected.json +1 -0
  10. package/ci/fixtures/doc-obligations/read-boundary/scope-cases.json +208 -0
  11. package/ci/fixtures/doc-obligations/read-boundary/scope-expected.json +1 -0
  12. package/ci/fixtures/doc-obligations/reconciliation-prep/cases.json +2751 -0
  13. package/ci/fixtures/doc-obligations/reconciliation-prep/flood-entrypoint.js +5 -0
  14. package/ci/fixtures/doc-obligations/reconciliation-prep/hang-entrypoint.js +5 -0
  15. package/ci/fixtures/doc-obligations/reconciliation-prep/pending-red.json +648 -0
  16. package/ci/fixtures/doc-obligations/reconciliation-prep/provider-contract.json +100 -0
  17. package/ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json +188 -0
  18. package/ci/lib/doc-evidence-boundary-check.js +1240 -0
  19. package/ci/lib/doc-evidence-fixtures.js +459 -0
  20. package/ci/lib/doc-evidence-trace.js +171 -0
  21. package/ci/lib/doc-reconciliation-prep-fixtures.js +502 -0
  22. package/ci/lib/snapshot-stdin.js +27 -0
  23. package/ci/mechanism-325-3b-preparation.test.js +382 -0
  24. package/ci/mechanism-341-boundary-enforcement.test.js +660 -0
  25. package/ci/mechanism-341-capture-module.test.js +357 -0
  26. package/ci/mechanism-341-mutation-runner.test.js +413 -0
  27. package/ci/mechanism-341-read-boundary.test.js +388 -0
  28. package/ci/mechanism-341-snapshot-stdin.test.js +40 -0
  29. package/ci/mutation-check.js +805 -45
  30. package/ci/mutation-loader.js +544 -57
  31. package/ci/prep/doc-reconciliation-red.js +407 -0
  32. package/ci/stress-341-boundary-control.js +85 -0
  33. package/docs/doc-evidence-baseline-binding.md +105 -19
  34. package/docs/doc-evidence-boundary.md +135 -0
  35. package/docs/doc-workflow-reconciliation.md +224 -0
  36. package/docs/document-lifecycle.md +8 -1
  37. package/harness-everything/SKILL.md +1 -1
  38. package/harness-everything/scripts/doc-evidence-capture.js +331 -0
  39. package/harness-everything/scripts/doc-evidence.js +72 -223
  40. package/opencode-plugin/plugin.json +1 -1
  41. package/package.json +5 -3
  42. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  43. package/plugins/harness-everything/plugin.json +1 -1
  44. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  45. package/plugins/harness-everything/skills/harness-everything/scripts/doc-evidence-capture.js +331 -0
  46. package/plugins/harness-everything/skills/harness-everything/scripts/doc-evidence.js +72 -223
  47. package/sbom.cdx.json +43 -7
@@ -0,0 +1,2751 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "phase": "325-3b-H2",
4
+ "description": "Test-only replay cases for document-reconciliation preparation. Expectations are pinned from captured fixture replays; ON expectations are the proposed contract, and a failing ON expectation is a recorded gap, not a runtime claim.",
5
+ "cases": [
6
+ {
7
+ "id": "P01",
8
+ "family": "P01",
9
+ "description": "Declared doc-change then verification; the verification step is passed with free text only.",
10
+ "topology": "iterative-single-typed",
11
+ "requirements": [
12
+ {
13
+ "id": "req-docs",
14
+ "stepType": "doc-change",
15
+ "summary": "Update the ADR text",
16
+ "acceptance": "normative ADR text is reviewed"
17
+ },
18
+ {
19
+ "id": "req-verify",
20
+ "stepType": "verification",
21
+ "summary": "Verify the ADR change",
22
+ "acceptance": "objective doc checks are recorded"
23
+ }
24
+ ],
25
+ "input": {
26
+ "baseFiles": {},
27
+ "candidateFiles": {},
28
+ "config": null,
29
+ "task": null,
30
+ "hostEvents": []
31
+ },
32
+ "actions": [
33
+ {
34
+ "id": "route",
35
+ "op": "route",
36
+ "payload": {
37
+ "prompt": "Fix this checkout bug and update its documentation."
38
+ }
39
+ },
40
+ {
41
+ "id": "plan",
42
+ "op": "plan",
43
+ "payload": {
44
+ "requirements": "$requirements",
45
+ "strategy": "iterative-single",
46
+ "evidence": "two dependent requirements fit a bounded documentation loop"
47
+ }
48
+ },
49
+ {
50
+ "id": "start",
51
+ "op": "start",
52
+ "payload": {}
53
+ },
54
+ {
55
+ "id": "doc-pass",
56
+ "op": "step",
57
+ "payload": {
58
+ "stepId": "req-docs",
59
+ "disposition": "pass",
60
+ "evidence": "ADR text updated"
61
+ }
62
+ },
63
+ {
64
+ "id": "verify-bind",
65
+ "op": "binding",
66
+ "payload": {
67
+ "stepId": "req-verify",
68
+ "bindingId": "verification-loop",
69
+ "disposition": "loaded",
70
+ "evidence": "verification loop skill located"
71
+ }
72
+ },
73
+ {
74
+ "id": "verify-pass",
75
+ "op": "step",
76
+ "payload": {
77
+ "stepId": "req-verify",
78
+ "disposition": "pass",
79
+ "evidence": "done"
80
+ }
81
+ },
82
+ {
83
+ "id": "stop",
84
+ "op": "stop",
85
+ "payload": {}
86
+ }
87
+ ],
88
+ "expectations": {
89
+ "off": [
90
+ {
91
+ "id": "verify-exit-accepted",
92
+ "path": [
93
+ "actions",
94
+ "verify-pass",
95
+ "exitCode"
96
+ ],
97
+ "operator": "equals",
98
+ "expected": 0
99
+ },
100
+ {
101
+ "id": "verify-obligation-passed",
102
+ "path": [
103
+ "actions",
104
+ "verify-pass",
105
+ "state",
106
+ "obligations",
107
+ "obligations",
108
+ 3,
109
+ "status"
110
+ ],
111
+ "operator": "equals",
112
+ "expected": "pass"
113
+ },
114
+ {
115
+ "id": "stop-satisfied",
116
+ "path": [
117
+ "actions",
118
+ "stop",
119
+ "state",
120
+ "workflow",
121
+ "state"
122
+ ],
123
+ "operator": "equals",
124
+ "expected": "satisfied"
125
+ },
126
+ {
127
+ "id": "pilot-not-credited",
128
+ "path": [
129
+ "pilot"
130
+ ],
131
+ "operator": "equals",
132
+ "expected": null
133
+ }
134
+ ],
135
+ "on": [
136
+ {
137
+ "id": "verify-exit-refused",
138
+ "path": [
139
+ "actions",
140
+ "verify-pass",
141
+ "exitCode"
142
+ ],
143
+ "operator": "equals",
144
+ "expected": 2
145
+ },
146
+ {
147
+ "id": "verify-obligation-pending",
148
+ "path": [
149
+ "actions",
150
+ "verify-pass",
151
+ "state",
152
+ "obligations",
153
+ "obligations",
154
+ 3,
155
+ "status"
156
+ ],
157
+ "operator": "equals",
158
+ "expected": "pending"
159
+ },
160
+ {
161
+ "id": "stop-unsatisfied",
162
+ "path": [
163
+ "actions",
164
+ "stop",
165
+ "state",
166
+ "workflow",
167
+ "state"
168
+ ],
169
+ "operator": "equals",
170
+ "expected": "running"
171
+ },
172
+ {
173
+ "id": "stop-reports-verification",
174
+ "path": [
175
+ "actions",
176
+ "stop",
177
+ "state",
178
+ "workflow",
179
+ "unresolved"
180
+ ],
181
+ "operator": "includes",
182
+ "expected": "step:req-verify:pending"
183
+ }
184
+ ]
185
+ }
186
+ },
187
+ {
188
+ "id": "P04",
189
+ "family": "P04",
190
+ "description": "Direct aggregate execute and verify PASS writes with free text on a doc-governed typed plan.",
191
+ "topology": "iterative-single-typed",
192
+ "requirements": [
193
+ {
194
+ "id": "req-docs",
195
+ "stepType": "doc-change",
196
+ "summary": "Update the ADR text",
197
+ "acceptance": "normative ADR text is reviewed"
198
+ },
199
+ {
200
+ "id": "req-verify",
201
+ "stepType": "verification",
202
+ "summary": "Verify the ADR change",
203
+ "acceptance": "objective doc checks are recorded"
204
+ }
205
+ ],
206
+ "input": {
207
+ "baseFiles": {},
208
+ "candidateFiles": {},
209
+ "config": null,
210
+ "task": null,
211
+ "hostEvents": []
212
+ },
213
+ "actions": [
214
+ {
215
+ "id": "route",
216
+ "op": "route",
217
+ "payload": {
218
+ "prompt": "Fix this checkout bug and update its documentation."
219
+ }
220
+ },
221
+ {
222
+ "id": "plan",
223
+ "op": "plan",
224
+ "payload": {
225
+ "requirements": "$requirements",
226
+ "strategy": "iterative-single",
227
+ "evidence": "two dependent requirements fit a bounded documentation loop"
228
+ }
229
+ },
230
+ {
231
+ "id": "start",
232
+ "op": "start",
233
+ "payload": {}
234
+ },
235
+ {
236
+ "id": "direct-execute",
237
+ "op": "obligation",
238
+ "payload": {
239
+ "obligationId": "execute",
240
+ "disposition": "pass",
241
+ "evidence": "done"
242
+ }
243
+ },
244
+ {
245
+ "id": "direct-verify",
246
+ "op": "obligation",
247
+ "payload": {
248
+ "obligationId": "verify",
249
+ "disposition": "pass",
250
+ "evidence": "done"
251
+ }
252
+ },
253
+ {
254
+ "id": "stop",
255
+ "op": "stop",
256
+ "payload": {}
257
+ }
258
+ ],
259
+ "expectations": {
260
+ "off": [
261
+ {
262
+ "id": "direct-execute-accepted",
263
+ "path": [
264
+ "actions",
265
+ "direct-execute",
266
+ "exitCode"
267
+ ],
268
+ "operator": "equals",
269
+ "expected": 0
270
+ },
271
+ {
272
+ "id": "direct-verify-accepted",
273
+ "path": [
274
+ "actions",
275
+ "direct-verify",
276
+ "exitCode"
277
+ ],
278
+ "operator": "equals",
279
+ "expected": 0
280
+ },
281
+ {
282
+ "id": "verify-obligation-passed-by-text",
283
+ "path": [
284
+ "actions",
285
+ "direct-verify",
286
+ "state",
287
+ "obligations",
288
+ "obligations",
289
+ 3,
290
+ "status"
291
+ ],
292
+ "operator": "equals",
293
+ "expected": "pass"
294
+ },
295
+ {
296
+ "id": "stop-blocked-by-authored-step",
297
+ "path": [
298
+ "actions",
299
+ "stop",
300
+ "state",
301
+ "workflow",
302
+ "unresolved"
303
+ ],
304
+ "operator": "includes",
305
+ "expected": "step:req-docs:pending"
306
+ },
307
+ {
308
+ "id": "pilot-not-credited",
309
+ "path": [
310
+ "pilot"
311
+ ],
312
+ "operator": "equals",
313
+ "expected": null
314
+ }
315
+ ],
316
+ "on": [
317
+ {
318
+ "id": "direct-execute-refused",
319
+ "path": [
320
+ "actions",
321
+ "direct-execute",
322
+ "exitCode"
323
+ ],
324
+ "operator": "equals",
325
+ "expected": 2
326
+ },
327
+ {
328
+ "id": "direct-verify-refused",
329
+ "path": [
330
+ "actions",
331
+ "direct-verify",
332
+ "exitCode"
333
+ ],
334
+ "operator": "equals",
335
+ "expected": 2
336
+ },
337
+ {
338
+ "id": "verify-obligation-pending",
339
+ "path": [
340
+ "actions",
341
+ "direct-verify",
342
+ "state",
343
+ "obligations",
344
+ "obligations",
345
+ 3,
346
+ "status"
347
+ ],
348
+ "operator": "equals",
349
+ "expected": "pending"
350
+ },
351
+ {
352
+ "id": "stop-blocked-by-authored-step",
353
+ "path": [
354
+ "actions",
355
+ "stop",
356
+ "state",
357
+ "workflow",
358
+ "unresolved"
359
+ ],
360
+ "operator": "includes",
361
+ "expected": "step:req-docs:pending"
362
+ }
363
+ ]
364
+ }
365
+ },
366
+ {
367
+ "id": "P06",
368
+ "family": "P06",
369
+ "description": "Non-doc typed code and verification plan with direct aggregate commands: legacy compatibility control.",
370
+ "topology": "iterative-single-typed",
371
+ "requirements": [
372
+ {
373
+ "id": "req-code",
374
+ "stepType": "behavior-change",
375
+ "summary": "Fix the checkout failure",
376
+ "acceptance": "the failing scenario succeeds"
377
+ },
378
+ {
379
+ "id": "req-verify",
380
+ "stepType": "verification",
381
+ "summary": "Verify the checkout change",
382
+ "acceptance": "objective check evidence is recorded"
383
+ }
384
+ ],
385
+ "input": {
386
+ "baseFiles": {},
387
+ "candidateFiles": {},
388
+ "config": null,
389
+ "task": null,
390
+ "hostEvents": []
391
+ },
392
+ "actions": [
393
+ {
394
+ "id": "route",
395
+ "op": "route",
396
+ "payload": {
397
+ "prompt": "Fix this checkout bug and add a regression test."
398
+ }
399
+ },
400
+ {
401
+ "id": "plan",
402
+ "op": "plan",
403
+ "payload": {
404
+ "requirements": "$requirements",
405
+ "strategy": "iterative-single",
406
+ "evidence": "two dependent requirements fit a bounded test-fix-verify loop"
407
+ }
408
+ },
409
+ {
410
+ "id": "start",
411
+ "op": "start",
412
+ "payload": {}
413
+ },
414
+ {
415
+ "id": "direct-execute",
416
+ "op": "obligation",
417
+ "payload": {
418
+ "obligationId": "execute",
419
+ "disposition": "pass",
420
+ "evidence": "typed execution steps are underway"
421
+ }
422
+ },
423
+ {
424
+ "id": "tdd-bind",
425
+ "op": "binding",
426
+ "payload": {
427
+ "stepId": "req-code",
428
+ "bindingId": "tdd",
429
+ "disposition": "loaded",
430
+ "evidence": "tdd skill located"
431
+ }
432
+ },
433
+ {
434
+ "id": "code-pass",
435
+ "op": "step",
436
+ "payload": {
437
+ "stepId": "req-code",
438
+ "disposition": "pass",
439
+ "evidence": "regression test added"
440
+ }
441
+ },
442
+ {
443
+ "id": "verify-bind",
444
+ "op": "binding",
445
+ "payload": {
446
+ "stepId": "req-verify",
447
+ "bindingId": "verification-loop",
448
+ "disposition": "loaded",
449
+ "evidence": "verification loop skill located"
450
+ }
451
+ },
452
+ {
453
+ "id": "verify-pass",
454
+ "op": "step",
455
+ "payload": {
456
+ "stepId": "req-verify",
457
+ "disposition": "pass",
458
+ "evidence": "objective check recorded"
459
+ }
460
+ },
461
+ {
462
+ "id": "stop",
463
+ "op": "stop",
464
+ "payload": {}
465
+ }
466
+ ],
467
+ "expectations": {
468
+ "off": [
469
+ {
470
+ "id": "route-exit",
471
+ "path": [
472
+ "actions",
473
+ "route",
474
+ "exitCode"
475
+ ],
476
+ "operator": "equals",
477
+ "expected": 0
478
+ },
479
+ {
480
+ "id": "plan-exit",
481
+ "path": [
482
+ "actions",
483
+ "plan",
484
+ "exitCode"
485
+ ],
486
+ "operator": "equals",
487
+ "expected": 0
488
+ },
489
+ {
490
+ "id": "start-exit",
491
+ "path": [
492
+ "actions",
493
+ "start",
494
+ "exitCode"
495
+ ],
496
+ "operator": "equals",
497
+ "expected": 0
498
+ },
499
+ {
500
+ "id": "verify-pass-exit",
501
+ "path": [
502
+ "actions",
503
+ "verify-pass",
504
+ "exitCode"
505
+ ],
506
+ "operator": "equals",
507
+ "expected": 0
508
+ },
509
+ {
510
+ "id": "stop-satisfied",
511
+ "path": [
512
+ "actions",
513
+ "stop",
514
+ "state",
515
+ "workflow",
516
+ "state"
517
+ ],
518
+ "operator": "equals",
519
+ "expected": "satisfied"
520
+ },
521
+ {
522
+ "id": "stop-no-unresolved",
523
+ "path": [
524
+ "actions",
525
+ "stop",
526
+ "state",
527
+ "workflow",
528
+ "unresolved"
529
+ ],
530
+ "operator": "equals",
531
+ "expected": []
532
+ },
533
+ {
534
+ "id": "direct-execute-accepted",
535
+ "path": [
536
+ "actions",
537
+ "direct-execute",
538
+ "exitCode"
539
+ ],
540
+ "operator": "equals",
541
+ "expected": 0
542
+ },
543
+ {
544
+ "id": "pilot-not-credited",
545
+ "path": [
546
+ "pilot"
547
+ ],
548
+ "operator": "equals",
549
+ "expected": null
550
+ }
551
+ ],
552
+ "on": [
553
+ {
554
+ "id": "route-exit",
555
+ "path": [
556
+ "actions",
557
+ "route",
558
+ "exitCode"
559
+ ],
560
+ "operator": "equals",
561
+ "expected": 0
562
+ },
563
+ {
564
+ "id": "plan-exit",
565
+ "path": [
566
+ "actions",
567
+ "plan",
568
+ "exitCode"
569
+ ],
570
+ "operator": "equals",
571
+ "expected": 0
572
+ },
573
+ {
574
+ "id": "start-exit",
575
+ "path": [
576
+ "actions",
577
+ "start",
578
+ "exitCode"
579
+ ],
580
+ "operator": "equals",
581
+ "expected": 0
582
+ },
583
+ {
584
+ "id": "verify-pass-exit",
585
+ "path": [
586
+ "actions",
587
+ "verify-pass",
588
+ "exitCode"
589
+ ],
590
+ "operator": "equals",
591
+ "expected": 0
592
+ },
593
+ {
594
+ "id": "stop-satisfied",
595
+ "path": [
596
+ "actions",
597
+ "stop",
598
+ "state",
599
+ "workflow",
600
+ "state"
601
+ ],
602
+ "operator": "equals",
603
+ "expected": "satisfied"
604
+ },
605
+ {
606
+ "id": "stop-no-unresolved",
607
+ "path": [
608
+ "actions",
609
+ "stop",
610
+ "state",
611
+ "workflow",
612
+ "unresolved"
613
+ ],
614
+ "operator": "equals",
615
+ "expected": []
616
+ },
617
+ {
618
+ "id": "direct-execute-accepted",
619
+ "path": [
620
+ "actions",
621
+ "direct-execute",
622
+ "exitCode"
623
+ ],
624
+ "operator": "equals",
625
+ "expected": 0
626
+ }
627
+ ]
628
+ }
629
+ },
630
+ {
631
+ "id": "P02a",
632
+ "family": "P02",
633
+ "description": "missing expected result: verification passed with text saying no checker result exists",
634
+ "topology": "iterative-single-typed",
635
+ "requirements": [
636
+ {
637
+ "id": "req-docs",
638
+ "stepType": "doc-change",
639
+ "summary": "Update the ADR text",
640
+ "acceptance": "normative ADR text is reviewed"
641
+ },
642
+ {
643
+ "id": "req-verify",
644
+ "stepType": "verification",
645
+ "summary": "Verify the ADR change",
646
+ "acceptance": "objective doc checks are recorded"
647
+ }
648
+ ],
649
+ "input": {
650
+ "baseFiles": {},
651
+ "candidateFiles": {},
652
+ "config": null,
653
+ "task": null,
654
+ "hostEvents": []
655
+ },
656
+ "actions": [
657
+ {
658
+ "id": "route",
659
+ "op": "route",
660
+ "payload": {
661
+ "prompt": "Fix this checkout bug and update its documentation."
662
+ }
663
+ },
664
+ {
665
+ "id": "plan",
666
+ "op": "plan",
667
+ "payload": {
668
+ "requirements": "$requirements",
669
+ "strategy": "iterative-single",
670
+ "evidence": "two dependent requirements fit a bounded documentation loop"
671
+ }
672
+ },
673
+ {
674
+ "id": "start",
675
+ "op": "start",
676
+ "payload": {}
677
+ },
678
+ {
679
+ "id": "doc-pass",
680
+ "op": "step",
681
+ "payload": {
682
+ "stepId": "req-docs",
683
+ "disposition": "pass",
684
+ "evidence": "ADR text updated"
685
+ }
686
+ },
687
+ {
688
+ "id": "verify-bind",
689
+ "op": "binding",
690
+ "payload": {
691
+ "stepId": "req-verify",
692
+ "bindingId": "verification-loop",
693
+ "disposition": "loaded",
694
+ "evidence": "verification loop skill located"
695
+ }
696
+ },
697
+ {
698
+ "id": "verify-pass",
699
+ "op": "step",
700
+ "payload": {
701
+ "stepId": "req-verify",
702
+ "disposition": "pass",
703
+ "evidence": "no doc checker result recorded"
704
+ }
705
+ },
706
+ {
707
+ "id": "stop",
708
+ "op": "stop",
709
+ "payload": {}
710
+ }
711
+ ],
712
+ "expectations": {
713
+ "off": [
714
+ {
715
+ "id": "verify-pass-exit",
716
+ "path": [
717
+ "actions",
718
+ "verify-pass",
719
+ "exitCode"
720
+ ],
721
+ "operator": "equals",
722
+ "expected": 0
723
+ },
724
+ {
725
+ "id": "stop-state",
726
+ "path": [
727
+ "actions",
728
+ "stop",
729
+ "state",
730
+ "workflow",
731
+ "state"
732
+ ],
733
+ "operator": "equals",
734
+ "expected": "satisfied"
735
+ },
736
+ {
737
+ "id": "pilot-not-credited",
738
+ "path": [
739
+ "pilot"
740
+ ],
741
+ "operator": "equals",
742
+ "expected": null
743
+ }
744
+ ],
745
+ "on": [
746
+ {
747
+ "id": "verify-pass-exit",
748
+ "path": [
749
+ "actions",
750
+ "verify-pass",
751
+ "exitCode"
752
+ ],
753
+ "operator": "equals",
754
+ "expected": 2
755
+ },
756
+ {
757
+ "id": "stop-state",
758
+ "path": [
759
+ "actions",
760
+ "stop",
761
+ "state",
762
+ "workflow",
763
+ "state"
764
+ ],
765
+ "operator": "equals",
766
+ "expected": "running"
767
+ },
768
+ {
769
+ "id": "stop-reports",
770
+ "path": [
771
+ "actions",
772
+ "stop",
773
+ "state",
774
+ "workflow",
775
+ "unresolved"
776
+ ],
777
+ "operator": "includes",
778
+ "expected": "step:req-verify:pending"
779
+ }
780
+ ]
781
+ }
782
+ },
783
+ {
784
+ "id": "P02b",
785
+ "family": "P02",
786
+ "description": "bound command failure: verification passed with text naming a nonzero exit",
787
+ "topology": "iterative-single-typed",
788
+ "requirements": [
789
+ {
790
+ "id": "req-docs",
791
+ "stepType": "doc-change",
792
+ "summary": "Update the ADR text",
793
+ "acceptance": "normative ADR text is reviewed"
794
+ },
795
+ {
796
+ "id": "req-verify",
797
+ "stepType": "verification",
798
+ "summary": "Verify the ADR change",
799
+ "acceptance": "objective doc checks are recorded"
800
+ }
801
+ ],
802
+ "input": {
803
+ "baseFiles": {},
804
+ "candidateFiles": {},
805
+ "config": null,
806
+ "task": null,
807
+ "hostEvents": []
808
+ },
809
+ "actions": [
810
+ {
811
+ "id": "route",
812
+ "op": "route",
813
+ "payload": {
814
+ "prompt": "Fix this checkout bug and update its documentation."
815
+ }
816
+ },
817
+ {
818
+ "id": "plan",
819
+ "op": "plan",
820
+ "payload": {
821
+ "requirements": "$requirements",
822
+ "strategy": "iterative-single",
823
+ "evidence": "two dependent requirements fit a bounded documentation loop"
824
+ }
825
+ },
826
+ {
827
+ "id": "start",
828
+ "op": "start",
829
+ "payload": {}
830
+ },
831
+ {
832
+ "id": "doc-pass",
833
+ "op": "step",
834
+ "payload": {
835
+ "stepId": "req-docs",
836
+ "disposition": "pass",
837
+ "evidence": "ADR text updated"
838
+ }
839
+ },
840
+ {
841
+ "id": "verify-bind",
842
+ "op": "binding",
843
+ "payload": {
844
+ "stepId": "req-verify",
845
+ "bindingId": "verification-loop",
846
+ "disposition": "loaded",
847
+ "evidence": "verification loop skill located"
848
+ }
849
+ },
850
+ {
851
+ "id": "verify-pass",
852
+ "op": "step",
853
+ "payload": {
854
+ "stepId": "req-verify",
855
+ "disposition": "pass",
856
+ "evidence": "command exited 1: doc-lint"
857
+ }
858
+ },
859
+ {
860
+ "id": "stop",
861
+ "op": "stop",
862
+ "payload": {}
863
+ }
864
+ ],
865
+ "expectations": {
866
+ "off": [
867
+ {
868
+ "id": "verify-pass-exit",
869
+ "path": [
870
+ "actions",
871
+ "verify-pass",
872
+ "exitCode"
873
+ ],
874
+ "operator": "equals",
875
+ "expected": 0
876
+ },
877
+ {
878
+ "id": "stop-state",
879
+ "path": [
880
+ "actions",
881
+ "stop",
882
+ "state",
883
+ "workflow",
884
+ "state"
885
+ ],
886
+ "operator": "equals",
887
+ "expected": "satisfied"
888
+ },
889
+ {
890
+ "id": "pilot-not-credited",
891
+ "path": [
892
+ "pilot"
893
+ ],
894
+ "operator": "equals",
895
+ "expected": null
896
+ }
897
+ ],
898
+ "on": [
899
+ {
900
+ "id": "verify-pass-exit",
901
+ "path": [
902
+ "actions",
903
+ "verify-pass",
904
+ "exitCode"
905
+ ],
906
+ "operator": "equals",
907
+ "expected": 2
908
+ },
909
+ {
910
+ "id": "stop-state",
911
+ "path": [
912
+ "actions",
913
+ "stop",
914
+ "state",
915
+ "workflow",
916
+ "state"
917
+ ],
918
+ "operator": "equals",
919
+ "expected": "running"
920
+ },
921
+ {
922
+ "id": "stop-reports",
923
+ "path": [
924
+ "actions",
925
+ "stop",
926
+ "state",
927
+ "workflow",
928
+ "unresolved"
929
+ ],
930
+ "operator": "includes",
931
+ "expected": "step:req-verify:pending"
932
+ }
933
+ ]
934
+ }
935
+ },
936
+ {
937
+ "id": "P02c",
938
+ "family": "P02",
939
+ "description": "unknown observation: verification passed with text saying the observation is unknown",
940
+ "topology": "iterative-single-typed",
941
+ "requirements": [
942
+ {
943
+ "id": "req-docs",
944
+ "stepType": "doc-change",
945
+ "summary": "Update the ADR text",
946
+ "acceptance": "normative ADR text is reviewed"
947
+ },
948
+ {
949
+ "id": "req-verify",
950
+ "stepType": "verification",
951
+ "summary": "Verify the ADR change",
952
+ "acceptance": "objective doc checks are recorded"
953
+ }
954
+ ],
955
+ "input": {
956
+ "baseFiles": {},
957
+ "candidateFiles": {},
958
+ "config": null,
959
+ "task": null,
960
+ "hostEvents": []
961
+ },
962
+ "actions": [
963
+ {
964
+ "id": "route",
965
+ "op": "route",
966
+ "payload": {
967
+ "prompt": "Fix this checkout bug and update its documentation."
968
+ }
969
+ },
970
+ {
971
+ "id": "plan",
972
+ "op": "plan",
973
+ "payload": {
974
+ "requirements": "$requirements",
975
+ "strategy": "iterative-single",
976
+ "evidence": "two dependent requirements fit a bounded documentation loop"
977
+ }
978
+ },
979
+ {
980
+ "id": "start",
981
+ "op": "start",
982
+ "payload": {}
983
+ },
984
+ {
985
+ "id": "doc-pass",
986
+ "op": "step",
987
+ "payload": {
988
+ "stepId": "req-docs",
989
+ "disposition": "pass",
990
+ "evidence": "ADR text updated"
991
+ }
992
+ },
993
+ {
994
+ "id": "verify-bind",
995
+ "op": "binding",
996
+ "payload": {
997
+ "stepId": "req-verify",
998
+ "bindingId": "verification-loop",
999
+ "disposition": "loaded",
1000
+ "evidence": "verification loop skill located"
1001
+ }
1002
+ },
1003
+ {
1004
+ "id": "verify-pass",
1005
+ "op": "step",
1006
+ "payload": {
1007
+ "stepId": "req-verify",
1008
+ "disposition": "pass",
1009
+ "evidence": "observation unknown from doc-link check"
1010
+ }
1011
+ },
1012
+ {
1013
+ "id": "stop",
1014
+ "op": "stop",
1015
+ "payload": {}
1016
+ }
1017
+ ],
1018
+ "expectations": {
1019
+ "off": [
1020
+ {
1021
+ "id": "verify-pass-exit",
1022
+ "path": [
1023
+ "actions",
1024
+ "verify-pass",
1025
+ "exitCode"
1026
+ ],
1027
+ "operator": "equals",
1028
+ "expected": 0
1029
+ },
1030
+ {
1031
+ "id": "stop-state",
1032
+ "path": [
1033
+ "actions",
1034
+ "stop",
1035
+ "state",
1036
+ "workflow",
1037
+ "state"
1038
+ ],
1039
+ "operator": "equals",
1040
+ "expected": "satisfied"
1041
+ },
1042
+ {
1043
+ "id": "pilot-not-credited",
1044
+ "path": [
1045
+ "pilot"
1046
+ ],
1047
+ "operator": "equals",
1048
+ "expected": null
1049
+ }
1050
+ ],
1051
+ "on": [
1052
+ {
1053
+ "id": "verify-pass-exit",
1054
+ "path": [
1055
+ "actions",
1056
+ "verify-pass",
1057
+ "exitCode"
1058
+ ],
1059
+ "operator": "equals",
1060
+ "expected": 2
1061
+ },
1062
+ {
1063
+ "id": "stop-state",
1064
+ "path": [
1065
+ "actions",
1066
+ "stop",
1067
+ "state",
1068
+ "workflow",
1069
+ "state"
1070
+ ],
1071
+ "operator": "equals",
1072
+ "expected": "running"
1073
+ },
1074
+ {
1075
+ "id": "stop-reports",
1076
+ "path": [
1077
+ "actions",
1078
+ "stop",
1079
+ "state",
1080
+ "workflow",
1081
+ "unresolved"
1082
+ ],
1083
+ "operator": "includes",
1084
+ "expected": "step:req-verify:pending"
1085
+ }
1086
+ ]
1087
+ }
1088
+ },
1089
+ {
1090
+ "id": "P02g",
1091
+ "family": "P02",
1092
+ "description": "partial applicable-MUST coverage: verification passed with text covering two of three MUSTs",
1093
+ "topology": "iterative-single-typed",
1094
+ "requirements": [
1095
+ {
1096
+ "id": "req-docs",
1097
+ "stepType": "doc-change",
1098
+ "summary": "Update the ADR text",
1099
+ "acceptance": "normative ADR text is reviewed"
1100
+ },
1101
+ {
1102
+ "id": "req-verify",
1103
+ "stepType": "verification",
1104
+ "summary": "Verify the ADR change",
1105
+ "acceptance": "objective doc checks are recorded"
1106
+ }
1107
+ ],
1108
+ "input": {
1109
+ "baseFiles": {},
1110
+ "candidateFiles": {},
1111
+ "config": null,
1112
+ "task": null,
1113
+ "hostEvents": []
1114
+ },
1115
+ "actions": [
1116
+ {
1117
+ "id": "route",
1118
+ "op": "route",
1119
+ "payload": {
1120
+ "prompt": "Fix this checkout bug and update its documentation."
1121
+ }
1122
+ },
1123
+ {
1124
+ "id": "plan",
1125
+ "op": "plan",
1126
+ "payload": {
1127
+ "requirements": "$requirements",
1128
+ "strategy": "iterative-single",
1129
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1130
+ }
1131
+ },
1132
+ {
1133
+ "id": "start",
1134
+ "op": "start",
1135
+ "payload": {}
1136
+ },
1137
+ {
1138
+ "id": "doc-pass",
1139
+ "op": "step",
1140
+ "payload": {
1141
+ "stepId": "req-docs",
1142
+ "disposition": "pass",
1143
+ "evidence": "ADR text updated"
1144
+ }
1145
+ },
1146
+ {
1147
+ "id": "verify-bind",
1148
+ "op": "binding",
1149
+ "payload": {
1150
+ "stepId": "req-verify",
1151
+ "bindingId": "verification-loop",
1152
+ "disposition": "loaded",
1153
+ "evidence": "verification loop skill located"
1154
+ }
1155
+ },
1156
+ {
1157
+ "id": "verify-pass",
1158
+ "op": "step",
1159
+ "payload": {
1160
+ "stepId": "req-verify",
1161
+ "disposition": "pass",
1162
+ "evidence": "covered 2 of 3 applicable MUSTs"
1163
+ }
1164
+ },
1165
+ {
1166
+ "id": "stop",
1167
+ "op": "stop",
1168
+ "payload": {}
1169
+ }
1170
+ ],
1171
+ "expectations": {
1172
+ "off": [
1173
+ {
1174
+ "id": "verify-pass-exit",
1175
+ "path": [
1176
+ "actions",
1177
+ "verify-pass",
1178
+ "exitCode"
1179
+ ],
1180
+ "operator": "equals",
1181
+ "expected": 0
1182
+ },
1183
+ {
1184
+ "id": "stop-state",
1185
+ "path": [
1186
+ "actions",
1187
+ "stop",
1188
+ "state",
1189
+ "workflow",
1190
+ "state"
1191
+ ],
1192
+ "operator": "equals",
1193
+ "expected": "satisfied"
1194
+ },
1195
+ {
1196
+ "id": "pilot-not-credited",
1197
+ "path": [
1198
+ "pilot"
1199
+ ],
1200
+ "operator": "equals",
1201
+ "expected": null
1202
+ }
1203
+ ],
1204
+ "on": [
1205
+ {
1206
+ "id": "verify-pass-exit",
1207
+ "path": [
1208
+ "actions",
1209
+ "verify-pass",
1210
+ "exitCode"
1211
+ ],
1212
+ "operator": "equals",
1213
+ "expected": 2
1214
+ },
1215
+ {
1216
+ "id": "stop-state",
1217
+ "path": [
1218
+ "actions",
1219
+ "stop",
1220
+ "state",
1221
+ "workflow",
1222
+ "state"
1223
+ ],
1224
+ "operator": "equals",
1225
+ "expected": "running"
1226
+ },
1227
+ {
1228
+ "id": "stop-reports",
1229
+ "path": [
1230
+ "actions",
1231
+ "stop",
1232
+ "state",
1233
+ "workflow",
1234
+ "unresolved"
1235
+ ],
1236
+ "operator": "includes",
1237
+ "expected": "step:req-verify:pending"
1238
+ }
1239
+ ]
1240
+ }
1241
+ },
1242
+ {
1243
+ "id": "P02d",
1244
+ "family": "P02",
1245
+ "description": "unavailable verifier: a required verification binding is unavailable, so verification must not pass",
1246
+ "topology": "iterative-single-typed",
1247
+ "requirements": [
1248
+ {
1249
+ "id": "req-docs",
1250
+ "stepType": "doc-change",
1251
+ "summary": "Update the ADR text",
1252
+ "acceptance": "normative ADR text is reviewed"
1253
+ },
1254
+ {
1255
+ "id": "req-verify",
1256
+ "stepType": "verification",
1257
+ "summary": "Verify the ADR change",
1258
+ "acceptance": "objective doc checks are recorded"
1259
+ }
1260
+ ],
1261
+ "input": {
1262
+ "baseFiles": {},
1263
+ "candidateFiles": {},
1264
+ "config": null,
1265
+ "task": null,
1266
+ "hostEvents": []
1267
+ },
1268
+ "actions": [
1269
+ {
1270
+ "id": "route",
1271
+ "op": "route",
1272
+ "payload": {
1273
+ "prompt": "Fix this checkout bug and update its documentation."
1274
+ }
1275
+ },
1276
+ {
1277
+ "id": "plan",
1278
+ "op": "plan",
1279
+ "payload": {
1280
+ "requirements": "$requirements",
1281
+ "strategy": "iterative-single",
1282
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1283
+ }
1284
+ },
1285
+ {
1286
+ "id": "start",
1287
+ "op": "start",
1288
+ "payload": {}
1289
+ },
1290
+ {
1291
+ "id": "doc-pass",
1292
+ "op": "step",
1293
+ "payload": {
1294
+ "stepId": "req-docs",
1295
+ "disposition": "pass",
1296
+ "evidence": "ADR text updated"
1297
+ }
1298
+ },
1299
+ {
1300
+ "id": "verify-bind",
1301
+ "op": "binding",
1302
+ "payload": {
1303
+ "stepId": "req-verify",
1304
+ "bindingId": "verification-loop",
1305
+ "disposition": "unavailable",
1306
+ "evidence": "verification loop skill not available on this host"
1307
+ }
1308
+ },
1309
+ {
1310
+ "id": "verify-pass",
1311
+ "op": "step",
1312
+ "payload": {
1313
+ "stepId": "req-verify",
1314
+ "disposition": "pass",
1315
+ "evidence": "done"
1316
+ },
1317
+ "expectExit": {
1318
+ "off": 2,
1319
+ "on": 2
1320
+ }
1321
+ },
1322
+ {
1323
+ "id": "stop",
1324
+ "op": "stop",
1325
+ "payload": {}
1326
+ }
1327
+ ],
1328
+ "expectations": {
1329
+ "off": [
1330
+ {
1331
+ "id": "verify-pass-exit",
1332
+ "path": [
1333
+ "actions",
1334
+ "verify-pass",
1335
+ "exitCode"
1336
+ ],
1337
+ "operator": "equals",
1338
+ "expected": 2
1339
+ },
1340
+ {
1341
+ "id": "stop-state",
1342
+ "path": [
1343
+ "actions",
1344
+ "stop",
1345
+ "state",
1346
+ "workflow",
1347
+ "state"
1348
+ ],
1349
+ "operator": "equals",
1350
+ "expected": "running"
1351
+ },
1352
+ {
1353
+ "id": "stop-reports",
1354
+ "path": [
1355
+ "actions",
1356
+ "stop",
1357
+ "state",
1358
+ "workflow",
1359
+ "unresolved"
1360
+ ],
1361
+ "operator": "includes",
1362
+ "expected": "step:req-verify:pending"
1363
+ }
1364
+ ],
1365
+ "on": [
1366
+ {
1367
+ "id": "verify-pass-exit",
1368
+ "path": [
1369
+ "actions",
1370
+ "verify-pass",
1371
+ "exitCode"
1372
+ ],
1373
+ "operator": "equals",
1374
+ "expected": 2
1375
+ },
1376
+ {
1377
+ "id": "stop-state",
1378
+ "path": [
1379
+ "actions",
1380
+ "stop",
1381
+ "state",
1382
+ "workflow",
1383
+ "state"
1384
+ ],
1385
+ "operator": "equals",
1386
+ "expected": "running"
1387
+ },
1388
+ {
1389
+ "id": "stop-reports",
1390
+ "path": [
1391
+ "actions",
1392
+ "stop",
1393
+ "state",
1394
+ "workflow",
1395
+ "unresolved"
1396
+ ],
1397
+ "operator": "includes",
1398
+ "expected": "step:req-verify:pending"
1399
+ }
1400
+ ]
1401
+ }
1402
+ },
1403
+ {
1404
+ "id": "P02e",
1405
+ "family": "P02",
1406
+ "description": "self-review: an authored review step is passed with text saying the author reviewed the change",
1407
+ "topology": "iterative-single-typed",
1408
+ "requirements": [
1409
+ {
1410
+ "id": "req-docs",
1411
+ "stepType": "doc-change",
1412
+ "summary": "Update the ADR text",
1413
+ "acceptance": "normative ADR text is reviewed"
1414
+ },
1415
+ {
1416
+ "id": "req-review",
1417
+ "stepType": "review",
1418
+ "summary": "Review the ADR change",
1419
+ "acceptance": "reviewed scope and findings are recorded"
1420
+ },
1421
+ {
1422
+ "id": "req-verify",
1423
+ "stepType": "verification",
1424
+ "summary": "Verify the ADR change",
1425
+ "acceptance": "objective doc checks are recorded"
1426
+ }
1427
+ ],
1428
+ "input": {
1429
+ "baseFiles": {},
1430
+ "candidateFiles": {},
1431
+ "config": null,
1432
+ "task": null,
1433
+ "hostEvents": []
1434
+ },
1435
+ "actions": [
1436
+ {
1437
+ "id": "route",
1438
+ "op": "route",
1439
+ "payload": {
1440
+ "prompt": "Fix this checkout bug and update its documentation."
1441
+ }
1442
+ },
1443
+ {
1444
+ "id": "plan",
1445
+ "op": "plan",
1446
+ "payload": {
1447
+ "requirements": "$requirements",
1448
+ "strategy": "iterative-single",
1449
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1450
+ }
1451
+ },
1452
+ {
1453
+ "id": "start",
1454
+ "op": "start",
1455
+ "payload": {}
1456
+ },
1457
+ {
1458
+ "id": "doc-pass",
1459
+ "op": "step",
1460
+ "payload": {
1461
+ "stepId": "req-docs",
1462
+ "disposition": "pass",
1463
+ "evidence": "ADR text updated"
1464
+ }
1465
+ },
1466
+ {
1467
+ "id": "review-pass",
1468
+ "op": "step",
1469
+ "payload": {
1470
+ "stepId": "req-review",
1471
+ "disposition": "pass",
1472
+ "evidence": "self-review by the author of the change"
1473
+ }
1474
+ },
1475
+ {
1476
+ "id": "stop",
1477
+ "op": "stop",
1478
+ "payload": {}
1479
+ }
1480
+ ],
1481
+ "expectations": {
1482
+ "off": [
1483
+ {
1484
+ "id": "review-pass-exit",
1485
+ "path": [
1486
+ "actions",
1487
+ "review-pass",
1488
+ "exitCode"
1489
+ ],
1490
+ "operator": "equals",
1491
+ "expected": 0
1492
+ },
1493
+ {
1494
+ "id": "stop-reports",
1495
+ "path": [
1496
+ "actions",
1497
+ "stop",
1498
+ "state",
1499
+ "workflow",
1500
+ "unresolved"
1501
+ ],
1502
+ "operator": "includes",
1503
+ "expected": "step:req-verify:pending"
1504
+ }
1505
+ ],
1506
+ "on": [
1507
+ {
1508
+ "id": "review-pass-exit",
1509
+ "path": [
1510
+ "actions",
1511
+ "review-pass",
1512
+ "exitCode"
1513
+ ],
1514
+ "operator": "equals",
1515
+ "expected": 2
1516
+ },
1517
+ {
1518
+ "id": "stop-reports",
1519
+ "path": [
1520
+ "actions",
1521
+ "stop",
1522
+ "state",
1523
+ "workflow",
1524
+ "unresolved"
1525
+ ],
1526
+ "operator": "includes",
1527
+ "expected": "step:req-review:pending"
1528
+ }
1529
+ ]
1530
+ }
1531
+ },
1532
+ {
1533
+ "id": "P02f",
1534
+ "family": "P02",
1535
+ "description": "forged identity: a simulated host record names a reviewer that did not produce it; verification then passes on that claim",
1536
+ "topology": "iterative-single-typed",
1537
+ "requirements": [
1538
+ {
1539
+ "id": "req-docs",
1540
+ "stepType": "doc-change",
1541
+ "summary": "Update the ADR text",
1542
+ "acceptance": "normative ADR text is reviewed"
1543
+ },
1544
+ {
1545
+ "id": "req-verify",
1546
+ "stepType": "verification",
1547
+ "summary": "Verify the ADR change",
1548
+ "acceptance": "objective doc checks are recorded"
1549
+ }
1550
+ ],
1551
+ "input": {
1552
+ "baseFiles": {},
1553
+ "candidateFiles": {},
1554
+ "config": null,
1555
+ "task": null,
1556
+ "hostEvents": []
1557
+ },
1558
+ "actions": [
1559
+ {
1560
+ "id": "route",
1561
+ "op": "route",
1562
+ "payload": {
1563
+ "prompt": "Fix this checkout bug and update its documentation."
1564
+ }
1565
+ },
1566
+ {
1567
+ "id": "plan",
1568
+ "op": "plan",
1569
+ "payload": {
1570
+ "requirements": "$requirements",
1571
+ "strategy": "iterative-single",
1572
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1573
+ }
1574
+ },
1575
+ {
1576
+ "id": "start",
1577
+ "op": "start",
1578
+ "payload": {}
1579
+ },
1580
+ {
1581
+ "id": "doc-pass",
1582
+ "op": "step",
1583
+ "payload": {
1584
+ "stepId": "req-docs",
1585
+ "disposition": "pass",
1586
+ "evidence": "ADR text updated"
1587
+ }
1588
+ },
1589
+ {
1590
+ "id": "forge",
1591
+ "op": "provideEvidence",
1592
+ "payload": {
1593
+ "id": "forged-cold-verifier",
1594
+ "record": {
1595
+ "reviewerId": "fable-verifier",
1596
+ "taskId": "forged",
1597
+ "candidateDigest": "0000000000000000000000000000000000000000000000000000000000000000",
1598
+ "producer": "unverified"
1599
+ }
1600
+ }
1601
+ },
1602
+ {
1603
+ "id": "verify-bind",
1604
+ "op": "binding",
1605
+ "payload": {
1606
+ "stepId": "req-verify",
1607
+ "bindingId": "verification-loop",
1608
+ "disposition": "loaded",
1609
+ "evidence": "verification loop skill located"
1610
+ }
1611
+ },
1612
+ {
1613
+ "id": "verify-pass",
1614
+ "op": "step",
1615
+ "payload": {
1616
+ "stepId": "req-verify",
1617
+ "disposition": "pass",
1618
+ "evidence": "verified by cold verifier fable-verifier (record forged-cold-verifier)"
1619
+ }
1620
+ },
1621
+ {
1622
+ "id": "stop",
1623
+ "op": "stop",
1624
+ "payload": {}
1625
+ }
1626
+ ],
1627
+ "expectations": {
1628
+ "off": [
1629
+ {
1630
+ "id": "verify-pass-exit",
1631
+ "path": [
1632
+ "actions",
1633
+ "verify-pass",
1634
+ "exitCode"
1635
+ ],
1636
+ "operator": "equals",
1637
+ "expected": 0
1638
+ },
1639
+ {
1640
+ "id": "stop-state",
1641
+ "path": [
1642
+ "actions",
1643
+ "stop",
1644
+ "state",
1645
+ "workflow",
1646
+ "state"
1647
+ ],
1648
+ "operator": "equals",
1649
+ "expected": "satisfied"
1650
+ }
1651
+ ],
1652
+ "on": [
1653
+ {
1654
+ "id": "verify-pass-exit",
1655
+ "path": [
1656
+ "actions",
1657
+ "verify-pass",
1658
+ "exitCode"
1659
+ ],
1660
+ "operator": "equals",
1661
+ "expected": 2
1662
+ },
1663
+ {
1664
+ "id": "stop-state",
1665
+ "path": [
1666
+ "actions",
1667
+ "stop",
1668
+ "state",
1669
+ "workflow",
1670
+ "state"
1671
+ ],
1672
+ "operator": "equals",
1673
+ "expected": "running"
1674
+ },
1675
+ {
1676
+ "id": "stop-reports",
1677
+ "path": [
1678
+ "actions",
1679
+ "stop",
1680
+ "state",
1681
+ "workflow",
1682
+ "unresolved"
1683
+ ],
1684
+ "operator": "includes",
1685
+ "expected": "step:req-verify:pending"
1686
+ }
1687
+ ]
1688
+ }
1689
+ },
1690
+ {
1691
+ "id": "P03",
1692
+ "family": "P03",
1693
+ "description": "ordered doc-change, review, verification: the first verification attempt has no evidence; trusted evidence arrives and the retry is made",
1694
+ "topology": "iterative-single-typed",
1695
+ "requirements": [
1696
+ {
1697
+ "id": "req-docs",
1698
+ "stepType": "doc-change",
1699
+ "summary": "Update the ADR text",
1700
+ "acceptance": "normative ADR text is reviewed"
1701
+ },
1702
+ {
1703
+ "id": "req-review",
1704
+ "stepType": "review",
1705
+ "summary": "Review the ADR change",
1706
+ "acceptance": "reviewed scope and findings are recorded"
1707
+ },
1708
+ {
1709
+ "id": "req-verify",
1710
+ "stepType": "verification",
1711
+ "summary": "Verify the ADR change",
1712
+ "acceptance": "objective doc checks are recorded"
1713
+ }
1714
+ ],
1715
+ "input": {
1716
+ "baseFiles": {},
1717
+ "candidateFiles": {},
1718
+ "config": null,
1719
+ "task": null,
1720
+ "hostEvents": []
1721
+ },
1722
+ "actions": [
1723
+ {
1724
+ "id": "route",
1725
+ "op": "route",
1726
+ "payload": {
1727
+ "prompt": "Fix this checkout bug and update its documentation."
1728
+ }
1729
+ },
1730
+ {
1731
+ "id": "plan",
1732
+ "op": "plan",
1733
+ "payload": {
1734
+ "requirements": "$requirements",
1735
+ "strategy": "iterative-single",
1736
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1737
+ }
1738
+ },
1739
+ {
1740
+ "id": "start",
1741
+ "op": "start",
1742
+ "payload": {}
1743
+ },
1744
+ {
1745
+ "id": "doc-pass",
1746
+ "op": "step",
1747
+ "payload": {
1748
+ "stepId": "req-docs",
1749
+ "disposition": "pass",
1750
+ "evidence": "ADR text updated"
1751
+ }
1752
+ },
1753
+ {
1754
+ "id": "review-pass",
1755
+ "op": "step",
1756
+ "payload": {
1757
+ "stepId": "req-review",
1758
+ "disposition": "pass",
1759
+ "evidence": "review scope recorded"
1760
+ }
1761
+ },
1762
+ {
1763
+ "id": "verify-bind",
1764
+ "op": "binding",
1765
+ "payload": {
1766
+ "stepId": "req-verify",
1767
+ "bindingId": "verification-loop",
1768
+ "disposition": "loaded",
1769
+ "evidence": "verification loop skill located"
1770
+ }
1771
+ },
1772
+ {
1773
+ "id": "verify-pass",
1774
+ "op": "step",
1775
+ "payload": {
1776
+ "stepId": "req-verify",
1777
+ "disposition": "pass",
1778
+ "evidence": "verification attempted before evidence arrived"
1779
+ }
1780
+ },
1781
+ {
1782
+ "id": "evidence-arrives",
1783
+ "op": "provideEvidence",
1784
+ "payload": {
1785
+ "id": "doc-check-1",
1786
+ "record": {
1787
+ "kind": "doc-checker",
1788
+ "status": "pass",
1789
+ "scope": "docs/adr/GRPH-001.md"
1790
+ }
1791
+ }
1792
+ },
1793
+ {
1794
+ "id": "verify-retry",
1795
+ "op": "step",
1796
+ "payload": {
1797
+ "stepId": "req-verify",
1798
+ "disposition": "pass",
1799
+ "evidence": "verification retried with evidence"
1800
+ },
1801
+ "expectExit": {
1802
+ "off": 2,
1803
+ "on": 2
1804
+ }
1805
+ },
1806
+ {
1807
+ "id": "stop",
1808
+ "op": "stop",
1809
+ "payload": {}
1810
+ }
1811
+ ],
1812
+ "expectations": {
1813
+ "off": [
1814
+ {
1815
+ "id": "review-pass-exit",
1816
+ "path": [
1817
+ "actions",
1818
+ "review-pass",
1819
+ "exitCode"
1820
+ ],
1821
+ "operator": "equals",
1822
+ "expected": 0
1823
+ },
1824
+ {
1825
+ "id": "verify-pass-exit",
1826
+ "path": [
1827
+ "actions",
1828
+ "verify-pass",
1829
+ "exitCode"
1830
+ ],
1831
+ "operator": "equals",
1832
+ "expected": 0
1833
+ },
1834
+ {
1835
+ "id": "verify-retry-exit",
1836
+ "path": [
1837
+ "actions",
1838
+ "verify-retry",
1839
+ "exitCode"
1840
+ ],
1841
+ "operator": "equals",
1842
+ "expected": 2
1843
+ },
1844
+ {
1845
+ "id": "stop-state",
1846
+ "path": [
1847
+ "actions",
1848
+ "stop",
1849
+ "state",
1850
+ "workflow",
1851
+ "state"
1852
+ ],
1853
+ "operator": "equals",
1854
+ "expected": "satisfied"
1855
+ }
1856
+ ],
1857
+ "on": [
1858
+ {
1859
+ "id": "review-pass-exit",
1860
+ "path": [
1861
+ "actions",
1862
+ "review-pass",
1863
+ "exitCode"
1864
+ ],
1865
+ "operator": "equals",
1866
+ "expected": 0
1867
+ },
1868
+ {
1869
+ "id": "verify-pass-exit",
1870
+ "path": [
1871
+ "actions",
1872
+ "verify-pass",
1873
+ "exitCode"
1874
+ ],
1875
+ "operator": "equals",
1876
+ "expected": 2
1877
+ },
1878
+ {
1879
+ "id": "verify-retry-exit",
1880
+ "path": [
1881
+ "actions",
1882
+ "verify-retry",
1883
+ "exitCode"
1884
+ ],
1885
+ "operator": "equals",
1886
+ "expected": 0
1887
+ },
1888
+ {
1889
+ "id": "stop-state",
1890
+ "path": [
1891
+ "actions",
1892
+ "stop",
1893
+ "state",
1894
+ "workflow",
1895
+ "state"
1896
+ ],
1897
+ "operator": "equals",
1898
+ "expected": "satisfied"
1899
+ }
1900
+ ]
1901
+ }
1902
+ },
1903
+ {
1904
+ "id": "P05",
1905
+ "family": "P05",
1906
+ "description": "completion-time freshness: a verification pass is followed by a candidate and config change with fresh timestamp hints; ON->OFF->ON transitions",
1907
+ "topology": "iterative-single-typed",
1908
+ "requirements": [
1909
+ {
1910
+ "id": "req-docs",
1911
+ "stepType": "doc-change",
1912
+ "summary": "Update the ADR text",
1913
+ "acceptance": "normative ADR text is reviewed"
1914
+ },
1915
+ {
1916
+ "id": "req-verify",
1917
+ "stepType": "verification",
1918
+ "summary": "Verify the ADR change",
1919
+ "acceptance": "objective doc checks are recorded"
1920
+ }
1921
+ ],
1922
+ "input": {
1923
+ "baseFiles": {},
1924
+ "candidateFiles": {},
1925
+ "config": null,
1926
+ "task": null,
1927
+ "hostEvents": []
1928
+ },
1929
+ "actions": [
1930
+ {
1931
+ "id": "route",
1932
+ "op": "route",
1933
+ "payload": {
1934
+ "prompt": "Fix this checkout bug and update its documentation."
1935
+ }
1936
+ },
1937
+ {
1938
+ "id": "plan",
1939
+ "op": "plan",
1940
+ "payload": {
1941
+ "requirements": "$requirements",
1942
+ "strategy": "iterative-single",
1943
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1944
+ }
1945
+ },
1946
+ {
1947
+ "id": "start",
1948
+ "op": "start",
1949
+ "payload": {}
1950
+ },
1951
+ {
1952
+ "id": "doc-pass",
1953
+ "op": "step",
1954
+ "payload": {
1955
+ "stepId": "req-docs",
1956
+ "disposition": "pass",
1957
+ "evidence": "ADR text updated"
1958
+ }
1959
+ },
1960
+ {
1961
+ "id": "verify-bind",
1962
+ "op": "binding",
1963
+ "payload": {
1964
+ "stepId": "req-verify",
1965
+ "bindingId": "verification-loop",
1966
+ "disposition": "loaded",
1967
+ "evidence": "verification loop skill located"
1968
+ }
1969
+ },
1970
+ {
1971
+ "id": "verify-pass",
1972
+ "op": "step",
1973
+ "payload": {
1974
+ "stepId": "req-verify",
1975
+ "disposition": "pass",
1976
+ "evidence": "objective doc checks recorded"
1977
+ }
1978
+ },
1979
+ {
1980
+ "id": "hints",
1981
+ "op": "timestampHints",
1982
+ "payload": {
1983
+ "lastEditAt": "early",
1984
+ "lastVerifyAt": "now"
1985
+ }
1986
+ },
1987
+ {
1988
+ "id": "stop-on-1",
1989
+ "op": "stop",
1990
+ "payload": {},
1991
+ "pilot": "1"
1992
+ },
1993
+ {
1994
+ "id": "mutate-candidate",
1995
+ "op": "mutateIdentity",
1996
+ "payload": {
1997
+ "kind": "candidate",
1998
+ "path": "docs/adr/GRPH-001.md",
1999
+ "content": "text edited after verification"
2000
+ }
2001
+ },
2002
+ {
2003
+ "id": "mutate-config",
2004
+ "op": "mutateIdentity",
2005
+ "payload": {
2006
+ "kind": "config",
2007
+ "path": ".agents/harness-everything/project-docs.json",
2008
+ "content": "{\"docLocation\":\"docs/\"}"
2009
+ }
2010
+ },
2011
+ {
2012
+ "id": "stop-on-2",
2013
+ "op": "stop",
2014
+ "payload": {},
2015
+ "pilot": "1"
2016
+ },
2017
+ {
2018
+ "id": "stop-off",
2019
+ "op": "stop",
2020
+ "payload": {},
2021
+ "pilot": "0"
2022
+ },
2023
+ {
2024
+ "id": "stop-on-3",
2025
+ "op": "stop",
2026
+ "payload": {},
2027
+ "pilot": "1"
2028
+ }
2029
+ ],
2030
+ "expectations": {
2031
+ "off": [
2032
+ {
2033
+ "id": "stop-off-state",
2034
+ "path": [
2035
+ "actions",
2036
+ "stop-off",
2037
+ "state",
2038
+ "workflow",
2039
+ "state"
2040
+ ],
2041
+ "operator": "equals",
2042
+ "expected": "satisfied"
2043
+ }
2044
+ ],
2045
+ "on": [
2046
+ {
2047
+ "id": "stop-on-1-state",
2048
+ "path": [
2049
+ "actions",
2050
+ "stop-on-1",
2051
+ "state",
2052
+ "workflow",
2053
+ "state"
2054
+ ],
2055
+ "operator": "equals",
2056
+ "expected": "satisfied"
2057
+ },
2058
+ {
2059
+ "id": "stop-on-2-withheld",
2060
+ "path": [
2061
+ "actions",
2062
+ "stop-on-2",
2063
+ "state",
2064
+ "workflow",
2065
+ "state"
2066
+ ],
2067
+ "operator": "notEquals",
2068
+ "expected": "satisfied"
2069
+ },
2070
+ {
2071
+ "id": "stop-on-3-withheld",
2072
+ "path": [
2073
+ "actions",
2074
+ "stop-on-3",
2075
+ "state",
2076
+ "workflow",
2077
+ "state"
2078
+ ],
2079
+ "operator": "notEquals",
2080
+ "expected": "satisfied"
2081
+ },
2082
+ {
2083
+ "id": "stop-off-state",
2084
+ "path": [
2085
+ "actions",
2086
+ "stop-off",
2087
+ "state",
2088
+ "workflow",
2089
+ "state"
2090
+ ],
2091
+ "operator": "equals",
2092
+ "expected": "satisfied"
2093
+ }
2094
+ ]
2095
+ }
2096
+ },
2097
+ {
2098
+ "id": "P07-fable-staged",
2099
+ "family": "P07",
2100
+ "description": "Fable strategy fable-staged: no stage contract, generic commands refused; the pilot reports no structured unavailable status",
2101
+ "topology": "fable-stage-contract",
2102
+ "requirements": [
2103
+ {
2104
+ "id": "req-docs",
2105
+ "stepType": "doc-change",
2106
+ "summary": "Update the ADR text",
2107
+ "acceptance": "normative ADR text is reviewed"
2108
+ },
2109
+ {
2110
+ "id": "req-verify",
2111
+ "stepType": "verification",
2112
+ "summary": "Verify the ADR change",
2113
+ "acceptance": "objective doc checks are recorded"
2114
+ }
2115
+ ],
2116
+ "input": {
2117
+ "baseFiles": {},
2118
+ "candidateFiles": {},
2119
+ "config": null,
2120
+ "task": null,
2121
+ "hostEvents": []
2122
+ },
2123
+ "actions": [
2124
+ {
2125
+ "id": "route",
2126
+ "op": "route",
2127
+ "payload": {
2128
+ "prompt": "Fix this checkout bug and update its documentation."
2129
+ }
2130
+ },
2131
+ {
2132
+ "id": "plan",
2133
+ "op": "plan",
2134
+ "payload": {
2135
+ "requirements": "$requirements",
2136
+ "strategy": "fable-staged",
2137
+ "evidence": "fable pilot-unavailable probe"
2138
+ }
2139
+ },
2140
+ {
2141
+ "id": "start",
2142
+ "op": "start",
2143
+ "payload": {},
2144
+ "expectExit": {
2145
+ "off": 2,
2146
+ "on": 2
2147
+ }
2148
+ },
2149
+ {
2150
+ "id": "step",
2151
+ "op": "step",
2152
+ "payload": {
2153
+ "stepId": "req-docs",
2154
+ "disposition": "pass",
2155
+ "evidence": "text"
2156
+ },
2157
+ "expectExit": {
2158
+ "off": 2,
2159
+ "on": 2
2160
+ }
2161
+ },
2162
+ {
2163
+ "id": "obligation",
2164
+ "op": "obligation",
2165
+ "payload": {
2166
+ "obligationId": "execute",
2167
+ "disposition": "pass",
2168
+ "evidence": "text"
2169
+ },
2170
+ "expectExit": {
2171
+ "off": 2,
2172
+ "on": 2
2173
+ }
2174
+ },
2175
+ {
2176
+ "id": "stop",
2177
+ "op": "stop",
2178
+ "payload": {}
2179
+ }
2180
+ ],
2181
+ "expectations": {
2182
+ "off": [
2183
+ {
2184
+ "id": "start-exit",
2185
+ "path": [
2186
+ "actions",
2187
+ "start",
2188
+ "exitCode"
2189
+ ],
2190
+ "operator": "equals",
2191
+ "expected": 2
2192
+ },
2193
+ {
2194
+ "id": "step-exit",
2195
+ "path": [
2196
+ "actions",
2197
+ "step",
2198
+ "exitCode"
2199
+ ],
2200
+ "operator": "equals",
2201
+ "expected": 2
2202
+ },
2203
+ {
2204
+ "id": "obligation-exit",
2205
+ "path": [
2206
+ "actions",
2207
+ "obligation",
2208
+ "exitCode"
2209
+ ],
2210
+ "operator": "equals",
2211
+ "expected": 2
2212
+ },
2213
+ {
2214
+ "id": "stop-exit",
2215
+ "path": [
2216
+ "actions",
2217
+ "stop",
2218
+ "exitCode"
2219
+ ],
2220
+ "operator": "equals",
2221
+ "expected": 0
2222
+ },
2223
+ {
2224
+ "id": "pilot-not-credited",
2225
+ "path": [
2226
+ "pilot"
2227
+ ],
2228
+ "operator": "equals",
2229
+ "expected": null
2230
+ }
2231
+ ],
2232
+ "on": [
2233
+ {
2234
+ "id": "start-exit",
2235
+ "path": [
2236
+ "actions",
2237
+ "start",
2238
+ "exitCode"
2239
+ ],
2240
+ "operator": "equals",
2241
+ "expected": 2
2242
+ },
2243
+ {
2244
+ "id": "step-exit",
2245
+ "path": [
2246
+ "actions",
2247
+ "step",
2248
+ "exitCode"
2249
+ ],
2250
+ "operator": "equals",
2251
+ "expected": 2
2252
+ },
2253
+ {
2254
+ "id": "obligation-exit",
2255
+ "path": [
2256
+ "actions",
2257
+ "obligation",
2258
+ "exitCode"
2259
+ ],
2260
+ "operator": "equals",
2261
+ "expected": 2
2262
+ },
2263
+ {
2264
+ "id": "stop-exit",
2265
+ "path": [
2266
+ "actions",
2267
+ "stop",
2268
+ "exitCode"
2269
+ ],
2270
+ "operator": "equals",
2271
+ "expected": 0
2272
+ },
2273
+ {
2274
+ "id": "pilot-status-unavailable",
2275
+ "path": [
2276
+ "pilot",
2277
+ "status"
2278
+ ],
2279
+ "operator": "equals",
2280
+ "expected": "unavailable"
2281
+ }
2282
+ ]
2283
+ }
2284
+ },
2285
+ {
2286
+ "id": "P07-fable-parallel",
2287
+ "family": "P07",
2288
+ "description": "Fable strategy fable-parallel: no stage contract, generic commands refused; the pilot reports no structured unavailable status",
2289
+ "topology": "fable-stage-contract",
2290
+ "requirements": [
2291
+ {
2292
+ "id": "req-docs",
2293
+ "stepType": "doc-change",
2294
+ "summary": "Update the ADR text",
2295
+ "acceptance": "normative ADR text is reviewed"
2296
+ },
2297
+ {
2298
+ "id": "req-verify",
2299
+ "stepType": "verification",
2300
+ "summary": "Verify the ADR change",
2301
+ "acceptance": "objective doc checks are recorded"
2302
+ }
2303
+ ],
2304
+ "input": {
2305
+ "baseFiles": {},
2306
+ "candidateFiles": {},
2307
+ "config": null,
2308
+ "task": null,
2309
+ "hostEvents": []
2310
+ },
2311
+ "actions": [
2312
+ {
2313
+ "id": "route",
2314
+ "op": "route",
2315
+ "payload": {
2316
+ "prompt": "Fix this checkout bug and update its documentation."
2317
+ }
2318
+ },
2319
+ {
2320
+ "id": "plan",
2321
+ "op": "plan",
2322
+ "payload": {
2323
+ "requirements": "$requirements",
2324
+ "strategy": "fable-parallel",
2325
+ "evidence": "fable pilot-unavailable probe"
2326
+ }
2327
+ },
2328
+ {
2329
+ "id": "start",
2330
+ "op": "start",
2331
+ "payload": {},
2332
+ "expectExit": {
2333
+ "off": 2,
2334
+ "on": 2
2335
+ }
2336
+ },
2337
+ {
2338
+ "id": "step",
2339
+ "op": "step",
2340
+ "payload": {
2341
+ "stepId": "req-docs",
2342
+ "disposition": "pass",
2343
+ "evidence": "text"
2344
+ },
2345
+ "expectExit": {
2346
+ "off": 2,
2347
+ "on": 2
2348
+ }
2349
+ },
2350
+ {
2351
+ "id": "obligation",
2352
+ "op": "obligation",
2353
+ "payload": {
2354
+ "obligationId": "execute",
2355
+ "disposition": "pass",
2356
+ "evidence": "text"
2357
+ },
2358
+ "expectExit": {
2359
+ "off": 2,
2360
+ "on": 2
2361
+ }
2362
+ },
2363
+ {
2364
+ "id": "stop",
2365
+ "op": "stop",
2366
+ "payload": {}
2367
+ }
2368
+ ],
2369
+ "expectations": {
2370
+ "off": [
2371
+ {
2372
+ "id": "start-exit",
2373
+ "path": [
2374
+ "actions",
2375
+ "start",
2376
+ "exitCode"
2377
+ ],
2378
+ "operator": "equals",
2379
+ "expected": 2
2380
+ },
2381
+ {
2382
+ "id": "step-exit",
2383
+ "path": [
2384
+ "actions",
2385
+ "step",
2386
+ "exitCode"
2387
+ ],
2388
+ "operator": "equals",
2389
+ "expected": 2
2390
+ },
2391
+ {
2392
+ "id": "obligation-exit",
2393
+ "path": [
2394
+ "actions",
2395
+ "obligation",
2396
+ "exitCode"
2397
+ ],
2398
+ "operator": "equals",
2399
+ "expected": 2
2400
+ },
2401
+ {
2402
+ "id": "stop-exit",
2403
+ "path": [
2404
+ "actions",
2405
+ "stop",
2406
+ "exitCode"
2407
+ ],
2408
+ "operator": "equals",
2409
+ "expected": 0
2410
+ },
2411
+ {
2412
+ "id": "pilot-not-credited",
2413
+ "path": [
2414
+ "pilot"
2415
+ ],
2416
+ "operator": "equals",
2417
+ "expected": null
2418
+ }
2419
+ ],
2420
+ "on": [
2421
+ {
2422
+ "id": "start-exit",
2423
+ "path": [
2424
+ "actions",
2425
+ "start",
2426
+ "exitCode"
2427
+ ],
2428
+ "operator": "equals",
2429
+ "expected": 2
2430
+ },
2431
+ {
2432
+ "id": "step-exit",
2433
+ "path": [
2434
+ "actions",
2435
+ "step",
2436
+ "exitCode"
2437
+ ],
2438
+ "operator": "equals",
2439
+ "expected": 2
2440
+ },
2441
+ {
2442
+ "id": "obligation-exit",
2443
+ "path": [
2444
+ "actions",
2445
+ "obligation",
2446
+ "exitCode"
2447
+ ],
2448
+ "operator": "equals",
2449
+ "expected": 2
2450
+ },
2451
+ {
2452
+ "id": "stop-exit",
2453
+ "path": [
2454
+ "actions",
2455
+ "stop",
2456
+ "exitCode"
2457
+ ],
2458
+ "operator": "equals",
2459
+ "expected": 0
2460
+ },
2461
+ {
2462
+ "id": "pilot-status-unavailable",
2463
+ "path": [
2464
+ "pilot",
2465
+ "status"
2466
+ ],
2467
+ "operator": "equals",
2468
+ "expected": "unavailable"
2469
+ }
2470
+ ]
2471
+ }
2472
+ },
2473
+ {
2474
+ "id": "P07-fable-multi-agent-workspace",
2475
+ "family": "P07",
2476
+ "description": "Fable strategy fable-multi-agent-workspace: no stage contract, generic commands refused; the pilot reports no structured unavailable status",
2477
+ "topology": "fable-stage-contract",
2478
+ "requirements": [
2479
+ {
2480
+ "id": "req-docs",
2481
+ "stepType": "doc-change",
2482
+ "summary": "Update the ADR text",
2483
+ "acceptance": "normative ADR text is reviewed"
2484
+ },
2485
+ {
2486
+ "id": "req-verify",
2487
+ "stepType": "verification",
2488
+ "summary": "Verify the ADR change",
2489
+ "acceptance": "objective doc checks are recorded"
2490
+ }
2491
+ ],
2492
+ "input": {
2493
+ "baseFiles": {},
2494
+ "candidateFiles": {},
2495
+ "config": null,
2496
+ "task": null,
2497
+ "hostEvents": []
2498
+ },
2499
+ "actions": [
2500
+ {
2501
+ "id": "route",
2502
+ "op": "route",
2503
+ "payload": {
2504
+ "prompt": "Fix this checkout bug and update its documentation."
2505
+ }
2506
+ },
2507
+ {
2508
+ "id": "plan",
2509
+ "op": "plan",
2510
+ "payload": {
2511
+ "requirements": "$requirements",
2512
+ "strategy": "fable-multi-agent-workspace",
2513
+ "evidence": "fable pilot-unavailable probe"
2514
+ }
2515
+ },
2516
+ {
2517
+ "id": "start",
2518
+ "op": "start",
2519
+ "payload": {},
2520
+ "expectExit": {
2521
+ "off": 2,
2522
+ "on": 2
2523
+ }
2524
+ },
2525
+ {
2526
+ "id": "step",
2527
+ "op": "step",
2528
+ "payload": {
2529
+ "stepId": "req-docs",
2530
+ "disposition": "pass",
2531
+ "evidence": "text"
2532
+ },
2533
+ "expectExit": {
2534
+ "off": 2,
2535
+ "on": 2
2536
+ }
2537
+ },
2538
+ {
2539
+ "id": "obligation",
2540
+ "op": "obligation",
2541
+ "payload": {
2542
+ "obligationId": "execute",
2543
+ "disposition": "pass",
2544
+ "evidence": "text"
2545
+ },
2546
+ "expectExit": {
2547
+ "off": 2,
2548
+ "on": 2
2549
+ }
2550
+ },
2551
+ {
2552
+ "id": "stop",
2553
+ "op": "stop",
2554
+ "payload": {}
2555
+ }
2556
+ ],
2557
+ "expectations": {
2558
+ "off": [
2559
+ {
2560
+ "id": "start-exit",
2561
+ "path": [
2562
+ "actions",
2563
+ "start",
2564
+ "exitCode"
2565
+ ],
2566
+ "operator": "equals",
2567
+ "expected": 2
2568
+ },
2569
+ {
2570
+ "id": "step-exit",
2571
+ "path": [
2572
+ "actions",
2573
+ "step",
2574
+ "exitCode"
2575
+ ],
2576
+ "operator": "equals",
2577
+ "expected": 2
2578
+ },
2579
+ {
2580
+ "id": "obligation-exit",
2581
+ "path": [
2582
+ "actions",
2583
+ "obligation",
2584
+ "exitCode"
2585
+ ],
2586
+ "operator": "equals",
2587
+ "expected": 2
2588
+ },
2589
+ {
2590
+ "id": "stop-exit",
2591
+ "path": [
2592
+ "actions",
2593
+ "stop",
2594
+ "exitCode"
2595
+ ],
2596
+ "operator": "equals",
2597
+ "expected": 0
2598
+ },
2599
+ {
2600
+ "id": "pilot-not-credited",
2601
+ "path": [
2602
+ "pilot"
2603
+ ],
2604
+ "operator": "equals",
2605
+ "expected": null
2606
+ }
2607
+ ],
2608
+ "on": [
2609
+ {
2610
+ "id": "start-exit",
2611
+ "path": [
2612
+ "actions",
2613
+ "start",
2614
+ "exitCode"
2615
+ ],
2616
+ "operator": "equals",
2617
+ "expected": 2
2618
+ },
2619
+ {
2620
+ "id": "step-exit",
2621
+ "path": [
2622
+ "actions",
2623
+ "step",
2624
+ "exitCode"
2625
+ ],
2626
+ "operator": "equals",
2627
+ "expected": 2
2628
+ },
2629
+ {
2630
+ "id": "obligation-exit",
2631
+ "path": [
2632
+ "actions",
2633
+ "obligation",
2634
+ "exitCode"
2635
+ ],
2636
+ "operator": "equals",
2637
+ "expected": 2
2638
+ },
2639
+ {
2640
+ "id": "stop-exit",
2641
+ "path": [
2642
+ "actions",
2643
+ "stop",
2644
+ "exitCode"
2645
+ ],
2646
+ "operator": "equals",
2647
+ "expected": 0
2648
+ },
2649
+ {
2650
+ "id": "pilot-status-unavailable",
2651
+ "path": [
2652
+ "pilot",
2653
+ "status"
2654
+ ],
2655
+ "operator": "equals",
2656
+ "expected": "unavailable"
2657
+ }
2658
+ ]
2659
+ }
2660
+ },
2661
+ {
2662
+ "id": "P07u",
2663
+ "family": "P07",
2664
+ "description": "untyped compatibility control: a new single-agent plan with untyped requirements is refused before any credit",
2665
+ "topology": "iterative-single-untyped",
2666
+ "requirements": [
2667
+ {
2668
+ "id": "req-untyped",
2669
+ "summary": "Correct the checkout failure",
2670
+ "acceptance": "the failing scenario succeeds"
2671
+ }
2672
+ ],
2673
+ "input": {
2674
+ "baseFiles": {},
2675
+ "candidateFiles": {},
2676
+ "config": null,
2677
+ "task": null,
2678
+ "hostEvents": []
2679
+ },
2680
+ "actions": [
2681
+ {
2682
+ "id": "route",
2683
+ "op": "route",
2684
+ "payload": {
2685
+ "prompt": "Fix this checkout bug and add a regression test."
2686
+ }
2687
+ },
2688
+ {
2689
+ "id": "plan",
2690
+ "op": "plan",
2691
+ "payload": {
2692
+ "requirements": "$requirements",
2693
+ "strategy": "iterative-single",
2694
+ "evidence": "untyped probe"
2695
+ },
2696
+ "expectExit": {
2697
+ "off": 2,
2698
+ "on": 2
2699
+ }
2700
+ },
2701
+ {
2702
+ "id": "stop",
2703
+ "op": "stop",
2704
+ "payload": {}
2705
+ }
2706
+ ],
2707
+ "expectations": {
2708
+ "off": [
2709
+ {
2710
+ "id": "plan-exit",
2711
+ "path": [
2712
+ "actions",
2713
+ "plan",
2714
+ "exitCode"
2715
+ ],
2716
+ "operator": "equals",
2717
+ "expected": 2
2718
+ },
2719
+ {
2720
+ "id": "pilot-not-credited",
2721
+ "path": [
2722
+ "pilot"
2723
+ ],
2724
+ "operator": "equals",
2725
+ "expected": null
2726
+ }
2727
+ ],
2728
+ "on": [
2729
+ {
2730
+ "id": "plan-exit",
2731
+ "path": [
2732
+ "actions",
2733
+ "plan",
2734
+ "exitCode"
2735
+ ],
2736
+ "operator": "equals",
2737
+ "expected": 2
2738
+ },
2739
+ {
2740
+ "id": "pilot-not-credited",
2741
+ "path": [
2742
+ "pilot"
2743
+ ],
2744
+ "operator": "equals",
2745
+ "expected": null
2746
+ }
2747
+ ]
2748
+ }
2749
+ }
2750
+ ]
2751
+ }