@pmelab/gtd 58.2.0 → 59.0.1
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 +120 -395
- package/dist/chunks/{Schema-B3o6eRNU.mjs → testkit-07Z_ENch.mjs} +13503 -3460
- package/dist/chunks/{wire-C12dahrH.mjs → wire-BTUhRGXj.mjs} +1 -1
- package/dist/flows.mjs +1 -1
- package/dist/gtd.bundle.mjs +484 -497
- package/dist/testkit/gherkin.mjs +145 -65
- package/dist/testkit.mjs +1 -1
- package/dist/wire.mjs +1 -1
- package/package.json +3 -42
- package/skills/authoring/SKILL.md +34 -27
- package/src/cli/Cli.test.ts +148 -71
- package/src/cli/Cli.ts +384 -463
- package/src/cli/Help.test.ts +47 -0
- package/src/cli/Help.ts +70 -0
- package/src/cli/Program.test.ts +127 -33
- package/src/cli/Program.ts +70 -25
- package/src/edge/Edge.ts +4 -4
- package/src/emit/Emit.test.ts +1 -1
- package/src/emit/Emit.ts +1 -1
- package/src/flags/index.test.ts +0 -13
- package/src/flags/index.ts +1 -3
- package/src/flows/factory.ts +3 -1
- package/src/gherkin/index.ts +135 -71
- package/src/gherkin/messages.test.ts +90 -0
- package/src/gherkin/messages.ts +84 -0
- 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 +47 -2
- package/src/testkit/TestRepo.ts +51 -6
- package/src/twins/EmittedScriptRecognizer.ts +5 -8
- package/src/twins/FlowScripts.ts +1 -1
- package/src/wire/Land.ts +1 -1
- package/src/workflow/index.ts +1 -0
- package/src/workflow/load.test.ts +138 -113
- package/src/workflow/load.ts +7 -7
- package/src/workflow/skills.test.ts +5 -5
- package/src/workflow/skills.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-JDtpNKyi.mjs +0 -10410
- 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,351 +0,0 @@
|
|
|
1
|
-
@inmem
|
|
2
|
-
Feature: the risk tier is proposed at triage and recorded behind GTD_FLAG_RISK_TIER
|
|
3
|
-
|
|
4
|
-
With GTD_FLAG_RISK_TIER on, design.triage asks
|
|
5
|
-
for a risk tier and production signals, and the design gate's exit lands them
|
|
6
|
-
as Gtd-Mark trailers: one `risk-tier=<low|high>`, one `production-signal`
|
|
7
|
-
per signal. A missing or unreadable tier is high. With the flag off, nothing
|
|
8
|
-
is asked and no commit carries a Gtd-Mark.
|
|
9
|
-
|
|
10
|
-
Background:
|
|
11
|
-
Given the shipped workflows, as gtd install scaffolds them
|
|
12
|
-
And an environment variable "GTD_QUALITYREVIEWS" set to ""
|
|
13
|
-
|
|
14
|
-
Rule: with GTD_FLAG_RISK_TIER on
|
|
15
|
-
|
|
16
|
-
Background:
|
|
17
|
-
Given an environment variable "GTD_FLAG_RISK_TIER" set to "1"
|
|
18
|
-
And a file "src/calc.ts" with:
|
|
19
|
-
"""
|
|
20
|
-
export const add = (a: number, b: number) => a + b
|
|
21
|
-
"""
|
|
22
|
-
And a file "src/calc.test.ts" with:
|
|
23
|
-
"""
|
|
24
|
-
import { expect, it } from "vitest"
|
|
25
|
-
it("adds", () => expect(1 + 1).toBe(2))
|
|
26
|
-
"""
|
|
27
|
-
And the working tree is committed as "feat: add calculator"
|
|
28
|
-
And a file "TODO.md" with:
|
|
29
|
-
"""
|
|
30
|
-
# Add subtract
|
|
31
|
-
|
|
32
|
-
subtract(a, b) returns the difference.
|
|
33
|
-
"""
|
|
34
|
-
And step "unwind" changes nothing
|
|
35
|
-
And step "start-gate.check" changes nothing
|
|
36
|
-
|
|
37
|
-
Scenario: with the flag on the triage prompt asks for the tier and the signals
|
|
38
|
-
When the process is driven
|
|
39
|
-
Then the process rests at "design.triage"
|
|
40
|
-
And the resting step's content contains "## Risk Tier"
|
|
41
|
-
And the resting step's content contains "## Production Signals"
|
|
42
|
-
And the resting step's content contains "unsure means `high`"
|
|
43
|
-
|
|
44
|
-
Scenario: a low tier marks risk-tier=low on the design-exit commit
|
|
45
|
-
Given step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
46
|
-
"""
|
|
47
|
-
# Requirements
|
|
48
|
-
|
|
49
|
-
## Risk Tier
|
|
50
|
-
|
|
51
|
-
low — trivial copy change
|
|
52
|
-
|
|
53
|
-
## Impact
|
|
54
|
-
|
|
55
|
-
- the greeting module
|
|
56
|
-
|
|
57
|
-
## Release Flag
|
|
58
|
-
|
|
59
|
-
new
|
|
60
|
-
|
|
61
|
-
## Acceptance Criteria
|
|
62
|
-
|
|
63
|
-
- AC-1: the change behaves as described.
|
|
64
|
-
"""
|
|
65
|
-
And step "design.gate.answer" changes nothing
|
|
66
|
-
When the process is driven
|
|
67
|
-
Then the process rests at "seam.naive"
|
|
68
|
-
And the last commit subject is "gtd(human): design.gate.answer → seam.naive"
|
|
69
|
-
And the last commit body contains "Gtd-Mark: risk-tier=low"
|
|
70
|
-
|
|
71
|
-
Scenario: a high tier marks the design-exit commit
|
|
72
|
-
Given step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
73
|
-
"""
|
|
74
|
-
# Requirements
|
|
75
|
-
|
|
76
|
-
## Risk Tier
|
|
77
|
-
|
|
78
|
-
high — touches payments
|
|
79
|
-
|
|
80
|
-
## Impact
|
|
81
|
-
|
|
82
|
-
- the greeting module
|
|
83
|
-
|
|
84
|
-
## Release Flag
|
|
85
|
-
|
|
86
|
-
new
|
|
87
|
-
|
|
88
|
-
## Acceptance Criteria
|
|
89
|
-
|
|
90
|
-
- AC-1: the change behaves as described.
|
|
91
|
-
"""
|
|
92
|
-
And step "design.gate.answer" changes nothing
|
|
93
|
-
When the process is driven
|
|
94
|
-
Then the process rests at "seam.naive"
|
|
95
|
-
And the last commit subject is "gtd(human): design.gate.answer → seam.naive"
|
|
96
|
-
And the last commit body contains "Gtd-Mark: risk-tier=high"
|
|
97
|
-
|
|
98
|
-
Scenario Outline: a missing section or an unknown word counts as high
|
|
99
|
-
Given step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
100
|
-
"""
|
|
101
|
-
# Requirements
|
|
102
|
-
|
|
103
|
-
<tier section>
|
|
104
|
-
## Concerns
|
|
105
|
-
|
|
106
|
-
### Subtract
|
|
107
|
-
|
|
108
|
-
## Impact
|
|
109
|
-
|
|
110
|
-
- the greeting module
|
|
111
|
-
|
|
112
|
-
## Release Flag
|
|
113
|
-
|
|
114
|
-
new
|
|
115
|
-
|
|
116
|
-
## Acceptance Criteria
|
|
117
|
-
|
|
118
|
-
- AC-1: the change behaves as described.
|
|
119
|
-
"""
|
|
120
|
-
And step "design.gate.answer" changes nothing
|
|
121
|
-
When the process is driven
|
|
122
|
-
Then the process rests at "seam.naive"
|
|
123
|
-
And the last commit body contains "Gtd-Mark: risk-tier=high"
|
|
124
|
-
|
|
125
|
-
Examples:
|
|
126
|
-
| tier section |
|
|
127
|
-
| |
|
|
128
|
-
| ## Risk Tier\n\nmedium — hmm |
|
|
129
|
-
| ```\n## Risk Tier\n\nlow\n```\n |
|
|
130
|
-
|
|
131
|
-
Scenario Outline: signals written at triage land as marks for either tier
|
|
132
|
-
Given step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
133
|
-
"""
|
|
134
|
-
# Requirements
|
|
135
|
-
|
|
136
|
-
## Risk Tier
|
|
137
|
-
|
|
138
|
-
<tier> — reason
|
|
139
|
-
|
|
140
|
-
## Production Signals
|
|
141
|
-
|
|
142
|
-
- error rate on /subtract stays flat
|
|
143
|
-
- p95 latency
|
|
144
|
-
|
|
145
|
-
## Impact
|
|
146
|
-
|
|
147
|
-
- the greeting module
|
|
148
|
-
|
|
149
|
-
## Release Flag
|
|
150
|
-
|
|
151
|
-
new
|
|
152
|
-
|
|
153
|
-
## Acceptance Criteria
|
|
154
|
-
|
|
155
|
-
- AC-1: the change behaves as described.
|
|
156
|
-
"""
|
|
157
|
-
And step "design.gate.answer" changes nothing
|
|
158
|
-
When the process is driven
|
|
159
|
-
Then the process rests at "seam.naive"
|
|
160
|
-
And the last commit body contains "Gtd-Mark: production-signal=error rate on /subtract stays flat"
|
|
161
|
-
And the last commit body contains "Gtd-Mark: production-signal=p95 latency"
|
|
162
|
-
|
|
163
|
-
Examples:
|
|
164
|
-
| tier |
|
|
165
|
-
| low |
|
|
166
|
-
| high |
|
|
167
|
-
|
|
168
|
-
Scenario: the tier a rebuilt pass is told comes from the requirements the final design gate lap accepted
|
|
169
|
-
Given step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
170
|
-
"""
|
|
171
|
-
# Requirements
|
|
172
|
-
|
|
173
|
-
## Risk Tier
|
|
174
|
-
|
|
175
|
-
low — trivial copy change
|
|
176
|
-
|
|
177
|
-
## Impact
|
|
178
|
-
|
|
179
|
-
- the greeting module
|
|
180
|
-
|
|
181
|
-
## Release Flag
|
|
182
|
-
|
|
183
|
-
new
|
|
184
|
-
|
|
185
|
-
## Acceptance Criteria
|
|
186
|
-
|
|
187
|
-
- AC-1: the change behaves as described.
|
|
188
|
-
"""
|
|
189
|
-
And step "seam.check" writes "src/acceptance.test.ts" with:
|
|
190
|
-
"""
|
|
191
|
-
it("[AC-1] holds elsewhere", () => {})
|
|
192
|
-
"""
|
|
193
|
-
And step "implement.applying" runs its script
|
|
194
|
-
And step "seam.naive" writes "src/acceptance.test.ts" with:
|
|
195
|
-
"""
|
|
196
|
-
it("[AC-1] holds", () => {})
|
|
197
|
-
"""
|
|
198
|
-
And step "seam.naive" writes "src/calc.ts" with:
|
|
199
|
-
"""
|
|
200
|
-
export const add = (a: number, b: number) => a + b
|
|
201
|
-
export const subtract = (a: number, b: number) => a - b
|
|
202
|
-
"""
|
|
203
|
-
And judge step "seam.judge" answers:
|
|
204
|
-
"""
|
|
205
|
-
[{"id":"shape","answer":"land","p":0.9}]
|
|
206
|
-
"""
|
|
207
|
-
When the process is driven
|
|
208
|
-
Then the process rests at "design.gate.answer"
|
|
209
|
-
Given a file ".gtd/REQUIREMENTS.md" with:
|
|
210
|
-
"""
|
|
211
|
-
# Requirements
|
|
212
|
-
|
|
213
|
-
## Risk Tier
|
|
214
|
-
|
|
215
|
-
high — touches payments
|
|
216
|
-
"""
|
|
217
|
-
And step "design.triage" from now on changes nothing
|
|
218
|
-
And step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
219
|
-
"""
|
|
220
|
-
# Requirements
|
|
221
|
-
|
|
222
|
-
## Risk Tier
|
|
223
|
-
|
|
224
|
-
high — touches payments
|
|
225
|
-
|
|
226
|
-
## Concerns
|
|
227
|
-
|
|
228
|
-
### Subtract
|
|
229
|
-
|
|
230
|
-
## Impact
|
|
231
|
-
|
|
232
|
-
- the greeting module
|
|
233
|
-
|
|
234
|
-
## Release Flag
|
|
235
|
-
|
|
236
|
-
new
|
|
237
|
-
|
|
238
|
-
## Acceptance Criteria
|
|
239
|
-
|
|
240
|
-
- AC-1: the change behaves as described.
|
|
241
|
-
"""
|
|
242
|
-
And step "design.gate.answer" changes nothing
|
|
243
|
-
When the process is driven
|
|
244
|
-
Then the process rests at "implement.building"
|
|
245
|
-
And the resting step's content contains "Put the new behaviour behind a new release flag"
|
|
246
|
-
And the resting step's content does not contain "Add no release flag"
|
|
247
|
-
|
|
248
|
-
Rule: with GTD_FLAG_RISK_TIER off
|
|
249
|
-
|
|
250
|
-
Background:
|
|
251
|
-
Given an environment variable "GTD_FLAG_RISK_TIER" set to "0"
|
|
252
|
-
And a file "src/calc.ts" with:
|
|
253
|
-
"""
|
|
254
|
-
export const add = (a: number, b: number) => a + b
|
|
255
|
-
"""
|
|
256
|
-
And a file "src/calc.test.ts" with:
|
|
257
|
-
"""
|
|
258
|
-
import { expect, it } from "vitest"
|
|
259
|
-
it("adds", () => expect(1 + 1).toBe(2))
|
|
260
|
-
"""
|
|
261
|
-
And the working tree is committed as "feat: add calculator"
|
|
262
|
-
And a file "TODO.md" with:
|
|
263
|
-
"""
|
|
264
|
-
# Add subtract
|
|
265
|
-
|
|
266
|
-
subtract(a, b) returns the difference.
|
|
267
|
-
"""
|
|
268
|
-
And step "unwind" changes nothing
|
|
269
|
-
And step "start-gate.check" changes nothing
|
|
270
|
-
|
|
271
|
-
Scenario: the flag-off twin asks for no tier and marks no commit
|
|
272
|
-
Given step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
273
|
-
"""
|
|
274
|
-
# Requirements
|
|
275
|
-
|
|
276
|
-
## Risk Tier
|
|
277
|
-
|
|
278
|
-
low — trivial
|
|
279
|
-
|
|
280
|
-
## Production Signals
|
|
281
|
-
|
|
282
|
-
- error rate stays flat
|
|
283
|
-
|
|
284
|
-
## Impact
|
|
285
|
-
|
|
286
|
-
- the greeting module
|
|
287
|
-
|
|
288
|
-
## Release Flag
|
|
289
|
-
|
|
290
|
-
new
|
|
291
|
-
|
|
292
|
-
## Acceptance Criteria
|
|
293
|
-
|
|
294
|
-
- AC-1: the change behaves as described.
|
|
295
|
-
"""
|
|
296
|
-
And step "design.gate.answer" changes nothing
|
|
297
|
-
When the process is driven
|
|
298
|
-
Then the process rests at "seam.naive"
|
|
299
|
-
And no commit body contains "Gtd-Mark"
|
|
300
|
-
|
|
301
|
-
Scenario: the flag-off twin's triage prompt has no tier section
|
|
302
|
-
When the process is driven
|
|
303
|
-
Then the process rests at "design.triage"
|
|
304
|
-
And the resting step's content does not contain "## Risk Tier"
|
|
305
|
-
And the resting step's content does not contain "## Production Signals"
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
Scenario: the flag-off twin keeps today's flag demand on a rebuilt pass
|
|
309
|
-
Given step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
310
|
-
"""
|
|
311
|
-
# Requirements
|
|
312
|
-
|
|
313
|
-
## Risk Tier
|
|
314
|
-
|
|
315
|
-
low — trivial
|
|
316
|
-
|
|
317
|
-
## Impact
|
|
318
|
-
|
|
319
|
-
- the greeting module
|
|
320
|
-
|
|
321
|
-
## Release Flag
|
|
322
|
-
|
|
323
|
-
new
|
|
324
|
-
|
|
325
|
-
## Acceptance Criteria
|
|
326
|
-
|
|
327
|
-
- AC-1: the change behaves as described.
|
|
328
|
-
"""
|
|
329
|
-
And step "design.gate.answer" changes nothing
|
|
330
|
-
And step "seam.check" writes "src/acceptance.test.ts" with:
|
|
331
|
-
"""
|
|
332
|
-
it("[AC-1] holds elsewhere", () => {})
|
|
333
|
-
"""
|
|
334
|
-
And step "implement.applying" runs its script
|
|
335
|
-
And step "seam.naive" writes "src/acceptance.test.ts" with:
|
|
336
|
-
"""
|
|
337
|
-
it("[AC-1] holds", () => {})
|
|
338
|
-
"""
|
|
339
|
-
And step "seam.naive" writes "src/calc.ts" with:
|
|
340
|
-
"""
|
|
341
|
-
export const add = (a: number, b: number) => a + b
|
|
342
|
-
export const subtract = (a: number, b: number) => a - b
|
|
343
|
-
"""
|
|
344
|
-
And judge step "seam.judge" answers:
|
|
345
|
-
"""
|
|
346
|
-
[{"id":"shape","answer":"land","p":0.9}]
|
|
347
|
-
"""
|
|
348
|
-
When the process is driven
|
|
349
|
-
Then the process rests at "implement.building"
|
|
350
|
-
And the resting step's content contains "Put the new behaviour behind a new release flag"
|
|
351
|
-
And the resting step's content does not contain "Add no release flag"
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
# One SDLC path per file, so a changed path reds exactly one fixture — do not merge.
|
|
2
|
-
@inmem
|
|
3
|
-
Feature: rejected naive passes walk one fixed path through the steer gate to the review gate
|
|
4
|
-
|
|
5
|
-
With GTD_FLAG_RISK_TIER off, three rejected naive
|
|
6
|
-
passes rest at the steer gate, where a human edit restarts the seam and the
|
|
7
|
-
steered rerun lands. The flags are pinned so the per-flag test runs never
|
|
8
|
-
move it off its path.
|
|
9
|
-
|
|
10
|
-
Background:
|
|
11
|
-
Given the shipped workflows, as gtd install scaffolds them
|
|
12
|
-
And an environment variable "GTD_QUALITYREVIEWS" set to ""
|
|
13
|
-
And an environment variable "GTD_FLAG_RISK_TIER" set to "0"
|
|
14
|
-
And a file "src/calc.ts" with:
|
|
15
|
-
"""
|
|
16
|
-
export const add = (a: number, b: number) => a + b
|
|
17
|
-
"""
|
|
18
|
-
And the working tree is committed as "feat: add calculator"
|
|
19
|
-
And a file "TODO.md" with:
|
|
20
|
-
"""
|
|
21
|
-
# Add subtract
|
|
22
|
-
|
|
23
|
-
subtract(a, b) returns the difference.
|
|
24
|
-
"""
|
|
25
|
-
And step "unwind" changes nothing
|
|
26
|
-
And step "start-gate.check" changes nothing
|
|
27
|
-
And step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
|
|
28
|
-
"""
|
|
29
|
-
# Requirements
|
|
30
|
-
|
|
31
|
-
## Concerns
|
|
32
|
-
|
|
33
|
-
### Subtract
|
|
34
|
-
|
|
35
|
-
- `subtract(a, b)` returns `a - b`.
|
|
36
|
-
|
|
37
|
-
## Impact
|
|
38
|
-
|
|
39
|
-
- the greeting module
|
|
40
|
-
|
|
41
|
-
## Release Flag
|
|
42
|
-
|
|
43
|
-
new
|
|
44
|
-
|
|
45
|
-
## Acceptance Criteria
|
|
46
|
-
|
|
47
|
-
- AC-1: the change behaves as described.
|
|
48
|
-
"""
|
|
49
|
-
And step "design.gate.answer" changes nothing
|
|
50
|
-
|
|
51
|
-
Scenario: three rejects rest at the steer gate, a steered rerun lands and runs to the review gate
|
|
52
|
-
Given step "seam.check" changes nothing
|
|
53
|
-
And step "seam.naive" writes "src/acceptance.test.ts" with:
|
|
54
|
-
"""
|
|
55
|
-
it("[AC-1] holds", () => {})
|
|
56
|
-
"""
|
|
57
|
-
And step "seam.naive" writes "src/calc.ts" with:
|
|
58
|
-
"""
|
|
59
|
-
export const add = (a: number, b: number) => b + a
|
|
60
|
-
"""
|
|
61
|
-
And step "implement.health.check" changes nothing
|
|
62
|
-
And step "implement.closing" runs its script
|
|
63
|
-
When the process is driven
|
|
64
|
-
Then the process rests at "seam.judge"
|
|
65
|
-
|
|
66
|
-
Given step "seam.naive" is prompted with "Your previous attempt was rejected"
|
|
67
|
-
And judge step "seam.judge" answers:
|
|
68
|
-
"""
|
|
69
|
-
[{"id":"shape","answer":"reject","p":0.9}]
|
|
70
|
-
"""
|
|
71
|
-
When the process is driven
|
|
72
|
-
Then the process rests at "seam.steer"
|
|
73
|
-
And the resting step's content contains "Overrule"
|
|
74
|
-
And the resting step's content contains "src/calc.ts"
|
|
75
|
-
|
|
76
|
-
Given a file ".gtd/REQUIREMENTS.md" with:
|
|
77
|
-
"""
|
|
78
|
-
# Requirements
|
|
79
|
-
|
|
80
|
-
## Concerns
|
|
81
|
-
|
|
82
|
-
### Subtract
|
|
83
|
-
|
|
84
|
-
- `subtract(a, b)` returns `a - b`, in the calculator module.
|
|
85
|
-
|
|
86
|
-
## Impact
|
|
87
|
-
|
|
88
|
-
- the greeting module
|
|
89
|
-
|
|
90
|
-
## Release Flag
|
|
91
|
-
|
|
92
|
-
new
|
|
93
|
-
|
|
94
|
-
## Acceptance Criteria
|
|
95
|
-
|
|
96
|
-
- AC-1: the change behaves as described.
|
|
97
|
-
"""
|
|
98
|
-
And step "seam.naive" from now on changes nothing
|
|
99
|
-
And step "seam.naive" writes "src/acceptance.test.ts" with:
|
|
100
|
-
"""
|
|
101
|
-
it("[AC-1] holds", () => {})
|
|
102
|
-
"""
|
|
103
|
-
And step "seam.naive" writes "src/calc.ts" with:
|
|
104
|
-
"""
|
|
105
|
-
export const add = (a: number, b: number) => a + b
|
|
106
|
-
export const subtract = (a: number, b: number) => a - b
|
|
107
|
-
"""
|
|
108
|
-
And judge step "seam.judge" answers:
|
|
109
|
-
"""
|
|
110
|
-
[{"id":"shape","answer":"land","p":0.9}]
|
|
111
|
-
"""
|
|
112
|
-
And step "implement.applying" runs its script
|
|
113
|
-
When gtd lands
|
|
114
|
-
And the process is driven
|
|
115
|
-
Then the process rests at "build.review.reviewing"
|
|
116
|
-
And the commit subjects end with:
|
|
117
|
-
"""
|
|
118
|
-
gtd(human): idle → unwind
|
|
119
|
-
gtd(check): unwind → start-gate.check
|
|
120
|
-
gtd(check): start-gate.check → design.triage
|
|
121
|
-
gtd(agent): design.triage → design.gate.answer
|
|
122
|
-
gtd(human): design.gate.answer → seam.naive
|
|
123
|
-
gtd(agent): seam.naive → seam.check
|
|
124
|
-
gtd(check): seam.check → seam.judge
|
|
125
|
-
gtd(judge): seam.judge → seam.naive
|
|
126
|
-
gtd(agent): seam.naive → seam.check
|
|
127
|
-
gtd(check): seam.check → seam.judge
|
|
128
|
-
gtd(judge): seam.judge → seam.naive
|
|
129
|
-
gtd(agent): seam.naive → seam.check
|
|
130
|
-
gtd(check): seam.check → seam.judge
|
|
131
|
-
gtd(judge): seam.judge → seam.steer
|
|
132
|
-
gtd(human): seam.steer → seam.naive
|
|
133
|
-
gtd(agent): seam.naive → seam.check
|
|
134
|
-
gtd(check): seam.check → seam.judge
|
|
135
|
-
gtd(judge): seam.judge → implement.applying
|
|
136
|
-
gtd(check): implement.applying → implement.health.check
|
|
137
|
-
gtd(check): implement.health.check → implement.closing
|
|
138
|
-
gtd(check): implement.closing → build.review.reviewing
|
|
139
|
-
"""
|
|
140
|
-
And the commit "gtd(human): idle → unwind" has a body containing "Gtd-Var: flag_risk_tier=0"
|
|
141
|
-
And the commit "gtd(agent): seam.naive → seam.check" has a body containing "Gtd-Kept:"
|
|
142
|
-
And the commit "gtd(judge): seam.judge → seam.naive" has a body containing "\"answer\":\"reject\""
|
|
143
|
-
And the commit "gtd(judge): seam.judge → seam.steer" has a body containing "\"answer\":\"reject\""
|
|
144
|
-
And the commit "gtd(judge): seam.judge → implement.applying" has a body containing "\"answer\":\"land\""
|
|
145
|
-
And no commit body contains "Gtd-Approved:"
|
|
146
|
-
And no commit body contains "Gtd-Workflow:"
|