@pmelab/gtd 33.0.0 → 35.0.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.
Files changed (32) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +65 -50
  3. package/dist/chunks/{reserved-BU5Zi-nX.mjs → reserved-C8Fm3s72.mjs} +45 -2
  4. package/dist/chunks/{tail-DuXanjIY.mjs → tail-oaYewBN_.mjs} +1 -1
  5. package/dist/workflows/cleanup.mjs +2 -2
  6. package/dist/workflows/feature.mjs +99 -19
  7. package/dist/workflows/fix.mjs +2 -2
  8. package/dist/workflows/review.mjs +2 -2
  9. package/dist/workflows/rollout.mjs +1 -1
  10. package/dist/workflows.mjs +144 -21
  11. package/package.json +1 -1
  12. package/skills/authoring/SKILL.md +2 -2
  13. package/src/testkit/steps.ts +4 -0
  14. package/src/workflows/feature/coverage.feature +161 -0
  15. package/src/workflows/feature/coverage.ts +106 -0
  16. package/src/workflows/feature/fast-path.feature +8 -33
  17. package/src/workflows/feature/feature.test.ts +1 -101
  18. package/src/workflows/feature/feature.ts +34 -17
  19. package/src/workflows/feature/flag-mode.feature +8 -92
  20. package/src/workflows/feature/lens-models.feature +4 -0
  21. package/src/workflows/feature/one-step-land.feature +8 -32
  22. package/src/workflows/feature/quality-unresolved.feature +100 -0
  23. package/src/workflows/feature/refactor-absorbs.feature +15 -23
  24. package/src/workflows/feature/refactor-first.feature +7 -32
  25. package/src/workflows/feature/refactor-review.feature +31 -345
  26. package/src/workflows/feature/seam-rejection.feature +5 -30
  27. package/src/workflows/feature/seam.feature +8 -104
  28. package/src/workflows/feature/seam.test.ts +3 -1
  29. package/src/workflows/feature/seam.ts +4 -12
  30. package/src/workflows/review/review-door.feature +113 -0
  31. package/src/workflows/shared/tail.ts +2 -2
  32. package/src/workflows/shared/text.ts +56 -1
@@ -3,8 +3,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
3
3
 
4
4
  After a refactor-first judgment the refactor is built, quality-lapped and
5
5
  reviewed in its own slice. Review edits re-run the refactor, never the design;
6
- the feature review that follows covers only what came after the refactor's
7
- sign-off. The flags are pinned so the per-flag test runs never move it off
6
+ the feature slice that follows is quality-lapped from the refactor's
7
+ sign-off, with no feature review. The flags are pinned so the per-flag test runs never move it off
8
8
  its path.
9
9
 
10
10
  Background:
@@ -337,7 +337,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
337
337
  gtd(agent): refactor.build.review.reviewing → refactor.build.review.await-review
338
338
  """
339
339
 
340
- Scenario: the refactor review says the whole refactor on its second round, the feature's feedback review only what is new
340
+ Scenario: the refactor review says the whole refactor on its second round
341
341
  Given step "refactor.build.review.reviewing" is prompted with "it covers the whole refactor since it started, on every round"
342
342
  And step "implement.building" writes "src/calc.ts" with:
343
343
  """
@@ -347,16 +347,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
347
347
  """
348
348
  And step "implement.health.check" changes nothing
349
349
  And step "implement.closing" runs its script
350
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
350
+ And judge step "implement.coverage" answers:
351
351
  """
352
- # Review: abc1234
353
-
354
- <!-- base: 0000000 -->
355
-
356
- ## calc
357
-
358
- - [ ] ./src/calc.ts#1-3
359
- subtract built on the shared op
352
+ [{"id":"AC-1","answer":"yes","p":0.9}]
360
353
  """
361
354
  When the process is driven
362
355
  Then the process rests at "refactor.build.review.await-review"
@@ -419,79 +412,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
419
412
  Then the process rests at "refactor.build.review.await-review"
420
413
  When gtd lands
421
414
  And the process is driven
422
- Then the process rests at "build.review.await-review"
423
- Given a file ".gtd/REVIEW.md" with:
424
- """
425
- # Review: abc1234
426
-
427
- <!-- base: 0000000 -->
428
-
429
- ## calc
430
-
431
- - [ ] ./src/calc.ts#1-3
432
- subtract built on the shared op[^m]
433
-
434
- [^m]:
435
- - H: also export multiply
436
- """
437
- And step "build.review.collecting" writes ".gtd/REQUIREMENTS.md" with:
438
- """
439
- # Requirements
440
-
441
- - multiply
442
- """
443
- And step "build.review.collecting" writes ".gtd/REVIEW.md" with:
444
- """
445
- # Review: abc1234
446
-
447
- <!-- base: 0000000 -->
448
-
449
- ## calc
450
-
451
- - [ ] ./src/calc.ts#1-3
452
- subtract built on the shared op[^m]
453
-
454
- [^m]:
455
- - H: also export multiply
456
- - A: noted.
457
- """
458
- When gtd lands
459
- And the process is driven
460
- Then the process rests at "build.review.await-review"
461
- Given a file ".gtd/REVIEW.md" with:
462
- """
463
- # Review: abc1234
464
-
465
- <!-- base: 0000000 -->
466
-
467
- ## calc
468
-
469
- - [ ] ./src/calc.ts#1-3
470
- subtract built on the shared op
471
- """
472
- And step "build.review.closing" runs its script
473
- And step "re-unwind" runs its script
474
- And step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
475
- """
476
- # Requirements
477
-
478
- - multiply, designed
479
-
480
- ## Acceptance Criteria
481
-
482
- - AC-1: the change behaves as described.
483
- """
484
- And step "implement.building" writes "src/calc.ts" with:
485
- """
486
- export const op = (a: number, b: number, sign: number) => a + sign * b
487
- export const add = (a: number, b: number) => op(a, b, 1)
488
- export const subtract = (a: number, b: number) => op(a, b, -1)
489
- export const multiply = (a: number, b: number) => a * b
490
- """
491
- And step "build.review.reviewing" is prompted with "it covers only what is new since the previous review"
492
- When gtd lands
493
- And the process is driven
494
- Then the process rests at "build.review.await-review"
415
+ Then the process rests at "idle"
495
416
 
496
417
  Scenario: a question answered at the refactor review reaches the re-derived package as ### Answered Questions
497
418
  When the process is driven
@@ -719,16 +640,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
719
640
  """
720
641
  And step "implement.health.check" changes nothing
721
642
  And step "implement.closing" runs its script
722
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
643
+ And judge step "implement.coverage" answers:
723
644
  """
724
- # Review: abc1234
725
-
726
- <!-- base: 0000000 -->
727
-
728
- ## calc
729
-
730
- - [ ] ./src/calc.ts#1-3
731
- subtract built on the shared op
645
+ [{"id":"AC-1","answer":"yes","p":0.9}]
732
646
  """
733
647
  When the process is driven
734
648
  Then the process rests at "refactor.build.review.await-review"
@@ -793,7 +707,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
793
707
  """
794
708
  When gtd lands
795
709
  And the process is driven
796
- Then the process rests at "build.review.await-review"
710
+ Then the process rests at "idle"
711
+ And "src/calc.ts" contains "subtract"
797
712
 
798
713
  Scenario: a praise-only one-shot footnote signs off and the feature slice follows
799
714
  Given step "implement.building" writes "src/calc.ts" with:
@@ -804,16 +719,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
804
719
  """
805
720
  And step "implement.health.check" changes nothing
806
721
  And step "implement.closing" runs its script
807
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
722
+ And judge step "implement.coverage" answers:
808
723
  """
809
- # Review: abc1234
810
-
811
- <!-- base: 0000000 -->
812
-
813
- ## calc
814
-
815
- - [ ] ./src/calc.ts#1-3
816
- subtract built on the shared op
724
+ [{"id":"AC-1","answer":"yes","p":0.9}]
817
725
  """
818
726
  When the process is driven
819
727
  Then the process rests at "refactor.build.review.await-review"
@@ -837,7 +745,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
837
745
  """
838
746
  When gtd lands
839
747
  And the process is driven
840
- Then the process rests at "build.review.await-review"
748
+ Then the process rests at "idle"
749
+ And "src/calc.ts" contains "subtract"
841
750
 
842
751
  Scenario: a one-shot footnote judged edit that collecting leaves out refuses naming its anchor
843
752
  When the process is driven
@@ -1076,16 +985,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1076
985
  """
1077
986
  And step "implement.health.check" changes nothing
1078
987
  And step "implement.closing" runs its script
1079
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
988
+ And judge step "implement.coverage" answers:
1080
989
  """
1081
- # Review: abc1234
1082
-
1083
- <!-- base: 0000000 -->
1084
-
1085
- ## calc
1086
-
1087
- - [ ] ./src/calc.ts#1-3
1088
- subtract built on the shared op
990
+ [{"id":"AC-1","answer":"yes","p":0.9}]
1089
991
  """
1090
992
  When the process is driven
1091
993
  Then the process rests at "refactor.build.review.await-review"
@@ -1154,7 +1056,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1154
1056
  """
1155
1057
  When gtd lands
1156
1058
  And the process is driven
1157
- Then the process rests at "build.review.await-review"
1059
+ Then the process rests at "idle"
1060
+ And "src/calc.ts" contains "subtract"
1158
1061
 
1159
1062
  Scenario: a praise-only refactor review still signs off and the feature slice follows
1160
1063
  Given step "implement.building" writes "src/calc.ts" with:
@@ -1165,16 +1068,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1165
1068
  """
1166
1069
  And step "implement.health.check" changes nothing
1167
1070
  And step "implement.closing" runs its script
1168
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
1071
+ And judge step "implement.coverage" answers:
1169
1072
  """
1170
- # Review: abc1234
1171
-
1172
- <!-- base: 0000000 -->
1173
-
1174
- ## calc
1175
-
1176
- - [ ] ./src/calc.ts#1-3
1177
- subtract built on the shared op
1073
+ [{"id":"AC-1","answer":"yes","p":0.9}]
1178
1074
  """
1179
1075
  When the process is driven
1180
1076
  Then the process rests at "refactor.build.review.await-review"
@@ -1191,147 +1087,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1191
1087
  """
1192
1088
  When gtd lands
1193
1089
  And the process is driven
1194
- Then the process rests at "build.review.await-review"
1195
-
1196
- Scenario: the feature review after a refactor covers only the commits since the refactor's sign-off
1197
- Given step "implement.building" writes "src/calc.ts" with:
1198
- """
1199
- export const op = (a: number, b: number, sign: number) => a + sign * b
1200
- export const add = (a: number, b: number) => op(a, b, 1)
1201
- export const subtract = (a: number, b: number) => op(a, b, -1)
1202
- """
1203
- And step "implement.health.check" changes nothing
1204
- And step "implement.closing" runs its script
1205
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
1206
- """
1207
- # Review: abc1234
1208
-
1209
- <!-- base: 0000000 -->
1210
-
1211
- ## calc
1212
-
1213
- - [ ] ./src/calc.ts#1-3
1214
- subtract built on the shared op
1215
- """
1216
- When the process is driven
1217
- Then the process rests at "refactor.build.review.await-review"
1218
- Given a file ".gtd/REVIEW.md" with:
1219
- """
1220
- # Review: abc1234
1221
-
1222
- <!-- base: 0000000 -->
1223
-
1224
- ## calc
1225
-
1226
- - [x] ./src/calc.ts#1-2
1227
- add built on the shared op
1228
- """
1229
- When gtd lands
1230
- And the process is driven
1231
- Then the process rests at "build.review.await-review"
1232
- And the resting step's content contains the hash of the commit "gtd(check): refactor.build.review.closing → implement.building"
1233
-
1234
- Scenario: feature feedback after a refactor re-plans design and implement, never the seam phase
1235
- Given step "implement.building" writes "src/calc.ts" with:
1236
- """
1237
- export const op = (a: number, b: number, sign: number) => a + sign * b
1238
- export const add = (a: number, b: number) => op(a, b, 1)
1239
- export const subtract = (a: number, b: number) => op(a, b, -1)
1240
- """
1241
- And step "implement.health.check" changes nothing
1242
- And step "implement.closing" runs its script
1243
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
1244
- """
1245
- # Review: abc1234
1246
-
1247
- <!-- base: 0000000 -->
1248
-
1249
- ## calc
1250
-
1251
- - [ ] ./src/calc.ts#1-3
1252
- subtract built on the shared op
1253
- """
1254
- When the process is driven
1255
- Then the process rests at "refactor.build.review.await-review"
1256
- Given a file ".gtd/REVIEW.md" with:
1257
- """
1258
- # Review: abc1234
1259
-
1260
- <!-- base: 0000000 -->
1261
-
1262
- ## calc
1263
-
1264
- - [x] ./src/calc.ts#1-2
1265
- add built on the shared op
1266
- """
1267
- When gtd lands
1268
- And the process is driven
1269
- Then the process rests at "build.review.await-review"
1270
- Given a file ".gtd/REVIEW.md" with:
1271
- """
1272
- # Review: abc1234
1273
-
1274
- <!-- base: 0000000 -->
1275
-
1276
- ## calc
1277
-
1278
- - [ ] ./src/calc.ts#1-3
1279
- subtract built on the shared op[^why]
1280
-
1281
- [^why]:
1282
- - H: also export multiply
1283
- """
1284
- And step "build.review.collecting" writes ".gtd/REQUIREMENTS.md" with:
1285
- """
1286
- # Requirements
1287
-
1288
- ## Concerns
1289
-
1290
- ### Multiply
1291
-
1292
- - Export `multiply()`.
1293
- """
1294
- And step "build.review.collecting" writes ".gtd/REVIEW.md" with:
1295
- """
1296
- # Review: abc1234
1297
-
1298
- <!-- base: 0000000 -->
1299
-
1300
- ## calc
1301
-
1302
- - [ ] ./src/calc.ts#1-3
1303
- subtract built on the shared op[^why]
1304
-
1305
- [^why]:
1306
- - H: also export multiply
1307
- - A: noted in the requirements.
1308
- """
1309
- When gtd lands
1310
- And the process is driven
1311
- Then the process rests at "build.review.await-review"
1312
- Given a file ".gtd/REVIEW.md" with:
1313
- """
1314
- # Review: abc1234
1315
-
1316
- <!-- base: 0000000 -->
1317
-
1318
- ## calc
1319
-
1320
- - [ ] ./src/calc.ts#1-3
1321
- subtract built on the shared op
1322
- """
1323
- And step "build.review.closing" runs its script
1324
- And step "re-unwind" runs its script
1325
- When gtd lands
1326
- And the process is driven
1327
- Then the process rests at "implement.building"
1328
- And the commit subjects end with:
1329
- """
1330
- gtd(check): re-unwind → design.triage
1331
- gtd(agent): design.triage → design.gate.answer
1332
- gtd(human): design.gate.answer → implement.building
1333
- gtd(agent): implement.building
1334
- """
1090
+ Then the process rests at "idle"
1091
+ And "src/calc.ts" contains "subtract"
1335
1092
 
1336
1093
  Scenario: a nit fix in the refactor slice that changes a non-stray is refused, though a glob stray widens the write access
1337
1094
  Given step "seam.naive" writes "src/*.ts" with:
@@ -1476,7 +1233,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1476
1233
  """
1477
1234
  And step "refactor.build.review.closing" runs its script
1478
1235
 
1479
- Scenario: each slice's quality lap reviews from that slice's base, before and after a feature feedback lap
1236
+ Scenario: each slice's quality lap reviews from that slice's base
1480
1237
  When the process is driven
1481
1238
  Then the process rests at "refactor.build.quality.correctness.reviewing"
1482
1239
  And the resting step's content contains the hash of the commit "gtd(judge): seam.judge → refactor.deriving"
@@ -1489,6 +1246,10 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1489
1246
  """
1490
1247
  And step "implement.health.check" changes nothing
1491
1248
  And step "implement.closing" runs its script
1249
+ And judge step "implement.coverage" answers:
1250
+ """
1251
+ [{"id":"AC-1","answer":"yes","p":0.9}]
1252
+ """
1492
1253
  When the process is driven
1493
1254
  Then the process rests at "refactor.build.review.await-review"
1494
1255
  Given a file ".gtd/REVIEW.md" with:
@@ -1507,88 +1268,13 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1507
1268
  Then the process rests at "build.quality.correctness.reviewing"
1508
1269
  And the resting step's content contains the hash of the commit "gtd(check): refactor.build.review.closing → implement.building"
1509
1270
  Given step "build.quality.correctness.reviewing" changes nothing
1510
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
1511
- """
1512
- # Review: abc1234
1513
-
1514
- <!-- base: 0000000 -->
1515
-
1516
- ## calc
1517
-
1518
- - [ ] ./src/calc.ts#1-3
1519
- subtract built on the shared op
1520
- """
1521
1271
  When the process is driven
1522
- Then the process rests at "build.review.await-review"
1523
- Given a file ".gtd/REVIEW.md" with:
1524
- """
1525
- # Review: abc1234
1526
-
1527
- <!-- base: 0000000 -->
1528
-
1529
- ## calc
1530
-
1531
- - [ ] ./src/calc.ts#1-3
1532
- subtract built on the shared op[^why]
1533
-
1534
- [^why]:
1535
- - H: also export multiply
1536
- """
1537
- And step "build.review.collecting" writes ".gtd/REQUIREMENTS.md" with:
1538
- """
1539
- # Requirements
1540
-
1541
- ## Concerns
1542
-
1543
- ### Multiply
1544
-
1545
- - Export `multiply()`.
1546
- """
1547
- And step "build.review.collecting" writes ".gtd/REVIEW.md" with:
1548
- """
1549
- # Review: abc1234
1550
-
1551
- <!-- base: 0000000 -->
1552
-
1553
- ## calc
1554
-
1555
- - [ ] ./src/calc.ts#1-3
1556
- subtract built on the shared op[^why]
1557
-
1558
- [^why]:
1559
- - H: also export multiply
1560
- - A: noted in the requirements.
1561
- """
1562
- When gtd lands
1563
- And the process is driven
1564
- Then the process rests at "build.review.await-review"
1565
- Given a file ".gtd/REVIEW.md" with:
1566
- """
1567
- # Review: abc1234
1568
-
1569
- <!-- base: 0000000 -->
1570
-
1571
- ## calc
1572
-
1573
- - [ ] ./src/calc.ts#1-3
1574
- subtract built on the shared op
1272
+ Then the process rests at "idle"
1273
+ And the commit subjects end with:
1575
1274
  """
1576
- And step "build.review.closing" runs its script
1577
- And step "re-unwind" runs its script
1578
- And step "build.quality.correctness.reviewing" is no longer scripted
1579
- And step "implement.building" writes "src/calc.ts" with:
1275
+ gtd(check): implement.closing → build.quality.correctness.reviewing
1276
+ gtd(agent): build.quality.correctness.reviewing → idle
1580
1277
  """
1581
- export const op = (a: number, b: number, sign: number) => a + sign * b
1582
- export const add = (a: number, b: number) => op(a, b, 1)
1583
- export const subtract = (a: number, b: number) => op(a, b, -1)
1584
- export const multiply = (a: number, b: number) => a * b
1585
- """
1586
- And step "implement.health.check" changes nothing
1587
- And step "implement.closing" runs its script
1588
- When gtd lands
1589
- And the process is driven
1590
- Then the process rests at "build.quality.correctness.reviewing"
1591
- And the resting step's content contains the hash of the commit "gtd(check): refactor.build.review.closing → implement.building"
1592
1278
 
1593
1279
  Rule: a refactor package never carries a test file, and demoted headings stop at ######
1594
1280
 
@@ -52,18 +52,10 @@ Feature: rejected naive passes walk one fixed path through the steer gate to idl
52
52
  """
53
53
  And step "implement.health.check" changes nothing
54
54
  And step "implement.closing" runs its script
55
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
55
+ And judge step "implement.coverage" answers:
56
56
  """
57
- # Review: abc1234
58
-
59
- <!-- base: 0000000 -->
60
-
61
- ## calc
62
-
63
- - [ ] ./src/calc.ts#1-2
64
- subtract added
57
+ [{"id":"AC-1","answer":"yes","p":0.9}]
65
58
  """
66
- And step "build.review.closing" runs its script
67
59
  When the process is driven
68
60
  Then the process rests at "seam.judge"
69
61
 
@@ -113,21 +105,6 @@ Feature: rejected naive passes walk one fixed path through the steer gate to idl
113
105
  """
114
106
  When gtd lands
115
107
  And the process is driven
116
- Then the process rests at "build.review.await-review"
117
-
118
- Given a file ".gtd/REVIEW.md" with:
119
- """
120
- # Review: abc1234
121
-
122
- <!-- base: 0000000 -->
123
-
124
- ## calc
125
-
126
- - [x] ./src/calc.ts#1-2
127
- subtract added
128
- """
129
- When gtd lands
130
- And the process is driven
131
108
  Then the process rests at "idle"
132
109
  And the commit subjects end with:
133
110
  """
@@ -150,11 +127,9 @@ Feature: rejected naive passes walk one fixed path through the steer gate to idl
150
127
  gtd(check): seam.check → seam.judge
151
128
  gtd(judge): seam.judge → implement.building
152
129
  gtd(agent): implement.building → implement.health.check
153
- gtd(check): implement.health.check → implement.closing
154
- gtd(check): implement.closing → build.review.reviewing
155
- gtd(agent): build.review.reviewing → build.review.await-review
156
- gtd(human): build.review.await-review → build.review.closing
157
- gtd(check): build.review.closing → idle
130
+ gtd(check): implement.health.check → implement.coverage
131
+ gtd(judge): implement.coverage → implement.closing
132
+ gtd(check): implement.closing → idle
158
133
  """
159
134
  And the commit "gtd(human): idle → unwind" has a body containing "Gtd-Var: flag_risk_tier=0"
160
135
  And the commit "gtd(agent): seam.naive → seam.check" has a body containing "Gtd-Kept:"
@@ -145,14 +145,19 @@ Feature: the naive pass and seam judge decide how a feature is built
145
145
  """
146
146
  And step "implement.health.check" changes nothing
147
147
  And step "implement.closing" runs its script
148
+ And judge step "implement.coverage" answers:
149
+ """
150
+ [{"id":"AC-1","answer":"yes","p":0.9}]
151
+ """
148
152
  When the process is driven
149
- Then the process rests at "build.review.reviewing"
153
+ Then the process rests at "idle"
150
154
  And the commit subjects end with:
151
155
  """
152
156
  gtd(judge): seam.judge → implement.building
153
157
  gtd(agent): implement.building → implement.health.check
154
- gtd(check): implement.health.check → implement.closing
155
- gtd(check): implement.closing → build.review.reviewing
158
+ gtd(check): implement.health.check → implement.coverage
159
+ gtd(judge): implement.coverage → implement.closing
160
+ gtd(check): implement.closing → idle
156
161
  """
157
162
  And ".gtd/REQUIREMENTS.md" does not exist
158
163
 
@@ -276,104 +281,3 @@ Feature: the naive pass and seam judge decide how a feature is built
276
281
  gtd(judge): seam.judge → seam.steer
277
282
  gtd(human): seam.steer → implement.building
278
283
  """
279
-
280
- Scenario: review feedback after land re-runs design and implement, never the seam phase
281
- Given step "seam.check" changes nothing
282
- And step "seam.naive" writes "src/acceptance.test.ts" with:
283
- """
284
- it("[AC-1] holds", () => {})
285
- """
286
- And step "seam.naive" writes "src/calc.ts" with:
287
- """
288
- export const add = (a: number, b: number) => b + a
289
- """
290
- And judge step "seam.judge" answers:
291
- """
292
- [{"id":"shape","answer":"land","p":0.9}]
293
- """
294
- And step "implement.building" writes "src/calc.ts" with:
295
- """
296
- export const add = (a: number, b: number) => a + b
297
- export const SUBTRACT = process.env.GTD_FLAG_SUBTRACT === "1"
298
- """
299
- And step "implement.health.check" changes nothing
300
- And step "implement.closing" runs its script
301
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
302
- """
303
- # Review: abc1234
304
-
305
- <!-- base: 0000000 -->
306
-
307
- ## calc
308
-
309
- - [ ] ./src/calc.ts#1-1
310
- new add function
311
- """
312
- When the process is driven
313
- Then the process rests at "build.review.await-review"
314
- Given a file ".gtd/REVIEW.md" with:
315
- """
316
- # Review: abc1234
317
-
318
- <!-- base: 0000000 -->
319
-
320
- ## calc
321
-
322
- - [ ] ./src/calc.ts#1-1
323
- new add function[^why]
324
-
325
- [^why]:
326
- - H: also export multiply
327
- """
328
- And step "build.review.collecting" writes ".gtd/REQUIREMENTS.md" with:
329
- """
330
- # Requirements
331
-
332
- ## Concerns
333
-
334
- ### Multiply
335
-
336
- - Export `multiply()`.
337
- """
338
- And step "build.review.collecting" writes ".gtd/REVIEW.md" with:
339
- """
340
- # Review: abc1234
341
-
342
- <!-- base: 0000000 -->
343
-
344
- ## calc
345
-
346
- - [ ] ./src/calc.ts#1-1
347
- new add function[^why]
348
-
349
- [^why]:
350
- - H: also export multiply
351
- - A: noted in the requirements.
352
- """
353
- When gtd lands
354
- And the process is driven
355
- Then the process rests at "build.review.await-review"
356
- Given a file ".gtd/REVIEW.md" with:
357
- """
358
- # Review: abc1234
359
-
360
- <!-- base: 0000000 -->
361
-
362
- ## calc
363
-
364
- - [ ] ./src/calc.ts#1-1
365
- new add function
366
- """
367
- And step "build.review.closing" runs its script
368
- And step "re-unwind" runs its script
369
- When gtd lands
370
- And the process is driven
371
- Then the process rests at "implement.building"
372
- And the commit subjects end with:
373
- """
374
- gtd(check): build.review.closing → re-unwind
375
- gtd(check): re-unwind → design.triage
376
- gtd(agent): design.triage → design.gate.answer
377
- gtd(human): design.gate.answer → implement.building
378
- gtd(agent): implement.building
379
- """
@@ -417,7 +417,9 @@ describe("implement", () => {
417
417
  {
418
418
  step: (request: StepRequest) => {
419
419
  requests.push(request)
420
- return Promise.resolve()
420
+ return Promise.resolve(
421
+ request.kind === "judge" ? { answers: {}, truncated: [] } : undefined,
422
+ )
421
423
  },
422
424
  pushScope: () => undefined,
423
425
  popScope: () => undefined,