@pmelab/gtd 58.1.0 → 59.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 +115 -390
- package/dist/chunks/{Schema-B3o6eRNU.mjs → testkit-CMBAAyRK.mjs} +13409 -3351
- package/dist/gtd.bundle.mjs +76 -59
- package/dist/testkit/gherkin.mjs +30 -2
- package/dist/testkit.mjs +1 -1
- package/package.json +3 -42
- package/skills/authoring/SKILL.md +31 -25
- package/src/cli/Cli.test.ts +15 -19
- package/src/cli/Cli.ts +2 -4
- package/src/cli/Program.test.ts +60 -29
- package/src/cli/Program.ts +5 -7
- package/src/edge/Edge.ts +3 -3
- package/src/flags/index.test.ts +0 -13
- package/src/flags/index.ts +1 -3
- package/src/gherkin/git-control.feature +78 -0
- package/src/gherkin/index.ts +35 -1
- package/src/install/Install.test.ts +14 -11
- package/src/install/Install.ts +38 -15
- package/src/install/index.ts +1 -2
- package/src/replay/Replay.test.ts +1 -1
- package/src/replay/index.ts +1 -1
- package/src/step/planStart.ts +6 -1
- package/src/testkit/TestRepo.test.ts +118 -2
- package/src/testkit/TestRepo.ts +57 -6
- package/src/testkit/index.ts +1 -0
- package/src/twins/EmittedScriptRecognizer.ts +12 -14
- package/src/twins/FlowScripts.ts +10 -9
- package/src/twins/InMemRepo.ts +26 -1
- package/src/twins/Layers.ts +12 -1
- package/src/twins/index.ts +6 -1
- package/src/workflow/index.ts +1 -0
- package/src/workflow/load.test.ts +138 -113
- package/src/workflow/load.ts +1 -1
- package/src/workflow/vars.test.ts +30 -3
- package/src/workflow/vars.ts +34 -2
- package/src/workflow-kit/index.ts +1 -1
- package/dist/chunks/reserved-lMYCaapY.mjs +0 -1990
- package/dist/chunks/review-Bfaror38.mjs +0 -427
- package/dist/chunks/tail-Bd7L940p.mjs +0 -355
- package/dist/chunks/testkit-D1-auYau.mjs +0 -10362
- package/dist/workflows/cleanup.mjs +0 -36
- package/dist/workflows/feature.mjs +0 -1018
- package/dist/workflows/fix.mjs +0 -41
- package/dist/workflows/review.mjs +0 -45
- package/dist/workflows/rollout.mjs +0 -48
- package/dist/workflows.mjs +0 -40651
- package/src/install/ConfigScaffold.ts +0 -22
- package/src/workflows/cleanup/cleanup-path.feature +0 -94
- package/src/workflows/cleanup/cleanup.feature +0 -315
- package/src/workflows/cleanup/cleanup.test.ts +0 -276
- package/src/workflows/cleanup/cleanup.ts +0 -52
- package/src/workflows/cleanup/index.ts +0 -6
- package/src/workflows/feature/acceptance-criteria-tier.feature +0 -25
- package/src/workflows/feature/acceptance-criteria.feature +0 -389
- package/src/workflows/feature/criteria-coverage.feature +0 -102
- package/src/workflows/feature/criteria.test.ts +0 -147
- package/src/workflows/feature/criteria.ts +0 -267
- package/src/workflows/feature/fast-path.feature +0 -93
- package/src/workflows/feature/feature.test.ts +0 -338
- package/src/workflows/feature/feature.ts +0 -156
- package/src/workflows/feature/green.ts +0 -19
- package/src/workflows/feature/index.ts +0 -18
- package/src/workflows/feature/lens-models.feature +0 -69
- package/src/workflows/feature/lens-review.feature +0 -566
- package/src/workflows/feature/naive-acceptance.feature +0 -147
- package/src/workflows/feature/naive-test.feature +0 -263
- package/src/workflows/feature/one-step-land.feature +0 -93
- package/src/workflows/feature/planning.ts +0 -41
- package/src/workflows/feature/refactor-absorbs.feature +0 -131
- package/src/workflows/feature/refactor-first.feature +0 -158
- package/src/workflows/feature/refactor-lens-models.feature +0 -79
- package/src/workflows/feature/refactor-rebuild.feature +0 -273
- package/src/workflows/feature/refactor-review.feature +0 -1528
- package/src/workflows/feature/refactor.test.ts +0 -1220
- package/src/workflows/feature/refactor.ts +0 -368
- package/src/workflows/feature/release-flag.feature +0 -167
- package/src/workflows/feature/release-flag.test.ts +0 -49
- package/src/workflows/feature/release-flag.ts +0 -46
- package/src/workflows/feature/review-gate.feature +0 -241
- package/src/workflows/feature/reviewer-walkthrough.feature +0 -142
- package/src/workflows/feature/risk-tier.feature +0 -351
- package/src/workflows/feature/seam-rejection.feature +0 -146
- package/src/workflows/feature/seam.feature +0 -297
- package/src/workflows/feature/seam.test.ts +0 -527
- package/src/workflows/feature/seam.ts +0 -426
- package/src/workflows/feature/standards.feature +0 -354
- package/src/workflows/feature/steps.test.ts +0 -65
- package/src/workflows/feature/steps.ts +0 -45
- package/src/workflows/feature/tier-pin.feature +0 -66
- package/src/workflows/feature/tier.test.ts +0 -166
- package/src/workflows/feature/tier.ts +0 -56
- package/src/workflows/fix/fix-lens-origin.feature +0 -114
- package/src/workflows/fix/fix-quality.feature +0 -212
- package/src/workflows/fix/fix.feature +0 -79
- package/src/workflows/fix/fix.test.ts +0 -74
- package/src/workflows/fix/fix.ts +0 -52
- package/src/workflows/fix/index.ts +0 -6
- package/src/workflows/index.ts +0 -47
- package/src/workflows/review/index.ts +0 -6
- package/src/workflows/review/review-door.feature +0 -199
- package/src/workflows/review/review.test.ts +0 -27
- package/src/workflows/review/review.ts +0 -60
- package/src/workflows/rollout/index.ts +0 -6
- package/src/workflows/rollout/rollout.feature +0 -510
- package/src/workflows/rollout/rollout.test.ts +0 -263
- package/src/workflows/rollout/rollout.ts +0 -82
- package/src/workflows/shared/__fixtures__/feature-collecting-prompt.txt +0 -98
- package/src/workflows/shared/access.test.ts +0 -62
- package/src/workflows/shared/access.ts +0 -24
- package/src/workflows/shared/config.fixture.ts +0 -12
- package/src/workflows/shared/fences.ts +0 -24
- package/src/workflows/shared/health.test.ts +0 -148
- package/src/workflows/shared/health.ts +0 -191
- package/src/workflows/shared/learn.test.ts +0 -140
- package/src/workflows/shared/learn.ts +0 -201
- package/src/workflows/shared/lenses.test.ts +0 -39
- package/src/workflows/shared/lenses.ts +0 -294
- package/src/workflows/shared/options.test.ts +0 -157
- package/src/workflows/shared/options.ts +0 -92
- package/src/workflows/shared/progress.feature +0 -124
- package/src/workflows/shared/prose.ts +0 -263
- package/src/workflows/shared/recheck.feature +0 -60
- package/src/workflows/shared/registry.test.ts +0 -345
- package/src/workflows/shared/registry.ts +0 -183
- package/src/workflows/shared/reserved.ts +0 -11
- package/src/workflows/shared/review.test.ts +0 -1062
- package/src/workflows/shared/review.ts +0 -446
- package/src/workflows/shared/skills.test.ts +0 -121
- package/src/workflows/shared/skills.ts +0 -49
- package/src/workflows/shared/standards.test.ts +0 -90
- package/src/workflows/shared/standards.ts +0 -156
- package/src/workflows/shared/steps.test.ts +0 -219
- package/src/workflows/shared/steps.ts +0 -201
- package/src/workflows/shared/tail.test.ts +0 -454
- package/src/workflows/shared/tail.ts +0 -264
- package/src/workflows/shared/text.fixture.ts +0 -128
- package/src/workflows/shared/text.test.ts +0 -1430
- package/src/workflows/shared/text.ts +0 -1700
- package/src/workflows/shared/threads.test.ts +0 -129
- package/src/workflows/shared/vars.ts +0 -47
- package/src/workflows/shared/workflows.steps.ts +0 -54
|
@@ -1,566 +0,0 @@
|
|
|
1
|
-
@inmem
|
|
2
|
-
Feature: the quality lap's findings are triaged, then decided at the finding gate
|
|
3
|
-
|
|
4
|
-
A judge classifies each `## ` finding the lenses wrote to `.gtd/QUALITY.md`:
|
|
5
|
-
a mechanical one is fixed by the fixer, noise is dropped with its `p` kept in
|
|
6
|
-
a trailer, and a design one is a note. The notes, then the noise under
|
|
7
|
-
`# Dropped as noise`, rest at the finding gate (`build.quality.gate`), each
|
|
8
|
-
with one `- [ ] fix` box: a ticked finding is fixed, an unticked one
|
|
9
|
-
dropped. The review then walks through the code and lists, in one
|
|
10
|
-
`## Quality lap` chunk, what became of every finding.
|
|
11
|
-
|
|
12
|
-
Background:
|
|
13
|
-
Given the shipped workflows, as gtd install scaffolds them
|
|
14
|
-
And an environment variable "GTD_QUALITYREVIEWS" set to "correctness"
|
|
15
|
-
And a file "src/calc.ts" with:
|
|
16
|
-
"""
|
|
17
|
-
export const add = (a: number, b: number) => a + b
|
|
18
|
-
"""
|
|
19
|
-
And the working tree is committed as "feat: add calculator"
|
|
20
|
-
And a file "TODO.md" with:
|
|
21
|
-
"""
|
|
22
|
-
# Add subtract
|
|
23
|
-
|
|
24
|
-
subtract(a, b) returns the difference.
|
|
25
|
-
"""
|
|
26
|
-
And step "unwind" changes nothing
|
|
27
|
-
And step "start-gate.check" changes nothing
|
|
28
|
-
And step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
29
|
-
"""
|
|
30
|
-
# Requirements
|
|
31
|
-
|
|
32
|
-
## Concerns
|
|
33
|
-
|
|
34
|
-
### Subtract
|
|
35
|
-
|
|
36
|
-
- `subtract(a, b)` returns `a - b`.
|
|
37
|
-
|
|
38
|
-
## Impact
|
|
39
|
-
|
|
40
|
-
- the greeting module
|
|
41
|
-
|
|
42
|
-
## Acceptance Criteria
|
|
43
|
-
|
|
44
|
-
- AC-1: subtract(a, b) returns a - b.
|
|
45
|
-
"""
|
|
46
|
-
And step "design.gate.answer" changes nothing
|
|
47
|
-
And step "seam.naive" writes "src/calc.test.ts" with:
|
|
48
|
-
"""
|
|
49
|
-
it("[AC-1] subtracts", () => {})
|
|
50
|
-
"""
|
|
51
|
-
And step "seam.naive" writes "src/calc.ts" with:
|
|
52
|
-
"""
|
|
53
|
-
export const add = (a: number, b: number) => a + b
|
|
54
|
-
export const subtract = (a: number, b: number) => a - b
|
|
55
|
-
"""
|
|
56
|
-
And step "seam.check" changes nothing
|
|
57
|
-
And step "implement.applying" runs its script
|
|
58
|
-
And step "implement.health.check" changes nothing
|
|
59
|
-
And step "implement.closing" runs its script
|
|
60
|
-
And step "build.quality.correctness.reviewing" writes ".gtd/QUALITY.md" with:
|
|
61
|
-
"""
|
|
62
|
-
# Quality
|
|
63
|
-
|
|
64
|
-
## subtract has no negative test
|
|
65
|
-
|
|
66
|
-
Add a test subtracting a larger number.
|
|
67
|
-
|
|
68
|
-
## add could be a method
|
|
69
|
-
|
|
70
|
-
A class would read better.
|
|
71
|
-
|
|
72
|
-
## AC-1 ignores floating point
|
|
73
|
-
|
|
74
|
-
Should subtract round? The criterion does not say.
|
|
75
|
-
"""
|
|
76
|
-
And step "build.quality.sorting" runs its script
|
|
77
|
-
And step "build.quality.gating" runs its script
|
|
78
|
-
And step "build.quality.picking" runs its script
|
|
79
|
-
And step "build.quality.closing" runs its script
|
|
80
|
-
And step "build.review.carrying" runs its script
|
|
81
|
-
And step "build.health.check" changes nothing
|
|
82
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
83
|
-
"""
|
|
84
|
-
# Review: abc1234
|
|
85
|
-
|
|
86
|
-
<!-- base: 0000000 -->
|
|
87
|
-
|
|
88
|
-
## Subtract
|
|
89
|
-
|
|
90
|
-
- [ ] ./src/calc.ts#2-2 — subtract(a, b)
|
|
91
|
-
"""
|
|
92
|
-
|
|
93
|
-
Scenario: a mechanical finding is fixed, the rest wait at the finding gate, and an untouched gate drops them
|
|
94
|
-
Given judge step "build.quality.triage" answers:
|
|
95
|
-
"""
|
|
96
|
-
[{"id":"Q1","answer":"mechanical","p":0.9},{"id":"Q2","answer":"noise","p":0.85},{"id":"Q3","answer":"design","p":0.8}]
|
|
97
|
-
"""
|
|
98
|
-
And step "build.fix.quality.fixing" writes "src/calc.test.ts" with:
|
|
99
|
-
"""
|
|
100
|
-
it("[AC-1] subtracts", () => {})
|
|
101
|
-
it("subtracts a larger number", () => {})
|
|
102
|
-
"""
|
|
103
|
-
And step "build.fix.quality.fixing" deletes ".gtd/QUALITY.md"
|
|
104
|
-
When the process is driven
|
|
105
|
-
Then the process rests at "build.quality.gate"
|
|
106
|
-
And the commit "gtd(judge): build.quality.triage → build.quality.sorting" has a body containing "Gtd-Mark: noise=Q2 p=0.85 add could be a method"
|
|
107
|
-
And ".gtd/QUALITY.md" contains:
|
|
108
|
-
"""
|
|
109
|
-
## AC-1 ignores floating point
|
|
110
|
-
|
|
111
|
-
_From lens correctness._
|
|
112
|
-
|
|
113
|
-
Should subtract round? The criterion does not say.
|
|
114
|
-
|
|
115
|
-
- [ ] fix
|
|
116
|
-
|
|
117
|
-
# Dropped as noise
|
|
118
|
-
|
|
119
|
-
## add could be a method
|
|
120
|
-
|
|
121
|
-
_From lens correctness. The judge called it noise (p=0.85)._
|
|
122
|
-
|
|
123
|
-
A class would read better.
|
|
124
|
-
|
|
125
|
-
- [ ] fix
|
|
126
|
-
"""
|
|
127
|
-
When gtd lands
|
|
128
|
-
And the process is driven
|
|
129
|
-
Then the process rests at "build.review.await-review"
|
|
130
|
-
And ".gtd/QUALITY.md" does not exist
|
|
131
|
-
And ".gtd/REVIEW.md" contains:
|
|
132
|
-
"""
|
|
133
|
-
## Quality lap
|
|
134
|
-
|
|
135
|
-
What the quality lenses found, and what became of it. Write a note under
|
|
136
|
-
a line to reopen it.
|
|
137
|
-
|
|
138
|
-
Fixed automatically:
|
|
139
|
-
|
|
140
|
-
- subtract has no negative test (
|
|
141
|
-
"""
|
|
142
|
-
And ".gtd/REVIEW.md" contains:
|
|
143
|
-
"""
|
|
144
|
-
Dropped at the finding gate:
|
|
145
|
-
|
|
146
|
-
- AC-1 ignores floating point (lens correctness)
|
|
147
|
-
|
|
148
|
-
Dropped as noise:
|
|
149
|
-
|
|
150
|
-
- add could be a method (p=0.85, lens correctness)
|
|
151
|
-
"""
|
|
152
|
-
And ".gtd/REVIEW.md" contains the short hash of the commit "gtd(agent): build.fix.quality.fixing → build.health.check"
|
|
153
|
-
And ".gtd/REVIEW.md" does not contain "Tick exactly one:"
|
|
154
|
-
And the commit subjects end with:
|
|
155
|
-
"""
|
|
156
|
-
gtd(check): implement.closing → build.quality.correctness.reviewing
|
|
157
|
-
gtd(agent): build.quality.correctness.reviewing → build.quality.triage
|
|
158
|
-
gtd(judge): build.quality.triage → build.quality.sorting
|
|
159
|
-
gtd(check): build.quality.sorting → build.fix.quality.fixing
|
|
160
|
-
gtd(agent): build.fix.quality.fixing → build.health.check
|
|
161
|
-
gtd(check): build.health.check → build.quality.gating
|
|
162
|
-
gtd(check): build.quality.gating → build.quality.gate
|
|
163
|
-
gtd(human): build.quality.gate → build.quality.closing
|
|
164
|
-
gtd(check): build.quality.closing → build.review.reviewing
|
|
165
|
-
gtd(agent): build.review.reviewing → build.review.carrying
|
|
166
|
-
gtd(check): build.review.carrying → build.review.await-review
|
|
167
|
-
"""
|
|
168
|
-
|
|
169
|
-
Scenario: a ticked note is fixed with the human's guidance, never re-planned
|
|
170
|
-
Given judge step "build.quality.triage" answers:
|
|
171
|
-
"""
|
|
172
|
-
[{"id":"Q1","answer":"noise","p":0.9},{"id":"Q2","answer":"noise","p":0.85},{"id":"Q3","answer":"design","p":0.8}]
|
|
173
|
-
"""
|
|
174
|
-
When the process is driven
|
|
175
|
-
Then the process rests at "build.quality.gate"
|
|
176
|
-
Given a file ".gtd/QUALITY.md" with:
|
|
177
|
-
"""
|
|
178
|
-
# Quality
|
|
179
|
-
|
|
180
|
-
## AC-1 ignores floating point
|
|
181
|
-
|
|
182
|
-
_From lens correctness._
|
|
183
|
-
|
|
184
|
-
Should subtract round? The criterion does not say.
|
|
185
|
-
|
|
186
|
-
- [x] fix
|
|
187
|
-
|
|
188
|
-
Round half up.
|
|
189
|
-
|
|
190
|
-
# Dropped as noise
|
|
191
|
-
|
|
192
|
-
## subtract has no negative test
|
|
193
|
-
|
|
194
|
-
_From lens correctness. The judge called it noise (p=0.9)._
|
|
195
|
-
|
|
196
|
-
Add a test subtracting a larger number.
|
|
197
|
-
|
|
198
|
-
- [ ] fix
|
|
199
|
-
|
|
200
|
-
## add could be a method
|
|
201
|
-
|
|
202
|
-
_From lens correctness. The judge called it noise (p=0.85)._
|
|
203
|
-
|
|
204
|
-
A class would read better.
|
|
205
|
-
|
|
206
|
-
- [ ] fix
|
|
207
|
-
"""
|
|
208
|
-
When gtd lands
|
|
209
|
-
And the process is driven
|
|
210
|
-
Then the process rests at "build.fix.quality.fixing"
|
|
211
|
-
And ".gtd/QUALITY.md" contains:
|
|
212
|
-
"""
|
|
213
|
-
## AC-1 ignores floating point
|
|
214
|
-
|
|
215
|
-
Should subtract round? The criterion does not say.
|
|
216
|
-
|
|
217
|
-
Guidance from the human — follow it:
|
|
218
|
-
|
|
219
|
-
Round half up.
|
|
220
|
-
"""
|
|
221
|
-
And ".gtd/QUALITY.md" does not contain "add could be a method"
|
|
222
|
-
Given step "build.fix.quality.fixing" writes "src/calc.ts" with:
|
|
223
|
-
"""
|
|
224
|
-
export const add = (a: number, b: number) => a + b
|
|
225
|
-
export const subtract = (a: number, b: number) => Math.round(a - b)
|
|
226
|
-
"""
|
|
227
|
-
And step "build.fix.quality.fixing" deletes ".gtd/QUALITY.md"
|
|
228
|
-
When the process is driven
|
|
229
|
-
Then the process rests at "build.review.await-review"
|
|
230
|
-
And ".gtd/REVIEW.md" contains:
|
|
231
|
-
"""
|
|
232
|
-
Fixed at the finding gate:
|
|
233
|
-
|
|
234
|
-
- AC-1 ignores floating point (
|
|
235
|
-
"""
|
|
236
|
-
And ".gtd/REVIEW.md" contains:
|
|
237
|
-
"""
|
|
238
|
-
Dropped as noise:
|
|
239
|
-
|
|
240
|
-
- subtract has no negative test (p=0.9, lens correctness)
|
|
241
|
-
- add could be a method (p=0.85, lens correctness)
|
|
242
|
-
"""
|
|
243
|
-
And the commit subjects end with:
|
|
244
|
-
"""
|
|
245
|
-
gtd(human): build.quality.gate → build.quality.picking
|
|
246
|
-
gtd(check): build.quality.picking → build.fix.quality.fixing
|
|
247
|
-
gtd(agent): build.fix.quality.fixing → build.health.check
|
|
248
|
-
gtd(check): build.health.check → build.review.reviewing
|
|
249
|
-
gtd(agent): build.review.reviewing → build.review.carrying
|
|
250
|
-
gtd(check): build.review.carrying → build.review.await-review
|
|
251
|
-
"""
|
|
252
|
-
|
|
253
|
-
Scenario: a finding the judge called noise is rescued by its tick
|
|
254
|
-
Given judge step "build.quality.triage" answers:
|
|
255
|
-
"""
|
|
256
|
-
[{"id":"Q1","answer":"noise","p":0.9},{"id":"Q2","answer":"noise","p":0.85},{"id":"Q3","answer":"noise","p":0.8}]
|
|
257
|
-
"""
|
|
258
|
-
And step "build.fix.quality.fixing" deletes ".gtd/QUALITY.md"
|
|
259
|
-
When the process is driven
|
|
260
|
-
Then the process rests at "build.quality.gate"
|
|
261
|
-
Given a file ".gtd/QUALITY.md" with:
|
|
262
|
-
"""
|
|
263
|
-
# Quality
|
|
264
|
-
|
|
265
|
-
# Dropped as noise
|
|
266
|
-
|
|
267
|
-
## subtract has no negative test
|
|
268
|
-
|
|
269
|
-
Add a test subtracting a larger number.
|
|
270
|
-
|
|
271
|
-
- [ ] fix
|
|
272
|
-
|
|
273
|
-
## add could be a method
|
|
274
|
-
|
|
275
|
-
A class would read better.
|
|
276
|
-
|
|
277
|
-
- [x] fix
|
|
278
|
-
|
|
279
|
-
## AC-1 ignores floating point
|
|
280
|
-
|
|
281
|
-
Should subtract round? The criterion does not say.
|
|
282
|
-
|
|
283
|
-
- [ ] fix
|
|
284
|
-
"""
|
|
285
|
-
When gtd lands
|
|
286
|
-
And the process is driven
|
|
287
|
-
Then the process rests at "build.review.await-review"
|
|
288
|
-
And ".gtd/REVIEW.md" contains:
|
|
289
|
-
"""
|
|
290
|
-
Fixed at the finding gate:
|
|
291
|
-
|
|
292
|
-
- add could be a method (
|
|
293
|
-
"""
|
|
294
|
-
And ".gtd/REVIEW.md" contains:
|
|
295
|
-
"""
|
|
296
|
-
Dropped as noise:
|
|
297
|
-
|
|
298
|
-
- subtract has no negative test (p=0.9, lens correctness)
|
|
299
|
-
- AC-1 ignores floating point (p=0.8, lens correctness)
|
|
300
|
-
"""
|
|
301
|
-
|
|
302
|
-
Scenario: guidance under an unticked box is refused
|
|
303
|
-
Given judge step "build.quality.triage" answers:
|
|
304
|
-
"""
|
|
305
|
-
[{"id":"Q1","answer":"noise","p":0.9},{"id":"Q2","answer":"noise","p":0.85},{"id":"Q3","answer":"design","p":0.8}]
|
|
306
|
-
"""
|
|
307
|
-
When the process is driven
|
|
308
|
-
Then the process rests at "build.quality.gate"
|
|
309
|
-
Given a file ".gtd/QUALITY.md" with:
|
|
310
|
-
"""
|
|
311
|
-
# Quality
|
|
312
|
-
|
|
313
|
-
## AC-1 ignores floating point
|
|
314
|
-
|
|
315
|
-
Should subtract round? The criterion does not say.
|
|
316
|
-
|
|
317
|
-
- [ ] fix
|
|
318
|
-
|
|
319
|
-
Round half up.
|
|
320
|
-
"""
|
|
321
|
-
Then landing is refused with "finding-gate: 1 problem(s) in .gtd/QUALITY.md"
|
|
322
|
-
And landing is refused with "has guidance under an unticked box — tick it to fix the finding, or delete the text to drop it"
|
|
323
|
-
|
|
324
|
-
Scenario: a ticked finding the fix cap leaves is listed unresolved, with no second gate
|
|
325
|
-
Given judge step "build.quality.triage" answers:
|
|
326
|
-
"""
|
|
327
|
-
[{"id":"Q1","answer":"noise","p":0.9},{"id":"Q2","answer":"noise","p":0.85},{"id":"Q3","answer":"design","p":0.8}]
|
|
328
|
-
"""
|
|
329
|
-
And step "build.fix.quality.fixing" changes nothing
|
|
330
|
-
When the process is driven
|
|
331
|
-
Then the process rests at "build.quality.gate"
|
|
332
|
-
Given a file ".gtd/QUALITY.md" with:
|
|
333
|
-
"""
|
|
334
|
-
# Quality
|
|
335
|
-
|
|
336
|
-
## AC-1 ignores floating point
|
|
337
|
-
|
|
338
|
-
Should subtract round? The criterion does not say.
|
|
339
|
-
|
|
340
|
-
- [x] fix
|
|
341
|
-
"""
|
|
342
|
-
When gtd lands
|
|
343
|
-
And the process is driven
|
|
344
|
-
Then the process rests at "build.review.await-review"
|
|
345
|
-
And ".gtd/QUALITY.md" does not exist
|
|
346
|
-
And ".gtd/REVIEW.md" contains:
|
|
347
|
-
"""
|
|
348
|
-
Unresolved after the finding gate:
|
|
349
|
-
|
|
350
|
-
- AC-1 ignores floating point (lens correctness)
|
|
351
|
-
"""
|
|
352
|
-
And the commit subjects end with:
|
|
353
|
-
"""
|
|
354
|
-
gtd(human): build.quality.gate → build.quality.picking
|
|
355
|
-
gtd(check): build.quality.picking → build.fix.quality.fixing
|
|
356
|
-
gtd(agent): build.fix.quality.fixing
|
|
357
|
-
gtd(agent): build.fix.quality.fixing
|
|
358
|
-
gtd(agent): build.fix.quality.fixing → build.health.check
|
|
359
|
-
gtd(check): build.health.check → build.quality.closing
|
|
360
|
-
gtd(check): build.quality.closing → build.review.reviewing
|
|
361
|
-
gtd(agent): build.review.reviewing → build.review.carrying
|
|
362
|
-
gtd(check): build.review.carrying → build.review.await-review
|
|
363
|
-
"""
|
|
364
|
-
|
|
365
|
-
Scenario: a lap whose every finding was fixed has no gate
|
|
366
|
-
Given judge step "build.quality.triage" answers:
|
|
367
|
-
"""
|
|
368
|
-
[{"id":"Q1","answer":"mechanical","p":0.9},{"id":"Q2","answer":"mechanical","p":0.9},{"id":"Q3","answer":"mechanical","p":0.9}]
|
|
369
|
-
"""
|
|
370
|
-
And step "build.fix.quality.fixing" deletes ".gtd/QUALITY.md"
|
|
371
|
-
When the process is driven
|
|
372
|
-
Then the process rests at "build.review.await-review"
|
|
373
|
-
And no commit body contains "build.quality.gate"
|
|
374
|
-
And ".gtd/REVIEW.md" contains "- AC-1 ignores floating point ("
|
|
375
|
-
|
|
376
|
-
Scenario: a risk is fixed before the human sees the review, re-reviewed in the reviewer's own draft
|
|
377
|
-
Given judge step "build.quality.triage" answers:
|
|
378
|
-
"""
|
|
379
|
-
[{"id":"Q1","answer":"mechanical","p":0.9},{"id":"Q2","answer":"noise","p":0.85},{"id":"Q3","answer":"design","p":0.8}]
|
|
380
|
-
"""
|
|
381
|
-
And step "build.fix.quality.fixing" deletes ".gtd/QUALITY.md"
|
|
382
|
-
And step "build.quality.gate" changes nothing
|
|
383
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
384
|
-
"""
|
|
385
|
-
# Review: abc1234
|
|
386
|
-
|
|
387
|
-
<!-- base: 0000000 -->
|
|
388
|
-
|
|
389
|
-
## Subtract
|
|
390
|
-
|
|
391
|
-
- [ ] ./src/calc.ts#2-2 — Risk: overflows on large numbers
|
|
392
|
-
"""
|
|
393
|
-
When the process is driven
|
|
394
|
-
Then the process rests at "build.review.fix.risks.fixing"
|
|
395
|
-
And ".gtd/REVIEW.md" does not contain "## Quality lap"
|
|
396
|
-
Given step "build.review.reviewing" is no longer scripted
|
|
397
|
-
And step "build.review.reviewing" replaces the text "Risk: overflows on large numbers" in ".gtd/REVIEW.md" with "subtract(a, b), now guarded"
|
|
398
|
-
And step "build.review.fix.risks.fixing" changes nothing
|
|
399
|
-
When the process is driven
|
|
400
|
-
Then the process rests at "build.review.await-review"
|
|
401
|
-
And ".gtd/REVIEW.md" contains "subtract(a, b), now guarded"
|
|
402
|
-
And ".gtd/REVIEW.md" contains "## Quality lap" exactly once
|
|
403
|
-
And ".gtd/REVIEW.md" contains "Fixed automatically:" exactly once
|
|
404
|
-
And the commit subjects end with:
|
|
405
|
-
"""
|
|
406
|
-
gtd(check): build.quality.closing → build.review.reviewing
|
|
407
|
-
gtd(agent): build.review.reviewing → build.review.fix.risks.fixing
|
|
408
|
-
gtd(agent): build.review.fix.risks.fixing → build.health.check
|
|
409
|
-
gtd(check): build.health.check → build.review.reviewing
|
|
410
|
-
gtd(agent): build.review.reviewing → build.review.carrying
|
|
411
|
-
gtd(check): build.review.carrying → build.review.await-review
|
|
412
|
-
"""
|
|
413
|
-
|
|
414
|
-
Scenario: an unsure verdict makes a finding a note, never a fix or a drop
|
|
415
|
-
Given judge step "build.quality.triage" answers:
|
|
416
|
-
"""
|
|
417
|
-
[{"id":"Q1","answer":"mechanical","p":0.5},{"id":"Q2","answer":"noise","p":0.6}]
|
|
418
|
-
"""
|
|
419
|
-
When the process is driven
|
|
420
|
-
Then the process rests at "build.quality.gate"
|
|
421
|
-
And ".gtd/QUALITY.md" contains "## subtract has no negative test"
|
|
422
|
-
And ".gtd/QUALITY.md" contains "## add could be a method"
|
|
423
|
-
And ".gtd/QUALITY.md" contains "## AC-1 ignores floating point"
|
|
424
|
-
And ".gtd/QUALITY.md" does not contain "# Dropped as noise"
|
|
425
|
-
And no commit body contains "Gtd-Mark: noise="
|
|
426
|
-
And the commit subjects end with:
|
|
427
|
-
"""
|
|
428
|
-
gtd(agent): build.quality.correctness.reviewing → build.quality.triage
|
|
429
|
-
gtd(judge): build.quality.triage → build.quality.gating
|
|
430
|
-
gtd(check): build.quality.gating → build.quality.gate
|
|
431
|
-
"""
|
|
432
|
-
|
|
433
|
-
Scenario: a mechanical finding the fix cap leaves reaches the gate as unresolved
|
|
434
|
-
Given judge step "build.quality.triage" answers:
|
|
435
|
-
"""
|
|
436
|
-
[{"id":"Q1","answer":"mechanical","p":0.9},{"id":"Q2","answer":"mechanical","p":0.9},{"id":"Q3","answer":"mechanical","p":0.9}]
|
|
437
|
-
"""
|
|
438
|
-
And step "build.fix.quality.fixing" writes ".gtd/QUALITY.md" with:
|
|
439
|
-
"""
|
|
440
|
-
# Quality
|
|
441
|
-
|
|
442
|
-
## add could be a method
|
|
443
|
-
|
|
444
|
-
A class would read better.
|
|
445
|
-
"""
|
|
446
|
-
When the process is driven
|
|
447
|
-
Then the process rests at "build.quality.gate"
|
|
448
|
-
And ".gtd/QUALITY.md" contains:
|
|
449
|
-
"""
|
|
450
|
-
## add could be a method
|
|
451
|
-
|
|
452
|
-
_From lens correctness. The fixer left it unresolved._
|
|
453
|
-
|
|
454
|
-
A class would read better.
|
|
455
|
-
|
|
456
|
-
- [ ] fix
|
|
457
|
-
"""
|
|
458
|
-
And the commit subjects end with:
|
|
459
|
-
"""
|
|
460
|
-
gtd(judge): build.quality.triage → build.fix.quality.fixing
|
|
461
|
-
gtd(agent): build.fix.quality.fixing
|
|
462
|
-
gtd(agent): build.fix.quality.fixing
|
|
463
|
-
gtd(agent): build.fix.quality.fixing → build.health.check
|
|
464
|
-
gtd(check): build.health.check → build.quality.gating
|
|
465
|
-
gtd(check): build.quality.gating → build.quality.gate
|
|
466
|
-
"""
|
|
467
|
-
When gtd lands
|
|
468
|
-
And the process is driven
|
|
469
|
-
Then the process rests at "build.review.await-review"
|
|
470
|
-
And ".gtd/REVIEW.md" contains "- subtract has no negative test ("
|
|
471
|
-
And ".gtd/REVIEW.md" contains:
|
|
472
|
-
"""
|
|
473
|
-
Dropped at the finding gate:
|
|
474
|
-
|
|
475
|
-
- add could be a method (lens correctness)
|
|
476
|
-
"""
|
|
477
|
-
|
|
478
|
-
Scenario: a fixer that renames a chunk it leaves counts nothing fixed
|
|
479
|
-
Given judge step "build.quality.triage" answers:
|
|
480
|
-
"""
|
|
481
|
-
[{"id":"Q1","answer":"mechanical","p":0.9},{"id":"Q2","answer":"mechanical","p":0.9},{"id":"Q3","answer":"mechanical","p":0.9}]
|
|
482
|
-
"""
|
|
483
|
-
And step "build.fix.quality.fixing" writes ".gtd/QUALITY.md" with:
|
|
484
|
-
"""
|
|
485
|
-
# Quality
|
|
486
|
-
|
|
487
|
-
## null check in parse()
|
|
488
|
-
|
|
489
|
-
Still open.
|
|
490
|
-
"""
|
|
491
|
-
When the process is driven
|
|
492
|
-
Then the process rests at "build.quality.gate"
|
|
493
|
-
And ".gtd/QUALITY.md" contains "## null check in parse()"
|
|
494
|
-
And ".gtd/QUALITY.md" contains "## subtract has no negative test"
|
|
495
|
-
And ".gtd/QUALITY.md" contains "check whether it was fixed"
|
|
496
|
-
|
|
497
|
-
Scenario: prose the fixer leaves outside every chunk does not hide its fixes
|
|
498
|
-
Given judge step "build.quality.triage" answers:
|
|
499
|
-
"""
|
|
500
|
-
[{"id":"Q1","answer":"mechanical","p":0.9},{"id":"Q2","answer":"mechanical","p":0.9},{"id":"Q3","answer":"mechanical","p":0.9}]
|
|
501
|
-
"""
|
|
502
|
-
And step "build.fix.quality.fixing" writes ".gtd/QUALITY.md" with:
|
|
503
|
-
"""
|
|
504
|
-
# Quality
|
|
505
|
-
|
|
506
|
-
All fixed.
|
|
507
|
-
"""
|
|
508
|
-
When the process is driven
|
|
509
|
-
Then the process rests at "build.review.await-review"
|
|
510
|
-
And ".gtd/REVIEW.md" contains "- subtract has no negative test ("
|
|
511
|
-
And ".gtd/REVIEW.md" does not contain "check whether it was fixed"
|
|
512
|
-
|
|
513
|
-
Scenario: signing off the review ends the process
|
|
514
|
-
Given judge step "build.quality.triage" answers:
|
|
515
|
-
"""
|
|
516
|
-
[{"id":"Q1","answer":"noise","p":0.9},{"id":"Q2","answer":"noise","p":0.9},{"id":"Q3","answer":"noise","p":0.9}]
|
|
517
|
-
"""
|
|
518
|
-
And step "build.quality.gate" changes nothing
|
|
519
|
-
And step "build.review.closing" runs its script
|
|
520
|
-
When the process is driven
|
|
521
|
-
Then the process rests at "build.review.await-review"
|
|
522
|
-
When gtd lands
|
|
523
|
-
And the process is driven
|
|
524
|
-
Then the process rests at "idle"
|
|
525
|
-
And ".gtd/REVIEW.md" does not exist
|
|
526
|
-
And the commit subjects end with:
|
|
527
|
-
"""
|
|
528
|
-
gtd(agent): build.review.reviewing → build.review.carrying
|
|
529
|
-
gtd(check): build.review.carrying → build.review.await-review
|
|
530
|
-
gtd(human): build.review.await-review → build.review.closing
|
|
531
|
-
gtd(check): build.review.closing → idle
|
|
532
|
-
"""
|
|
533
|
-
|
|
534
|
-
Scenario: a finding whose entry the human deleted is listed as dropped
|
|
535
|
-
Given judge step "build.quality.triage" answers:
|
|
536
|
-
"""
|
|
537
|
-
[{"id":"Q1","answer":"noise","p":0.9},{"id":"Q2","answer":"noise","p":0.85},{"id":"Q3","answer":"design","p":0.8}]
|
|
538
|
-
"""
|
|
539
|
-
When the process is driven
|
|
540
|
-
Then the process rests at "build.quality.gate"
|
|
541
|
-
Given a file ".gtd/QUALITY.md" with:
|
|
542
|
-
"""
|
|
543
|
-
# Quality
|
|
544
|
-
|
|
545
|
-
# Dropped as noise
|
|
546
|
-
|
|
547
|
-
## add could be a method
|
|
548
|
-
|
|
549
|
-
A class would read better.
|
|
550
|
-
|
|
551
|
-
- [ ] fix
|
|
552
|
-
"""
|
|
553
|
-
When gtd lands
|
|
554
|
-
And the process is driven
|
|
555
|
-
Then the process rests at "build.review.await-review"
|
|
556
|
-
And ".gtd/REVIEW.md" contains:
|
|
557
|
-
"""
|
|
558
|
-
Dropped at the finding gate:
|
|
559
|
-
|
|
560
|
-
- AC-1 ignores floating point (lens correctness)
|
|
561
|
-
|
|
562
|
-
Dropped as noise:
|
|
563
|
-
|
|
564
|
-
- add could be a method (p=0.85, lens correctness)
|
|
565
|
-
- subtract has no negative test (p=0.9, lens correctness)
|
|
566
|
-
"""
|