@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,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:"