@pmelab/gtd 48.0.0 → 49.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 +38 -32
- package/dist/chunks/{reserved-DF1HD6jL.mjs → reserved-CYZ1bSBy.mjs} +93 -24
- package/dist/chunks/{review-Bv40kZu9.mjs → review-BewyJflS.mjs} +58 -14
- package/dist/chunks/{steering-D7hWeMgE.mjs → steering-BXwjmocB.mjs} +7 -1
- package/dist/chunks/{tail-D89fU_wf.mjs → tail-C1Oi2YEy.mjs} +1 -1
- package/dist/steering.mjs +2 -2
- package/dist/testkit.mjs +1 -1
- package/dist/workflow-kit.mjs +1 -1
- package/dist/workflows/cleanup.mjs +2 -2
- package/dist/workflows/feature.mjs +16 -9
- package/dist/workflows/fix.mjs +3 -3
- package/dist/workflows/review.mjs +3 -3
- package/dist/workflows/rollout.mjs +1 -1
- package/dist/workflows.mjs +164 -39
- package/package.json +1 -1
- package/src/steering/index.ts +1 -0
- package/src/steering/review.test.ts +29 -0
- package/src/steering/review.ts +10 -0
- package/src/workflows/feature/coverage.feature +3 -3
- package/src/workflows/feature/fast-path.feature +2 -2
- package/src/workflows/feature/feature.ts +10 -3
- package/src/workflows/feature/flag-mode.feature +2 -2
- package/src/workflows/feature/lens-review.feature +116 -13
- package/src/workflows/feature/one-step-land.feature +2 -2
- package/src/workflows/feature/refactor-absorbs.feature +2 -2
- package/src/workflows/feature/refactor-first.feature +2 -2
- package/src/workflows/feature/refactor-rebuild.feature +2 -2
- package/src/workflows/feature/refactor-review.feature +6 -6
- package/src/workflows/feature/review-answers.feature +44 -5
- package/src/workflows/feature/review-gate.feature +6 -6
- package/src/workflows/feature/reviewer-walkthrough.feature +229 -0
- package/src/workflows/feature/seam-rejection.feature +2 -2
- package/src/workflows/feature/seam.feature +2 -2
- package/src/workflows/feature/slice-findings.feature +56 -5
- package/src/workflows/feature/slicing.feature +6 -6
- package/src/workflows/feature/standards.feature +25 -1
- package/src/workflows/shared/review.ts +108 -13
- package/src/workflows/shared/steps.ts +3 -2
- package/src/workflows/shared/text.test.ts +126 -0
- package/src/workflows/shared/text.ts +125 -19
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
@inmem
|
|
2
|
-
Feature: the quality
|
|
2
|
+
Feature: the quality lap's findings are triaged before the review
|
|
3
3
|
|
|
4
4
|
A judge classifies each `## ` finding the lenses wrote to `.gtd/QUALITY.md`:
|
|
5
5
|
a mechanical one is fixed by the fixer, noise is dropped with its `p` kept in
|
|
6
6
|
a trailer, and a design one becomes a note in `.gtd/REVIEW.md`, with answer
|
|
7
|
-
boxes
|
|
8
|
-
|
|
9
|
-
noise.
|
|
7
|
+
boxes, in the chunk the reviewer gave it. gtd lists, without tick boxes,
|
|
8
|
+
what was fixed automatically and what was dropped as noise.
|
|
10
9
|
|
|
11
10
|
Background:
|
|
12
11
|
Given the shipped workflows, as gtd install scaffolds them
|
|
@@ -75,7 +74,7 @@ Feature: the quality lenses are the only agentic review
|
|
|
75
74
|
"""
|
|
76
75
|
And step "build.quality.sorting" runs its script
|
|
77
76
|
And step "build.quality.closing" runs its script
|
|
78
|
-
And step "build.review.
|
|
77
|
+
And step "build.review.carrying" runs its script
|
|
79
78
|
|
|
80
79
|
Scenario: a mechanical finding is fixed and listed, noise dropped and listed, a design one noted
|
|
81
80
|
Given judge step "build.quality.triage" answers:
|
|
@@ -89,6 +88,20 @@ Feature: the quality lenses are the only agentic review
|
|
|
89
88
|
"""
|
|
90
89
|
And step "build.fix.quality.fixing" deletes ".gtd/QUALITY.md"
|
|
91
90
|
And step "build.health.check" changes nothing
|
|
91
|
+
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
92
|
+
"""
|
|
93
|
+
# Review: abc1234
|
|
94
|
+
|
|
95
|
+
<!-- base: 0000000 -->
|
|
96
|
+
|
|
97
|
+
## Subtract
|
|
98
|
+
|
|
99
|
+
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
100
|
+
|
|
101
|
+
## AC-1 ignores floating point
|
|
102
|
+
|
|
103
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
104
|
+
"""
|
|
92
105
|
When the process is driven
|
|
93
106
|
Then the process rests at "build.review.await-review"
|
|
94
107
|
And ".gtd/QUALITY.md" does not exist
|
|
@@ -99,6 +112,10 @@ Feature: the quality lenses are the only agentic review
|
|
|
99
112
|
|
|
100
113
|
Should subtract round? The criterion does not say.
|
|
101
114
|
|
|
115
|
+
In the code:
|
|
116
|
+
|
|
117
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
118
|
+
|
|
102
119
|
Tick exactly one:
|
|
103
120
|
|
|
104
121
|
- [ ] fix as suggested
|
|
@@ -129,8 +146,9 @@ Feature: the quality lenses are the only agentic review
|
|
|
129
146
|
gtd(judge): build.quality.triage → build.quality.sorting
|
|
130
147
|
gtd(check): build.quality.sorting → build.fix.quality.fixing
|
|
131
148
|
gtd(agent): build.fix.quality.fixing → build.health.check
|
|
132
|
-
gtd(check): build.health.check → build.review.
|
|
133
|
-
gtd(
|
|
149
|
+
gtd(check): build.health.check → build.review.reviewing
|
|
150
|
+
gtd(agent): build.review.reviewing → build.review.carrying
|
|
151
|
+
gtd(check): build.review.carrying → build.review.await-review
|
|
134
152
|
"""
|
|
135
153
|
|
|
136
154
|
Scenario: an unsure verdict makes a finding a note, never a fix or a drop
|
|
@@ -138,6 +156,28 @@ Feature: the quality lenses are the only agentic review
|
|
|
138
156
|
"""
|
|
139
157
|
[{"id":"Q1","answer":"mechanical","p":0.5},{"id":"Q2","answer":"noise","p":0.6}]
|
|
140
158
|
"""
|
|
159
|
+
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
160
|
+
"""
|
|
161
|
+
# Review: abc1234
|
|
162
|
+
|
|
163
|
+
<!-- base: 0000000 -->
|
|
164
|
+
|
|
165
|
+
## Subtract
|
|
166
|
+
|
|
167
|
+
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
168
|
+
|
|
169
|
+
## subtract has no negative test
|
|
170
|
+
|
|
171
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
172
|
+
|
|
173
|
+
## add could be a method
|
|
174
|
+
|
|
175
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
176
|
+
|
|
177
|
+
## AC-1 ignores floating point
|
|
178
|
+
|
|
179
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
180
|
+
"""
|
|
141
181
|
When the process is driven
|
|
142
182
|
Then the process rests at "build.review.await-review"
|
|
143
183
|
And ".gtd/REVIEW.md" contains "## subtract has no negative test"
|
|
@@ -148,8 +188,9 @@ Feature: the quality lenses are the only agentic review
|
|
|
148
188
|
And the commit subjects end with:
|
|
149
189
|
"""
|
|
150
190
|
gtd(judge): build.quality.triage → build.quality.sorting
|
|
151
|
-
gtd(check): build.quality.sorting → build.review.
|
|
152
|
-
gtd(
|
|
191
|
+
gtd(check): build.quality.sorting → build.review.reviewing
|
|
192
|
+
gtd(agent): build.review.reviewing → build.review.carrying
|
|
193
|
+
gtd(check): build.review.carrying → build.review.await-review
|
|
153
194
|
"""
|
|
154
195
|
|
|
155
196
|
Scenario: a mechanical finding the fix cap leaves becomes a note
|
|
@@ -166,6 +207,20 @@ Feature: the quality lenses are the only agentic review
|
|
|
166
207
|
A class would read better.
|
|
167
208
|
"""
|
|
168
209
|
And step "build.health.check" changes nothing
|
|
210
|
+
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
211
|
+
"""
|
|
212
|
+
# Review: abc1234
|
|
213
|
+
|
|
214
|
+
<!-- base: 0000000 -->
|
|
215
|
+
|
|
216
|
+
## Subtract
|
|
217
|
+
|
|
218
|
+
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
219
|
+
|
|
220
|
+
## add could be a method
|
|
221
|
+
|
|
222
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
223
|
+
"""
|
|
169
224
|
When the process is driven
|
|
170
225
|
Then the process rests at "build.review.await-review"
|
|
171
226
|
And ".gtd/QUALITY.md" does not exist
|
|
@@ -186,8 +241,9 @@ Feature: the quality lenses are the only agentic review
|
|
|
186
241
|
gtd(agent): build.fix.quality.fixing
|
|
187
242
|
gtd(agent): build.fix.quality.fixing → build.health.check
|
|
188
243
|
gtd(check): build.health.check → build.quality.closing
|
|
189
|
-
gtd(check): build.quality.closing → build.review.
|
|
190
|
-
gtd(
|
|
244
|
+
gtd(check): build.quality.closing → build.review.reviewing
|
|
245
|
+
gtd(agent): build.review.reviewing → build.review.carrying
|
|
246
|
+
gtd(check): build.review.carrying → build.review.await-review
|
|
191
247
|
"""
|
|
192
248
|
|
|
193
249
|
Scenario: a fixer that renames a chunk it leaves counts nothing fixed
|
|
@@ -204,6 +260,32 @@ Feature: the quality lenses are the only agentic review
|
|
|
204
260
|
Still open.
|
|
205
261
|
"""
|
|
206
262
|
And step "build.health.check" changes nothing
|
|
263
|
+
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
264
|
+
"""
|
|
265
|
+
# Review: abc1234
|
|
266
|
+
|
|
267
|
+
<!-- base: 0000000 -->
|
|
268
|
+
|
|
269
|
+
## Subtract
|
|
270
|
+
|
|
271
|
+
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
272
|
+
|
|
273
|
+
## subtract has no negative test
|
|
274
|
+
|
|
275
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
276
|
+
|
|
277
|
+
## add could be a method
|
|
278
|
+
|
|
279
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
280
|
+
|
|
281
|
+
## AC-1 ignores floating point
|
|
282
|
+
|
|
283
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
284
|
+
|
|
285
|
+
## null check in parse()
|
|
286
|
+
|
|
287
|
+
- [ ] ./src/calc.ts#2-2 — where it applies
|
|
288
|
+
"""
|
|
207
289
|
When the process is driven
|
|
208
290
|
Then the process rests at "build.review.await-review"
|
|
209
291
|
And ".gtd/REVIEW.md" contains "## null check in parse()"
|
|
@@ -223,17 +305,37 @@ Feature: the quality lenses are the only agentic review
|
|
|
223
305
|
All fixed.
|
|
224
306
|
"""
|
|
225
307
|
And step "build.health.check" changes nothing
|
|
308
|
+
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
309
|
+
"""
|
|
310
|
+
# Review: abc1234
|
|
311
|
+
|
|
312
|
+
<!-- base: 0000000 -->
|
|
313
|
+
|
|
314
|
+
## Subtract
|
|
315
|
+
|
|
316
|
+
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
317
|
+
"""
|
|
226
318
|
When the process is driven
|
|
227
319
|
Then the process rests at "build.review.await-review"
|
|
228
320
|
And ".gtd/REVIEW.md" contains "- subtract has no negative test ("
|
|
229
321
|
And ".gtd/REVIEW.md" does not contain "check whether it was fixed"
|
|
230
322
|
|
|
231
|
-
Scenario: signing off a
|
|
323
|
+
Scenario: signing off a review with no notes ends the process
|
|
232
324
|
Given judge step "build.quality.triage" answers:
|
|
233
325
|
"""
|
|
234
326
|
[{"id":"Q1","answer":"noise","p":0.9},{"id":"Q2","answer":"noise","p":0.9},{"id":"Q3","answer":"noise","p":0.9}]
|
|
235
327
|
"""
|
|
236
328
|
And step "build.review.closing" runs its script
|
|
329
|
+
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
330
|
+
"""
|
|
331
|
+
# Review: abc1234
|
|
332
|
+
|
|
333
|
+
<!-- base: 0000000 -->
|
|
334
|
+
|
|
335
|
+
## Subtract
|
|
336
|
+
|
|
337
|
+
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
338
|
+
"""
|
|
237
339
|
When the process is driven
|
|
238
340
|
Then the process rests at "build.review.await-review"
|
|
239
341
|
When gtd lands
|
|
@@ -242,7 +344,8 @@ Feature: the quality lenses are the only agentic review
|
|
|
242
344
|
And ".gtd/REVIEW.md" does not exist
|
|
243
345
|
And the commit subjects end with:
|
|
244
346
|
"""
|
|
245
|
-
gtd(
|
|
347
|
+
gtd(agent): build.review.reviewing → build.review.carrying
|
|
348
|
+
gtd(check): build.review.carrying → build.review.await-review
|
|
246
349
|
gtd(human): build.review.await-review → build.review.closing
|
|
247
350
|
gtd(check): build.review.closing → idle
|
|
248
351
|
"""
|
|
@@ -64,7 +64,7 @@ Feature: a naive pass the judge rules land is itself the implementation
|
|
|
64
64
|
|
|
65
65
|
Scenario: a land judgment applies the naive pass and runs from idle to the review gate with no rebuild
|
|
66
66
|
When the process is driven
|
|
67
|
-
Then the process rests at "build.review.
|
|
67
|
+
Then the process rests at "build.review.reviewing"
|
|
68
68
|
And "src/greeting.ts" contains "Hello, world"
|
|
69
69
|
And "src/acceptance.test.ts" contains "[AC-1] holds"
|
|
70
70
|
And the commit subjects end with:
|
|
@@ -81,7 +81,7 @@ Feature: a naive pass the judge rules land is itself the implementation
|
|
|
81
81
|
gtd(check): implement.health.check → implement.coverage
|
|
82
82
|
gtd(judge): implement.coverage → implement.closing
|
|
83
83
|
gtd(check): implement.closing → build.quality.correctness.reviewing
|
|
84
|
-
gtd(agent): build.quality.correctness.reviewing → build.review.
|
|
84
|
+
gtd(agent): build.quality.correctness.reviewing → build.review.reviewing
|
|
85
85
|
"""
|
|
86
86
|
And the commit "gtd(human): idle → unwind" has a body containing "Gtd-Var: flag_risk_tier=0"
|
|
87
87
|
And the commit "gtd(agent): seam.naive → seam.check" has a body containing "Gtd-Kept:"
|
|
@@ -113,7 +113,7 @@ Feature: a refactor that carried the whole feature still gets a quality lap over
|
|
|
113
113
|
|
|
114
114
|
Given step "build.quality.correctness.reviewing" changes nothing
|
|
115
115
|
When the process is driven
|
|
116
|
-
Then the process rests at "build.review.
|
|
116
|
+
Then the process rests at "build.review.reviewing"
|
|
117
117
|
And "src/calc.ts" contains "subtract"
|
|
118
118
|
And the commit subjects end with:
|
|
119
119
|
"""
|
|
@@ -123,7 +123,7 @@ Feature: a refactor that carried the whole feature still gets a quality lap over
|
|
|
123
123
|
gtd(check): implement.health.check → implement.coverage
|
|
124
124
|
gtd(judge): implement.coverage → implement.closing
|
|
125
125
|
gtd(check): implement.closing → build.quality.correctness.reviewing
|
|
126
|
-
gtd(agent): build.quality.correctness.reviewing → build.review.
|
|
126
|
+
gtd(agent): build.quality.correctness.reviewing → build.review.reviewing
|
|
127
127
|
"""
|
|
128
128
|
And the output lines of gtd "slices" start with:
|
|
129
129
|
"""
|
|
@@ -121,7 +121,7 @@ Feature: a refactor-first judgment walks one fixed path to the review gate
|
|
|
121
121
|
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
122
122
|
"""
|
|
123
123
|
When the process is driven
|
|
124
|
-
Then the process rests at "build.review.
|
|
124
|
+
Then the process rests at "build.review.reviewing"
|
|
125
125
|
And "src/calc.ts" contains "op(a, b, 1)"
|
|
126
126
|
And "src/calc.ts" contains "subtract"
|
|
127
127
|
And the commit subjects end with:
|
|
@@ -145,7 +145,7 @@ Feature: a refactor-first judgment walks one fixed path to the review gate
|
|
|
145
145
|
gtd(agent): implement.building → implement.health.check
|
|
146
146
|
gtd(check): implement.health.check → implement.coverage
|
|
147
147
|
gtd(judge): implement.coverage → implement.closing
|
|
148
|
-
gtd(check): implement.closing → build.review.
|
|
148
|
+
gtd(check): implement.closing → build.review.reviewing
|
|
149
149
|
"""
|
|
150
150
|
And the commit "gtd(human): idle → unwind" has a body containing "Gtd-Var: flag_risk_tier=0"
|
|
151
151
|
And the commit "gtd(agent): seam.naive → seam.check" has a body containing "Gtd-Kept:"
|
|
@@ -242,7 +242,7 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
|
|
|
242
242
|
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
243
243
|
"""
|
|
244
244
|
When the process is driven
|
|
245
|
-
Then the process rests at "build.review.
|
|
245
|
+
Then the process rests at "build.review.reviewing"
|
|
246
246
|
And "src/calc.ts" contains "op(a, b, -1)"
|
|
247
247
|
And "src/acceptance.test.ts" contains "[AC-1]"
|
|
248
248
|
And ".gtd/REFACTOR-NOTE.md" does not exist
|
|
@@ -260,7 +260,7 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
|
|
|
260
260
|
gtd(agent): implement.building → implement.health.check
|
|
261
261
|
gtd(check): implement.health.check → implement.coverage
|
|
262
262
|
gtd(judge): implement.coverage → implement.closing
|
|
263
|
-
gtd(check): implement.closing → build.review.
|
|
263
|
+
gtd(check): implement.closing → build.review.reviewing
|
|
264
264
|
"""
|
|
265
265
|
And the output lines of gtd "slices" start with:
|
|
266
266
|
"""
|
|
@@ -646,7 +646,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
646
646
|
"""
|
|
647
647
|
When gtd lands
|
|
648
648
|
And the process is driven
|
|
649
|
-
Then the process rests at "build.review.
|
|
649
|
+
Then the process rests at "build.review.reviewing"
|
|
650
650
|
And "src/calc.ts" contains "subtract"
|
|
651
651
|
|
|
652
652
|
Scenario: a praise-only one-shot footnote signs off and the feature slice follows
|
|
@@ -688,7 +688,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
688
688
|
"""
|
|
689
689
|
When gtd lands
|
|
690
690
|
And the process is driven
|
|
691
|
-
Then the process rests at "build.review.
|
|
691
|
+
Then the process rests at "build.review.reviewing"
|
|
692
692
|
And "src/calc.ts" contains "subtract"
|
|
693
693
|
|
|
694
694
|
Scenario: a one-shot footnote judged edit that collecting leaves out refuses naming its anchor
|
|
@@ -1003,7 +1003,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1003
1003
|
"""
|
|
1004
1004
|
When gtd lands
|
|
1005
1005
|
And the process is driven
|
|
1006
|
-
Then the process rests at "build.review.
|
|
1006
|
+
Then the process rests at "build.review.reviewing"
|
|
1007
1007
|
And "src/calc.ts" contains "subtract"
|
|
1008
1008
|
|
|
1009
1009
|
Scenario: a praise-only refactor review still signs off and the feature slice follows
|
|
@@ -1038,7 +1038,7 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1038
1038
|
"""
|
|
1039
1039
|
When gtd lands
|
|
1040
1040
|
And the process is driven
|
|
1041
|
-
Then the process rests at "build.review.
|
|
1041
|
+
Then the process rests at "build.review.reviewing"
|
|
1042
1042
|
And "src/calc.ts" contains "subtract"
|
|
1043
1043
|
|
|
1044
1044
|
Scenario: a nit fix in the refactor slice that changes a non-stray is refused, though a glob stray widens the write access
|
|
@@ -1228,11 +1228,11 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1228
1228
|
And the resting step's content contains the hash of the commit "gtd(check): refactor.build.review.closing → implement.building"
|
|
1229
1229
|
Given step "build.quality.correctness.reviewing" changes nothing
|
|
1230
1230
|
When the process is driven
|
|
1231
|
-
Then the process rests at "build.review.
|
|
1231
|
+
Then the process rests at "build.review.reviewing"
|
|
1232
1232
|
And the commit subjects end with:
|
|
1233
1233
|
"""
|
|
1234
1234
|
gtd(check): implement.closing → build.quality.correctness.reviewing
|
|
1235
|
-
gtd(agent): build.quality.correctness.reviewing → build.review.
|
|
1235
|
+
gtd(agent): build.quality.correctness.reviewing → build.review.reviewing
|
|
1236
1236
|
"""
|
|
1237
1237
|
|
|
1238
1238
|
Rule: a refactor package never carries a test file, and demoted headings stop at ######
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@inmem
|
|
2
2
|
Feature: every note in the review is answered with one tick
|
|
3
3
|
|
|
4
|
-
Each note
|
|
4
|
+
Each quality note in `.gtd/REVIEW.md` ends in three boxes — fix as
|
|
5
5
|
suggested, won't fix, or the human's own answer written over the
|
|
6
6
|
placeholder. The gate refuses to land until every note holds exactly one
|
|
7
7
|
tick. A fix goes to the nit batch, a won't-fix is dropped and recorded in
|
|
@@ -74,7 +74,41 @@ Feature: every note in the review is answered with one tick
|
|
|
74
74
|
Should subtract round? The criterion does not say.
|
|
75
75
|
"""
|
|
76
76
|
And step "build.quality.sorting" runs its script
|
|
77
|
-
And step "build.review.
|
|
77
|
+
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
78
|
+
"""
|
|
79
|
+
# Review: abc1234
|
|
80
|
+
|
|
81
|
+
<!-- base: 0000000 -->
|
|
82
|
+
|
|
83
|
+
## Subtract
|
|
84
|
+
|
|
85
|
+
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
86
|
+
"""
|
|
87
|
+
And step "build.review.reviewing", when prompted with "- `## AC-1 ignores floating point`", writes ".gtd/REVIEW.md" with:
|
|
88
|
+
"""
|
|
89
|
+
# Review: abc1234
|
|
90
|
+
|
|
91
|
+
<!-- base: 0000000 -->
|
|
92
|
+
|
|
93
|
+
## Subtract
|
|
94
|
+
|
|
95
|
+
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
96
|
+
|
|
97
|
+
## AC-1 ignores floating point
|
|
98
|
+
|
|
99
|
+
- [ ] ./src/calc.ts#2-2 — returns the raw difference
|
|
100
|
+
"""
|
|
101
|
+
And step "build.review.reviewing", when prompted with "worked on the human's nits", writes ".gtd/REVIEW.md" with:
|
|
102
|
+
"""
|
|
103
|
+
# Review: abc1234
|
|
104
|
+
|
|
105
|
+
<!-- base: 0000000 -->
|
|
106
|
+
|
|
107
|
+
## Subtract
|
|
108
|
+
|
|
109
|
+
- [ ] ./src/calc.ts#2-2 — now rounds the difference
|
|
110
|
+
"""
|
|
111
|
+
And step "build.review.carrying" runs its script
|
|
78
112
|
And judge step "build.quality.triage" answers:
|
|
79
113
|
"""
|
|
80
114
|
[{"id":"Q1","answer":"noise","p":0.9},{"id":"Q2","answer":"noise","p":0.9},{"id":"Q3","answer":"design","p":0.9}]
|
|
@@ -90,6 +124,10 @@ Feature: every note in the review is answered with one tick
|
|
|
90
124
|
|
|
91
125
|
Should subtract round? The criterion does not say.
|
|
92
126
|
|
|
127
|
+
In the code:
|
|
128
|
+
|
|
129
|
+
- [ ] ./src/calc.ts#2-2 — returns the raw difference
|
|
130
|
+
|
|
93
131
|
Tick exactly one:
|
|
94
132
|
|
|
95
133
|
- [ ] fix as suggested
|
|
@@ -141,7 +179,7 @@ Feature: every note in the review is answered with one tick
|
|
|
141
179
|
And the process is driven
|
|
142
180
|
Then the process rests at "build.review.await-review"
|
|
143
181
|
And no commit body contains "build.review.triage"
|
|
144
|
-
And ".gtd/REVIEW.md" contains "
|
|
182
|
+
And ".gtd/REVIEW.md" contains "now rounds the difference"
|
|
145
183
|
And ".gtd/REVIEW.md" does not contain "AC-1 ignores floating point"
|
|
146
184
|
And ".gtd/TODO.md" does not exist
|
|
147
185
|
When gtd lands
|
|
@@ -176,8 +214,9 @@ Feature: every note in the review is answered with one tick
|
|
|
176
214
|
gtd(judge): build.review.triage → build.review.fix.nits.fixing
|
|
177
215
|
gtd(agent): build.review.fix.nits.fixing → build.health.check
|
|
178
216
|
gtd(check): build.health.check → build.review.closing
|
|
179
|
-
gtd(check): build.review.closing → build.review.
|
|
180
|
-
gtd(
|
|
217
|
+
gtd(check): build.review.closing → build.review.reviewing
|
|
218
|
+
gtd(agent): build.review.reviewing → build.review.carrying
|
|
219
|
+
gtd(check): build.review.carrying → build.review.await-review
|
|
181
220
|
"""
|
|
182
221
|
And ".gtd/REVIEW.md" does not contain "AC-1 ignores floating point"
|
|
183
222
|
|
|
@@ -57,7 +57,7 @@ Feature: a feature process ends at the human review
|
|
|
57
57
|
"""
|
|
58
58
|
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
59
59
|
"""
|
|
60
|
-
And step "build.review.
|
|
60
|
+
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
61
61
|
"""
|
|
62
62
|
# Review: abc1234
|
|
63
63
|
|
|
@@ -78,8 +78,8 @@ Feature: a feature process ends at the human review
|
|
|
78
78
|
And the commit subjects end with:
|
|
79
79
|
"""
|
|
80
80
|
gtd(judge): implement.coverage → implement.closing
|
|
81
|
-
gtd(check): implement.closing → build.review.
|
|
82
|
-
gtd(
|
|
81
|
+
gtd(check): implement.closing → build.review.reviewing
|
|
82
|
+
gtd(agent): build.review.reviewing → build.review.await-review
|
|
83
83
|
"""
|
|
84
84
|
|
|
85
85
|
Scenario: a sign-off ends the process at idle
|
|
@@ -102,7 +102,7 @@ Feature: a feature process ends at the human review
|
|
|
102
102
|
And ".gtd/REVIEW.md" does not exist
|
|
103
103
|
And the commit subjects end with:
|
|
104
104
|
"""
|
|
105
|
-
gtd(
|
|
105
|
+
gtd(agent): build.review.reviewing → build.review.await-review
|
|
106
106
|
gtd(human): build.review.await-review → build.review.closing
|
|
107
107
|
gtd(check): build.review.closing → idle
|
|
108
108
|
"""
|
|
@@ -214,8 +214,8 @@ Feature: a feature process ends at the human review
|
|
|
214
214
|
gtd(agent): implement.building → implement.health.check
|
|
215
215
|
gtd(check): implement.health.check → implement.coverage
|
|
216
216
|
gtd(judge): implement.coverage → implement.closing
|
|
217
|
-
gtd(check): implement.closing → build.review.
|
|
218
|
-
gtd(
|
|
217
|
+
gtd(check): implement.closing → build.review.reviewing
|
|
218
|
+
gtd(agent): build.review.reviewing → build.review.await-review
|
|
219
219
|
"""
|
|
220
220
|
|
|
221
221
|
Scenario: a design numbering new behaviour at or below an earlier ID is refused
|