@pmelab/gtd 33.0.0 → 34.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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +60 -50
- package/dist/chunks/{reserved-BU5Zi-nX.mjs → reserved-BcJgt5_R.mjs} +12 -1
- package/dist/chunks/{tail-DuXanjIY.mjs → tail-CM_fa93v.mjs} +1 -1
- package/dist/workflows/cleanup.mjs +2 -2
- package/dist/workflows/feature.mjs +20 -10
- package/dist/workflows/fix.mjs +2 -2
- package/dist/workflows/review.mjs +2 -2
- package/dist/workflows/rollout.mjs +1 -1
- package/dist/workflows.mjs +29 -8
- package/package.json +1 -1
- package/skills/authoring/SKILL.md +2 -2
- package/src/testkit/steps.ts +4 -0
- package/src/workflows/feature/fast-path.feature +3 -33
- package/src/workflows/feature/feature.test.ts +0 -101
- package/src/workflows/feature/feature.ts +29 -16
- package/src/workflows/feature/flag-mode.feature +2 -91
- package/src/workflows/feature/one-step-land.feature +3 -32
- package/src/workflows/feature/quality-unresolved.feature +96 -0
- package/src/workflows/feature/refactor-absorbs.feature +11 -24
- package/src/workflows/feature/refactor-first.feature +2 -32
- package/src/workflows/feature/refactor-review.feature +17 -355
- package/src/workflows/feature/seam-rejection.feature +1 -31
- package/src/workflows/feature/seam.feature +2 -103
- package/src/workflows/feature/seam.ts +1 -1
- package/src/workflows/review/review-door.feature +108 -0
- package/src/workflows/shared/tail.ts +2 -2
- package/src/workflows/shared/text.ts +13 -0
|
@@ -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
|
|
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
|
|
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,17 +347,6 @@ 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:
|
|
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
|
|
360
|
-
"""
|
|
361
350
|
When the process is driven
|
|
362
351
|
Then the process rests at "refactor.build.review.await-review"
|
|
363
352
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -419,79 +408,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
419
408
|
Then the process rests at "refactor.build.review.await-review"
|
|
420
409
|
When gtd lands
|
|
421
410
|
And the process is driven
|
|
422
|
-
Then the process rests at "
|
|
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"
|
|
411
|
+
Then the process rests at "idle"
|
|
495
412
|
|
|
496
413
|
Scenario: a question answered at the refactor review reaches the re-derived package as ### Answered Questions
|
|
497
414
|
When the process is driven
|
|
@@ -719,17 +636,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
719
636
|
"""
|
|
720
637
|
And step "implement.health.check" changes nothing
|
|
721
638
|
And step "implement.closing" runs its script
|
|
722
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
723
|
-
"""
|
|
724
|
-
# Review: abc1234
|
|
725
|
-
|
|
726
|
-
<!-- base: 0000000 -->
|
|
727
|
-
|
|
728
|
-
## calc
|
|
729
|
-
|
|
730
|
-
- [ ] ./src/calc.ts#1-3
|
|
731
|
-
subtract built on the shared op
|
|
732
|
-
"""
|
|
733
639
|
When the process is driven
|
|
734
640
|
Then the process rests at "refactor.build.review.await-review"
|
|
735
641
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -793,7 +699,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
793
699
|
"""
|
|
794
700
|
When gtd lands
|
|
795
701
|
And the process is driven
|
|
796
|
-
Then the process rests at "
|
|
702
|
+
Then the process rests at "idle"
|
|
703
|
+
And "src/calc.ts" contains "subtract"
|
|
797
704
|
|
|
798
705
|
Scenario: a praise-only one-shot footnote signs off and the feature slice follows
|
|
799
706
|
Given step "implement.building" writes "src/calc.ts" with:
|
|
@@ -804,17 +711,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
804
711
|
"""
|
|
805
712
|
And step "implement.health.check" changes nothing
|
|
806
713
|
And step "implement.closing" runs its script
|
|
807
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
808
|
-
"""
|
|
809
|
-
# Review: abc1234
|
|
810
|
-
|
|
811
|
-
<!-- base: 0000000 -->
|
|
812
|
-
|
|
813
|
-
## calc
|
|
814
|
-
|
|
815
|
-
- [ ] ./src/calc.ts#1-3
|
|
816
|
-
subtract built on the shared op
|
|
817
|
-
"""
|
|
818
714
|
When the process is driven
|
|
819
715
|
Then the process rests at "refactor.build.review.await-review"
|
|
820
716
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -837,7 +733,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
837
733
|
"""
|
|
838
734
|
When gtd lands
|
|
839
735
|
And the process is driven
|
|
840
|
-
Then the process rests at "
|
|
736
|
+
Then the process rests at "idle"
|
|
737
|
+
And "src/calc.ts" contains "subtract"
|
|
841
738
|
|
|
842
739
|
Scenario: a one-shot footnote judged edit that collecting leaves out refuses naming its anchor
|
|
843
740
|
When the process is driven
|
|
@@ -1076,17 +973,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1076
973
|
"""
|
|
1077
974
|
And step "implement.health.check" changes nothing
|
|
1078
975
|
And step "implement.closing" runs its script
|
|
1079
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
1080
|
-
"""
|
|
1081
|
-
# Review: abc1234
|
|
1082
|
-
|
|
1083
|
-
<!-- base: 0000000 -->
|
|
1084
|
-
|
|
1085
|
-
## calc
|
|
1086
|
-
|
|
1087
|
-
- [ ] ./src/calc.ts#1-3
|
|
1088
|
-
subtract built on the shared op
|
|
1089
|
-
"""
|
|
1090
976
|
When the process is driven
|
|
1091
977
|
Then the process rests at "refactor.build.review.await-review"
|
|
1092
978
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -1154,7 +1040,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1154
1040
|
"""
|
|
1155
1041
|
When gtd lands
|
|
1156
1042
|
And the process is driven
|
|
1157
|
-
Then the process rests at "
|
|
1043
|
+
Then the process rests at "idle"
|
|
1044
|
+
And "src/calc.ts" contains "subtract"
|
|
1158
1045
|
|
|
1159
1046
|
Scenario: a praise-only refactor review still signs off and the feature slice follows
|
|
1160
1047
|
Given step "implement.building" writes "src/calc.ts" with:
|
|
@@ -1165,17 +1052,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1165
1052
|
"""
|
|
1166
1053
|
And step "implement.health.check" changes nothing
|
|
1167
1054
|
And step "implement.closing" runs its script
|
|
1168
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
1169
|
-
"""
|
|
1170
|
-
# Review: abc1234
|
|
1171
|
-
|
|
1172
|
-
<!-- base: 0000000 -->
|
|
1173
|
-
|
|
1174
|
-
## calc
|
|
1175
|
-
|
|
1176
|
-
- [ ] ./src/calc.ts#1-3
|
|
1177
|
-
subtract built on the shared op
|
|
1178
|
-
"""
|
|
1179
1055
|
When the process is driven
|
|
1180
1056
|
Then the process rests at "refactor.build.review.await-review"
|
|
1181
1057
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -1191,147 +1067,8 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1191
1067
|
"""
|
|
1192
1068
|
When gtd lands
|
|
1193
1069
|
And the process is driven
|
|
1194
|
-
Then the process rests at "
|
|
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
|
-
"""
|
|
1070
|
+
Then the process rests at "idle"
|
|
1071
|
+
And "src/calc.ts" contains "subtract"
|
|
1335
1072
|
|
|
1336
1073
|
Scenario: a nit fix in the refactor slice that changes a non-stray is refused, though a glob stray widens the write access
|
|
1337
1074
|
Given step "seam.naive" writes "src/*.ts" with:
|
|
@@ -1476,7 +1213,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1476
1213
|
"""
|
|
1477
1214
|
And step "refactor.build.review.closing" runs its script
|
|
1478
1215
|
|
|
1479
|
-
Scenario: each slice's quality lap reviews from that slice's base
|
|
1216
|
+
Scenario: each slice's quality lap reviews from that slice's base
|
|
1480
1217
|
When the process is driven
|
|
1481
1218
|
Then the process rests at "refactor.build.quality.correctness.reviewing"
|
|
1482
1219
|
And the resting step's content contains the hash of the commit "gtd(judge): seam.judge → refactor.deriving"
|
|
@@ -1507,88 +1244,13 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1507
1244
|
Then the process rests at "build.quality.correctness.reviewing"
|
|
1508
1245
|
And the resting step's content contains the hash of the commit "gtd(check): refactor.build.review.closing → implement.building"
|
|
1509
1246
|
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
1247
|
When the process is driven
|
|
1522
|
-
Then the process rests at "
|
|
1523
|
-
|
|
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
|
|
1575
|
-
"""
|
|
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:
|
|
1248
|
+
Then the process rests at "idle"
|
|
1249
|
+
And the commit subjects end with:
|
|
1580
1250
|
"""
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
export const subtract = (a: number, b: number) => op(a, b, -1)
|
|
1584
|
-
export const multiply = (a: number, b: number) => a * b
|
|
1251
|
+
gtd(check): implement.closing → build.quality.correctness.reviewing
|
|
1252
|
+
gtd(agent): build.quality.correctness.reviewing → idle
|
|
1585
1253
|
"""
|
|
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
1254
|
|
|
1593
1255
|
Rule: a refactor package never carries a test file, and demoted headings stop at ######
|
|
1594
1256
|
|
|
@@ -52,18 +52,6 @@ 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:
|
|
56
|
-
"""
|
|
57
|
-
# Review: abc1234
|
|
58
|
-
|
|
59
|
-
<!-- base: 0000000 -->
|
|
60
|
-
|
|
61
|
-
## calc
|
|
62
|
-
|
|
63
|
-
- [ ] ./src/calc.ts#1-2
|
|
64
|
-
subtract added
|
|
65
|
-
"""
|
|
66
|
-
And step "build.review.closing" runs its script
|
|
67
55
|
When the process is driven
|
|
68
56
|
Then the process rests at "seam.judge"
|
|
69
57
|
|
|
@@ -113,21 +101,6 @@ Feature: rejected naive passes walk one fixed path through the steer gate to idl
|
|
|
113
101
|
"""
|
|
114
102
|
When gtd lands
|
|
115
103
|
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
104
|
Then the process rests at "idle"
|
|
132
105
|
And the commit subjects end with:
|
|
133
106
|
"""
|
|
@@ -151,10 +124,7 @@ Feature: rejected naive passes walk one fixed path through the steer gate to idl
|
|
|
151
124
|
gtd(judge): seam.judge → implement.building
|
|
152
125
|
gtd(agent): implement.building → implement.health.check
|
|
153
126
|
gtd(check): implement.health.check → implement.closing
|
|
154
|
-
gtd(check): implement.closing →
|
|
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
|
|
127
|
+
gtd(check): implement.closing → idle
|
|
158
128
|
"""
|
|
159
129
|
And the commit "gtd(human): idle → unwind" has a body containing "Gtd-Var: flag_risk_tier=0"
|
|
160
130
|
And the commit "gtd(agent): seam.naive → seam.check" has a body containing "Gtd-Kept:"
|
|
@@ -146,13 +146,13 @@ Feature: the naive pass and seam judge decide how a feature is built
|
|
|
146
146
|
And step "implement.health.check" changes nothing
|
|
147
147
|
And step "implement.closing" runs its script
|
|
148
148
|
When the process is driven
|
|
149
|
-
Then the process rests at "
|
|
149
|
+
Then the process rests at "idle"
|
|
150
150
|
And the commit subjects end with:
|
|
151
151
|
"""
|
|
152
152
|
gtd(judge): seam.judge → implement.building
|
|
153
153
|
gtd(agent): implement.building → implement.health.check
|
|
154
154
|
gtd(check): implement.health.check → implement.closing
|
|
155
|
-
gtd(check): implement.closing →
|
|
155
|
+
gtd(check): implement.closing → idle
|
|
156
156
|
"""
|
|
157
157
|
And ".gtd/REQUIREMENTS.md" does not exist
|
|
158
158
|
|
|
@@ -276,104 +276,3 @@ Feature: the naive pass and seam judge decide how a feature is built
|
|
|
276
276
|
gtd(judge): seam.judge → seam.steer
|
|
277
277
|
gtd(human): seam.steer → implement.building
|
|
278
278
|
"""
|
|
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
|
-
"""
|
|
@@ -302,7 +302,7 @@ const decide = (): Promise<Decision> =>
|
|
|
302
302
|
export interface SeamOutcome {
|
|
303
303
|
/** The naive pass's kept tip: the first implement turn's reading material. */
|
|
304
304
|
readonly reference: string
|
|
305
|
-
/** The feature
|
|
305
|
+
/** The feature slice's base: HEAD after the refactor on refactor-first, else the caller's base. */
|
|
306
306
|
readonly base: string
|
|
307
307
|
readonly refactored?: boolean
|
|
308
308
|
}
|