@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.
Files changed (150) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +120 -395
  3. package/dist/chunks/{Schema-B3o6eRNU.mjs → testkit-07Z_ENch.mjs} +13503 -3460
  4. package/dist/chunks/{wire-C12dahrH.mjs → wire-BTUhRGXj.mjs} +1 -1
  5. package/dist/flows.mjs +1 -1
  6. package/dist/gtd.bundle.mjs +484 -497
  7. package/dist/testkit/gherkin.mjs +145 -65
  8. package/dist/testkit.mjs +1 -1
  9. package/dist/wire.mjs +1 -1
  10. package/package.json +3 -42
  11. package/skills/authoring/SKILL.md +34 -27
  12. package/src/cli/Cli.test.ts +148 -71
  13. package/src/cli/Cli.ts +384 -463
  14. package/src/cli/Help.test.ts +47 -0
  15. package/src/cli/Help.ts +70 -0
  16. package/src/cli/Program.test.ts +127 -33
  17. package/src/cli/Program.ts +70 -25
  18. package/src/edge/Edge.ts +4 -4
  19. package/src/emit/Emit.test.ts +1 -1
  20. package/src/emit/Emit.ts +1 -1
  21. package/src/flags/index.test.ts +0 -13
  22. package/src/flags/index.ts +1 -3
  23. package/src/flows/factory.ts +3 -1
  24. package/src/gherkin/index.ts +135 -71
  25. package/src/gherkin/messages.test.ts +90 -0
  26. package/src/gherkin/messages.ts +84 -0
  27. package/src/install/Install.test.ts +14 -11
  28. package/src/install/Install.ts +38 -15
  29. package/src/install/index.ts +1 -2
  30. package/src/replay/Replay.test.ts +1 -1
  31. package/src/replay/index.ts +1 -1
  32. package/src/step/planStart.ts +6 -1
  33. package/src/testkit/TestRepo.test.ts +47 -2
  34. package/src/testkit/TestRepo.ts +51 -6
  35. package/src/twins/EmittedScriptRecognizer.ts +5 -8
  36. package/src/twins/FlowScripts.ts +1 -1
  37. package/src/wire/Land.ts +1 -1
  38. package/src/workflow/index.ts +1 -0
  39. package/src/workflow/load.test.ts +138 -113
  40. package/src/workflow/load.ts +7 -7
  41. package/src/workflow/skills.test.ts +5 -5
  42. package/src/workflow/skills.ts +1 -1
  43. package/src/workflow/vars.test.ts +30 -3
  44. package/src/workflow/vars.ts +34 -2
  45. package/src/workflow-kit/index.ts +1 -1
  46. package/dist/chunks/reserved-lMYCaapY.mjs +0 -1990
  47. package/dist/chunks/review-Bfaror38.mjs +0 -427
  48. package/dist/chunks/tail-Bd7L940p.mjs +0 -355
  49. package/dist/chunks/testkit-JDtpNKyi.mjs +0 -10410
  50. package/dist/workflows/cleanup.mjs +0 -36
  51. package/dist/workflows/feature.mjs +0 -1018
  52. package/dist/workflows/fix.mjs +0 -41
  53. package/dist/workflows/review.mjs +0 -45
  54. package/dist/workflows/rollout.mjs +0 -48
  55. package/dist/workflows.mjs +0 -40651
  56. package/src/install/ConfigScaffold.ts +0 -22
  57. package/src/workflows/cleanup/cleanup-path.feature +0 -94
  58. package/src/workflows/cleanup/cleanup.feature +0 -315
  59. package/src/workflows/cleanup/cleanup.test.ts +0 -276
  60. package/src/workflows/cleanup/cleanup.ts +0 -52
  61. package/src/workflows/cleanup/index.ts +0 -6
  62. package/src/workflows/feature/acceptance-criteria-tier.feature +0 -25
  63. package/src/workflows/feature/acceptance-criteria.feature +0 -389
  64. package/src/workflows/feature/criteria-coverage.feature +0 -102
  65. package/src/workflows/feature/criteria.test.ts +0 -147
  66. package/src/workflows/feature/criteria.ts +0 -267
  67. package/src/workflows/feature/fast-path.feature +0 -93
  68. package/src/workflows/feature/feature.test.ts +0 -338
  69. package/src/workflows/feature/feature.ts +0 -156
  70. package/src/workflows/feature/green.ts +0 -19
  71. package/src/workflows/feature/index.ts +0 -18
  72. package/src/workflows/feature/lens-models.feature +0 -69
  73. package/src/workflows/feature/lens-review.feature +0 -566
  74. package/src/workflows/feature/naive-acceptance.feature +0 -147
  75. package/src/workflows/feature/naive-test.feature +0 -263
  76. package/src/workflows/feature/one-step-land.feature +0 -93
  77. package/src/workflows/feature/planning.ts +0 -41
  78. package/src/workflows/feature/refactor-absorbs.feature +0 -131
  79. package/src/workflows/feature/refactor-first.feature +0 -158
  80. package/src/workflows/feature/refactor-lens-models.feature +0 -79
  81. package/src/workflows/feature/refactor-rebuild.feature +0 -273
  82. package/src/workflows/feature/refactor-review.feature +0 -1528
  83. package/src/workflows/feature/refactor.test.ts +0 -1220
  84. package/src/workflows/feature/refactor.ts +0 -368
  85. package/src/workflows/feature/release-flag.feature +0 -167
  86. package/src/workflows/feature/release-flag.test.ts +0 -49
  87. package/src/workflows/feature/release-flag.ts +0 -46
  88. package/src/workflows/feature/review-gate.feature +0 -241
  89. package/src/workflows/feature/reviewer-walkthrough.feature +0 -142
  90. package/src/workflows/feature/risk-tier.feature +0 -351
  91. package/src/workflows/feature/seam-rejection.feature +0 -146
  92. package/src/workflows/feature/seam.feature +0 -297
  93. package/src/workflows/feature/seam.test.ts +0 -527
  94. package/src/workflows/feature/seam.ts +0 -426
  95. package/src/workflows/feature/standards.feature +0 -354
  96. package/src/workflows/feature/steps.test.ts +0 -65
  97. package/src/workflows/feature/steps.ts +0 -45
  98. package/src/workflows/feature/tier-pin.feature +0 -66
  99. package/src/workflows/feature/tier.test.ts +0 -166
  100. package/src/workflows/feature/tier.ts +0 -56
  101. package/src/workflows/fix/fix-lens-origin.feature +0 -114
  102. package/src/workflows/fix/fix-quality.feature +0 -212
  103. package/src/workflows/fix/fix.feature +0 -79
  104. package/src/workflows/fix/fix.test.ts +0 -74
  105. package/src/workflows/fix/fix.ts +0 -52
  106. package/src/workflows/fix/index.ts +0 -6
  107. package/src/workflows/index.ts +0 -47
  108. package/src/workflows/review/index.ts +0 -6
  109. package/src/workflows/review/review-door.feature +0 -199
  110. package/src/workflows/review/review.test.ts +0 -27
  111. package/src/workflows/review/review.ts +0 -60
  112. package/src/workflows/rollout/index.ts +0 -6
  113. package/src/workflows/rollout/rollout.feature +0 -510
  114. package/src/workflows/rollout/rollout.test.ts +0 -263
  115. package/src/workflows/rollout/rollout.ts +0 -82
  116. package/src/workflows/shared/__fixtures__/feature-collecting-prompt.txt +0 -98
  117. package/src/workflows/shared/access.test.ts +0 -62
  118. package/src/workflows/shared/access.ts +0 -24
  119. package/src/workflows/shared/config.fixture.ts +0 -12
  120. package/src/workflows/shared/fences.ts +0 -24
  121. package/src/workflows/shared/health.test.ts +0 -148
  122. package/src/workflows/shared/health.ts +0 -191
  123. package/src/workflows/shared/learn.test.ts +0 -140
  124. package/src/workflows/shared/learn.ts +0 -201
  125. package/src/workflows/shared/lenses.test.ts +0 -39
  126. package/src/workflows/shared/lenses.ts +0 -294
  127. package/src/workflows/shared/options.test.ts +0 -157
  128. package/src/workflows/shared/options.ts +0 -92
  129. package/src/workflows/shared/progress.feature +0 -124
  130. package/src/workflows/shared/prose.ts +0 -263
  131. package/src/workflows/shared/recheck.feature +0 -60
  132. package/src/workflows/shared/registry.test.ts +0 -345
  133. package/src/workflows/shared/registry.ts +0 -183
  134. package/src/workflows/shared/reserved.ts +0 -11
  135. package/src/workflows/shared/review.test.ts +0 -1062
  136. package/src/workflows/shared/review.ts +0 -446
  137. package/src/workflows/shared/skills.test.ts +0 -121
  138. package/src/workflows/shared/skills.ts +0 -49
  139. package/src/workflows/shared/standards.test.ts +0 -90
  140. package/src/workflows/shared/standards.ts +0 -156
  141. package/src/workflows/shared/steps.test.ts +0 -219
  142. package/src/workflows/shared/steps.ts +0 -201
  143. package/src/workflows/shared/tail.test.ts +0 -454
  144. package/src/workflows/shared/tail.ts +0 -264
  145. package/src/workflows/shared/text.fixture.ts +0 -128
  146. package/src/workflows/shared/text.test.ts +0 -1430
  147. package/src/workflows/shared/text.ts +0 -1700
  148. package/src/workflows/shared/threads.test.ts +0 -129
  149. package/src/workflows/shared/vars.ts +0 -47
  150. package/src/workflows/shared/workflows.steps.ts +0 -54
@@ -1,22 +0,0 @@
1
- // What `gtd install` writes as a repository's `gtd.config.ts`. The default
2
- // export is also exported as `feature`, so a process shows that name.
3
- export const CONFIG_SCAFFOLD = `// The workflows gtd runs here: gtd's shipped feature, review and fix.
4
- // Every exported function is startable with \`gtd --workflow <name>\`; the
5
- // default export is what a change in the tree starts. Each workflow brings
6
- // its own doors: \`gtd door review [base]\` and \`gtd door fix\`. Export \`rollout\`
7
- // from \`@pmelab/gtd/workflows/rollout\` and \`cleanup\` from
8
- // \`@pmelab/gtd/workflows/cleanup\` to add \`gtd door rollout <flag>\` and
9
- // \`gtd door cleanup <flag>\`.
10
- export {
11
- feature as default,
12
- feature,
13
- defaults,
14
- envDefaults,
15
- summary,
16
- steering,
17
- skills,
18
- access,
19
- } from "@pmelab/gtd/workflows/feature"
20
- export { review } from "@pmelab/gtd/workflows/review"
21
- export { fix } from "@pmelab/gtd/workflows/fix"
22
- `
@@ -1,94 +0,0 @@
1
- # One SDLC path per file, so a changed path reds exactly one fixture — do not merge.
2
- @inmem
3
- Feature: cleanup walks one fixed path from the opening commit to idle
4
-
5
- A default-on release flag is cleaned up by an agent that removes the registry
6
- entry and the off path; health, review and closing follow and the process
7
- rests at idle. Cleanup reads no release flag, so no flag is pinned here and
8
- every flag state takes the same path.
9
-
10
- Background:
11
- Given the shipped workflows, as gtd install scaffolds them
12
- And a gtd config with:
13
- """
14
- export {
15
- feature as default,
16
- feature,
17
- defaults,
18
- envDefaults,
19
- summary,
20
- steering,
21
- skills,
22
- access,
23
- } from "@pmelab/gtd/workflows/feature"
24
- import { cleanup } from "@pmelab/gtd/workflows"
25
- export { cleanup }
26
- """
27
- And an environment variable "GTD_QUALITYREVIEWS" set to ""
28
- And a file "src/flags/index.ts" with:
29
- """
30
- export const FLAGS = [
31
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
32
- { name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
33
- ] as const
34
- """
35
- And a file "src/calc.ts" with:
36
- """
37
- export const on = process.env.GTD_FLAG_LIVE !== "0"
38
- """
39
- And the working tree is committed as "feat: registry"
40
- And step "cleanup.removing" writes "src/flags/index.ts" with:
41
- """
42
- export const FLAGS = [
43
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
44
- ] as const
45
- """
46
- And step "cleanup.removing" writes "src/calc.ts" with:
47
- """
48
- export const on = true
49
- """
50
- And step "build.health.check" changes nothing
51
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
52
- """
53
- # Review: abc1234
54
-
55
- <!-- base: 0000000 -->
56
-
57
- ## calc
58
-
59
- - [ ] ./src/calc.ts#1-1
60
- flag removed
61
- """
62
- And step "build.review.closing" runs its script
63
-
64
- Scenario: removing the entry and the off path runs health, review and closing to idle
65
- When gtd starts workflow "cleanup" with "--var flag=live"
66
- And the process is driven
67
- Then the process rests at "build.review.await-review"
68
- Given a file ".gtd/REVIEW.md" with:
69
- """
70
- # Review: abc1234
71
-
72
- <!-- base: 0000000 -->
73
-
74
- ## calc
75
-
76
- - [x] ./src/calc.ts#1-1
77
- flag removed
78
- """
79
- When gtd lands
80
- And the process is driven
81
- Then the process rests at "idle"
82
- And "src/flags/index.ts" does not contain "live"
83
- And "src/calc.ts" does not contain "GTD_FLAG_LIVE"
84
- And the commit subjects end with:
85
- """
86
- gtd(human): cleanup.removing
87
- gtd(agent): cleanup.removing → build.health.check
88
- gtd(check): build.health.check → build.review.reviewing
89
- gtd(agent): build.review.reviewing → build.review.await-review
90
- gtd(human): build.review.await-review → build.review.closing
91
- gtd(check): build.review.closing → idle
92
- """
93
- And the commit "gtd(human): cleanup.removing" has a body containing "Gtd-Workflow: cleanup"
94
- And the commit "gtd(human): cleanup.removing" has a body containing "Gtd-Var: flag=live"
@@ -1,315 +0,0 @@
1
- Feature: cleanup removes a default-on release flag and keeps its flag-on path
2
-
3
- `gtd --workflow cleanup --var flag=<name>` has an agent delete the registry
4
- entry and the off path; checks refuse a surviving entry or env-var reference,
5
- then the shared health loop and review run; the same checks re-run after every later agent turn. A review note ends the process.
6
-
7
- Background:
8
- Given the shipped workflows, as gtd install scaffolds them
9
- And a gtd config with:
10
- """
11
- export {
12
- feature as default,
13
- feature,
14
- defaults,
15
- envDefaults,
16
- summary,
17
- steering,
18
- skills,
19
- access,
20
- } from "@pmelab/gtd/workflows/feature"
21
- import { cleanup } from "@pmelab/gtd/workflows"
22
- export { cleanup }
23
- """
24
- And an environment variable "GTD_QUALITYREVIEWS" set to ""
25
- And a file "src/flags/index.ts" with:
26
- """
27
- export const FLAGS = [
28
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
29
- { name: "ops1", owner: "c", expiry: "2027-03-01", kind: "ops" },
30
- { name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
31
- ] as const
32
- """
33
- And a file "src/calc.ts" with:
34
- """
35
- export const on = process.env.GTD_FLAG_LIVE !== "0"
36
- """
37
- And the working tree is committed as "feat: registry"
38
-
39
- Scenario: a turn leaving the registry entry is refused
40
- Given step "cleanup.removing" writes "src/calc.ts" with:
41
- """
42
- export const on = true
43
- """
44
- When gtd starts workflow "cleanup" with "--var flag=live"
45
- Then driving the process is refused with "src/flags/index.ts still declares flag \"live\""
46
-
47
- Scenario: a turn leaving the env var in a shipped source is refused naming path:line
48
- Given step "cleanup.removing" writes "src/flags/index.ts" with:
49
- """
50
- export const FLAGS = [
51
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
52
- ] as const
53
- """
54
- When gtd starts workflow "cleanup" with "--var flag=live"
55
- Then driving the process is refused with "src/calc.ts:1 still names GTD_FLAG_LIVE"
56
-
57
- Scenario: the same env var in a test file is allowed
58
- Given a file "src/calc.test.ts" with:
59
- """
60
- process.env.GTD_FLAG_LIVE = "0"
61
- """
62
- And the working tree is committed as "test: pin kill switch"
63
- And step "cleanup.removing" writes "src/flags/index.ts" with:
64
- """
65
- export const FLAGS = [
66
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
67
- ] as const
68
- """
69
- And step "cleanup.removing" writes "src/calc.ts" with:
70
- """
71
- export const on = true
72
- """
73
- And step "build.health.check" changes nothing
74
- When gtd starts workflow "cleanup" with "--var flag=live"
75
- And the process is driven
76
- Then the process rests at "build.review.reviewing"
77
-
78
- @inmem
79
- Scenario: gtd door cleanup starts the cleanup of its flag argument and reaches the review
80
- Given step "cleanup.removing" writes "src/flags/index.ts" with:
81
- """
82
- export const FLAGS = [
83
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
84
- ] as const
85
- """
86
- And step "cleanup.removing" writes "src/calc.ts" with:
87
- """
88
- export const on = true
89
- """
90
- And step "build.health.check" changes nothing
91
- When gtd opens door "cleanup" with "live"
92
- And the process is driven
93
- Then the process rests at "build.review.reviewing"
94
-
95
- @inmem
96
- Scenario: gtd door cleanup with no argument is refused naming the flag
97
- Then opening door "cleanup" is refused with "usage: gtd door cleanup <flag>"
98
-
99
- @inmem
100
- Scenario: a fix after a red suite that restores the registry entry is refused
101
- Given step "cleanup.removing" writes "src/flags/index.ts" with:
102
- """
103
- export const FLAGS = [
104
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
105
- ] as const
106
- """
107
- And step "cleanup.removing" writes "src/calc.ts" with:
108
- """
109
- export const on = true
110
- """
111
- When gtd starts workflow "cleanup" with "--var flag=live"
112
- And the process is driven
113
- Then the process rests at "build.health.check"
114
-
115
- Given a file ".gtd/FEEDBACK.md" with:
116
- """
117
- 1 failing
118
- """
119
- When gtd lands
120
- Then the process rests at "build.fix"
121
-
122
- Given step "build.fix" writes "src/flags/index.ts" with:
123
- """
124
- export const FLAGS = [
125
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
126
- { name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
127
- ] as const
128
- """
129
- Then driving the process is refused with "still declares flag \"live\""
130
-
131
- @inmem
132
- Scenario: a fix after a red suite that re-adds the env var to a shipped source is refused
133
- Given step "cleanup.removing" writes "src/flags/index.ts" with:
134
- """
135
- export const FLAGS = [
136
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
137
- ] as const
138
- """
139
- And step "cleanup.removing" writes "src/calc.ts" with:
140
- """
141
- export const on = true
142
- """
143
- When gtd starts workflow "cleanup" with "--var flag=live"
144
- And the process is driven
145
- Then the process rests at "build.health.check"
146
-
147
- Given a file ".gtd/FEEDBACK.md" with:
148
- """
149
- 1 failing
150
- """
151
- When gtd lands
152
- Then the process rests at "build.fix"
153
-
154
- Given step "build.fix" writes "src/calc.ts" with:
155
- """
156
- export const on = process.env.GTD_FLAG_LIVE !== "0"
157
- """
158
- Then driving the process is refused with "src/calc.ts:1 still names GTD_FLAG_LIVE"
159
-
160
- @inmem
161
- Scenario: a fix after a red suite that edits another file only reaches the review
162
- Given step "cleanup.removing" writes "src/flags/index.ts" with:
163
- """
164
- export const FLAGS = [
165
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
166
- ] as const
167
- """
168
- And step "cleanup.removing" writes "src/calc.ts" with:
169
- """
170
- export const on = true
171
- """
172
- When gtd starts workflow "cleanup" with "--var flag=live"
173
- And the process is driven
174
- Then the process rests at "build.health.check"
175
-
176
- Given a file ".gtd/FEEDBACK.md" with:
177
- """
178
- 1 failing
179
- """
180
- When gtd lands
181
- Then the process rests at "build.fix"
182
-
183
- Given step "build.fix" writes "src/other.ts" with:
184
- """
185
- export const other = 1
186
- """
187
- And step "build.health.check" changes nothing
188
- When the process is driven
189
- Then the process rests at "build.review.reviewing"
190
-
191
- @inmem
192
- Scenario: a risk-fix turn after the review that restores the registry entry is refused
193
- Given step "cleanup.removing" writes "src/flags/index.ts" with:
194
- """
195
- export const FLAGS = [
196
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
197
- ] as const
198
- """
199
- And step "cleanup.removing" writes "src/calc.ts" with:
200
- """
201
- export const on = true
202
- """
203
- And step "build.health.check" changes nothing
204
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
205
- """
206
- # Review: abc1234
207
-
208
- <!-- base: 0000000 -->
209
-
210
- ## calc
211
-
212
- - [ ] ./src/calc.ts#1-1
213
- Risk: leaks
214
- """
215
- And step "build.review.fix.risks.fixing" writes "src/flags/index.ts" with:
216
- """
217
- export const FLAGS = [
218
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
219
- { name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
220
- ] as const
221
- """
222
- When gtd starts workflow "cleanup" with "--var flag=live"
223
- Then driving the process is refused with "still declares flag \"live\""
224
-
225
- @inmem
226
- Scenario: the human's review sign-off may restore the registry entry
227
- Given step "cleanup.removing" writes "src/flags/index.ts" with:
228
- """
229
- export const FLAGS = [
230
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
231
- ] as const
232
- """
233
- And step "cleanup.removing" writes "src/calc.ts" with:
234
- """
235
- export const on = true
236
- """
237
- And step "build.health.check" changes nothing
238
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
239
- """
240
- # Review: abc1234
241
-
242
- <!-- base: 0000000 -->
243
-
244
- ## calc
245
-
246
- - [ ] ./src/calc.ts#1-1
247
- fine
248
- """
249
- When gtd starts workflow "cleanup" with "--var flag=live"
250
- And the process is driven
251
- Then the process rests at "build.review.await-review"
252
-
253
- Given a file "src/flags/index.ts" with:
254
- """
255
- export const FLAGS = [
256
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
257
- { name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
258
- ] as const
259
- """
260
- When gtd lands
261
- Then the process rests at "build.health.check"
262
-
263
- Scenario: a review note ends the process leaving the review for fix
264
- Given step "cleanup.removing" writes "src/flags/index.ts" with:
265
- """
266
- export const FLAGS = [
267
- { name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
268
- ] as const
269
- """
270
- And step "cleanup.removing" writes "src/calc.ts" with:
271
- """
272
- export const on = true
273
- """
274
- And step "build.health.check" changes nothing
275
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
276
- """
277
- # Review: abc1234
278
-
279
- <!-- base: 0000000 -->
280
-
281
- ## calc
282
-
283
- - [ ] ./src/calc.ts#1-1
284
- flag removed
285
- """
286
- When gtd starts workflow "cleanup" with "--var flag=live"
287
- And the process is driven
288
- Then the process rests at "build.review.await-review"
289
-
290
- Given a file ".gtd/REVIEW.md" with:
291
- """
292
- # Review: abc1234
293
-
294
- <!-- base: 0000000 -->
295
-
296
- ## calc
297
-
298
- - [ ] ./src/calc.ts#1-1
299
- flag removed — also drop the constant
300
- """
301
- And step "build.review.handing-off" runs its script
302
- When gtd lands
303
- And the process is driven
304
- Then the process rests at "idle"
305
- And ".gtd/REVIEW.md" contains "also drop the constant"
306
- And ".gtd/REVIEW.orig.md" contains "flag removed"
307
-
308
- Scenario: a default-off flag is refused at start
309
- Then starting workflow "cleanup" with "--var flag=alpha" is refused with "flag \"alpha\" is not default-on — roll it out first"
310
-
311
- Scenario: an unknown flag is refused at start
312
- Then starting workflow "cleanup" with "--var flag=nope" is refused with "no flag \"nope\" in src/flags/index.ts"
313
-
314
- Scenario: a non-release flag is refused at start
315
- Then starting workflow "cleanup" with "--var flag=ops1" is refused with "flag \"ops1\" is ops, not release"