@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,297 +0,0 @@
1
- @inmem
2
- Feature: the naive pass and seam judge decide how a feature is built
3
-
4
- After design a naive pass is set aside under a kept ref, the judge reads its
5
- diff, and the process either applies the pass as the implementation,
6
- refactors the seam first behind a human approval, or retries the naive pass.
7
-
8
- Background:
9
- Given the shipped workflows, as gtd install scaffolds them
10
- And the gtd config ends with:
11
- """
12
- export const config = {
13
- skills: {
14
- implement: ["my-tdd", "my-runbook"],
15
- },
16
- }
17
- """
18
- And an environment variable "GTD_QUALITYREVIEWS" set to ""
19
- And a file "src/calc.ts" with:
20
- """
21
- export const add = (a: number, b: number) => a + b
22
- """
23
- And a file "src/calc.test.ts" with:
24
- """
25
- import { expect, it } from "vitest"
26
- it("adds", () => expect(1 + 1).toBe(2))
27
- """
28
- And the working tree is committed as "feat: add calculator"
29
- And a file "TODO.md" with:
30
- """
31
- # Add subtract
32
-
33
- subtract(a, b) returns the difference.
34
- """
35
- And step "unwind" changes nothing
36
- And step "start-gate.check" changes nothing
37
- And step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
38
- """
39
- # Requirements
40
-
41
- ## Concerns
42
-
43
- ### Subtract
44
-
45
- - `subtract(a, b)` returns `a - b`.
46
-
47
- ## Impact
48
-
49
- - the greeting module
50
-
51
- ## Release Flag
52
-
53
- new
54
-
55
- ## Acceptance Criteria
56
-
57
- - AC-1: the change behaves as described.
58
- """
59
- And step "design.gate.answer" changes nothing
60
-
61
- Scenario: a land judgment applies the naive pass with no seam gate, refactor or build turn
62
- Given step "seam.check" changes nothing
63
- And step "seam.naive" writes "src/acceptance.test.ts" with:
64
- """
65
- it("[AC-1] holds", () => {})
66
- """
67
- And step "seam.naive" writes "src/calc.ts" with:
68
- """
69
- export const add = (a: number, b: number) => a + b
70
- export const subtract = (a: number, b: number) => a - b
71
- """
72
- And judge step "seam.judge" answers:
73
- """
74
- [{"id":"shape","answer":"land","p":0.9}]
75
- """
76
- When the process is driven
77
- Then the process rests at "implement.applying"
78
- And the last commit body contains "Gtd-Judge:"
79
- And the commit subjects end with:
80
- """
81
- chore: initial commit
82
- feat: add calculator
83
- gtd(human): idle → unwind
84
- gtd(check): unwind → start-gate.check
85
- gtd(check): start-gate.check → design.triage
86
- gtd(agent): design.triage → design.gate.answer
87
- gtd(human): design.gate.answer → seam.naive
88
- gtd(agent): seam.naive → seam.check
89
- gtd(check): seam.check → seam.judge
90
- gtd(judge): seam.judge → implement.applying
91
- """
92
-
93
- Scenario: a naive pass that no longer applies is built fresh, with the implement scope's skills
94
- Given step "seam.naive" writes "src/acceptance.test.ts" with:
95
- """
96
- it("[AC-1] holds", () => {})
97
- """
98
- And step "seam.naive" writes "src/subtract.ts" with:
99
- """
100
- export const subtract = (a: number, b: number) => a - b
101
- """
102
- And step "seam.check" writes "src/subtract.ts" with:
103
- """
104
- export const subtract = (a: number, b: number) => b - a
105
- """
106
- And step "implement.applying" runs its script
107
- When the process is driven
108
- Then the process rests at "implement.building"
109
- And the resting step's content contains "my-tdd, my-runbook"
110
- And the resting step's content contains "git show"
111
- And ".gtd/FEEDBACK.md" contains "could not apply the naive pass"
112
- And "src/subtract.ts" contains "b - a"
113
- And the commit subjects end with:
114
- """
115
- gtd(check): seam.check → implement.applying
116
- gtd(check): implement.applying → implement.building
117
- """
118
-
119
- Scenario: the naive pass lands as a marker commit and its turn stays off the branch
120
- Given step "seam.check" changes nothing
121
- And step "seam.naive" writes "src/acceptance.test.ts" with:
122
- """
123
- it("[AC-1] holds", () => {})
124
- """
125
- And step "seam.naive" writes "src/calc.ts" with:
126
- """
127
- export const add = (a: number, b: number) => a + b
128
- export const subtract = (a: number, b: number) => a - b
129
- """
130
- When the process is driven
131
- Then the process rests at "seam.judge"
132
- And the commit subjects end with:
133
- """
134
- gtd(agent): seam.naive → seam.check
135
- gtd(check): seam.check → seam.judge
136
- """
137
- And the commit "gtd(agent): seam.naive → seam.check" has a body containing "Gtd-Kept:"
138
- And "src/calc.ts" does not contain "subtract"
139
-
140
- Scenario: the implementation is the applied naive pass, a green check, then the requirements are closed out
141
- Given step "seam.check" changes nothing
142
- And step "seam.naive" writes "src/acceptance.test.ts" with:
143
- """
144
- it("[AC-1] holds", () => {})
145
- """
146
- And step "seam.naive" writes "src/calc.ts" with:
147
- """
148
- export const add = (a: number, b: number) => a + b
149
- export const subtract = (a: number, b: number) => a - b
150
- """
151
- And judge step "seam.judge" answers:
152
- """
153
- [{"id":"shape","answer":"land","p":0.9}]
154
- """
155
- And step "implement.applying" runs its script
156
- And step "implement.health.check" changes nothing
157
- And step "implement.closing" runs its script
158
- When the process is driven
159
- Then the process rests at "build.review.reviewing"
160
- And "src/calc.ts" contains "subtract"
161
- And the commit subjects end with:
162
- """
163
- gtd(judge): seam.judge → implement.applying
164
- gtd(check): implement.applying → implement.health.check
165
- gtd(check): implement.health.check → implement.closing
166
- gtd(check): implement.closing → build.review.reviewing
167
- """
168
- And ".gtd/REQUIREMENTS.md" does not exist
169
-
170
- Scenario: a naive pass modifying a test file and adding a new one skips the judge
171
- Given step "seam.check" changes nothing
172
- And step "seam.naive" writes "src/acceptance.test.ts" with:
173
- """
174
- it("[AC-1] holds", () => {})
175
- """
176
- And step "seam.naive" writes "src/subtract.ts" with:
177
- """
178
- export const subtract = (a: number, b: number) => a - b
179
- """
180
- And step "seam.naive" writes "src/calc.test.ts" with:
181
- """
182
- import { expect, it } from "vitest"
183
- it("adds", () => expect(2 + 2).toBe(4))
184
- """
185
- When the process is driven
186
- Then the process rests at "implement.applying"
187
- And the commit subjects end with:
188
- """
189
- gtd(human): design.gate.answer → seam.naive
190
- gtd(agent): seam.naive → seam.check
191
- gtd(check): seam.check → implement.applying
192
- """
193
-
194
- Scenario: a naive pass adding a glob-named file does not hide a modified sibling
195
- Given step "seam.check" changes nothing
196
- And step "seam.naive" writes "src/acceptance.test.ts" with:
197
- """
198
- it("[AC-1] holds", () => {})
199
- """
200
- And step "seam.naive" writes "src/calc*.ts" with:
201
- """
202
- export const subtract = (a: number, b: number) => a - b
203
- """
204
- And step "seam.naive" writes "src/calc.ts" with:
205
- """
206
- export const add = (a: number, b: number) => a + b
207
- export const subtract = (a: number, b: number) => a - b
208
- """
209
- And judge step "seam.judge" answers:
210
- """
211
- [{"id":"shape","answer":"reject","p":0.9}]
212
- """
213
- When the process is driven
214
- Then the process rests at "seam.steer"
215
- And the resting step's content contains "src/calc.ts"
216
- And the resting step's content does not contain "src/calc*.ts"
217
-
218
- Scenario: an edit at the steer gate runs the naive pass again with a fresh retry budget
219
- Given step "seam.check" changes nothing
220
- And step "seam.naive" writes "src/acceptance.test.ts" with:
221
- """
222
- it("[AC-1] holds", () => {})
223
- """
224
- And step "seam.naive" writes "src/calc.ts" with:
225
- """
226
- export const add = (a: number, b: number) => b + a
227
- """
228
- And judge step "seam.judge" answers:
229
- """
230
- [{"id":"shape","answer":"reject","p":0.9}]
231
- """
232
- When the process is driven
233
- Then the process rests at "seam.steer"
234
- Given a file ".gtd/REQUIREMENTS.md" with:
235
- """
236
- # Requirements
237
-
238
- ## Concerns
239
-
240
- ### Subtract
241
-
242
- - `subtract(a, b)` returns `a - b`, in a new module.
243
-
244
- ## Impact
245
-
246
- - the greeting module
247
-
248
- ## Release Flag
249
-
250
- new
251
-
252
- ## Acceptance Criteria
253
-
254
- - AC-1: the change behaves as described.
255
- """
256
- When gtd lands
257
- Then the process rests at "seam.naive"
258
- And the resting step's content does not contain "was rejected"
259
- When the process is driven
260
- Then the process rests at "seam.steer"
261
- And the commit subjects end with:
262
- """
263
- gtd(human): seam.steer → seam.naive
264
- gtd(agent): seam.naive → seam.check
265
- gtd(check): seam.check → seam.judge
266
- gtd(judge): seam.judge → seam.naive
267
- gtd(agent): seam.naive → seam.check
268
- gtd(check): seam.check → seam.judge
269
- gtd(judge): seam.judge → seam.naive
270
- gtd(agent): seam.naive → seam.check
271
- gtd(check): seam.check → seam.judge
272
- gtd(judge): seam.judge → seam.steer
273
- """
274
-
275
- Scenario: a clean landing at the steer gate overrules and applies the pass, with no seam gate and no refactor
276
- Given step "seam.check" changes nothing
277
- And step "seam.naive" writes "src/acceptance.test.ts" with:
278
- """
279
- it("[AC-1] holds", () => {})
280
- """
281
- And step "seam.naive" writes "src/calc.ts" with:
282
- """
283
- export const add = (a: number, b: number) => b + a
284
- """
285
- And judge step "seam.judge" answers:
286
- """
287
- [{"id":"shape","answer":"reject","p":0.9}]
288
- """
289
- When the process is driven
290
- Then the process rests at "seam.steer"
291
- When gtd lands
292
- Then the process rests at "implement.applying"
293
- And the commit subjects end with:
294
- """
295
- gtd(judge): seam.judge → seam.steer
296
- gtd(human): seam.steer → implement.applying
297
- """