@pmelab/gtd 51.0.0 → 52.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 +41 -38
- package/dist/chunks/{reserved-CUkk9XgL.mjs → reserved-D0MKVFFa.mjs} +28 -34
- package/dist/chunks/{review-BaCXlIT2.mjs → review-ZzUQH1KZ.mjs} +11 -9
- package/dist/chunks/{steering-DtUVUz9l.mjs → steering-CLhu8C7q.mjs} +262 -52
- package/dist/chunks/{tail-CX6Pdsql.mjs → tail-I1-vVq0P.mjs} +1 -1
- package/dist/gtd.bundle.mjs +224 -68
- package/dist/steering.mjs +2 -2
- package/dist/testkit.mjs +27 -26
- package/dist/web/main.css +1 -1
- package/dist/web/main.js +510 -147
- package/dist/workflow-kit.mjs +1 -1
- package/dist/workflows/cleanup.mjs +2 -2
- package/dist/workflows/feature.mjs +181 -222
- 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 +478 -313
- package/package.json +1 -1
- package/src/edge/Edge.ts +1 -30
- package/src/replay/Replay.test.ts +4 -8
- package/src/replay/Replay.ts +35 -3
- package/src/replay/index.ts +7 -1
- package/src/steering/FORMATS.md +4 -1
- package/src/steering/SteeringFormat.ts +7 -1
- package/src/steering/contract.test.ts +2 -1
- package/src/steering/fixtures/review/sectioned.md +31 -0
- package/src/steering/fixtures/review/sectioned.read.json +119 -0
- package/src/steering/index.ts +4 -0
- package/src/steering/qa.ts +1 -1
- package/src/steering/review.test.ts +270 -4
- package/src/steering/review.ts +328 -69
- package/src/workflows/feature/criteria.test.ts +39 -1
- package/src/workflows/feature/criteria.ts +21 -7
- package/src/workflows/feature/fast-path.feature +1 -6
- package/src/workflows/feature/feature.ts +1 -2
- package/src/workflows/feature/flag-mode.feature +1 -6
- package/src/workflows/feature/green.ts +22 -0
- package/src/workflows/feature/hands-on-skip.feature +344 -0
- package/src/workflows/feature/lens-models.feature +0 -4
- package/src/workflows/feature/lens-review.feature +6 -8
- package/src/workflows/feature/one-step-land.feature +1 -6
- package/src/workflows/feature/prototype-rounds.feature +1 -1
- package/src/workflows/feature/prototype.feature +10 -9
- package/src/workflows/feature/prototype.ts +48 -17
- package/src/workflows/feature/refactor-absorbs.feature +3 -8
- package/src/workflows/feature/refactor-first.feature +3 -8
- package/src/workflows/feature/refactor-rebuild.feature +7 -12
- package/src/workflows/feature/refactor-review.feature +52 -72
- package/src/workflows/feature/review-answers.feature +90 -5
- package/src/workflows/feature/review-gate.feature +11 -53
- package/src/workflows/feature/reviewer-walkthrough.feature +29 -12
- package/src/workflows/feature/seam-rejection.feature +1 -6
- package/src/workflows/feature/seam.feature +1 -6
- package/src/workflows/feature/seam.test.ts +1 -1
- package/src/workflows/feature/seam.ts +2 -3
- package/src/workflows/feature/severity-budget.feature +7 -7
- package/src/workflows/feature/severity-sorted-review.feature +50 -54
- package/src/workflows/feature/slice-findings.feature +5 -15
- package/src/workflows/feature/slicing.feature +4 -24
- package/src/workflows/feature/standards.feature +0 -4
- package/src/workflows/shared/review.ts +26 -6
- package/src/workflows/shared/text.test.ts +45 -11
- package/src/workflows/shared/text.ts +45 -38
- package/src/workflows/feature/coverage.feature +0 -165
- package/src/workflows/feature/coverage.ts +0 -120
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
import { changes, human, read, refuse, scope, vars } from "../../flows/index.js"
|
|
1
|
+
import { answered, changes, human, judge, read, refuse, scope, vars } from "../../flows/index.js"
|
|
2
2
|
import { HEADING, markFenced } from "../shared/fences.js"
|
|
3
3
|
import { coder, PROTOTYPE, REQUIREMENTS } from "../shared/steps.js"
|
|
4
4
|
import * as t from "../shared/text.js"
|
|
5
5
|
import { defaults } from "../shared/vars.js"
|
|
6
6
|
import type { Guard } from "../shared/health.js"
|
|
7
|
-
import { green } from "./
|
|
8
|
-
import {
|
|
7
|
+
import { green } from "./green.js"
|
|
8
|
+
import {
|
|
9
|
+
criteriaOf,
|
|
10
|
+
criterionIds,
|
|
11
|
+
handsOnIds,
|
|
12
|
+
requireCriteriaFrozen,
|
|
13
|
+
sliceIds,
|
|
14
|
+
type CriteriaSlice,
|
|
15
|
+
} from "./criteria.js"
|
|
16
|
+
|
|
17
|
+
/** Only a `no` at this or above skips a criterion: no verdict, or an unsure one, sends it to the hands-on test. */
|
|
18
|
+
const UNOBSERVABLE_MIN_P = 0.5
|
|
9
19
|
|
|
10
20
|
/** The `prototypeRounds` setting. Anything but a non-negative integer fails rather than guess a cap. */
|
|
11
21
|
export const prototypeRounds = (): number => {
|
|
@@ -55,11 +65,11 @@ export const reportOf = (text: string): Report => {
|
|
|
55
65
|
|
|
56
66
|
/**
|
|
57
67
|
* The report the testing turn left, refused unless it is the only change and
|
|
58
|
-
* names
|
|
59
|
-
*
|
|
68
|
+
* names each of `ids` once, with its open items: any other criterion is not
|
|
69
|
+
* this test's to fix.
|
|
60
70
|
*/
|
|
61
71
|
const requireReport = (
|
|
62
|
-
|
|
72
|
+
ids: readonly string[],
|
|
63
73
|
retest: boolean,
|
|
64
74
|
): { readonly unguided: boolean; readonly open: readonly Item[] } => {
|
|
65
75
|
const others = changes()
|
|
@@ -79,27 +89,45 @@ const requireReport = (
|
|
|
79
89
|
// Only a first test with nothing else in it: a chunk beside it was tested after all, and a
|
|
80
90
|
// re-test's open items must reach a person, not slip past as untested.
|
|
81
91
|
if (report.unguided && report.items.length === 0 && !retest) return { unguided: true, open: [] }
|
|
82
|
-
const
|
|
83
|
-
const ids = criterionIds(requirements, slice)
|
|
84
|
-
const elsewhere = criterionIds(requirements).filter((id) => !ids.includes(id))
|
|
92
|
+
const elsewhere = criterionIds(read(REQUIREMENTS) ?? "").filter((id) => !ids.includes(id))
|
|
85
93
|
const count = (id: string): number => report.items.filter((i) => i.subject === id).length
|
|
86
94
|
const wrong = ids.filter((id) => count(id) !== 1)
|
|
87
95
|
if (wrong.length > 0)
|
|
88
96
|
refuse(
|
|
89
97
|
`gtd land: prototype-report: ${PROTOTYPE} needs exactly one chunk headed \`## <ID>: pass|fail|blocked\` for ${wrong.join(", ")}`,
|
|
90
98
|
)
|
|
91
|
-
// A mistyped ID stays open: only
|
|
99
|
+
// A mistyped ID stays open: only a known criterion outside `ids` is not this test's to fix.
|
|
92
100
|
const open = report.items.filter((i) => i.verdict !== "pass" && !elsewhere.includes(i.subject))
|
|
93
101
|
return { unguided: false, open }
|
|
94
102
|
}
|
|
95
103
|
|
|
104
|
+
/**
|
|
105
|
+
* The slice's criteria a person can observe by using the change, by the
|
|
106
|
+
* judge: those tagged `(no hands-on)` are never asked about.
|
|
107
|
+
*/
|
|
108
|
+
const observable = async (slice: CriteriaSlice | undefined): Promise<string[]> => {
|
|
109
|
+
const requirements = read(REQUIREMENTS) ?? ""
|
|
110
|
+
const own = handsOnIds(requirements, slice)
|
|
111
|
+
const criteria = (criteriaOf(requirements) ?? []).filter((c) => own.includes(c.id))
|
|
112
|
+
if (criteria.length === 0) return []
|
|
113
|
+
const { answers } = await judge("observable", {
|
|
114
|
+
questions: criteria.map(t.observableQuestion),
|
|
115
|
+
evidence: { requirements },
|
|
116
|
+
message: t.observableMessage(),
|
|
117
|
+
label: "Judging which criteria to test by hand",
|
|
118
|
+
})
|
|
119
|
+
return own.filter((id) => !answered(answers[id], "no", UNOBSERVABLE_MIN_P))
|
|
120
|
+
}
|
|
121
|
+
|
|
96
122
|
const frozen = (): void => requireCriteriaFrozen(REQUIREMENTS)
|
|
97
123
|
|
|
98
124
|
const testing = async (
|
|
99
125
|
slice: CriteriaSlice | undefined,
|
|
126
|
+
ids: readonly string[],
|
|
100
127
|
retest: boolean,
|
|
101
128
|
): Promise<ReturnType<typeof requireReport>> => {
|
|
102
|
-
|
|
129
|
+
const skipped = criterionIds(read(REQUIREMENTS) ?? "", slice).filter((id) => !ids.includes(id))
|
|
130
|
+
await t.agentWithSkills("testing", t.prototypeTestingPrompt(sliceIds(slice), skipped, retest), {
|
|
103
131
|
label: retest ? "Re-testing the slice by hand" : "Testing the slice by hand",
|
|
104
132
|
file: PROTOTYPE,
|
|
105
133
|
model: coder(),
|
|
@@ -107,7 +135,7 @@ const testing = async (
|
|
|
107
135
|
// A test that saw exactly what the last round saw leaves the report as it was.
|
|
108
136
|
allowEmpty: true,
|
|
109
137
|
})
|
|
110
|
-
return requireReport(
|
|
138
|
+
return requireReport(ids, retest)
|
|
111
139
|
}
|
|
112
140
|
|
|
113
141
|
const fixing = async (slice: CriteriaSlice | undefined, guard?: Guard): Promise<void> => {
|
|
@@ -138,10 +166,11 @@ const askPerson = async (name: string, message: string, label: string): Promise<
|
|
|
138
166
|
}
|
|
139
167
|
|
|
140
168
|
/**
|
|
141
|
-
* Use the slice by hand: a testing turn reports on every criterion
|
|
142
|
-
* takes each failure, and the slice is tested again —
|
|
143
|
-
* clean, or `prototypeRounds` fixes are spent and a person
|
|
144
|
-
*
|
|
169
|
+
* Use the slice by hand: a testing turn reports on every criterion a person
|
|
170
|
+
* can observe, a fix turn takes each failure, and the slice is tested again —
|
|
171
|
+
* until the report is clean, or `prototypeRounds` fixes are spent and a person
|
|
172
|
+
* decides. A slice with no such criterion is not tested by hand. `guard` holds
|
|
173
|
+
* every fix turn, as it holds the implementation's.
|
|
145
174
|
*/
|
|
146
175
|
export const prototypeTest = async (
|
|
147
176
|
slice: CriteriaSlice | undefined,
|
|
@@ -150,10 +179,12 @@ export const prototypeTest = async (
|
|
|
150
179
|
const cap = prototypeRounds()
|
|
151
180
|
if (cap === 0) return
|
|
152
181
|
await scope("prototype", async () => {
|
|
182
|
+
const ids = await observable(slice)
|
|
183
|
+
if (ids.length === 0) return
|
|
153
184
|
let fixes = 0
|
|
154
185
|
let retest = false
|
|
155
186
|
for (;;) {
|
|
156
|
-
const { unguided, open } = await testing(slice, retest)
|
|
187
|
+
const { unguided, open } = await testing(slice, ids, retest)
|
|
157
188
|
retest = !unguided
|
|
158
189
|
if (unguided) {
|
|
159
190
|
const instructed = await askPerson(
|
|
@@ -96,9 +96,9 @@ Feature: a refactor that carried the whole feature still gets a quality lap over
|
|
|
96
96
|
|
|
97
97
|
<!-- base: 0000000 -->
|
|
98
98
|
|
|
99
|
-
##
|
|
99
|
+
## Walkthrough
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
### calc
|
|
102
102
|
|
|
103
103
|
- [x] ./src/calc.ts#1-2
|
|
104
104
|
subtract next to add
|
|
@@ -109,10 +109,6 @@ Feature: a refactor that carried the whole feature still gets a quality lap over
|
|
|
109
109
|
"""
|
|
110
110
|
And step "implement.health.check" changes nothing
|
|
111
111
|
And step "implement.closing" runs its script
|
|
112
|
-
And judge step "implement.coverage" answers:
|
|
113
|
-
"""
|
|
114
|
-
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
115
|
-
"""
|
|
116
112
|
When gtd lands
|
|
117
113
|
And the process is driven
|
|
118
114
|
Then the process rests at "build.quality.correctness.reviewing"
|
|
@@ -128,8 +124,7 @@ Feature: a refactor that carried the whole feature still gets a quality lap over
|
|
|
128
124
|
gtd(human): refactor.build.review.await-review → refactor.build.review.closing
|
|
129
125
|
gtd(check): refactor.build.review.closing → implement.building
|
|
130
126
|
gtd(agent): implement.building → implement.health.check
|
|
131
|
-
gtd(check): implement.health.check → implement.
|
|
132
|
-
gtd(judge): implement.coverage → implement.closing
|
|
127
|
+
gtd(check): implement.health.check → implement.closing
|
|
133
128
|
gtd(check): implement.closing → build.quality.correctness.reviewing
|
|
134
129
|
gtd(agent): build.quality.correctness.reviewing → build.review.reviewing
|
|
135
130
|
"""
|
|
@@ -100,9 +100,9 @@ Feature: a refactor-first judgment walks one fixed path to the review gate
|
|
|
100
100
|
|
|
101
101
|
<!-- base: 0000000 -->
|
|
102
102
|
|
|
103
|
-
##
|
|
103
|
+
## Walkthrough
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
### calc
|
|
106
106
|
|
|
107
107
|
- [x] ./src/calc.ts#1-2
|
|
108
108
|
add built on the shared op
|
|
@@ -124,10 +124,6 @@ Feature: a refactor-first judgment walks one fixed path to the review gate
|
|
|
124
124
|
"""
|
|
125
125
|
And step "implement.health.check" changes nothing
|
|
126
126
|
And step "implement.closing" runs its script
|
|
127
|
-
And judge step "implement.coverage" answers:
|
|
128
|
-
"""
|
|
129
|
-
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
130
|
-
"""
|
|
131
127
|
When the process is driven
|
|
132
128
|
Then the process rests at "build.review.reviewing"
|
|
133
129
|
And "src/calc.ts" contains "op(a, b, 1)"
|
|
@@ -153,8 +149,7 @@ Feature: a refactor-first judgment walks one fixed path to the review gate
|
|
|
153
149
|
gtd(human): refactor.build.review.await-review → refactor.build.review.closing
|
|
154
150
|
gtd(check): refactor.build.review.closing → implement.building
|
|
155
151
|
gtd(agent): implement.building → implement.health.check
|
|
156
|
-
gtd(check): implement.health.check → implement.
|
|
157
|
-
gtd(judge): implement.coverage → implement.closing
|
|
152
|
+
gtd(check): implement.health.check → implement.closing
|
|
158
153
|
gtd(check): implement.closing → build.review.reviewing
|
|
159
154
|
"""
|
|
160
155
|
And the commit "gtd(human): idle → unwind" has a body containing "Gtd-Var: flag_risk_tier=0"
|
|
@@ -110,9 +110,9 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
|
|
|
110
110
|
|
|
111
111
|
<!-- base: 0000000 -->
|
|
112
112
|
|
|
113
|
-
##
|
|
113
|
+
## Walkthrough
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
### calc
|
|
116
116
|
|
|
117
117
|
- [x] ./src/calc.ts#1-2
|
|
118
118
|
add built on the shared op
|
|
@@ -181,9 +181,9 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
|
|
|
181
181
|
|
|
182
182
|
<!-- base: 0000000 -->
|
|
183
183
|
|
|
184
|
-
##
|
|
184
|
+
## Walkthrough
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
### calc
|
|
187
187
|
|
|
188
188
|
- [x] ./src/calc.ts#1-2
|
|
189
189
|
add built on the shared op
|
|
@@ -234,9 +234,9 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
|
|
|
234
234
|
|
|
235
235
|
<!-- base: 0000000 -->
|
|
236
236
|
|
|
237
|
-
##
|
|
237
|
+
## Walkthrough
|
|
238
238
|
|
|
239
|
-
|
|
239
|
+
### calc
|
|
240
240
|
|
|
241
241
|
- [x] ./src/calc.ts#1-2
|
|
242
242
|
add built on the shared op
|
|
@@ -259,10 +259,6 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
|
|
|
259
259
|
"""
|
|
260
260
|
And step "implement.health.check" changes nothing
|
|
261
261
|
And step "implement.closing" runs its script
|
|
262
|
-
And judge step "implement.coverage" answers:
|
|
263
|
-
"""
|
|
264
|
-
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
265
|
-
"""
|
|
266
262
|
When the process is driven
|
|
267
263
|
Then the process rests at "build.review.reviewing"
|
|
268
264
|
And "src/calc.ts" contains "op(a, b, -1)"
|
|
@@ -282,8 +278,7 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
|
|
|
282
278
|
gtd(human): refactor.build.review.await-review → refactor.build.review.closing
|
|
283
279
|
gtd(check): refactor.build.review.closing → implement.building
|
|
284
280
|
gtd(agent): implement.building → implement.health.check
|
|
285
|
-
gtd(check): implement.health.check → implement.
|
|
286
|
-
gtd(judge): implement.coverage → implement.closing
|
|
281
|
+
gtd(check): implement.health.check → implement.closing
|
|
287
282
|
gtd(check): implement.closing → build.review.reviewing
|
|
288
283
|
"""
|
|
289
284
|
And the output lines of gtd "slices" start with:
|
|
@@ -303,9 +303,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
303
303
|
|
|
304
304
|
<!-- base: 0000000 -->
|
|
305
305
|
|
|
306
|
-
##
|
|
306
|
+
## Walkthrough
|
|
307
307
|
|
|
308
|
-
|
|
308
|
+
### calc
|
|
309
309
|
|
|
310
310
|
- [ ] ./src/calc.ts#1-2
|
|
311
311
|
add built on the shared op[^why]
|
|
@@ -342,9 +342,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
342
342
|
|
|
343
343
|
<!-- base: 0000000 -->
|
|
344
344
|
|
|
345
|
-
##
|
|
345
|
+
## Walkthrough
|
|
346
346
|
|
|
347
|
-
|
|
347
|
+
### calc
|
|
348
348
|
|
|
349
349
|
- [ ] ./src/calc.ts#1-2
|
|
350
350
|
add built on the shared op
|
|
@@ -382,9 +382,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
382
382
|
|
|
383
383
|
<!-- base: 0000000 -->
|
|
384
384
|
|
|
385
|
-
##
|
|
385
|
+
## Walkthrough
|
|
386
386
|
|
|
387
|
-
|
|
387
|
+
### calc
|
|
388
388
|
|
|
389
389
|
- [ ] ./src/calc.ts#1-1
|
|
390
390
|
why a shared op?
|
|
@@ -475,9 +475,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
475
475
|
|
|
476
476
|
<!-- base: 0000000 -->
|
|
477
477
|
|
|
478
|
-
##
|
|
478
|
+
## Walkthrough
|
|
479
479
|
|
|
480
|
-
|
|
480
|
+
### calc
|
|
481
481
|
|
|
482
482
|
- [ ] ./src/calc.ts#1-2
|
|
483
483
|
add built on the shared op — this should change behaviour, not just structure
|
|
@@ -521,9 +521,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
521
521
|
|
|
522
522
|
<!-- base: 0000000 -->
|
|
523
523
|
|
|
524
|
-
##
|
|
524
|
+
## Walkthrough
|
|
525
525
|
|
|
526
|
-
|
|
526
|
+
### calc
|
|
527
527
|
|
|
528
528
|
- [ ] ./src/calc.ts#1-2 rename the helper
|
|
529
529
|
add built on the shared op
|
|
@@ -550,9 +550,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
550
550
|
|
|
551
551
|
<!-- base: 0000000 -->
|
|
552
552
|
|
|
553
|
-
##
|
|
553
|
+
## Walkthrough
|
|
554
554
|
|
|
555
|
-
|
|
555
|
+
### calc
|
|
556
556
|
|
|
557
557
|
- [ ] ./src/calc.ts#1-2
|
|
558
558
|
add built on the shared op, lovely work
|
|
@@ -571,9 +571,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
571
571
|
|
|
572
572
|
<!-- base: 0000000 -->
|
|
573
573
|
|
|
574
|
-
##
|
|
574
|
+
## Walkthrough
|
|
575
575
|
|
|
576
|
-
|
|
576
|
+
### calc
|
|
577
577
|
|
|
578
578
|
- [ ] ./src/calc.ts#1-2
|
|
579
579
|
add built on the shared op[^q]
|
|
@@ -615,10 +615,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
615
615
|
"""
|
|
616
616
|
And step "implement.health.check" changes nothing
|
|
617
617
|
And step "implement.closing" runs its script
|
|
618
|
-
And judge step "implement.coverage" answers:
|
|
619
|
-
"""
|
|
620
|
-
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
621
|
-
"""
|
|
622
618
|
When the process is driven
|
|
623
619
|
Then the process rests at "refactor.build.review.await-review"
|
|
624
620
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -627,9 +623,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
627
623
|
|
|
628
624
|
<!-- base: 0000000 -->
|
|
629
625
|
|
|
630
|
-
##
|
|
626
|
+
## Walkthrough
|
|
631
627
|
|
|
632
|
-
|
|
628
|
+
### calc
|
|
633
629
|
|
|
634
630
|
- [ ] ./src/calc.ts#1-2
|
|
635
631
|
add built on the shared op[^q]
|
|
@@ -661,9 +657,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
661
657
|
|
|
662
658
|
<!-- base: 0000000 -->
|
|
663
659
|
|
|
664
|
-
##
|
|
660
|
+
## Walkthrough
|
|
665
661
|
|
|
666
|
-
|
|
662
|
+
### calc
|
|
667
663
|
|
|
668
664
|
- [ ] ./src/calc.ts#1-2
|
|
669
665
|
add built on the shared op[^q]
|
|
@@ -702,10 +698,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
702
698
|
"""
|
|
703
699
|
And step "implement.health.check" changes nothing
|
|
704
700
|
And step "implement.closing" runs its script
|
|
705
|
-
And judge step "implement.coverage" answers:
|
|
706
|
-
"""
|
|
707
|
-
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
708
|
-
"""
|
|
709
701
|
When the process is driven
|
|
710
702
|
Then the process rests at "refactor.build.review.await-review"
|
|
711
703
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -714,9 +706,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
714
706
|
|
|
715
707
|
<!-- base: 0000000 -->
|
|
716
708
|
|
|
717
|
-
##
|
|
709
|
+
## Walkthrough
|
|
718
710
|
|
|
719
|
-
|
|
711
|
+
### calc
|
|
720
712
|
|
|
721
713
|
- [ ] ./src/calc.ts#1-2
|
|
722
714
|
add built on the shared op[^n1]
|
|
@@ -742,9 +734,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
742
734
|
|
|
743
735
|
<!-- base: 0000000 -->
|
|
744
736
|
|
|
745
|
-
##
|
|
737
|
+
## Walkthrough
|
|
746
738
|
|
|
747
|
-
|
|
739
|
+
### calc
|
|
748
740
|
|
|
749
741
|
- [ ] ./src/calc.ts#1-2
|
|
750
742
|
add built on the shared op[^n1]
|
|
@@ -771,9 +763,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
771
763
|
|
|
772
764
|
<!-- base: 0000000 -->
|
|
773
765
|
|
|
774
|
-
##
|
|
766
|
+
## Walkthrough
|
|
775
767
|
|
|
776
|
-
|
|
768
|
+
### calc
|
|
777
769
|
|
|
778
770
|
- [ ] ./src/calc.ts#1-2
|
|
779
771
|
add built on the shared op[^q]
|
|
@@ -805,9 +797,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
805
797
|
|
|
806
798
|
<!-- base: 0000000 -->
|
|
807
799
|
|
|
808
|
-
##
|
|
800
|
+
## Walkthrough
|
|
809
801
|
|
|
810
|
-
|
|
802
|
+
### calc
|
|
811
803
|
|
|
812
804
|
- [ ] ./src/calc.ts#1-2
|
|
813
805
|
add built on the shared op[^n1]
|
|
@@ -833,9 +825,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
833
825
|
|
|
834
826
|
<!-- base: 0000000 -->
|
|
835
827
|
|
|
836
|
-
##
|
|
828
|
+
## Walkthrough
|
|
837
829
|
|
|
838
|
-
|
|
830
|
+
### calc
|
|
839
831
|
|
|
840
832
|
- [ ] ./src/calc.ts#1-2
|
|
841
833
|
add built on the shared op - this should change behaviour, not just structure[^q]
|
|
@@ -867,9 +859,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
867
859
|
|
|
868
860
|
<!-- base: 0000000 -->
|
|
869
861
|
|
|
870
|
-
##
|
|
862
|
+
## Walkthrough
|
|
871
863
|
|
|
872
|
-
|
|
864
|
+
### calc
|
|
873
865
|
|
|
874
866
|
- [ ] ./src/calc.ts#1-2
|
|
875
867
|
add built on the shared op - this should change behaviour, not just structure[^q]
|
|
@@ -914,9 +906,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
914
906
|
|
|
915
907
|
<!-- base: 0000000 -->
|
|
916
908
|
|
|
917
|
-
##
|
|
909
|
+
## Walkthrough
|
|
918
910
|
|
|
919
|
-
|
|
911
|
+
### calc
|
|
920
912
|
|
|
921
913
|
- [ ] ./src/calc.ts#1-2
|
|
922
914
|
add built on the shared op[^q]
|
|
@@ -948,9 +940,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
948
940
|
|
|
949
941
|
<!-- base: 0000000 -->
|
|
950
942
|
|
|
951
|
-
##
|
|
943
|
+
## Walkthrough
|
|
952
944
|
|
|
953
|
-
|
|
945
|
+
### calc
|
|
954
946
|
|
|
955
947
|
- [ ] ./src/calc.ts#1-2
|
|
956
948
|
add built on the shared op[^q]
|
|
@@ -988,10 +980,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
988
980
|
"""
|
|
989
981
|
And step "implement.health.check" changes nothing
|
|
990
982
|
And step "implement.closing" runs its script
|
|
991
|
-
And judge step "implement.coverage" answers:
|
|
992
|
-
"""
|
|
993
|
-
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
994
|
-
"""
|
|
995
983
|
When the process is driven
|
|
996
984
|
Then the process rests at "refactor.build.review.await-review"
|
|
997
985
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -1000,9 +988,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1000
988
|
|
|
1001
989
|
<!-- base: 0000000 -->
|
|
1002
990
|
|
|
1003
|
-
##
|
|
991
|
+
## Walkthrough
|
|
1004
992
|
|
|
1005
|
-
|
|
993
|
+
### calc
|
|
1006
994
|
|
|
1007
995
|
- [ ] ./src/calc.ts#1-2
|
|
1008
996
|
add built on the shared op, lovely work[^q]
|
|
@@ -1034,9 +1022,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1034
1022
|
|
|
1035
1023
|
<!-- base: 0000000 -->
|
|
1036
1024
|
|
|
1037
|
-
##
|
|
1025
|
+
## Walkthrough
|
|
1038
1026
|
|
|
1039
|
-
|
|
1027
|
+
### calc
|
|
1040
1028
|
|
|
1041
1029
|
- [ ] ./src/calc.ts#1-2
|
|
1042
1030
|
add built on the shared op, lovely work[^q]
|
|
@@ -1079,10 +1067,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1079
1067
|
"""
|
|
1080
1068
|
And step "implement.health.check" changes nothing
|
|
1081
1069
|
And step "implement.closing" runs its script
|
|
1082
|
-
And judge step "implement.coverage" answers:
|
|
1083
|
-
"""
|
|
1084
|
-
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
1085
|
-
"""
|
|
1086
1070
|
When the process is driven
|
|
1087
1071
|
Then the process rests at "refactor.build.review.await-review"
|
|
1088
1072
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -1091,9 +1075,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1091
1075
|
|
|
1092
1076
|
<!-- base: 0000000 -->
|
|
1093
1077
|
|
|
1094
|
-
##
|
|
1078
|
+
## Walkthrough
|
|
1095
1079
|
|
|
1096
|
-
|
|
1080
|
+
### calc
|
|
1097
1081
|
|
|
1098
1082
|
- [x] ./src/calc.ts#1-2
|
|
1099
1083
|
add built on the shared op
|
|
@@ -1116,9 +1100,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1116
1100
|
|
|
1117
1101
|
<!-- base: 0000000 -->
|
|
1118
1102
|
|
|
1119
|
-
##
|
|
1103
|
+
## Walkthrough
|
|
1120
1104
|
|
|
1121
|
-
|
|
1105
|
+
### calc
|
|
1122
1106
|
|
|
1123
1107
|
- [ ] ./src/calc.ts#1-2
|
|
1124
1108
|
add built on the shared op — rename `sign` to `direction`
|
|
@@ -1147,9 +1131,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1147
1131
|
|
|
1148
1132
|
<!-- base: 0000000 -->
|
|
1149
1133
|
|
|
1150
|
-
##
|
|
1134
|
+
## Walkthrough
|
|
1151
1135
|
|
|
1152
|
-
|
|
1136
|
+
### calc
|
|
1153
1137
|
|
|
1154
1138
|
- [ ] ./src/calc.ts#1-2
|
|
1155
1139
|
add built on the shared op — rename `sign` to `direction`
|
|
@@ -1180,9 +1164,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1180
1164
|
Then the process rests at "refactor.build.review.await-review"
|
|
1181
1165
|
And ".gtd/REVIEW.md" contains:
|
|
1182
1166
|
"""
|
|
1183
|
-
##
|
|
1167
|
+
## Walkthrough
|
|
1184
1168
|
|
|
1185
|
-
|
|
1169
|
+
### calc
|
|
1186
1170
|
|
|
1187
1171
|
- [ ] ./src/calc.ts#1-2
|
|
1188
1172
|
add built on the shared op
|
|
@@ -1292,10 +1276,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1292
1276
|
"""
|
|
1293
1277
|
And step "implement.health.check" changes nothing
|
|
1294
1278
|
And step "implement.closing" runs its script
|
|
1295
|
-
And judge step "implement.coverage" answers:
|
|
1296
|
-
"""
|
|
1297
|
-
[{"id":"AC-1","answer":"yes","p":0.9}]
|
|
1298
|
-
"""
|
|
1299
1279
|
When the process is driven
|
|
1300
1280
|
Then the process rests at "refactor.build.review.await-review"
|
|
1301
1281
|
Given a file ".gtd/REVIEW.md" with:
|
|
@@ -1304,9 +1284,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1304
1284
|
|
|
1305
1285
|
<!-- base: 0000000 -->
|
|
1306
1286
|
|
|
1307
|
-
##
|
|
1287
|
+
## Walkthrough
|
|
1308
1288
|
|
|
1309
|
-
|
|
1289
|
+
### calc
|
|
1310
1290
|
|
|
1311
1291
|
- [x] ./src/calc.ts#1-2
|
|
1312
1292
|
add built on the shared op
|
|
@@ -1495,9 +1475,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1495
1475
|
|
|
1496
1476
|
<!-- base: 0000000 -->
|
|
1497
1477
|
|
|
1498
|
-
##
|
|
1478
|
+
## Walkthrough
|
|
1499
1479
|
|
|
1500
|
-
|
|
1480
|
+
### calc
|
|
1501
1481
|
|
|
1502
1482
|
- [ ] ./src/calc.ts#1-2
|
|
1503
1483
|
add built on the shared op[^why]
|
|
@@ -1537,9 +1517,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
|
|
|
1537
1517
|
|
|
1538
1518
|
<!-- base: 0000000 -->
|
|
1539
1519
|
|
|
1540
|
-
##
|
|
1520
|
+
## Walkthrough
|
|
1541
1521
|
|
|
1542
|
-
|
|
1522
|
+
### calc
|
|
1543
1523
|
|
|
1544
1524
|
- [ ] ./src/calc.ts#1-2
|
|
1545
1525
|
add built on the shared op
|