@pmelab/gtd 32.1.0 → 34.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.
Files changed (36) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +66 -53
  3. package/dist/chunks/{reserved-2fV0mj14.mjs → reserved-BcJgt5_R.mjs} +79 -12
  4. package/dist/chunks/{tail-BynhCfuv.mjs → tail-CM_fa93v.mjs} +1 -1
  5. package/dist/testkit.mjs +2 -2
  6. package/dist/workflows/cleanup.mjs +2 -2
  7. package/dist/workflows/feature.mjs +174 -40
  8. package/dist/workflows/fix.mjs +2 -2
  9. package/dist/workflows/review.mjs +2 -2
  10. package/dist/workflows/rollout.mjs +1 -1
  11. package/dist/workflows.mjs +249 -48
  12. package/package.json +1 -1
  13. package/skills/authoring/SKILL.md +2 -2
  14. package/src/testkit/steps.ts +4 -0
  15. package/src/workflows/feature/acceptance-criteria.feature +8 -0
  16. package/src/workflows/feature/fast-path.feature +11 -35
  17. package/src/workflows/feature/feature.test.ts +9 -100
  18. package/src/workflows/feature/feature.ts +29 -16
  19. package/src/workflows/feature/flag-mode.feature +2 -91
  20. package/src/workflows/feature/naive-acceptance.feature +140 -0
  21. package/src/workflows/feature/one-step-land.feature +11 -34
  22. package/src/workflows/feature/quality-unresolved.feature +96 -0
  23. package/src/workflows/feature/refactor-absorbs.feature +17 -25
  24. package/src/workflows/feature/refactor-first.feature +11 -35
  25. package/src/workflows/feature/refactor-lens-models.feature +6 -1
  26. package/src/workflows/feature/refactor-review.feature +67 -360
  27. package/src/workflows/feature/refactor.ts +4 -3
  28. package/src/workflows/feature/risk-tier.feature +10 -0
  29. package/src/workflows/feature/seam-rejection.feature +20 -37
  30. package/src/workflows/feature/seam.feature +66 -113
  31. package/src/workflows/feature/seam.test.ts +173 -3
  32. package/src/workflows/feature/seam.ts +196 -31
  33. package/src/workflows/review/review-door.feature +108 -0
  34. package/src/workflows/shared/tail.ts +2 -2
  35. package/src/workflows/shared/text.test.ts +40 -0
  36. package/src/workflows/shared/text.ts +110 -16
@@ -1,16 +1,16 @@
1
1
  # One SDLC path per file, so a changed path reds exactly one fixture — do not merge.
2
2
  @inmem
3
- Feature: a refactor that carried the whole feature still gets a feature review
3
+ Feature: a refactor that carried the whole feature still gets a quality lap over all of it
4
4
 
5
5
  With GTD_FLAG_RISK_TIER off, a refactor-first
6
6
  refactor can land everything the requirements ask for. The feature slice's
7
7
  implement turn then has nothing to author: its empty turn completes the
8
- step, and with no code changed since the refactor the feature review covers
9
- the whole change, refactor included.
8
+ step, and with no code changed since the refactor the feature slice's
9
+ quality lap covers the whole change, refactor included.
10
10
 
11
11
  Background:
12
12
  Given the shipped workflows, as gtd install scaffolds them
13
- And an environment variable "GTD_QUALITYREVIEWS" set to ""
13
+ And an environment variable "GTD_QUALITYREVIEWS" set to "correctness"
14
14
  And an environment variable "GTD_REFACTORQUALITYREVIEWS" set to ""
15
15
  And an environment variable "GTD_FLAG_RISK_TIER" set to "0"
16
16
  And a file "src/calc.ts" with:
@@ -42,8 +42,13 @@ Feature: a refactor that carried the whole feature still gets a feature review
42
42
  """
43
43
  And step "design.gate.answer" changes nothing
44
44
 
45
- Scenario: an empty implement turn after a refactor that did it all reaches review and idle
46
- Given step "seam.naive" writes "src/calc.ts" with:
45
+ Scenario: an empty implement turn after a refactor that did it all reaches the quality lap and idle
46
+ Given step "seam.check" changes nothing
47
+ And step "seam.naive" writes "src/acceptance.test.ts" with:
48
+ """
49
+ it("[AC-1] holds", () => {})
50
+ """
51
+ And step "seam.naive" writes "src/calc.ts" with:
47
52
  """
48
53
  export const add = (a: number, b: number) => a + b
49
54
  export const subtract = (a: number, b: number) => a - b
@@ -89,25 +94,14 @@ Feature: a refactor that carried the whole feature still gets a feature review
89
94
  And step "implement.building" changes nothing
90
95
  And step "implement.health.check" changes nothing
91
96
  And step "implement.closing" runs its script
92
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
93
- """
94
- # Review: abc1234
95
-
96
- <!-- base: 0000000 -->
97
-
98
- ## calc
99
-
100
- - [ ] ./src/calc.ts#1-2
101
- subtract next to add
102
- """
103
97
  When gtd lands
104
98
  And the process is driven
105
- Then the process rests at "build.review.await-review"
99
+ Then the process rests at "build.quality.correctness.reviewing"
100
+ And the resting step's content contains the hash of the commit "feat: add calculator"
106
101
  And ".gtd/REQUIREMENTS.md" does not exist
107
102
 
108
- Given step "build.review.closing" runs its script
109
- When gtd lands
110
- And the process is driven
103
+ Given step "build.quality.correctness.reviewing" changes nothing
104
+ When the process is driven
111
105
  Then the process rests at "idle"
112
106
  And "src/calc.ts" contains "subtract"
113
107
  And the commit subjects end with:
@@ -116,10 +110,8 @@ Feature: a refactor that carried the whole feature still gets a feature review
116
110
  gtd(check): refactor.build.review.closing → implement.building
117
111
  gtd(agent): implement.building → implement.health.check
118
112
  gtd(check): implement.health.check → implement.closing
119
- gtd(check): implement.closing → build.review.reviewing
120
- gtd(agent): build.review.reviewing → build.review.await-review
121
- gtd(human): build.review.await-review → build.review.closing
122
- gtd(check): build.review.closing → idle
113
+ gtd(check): implement.closing → build.quality.correctness.reviewing
114
+ gtd(agent): build.quality.correctness.reviewing → idle
123
115
  """
124
116
  And the output lines of gtd "slices" start with:
125
117
  """
@@ -4,7 +4,7 @@ Feature: a refactor-first judgment walks one fixed path to idle
4
4
 
5
5
  With GTD_FLAG_RISK_TIER off, a naive pass touching
6
6
  an existing non-allowlisted file is ruled refactor-first, is refactored and
7
- that refactor reviewed, and only then implemented. The flags are
7
+ that refactor reviewed, and only then implemented, with no feature review. The flags are
8
8
  pinned so the per-flag test runs never move it off its path.
9
9
 
10
10
  Background:
@@ -42,7 +42,12 @@ Feature: a refactor-first judgment walks one fixed path to idle
42
42
  And step "design.gate.answer" changes nothing
43
43
 
44
44
  Scenario: a refactor-first judgment runs refactor, its review, implement and review to idle
45
- Given step "seam.naive" writes "src/calc.ts" with:
45
+ Given step "seam.check" changes nothing
46
+ And step "seam.naive" writes "src/acceptance.test.ts" with:
47
+ """
48
+ it("[AC-1] holds", () => {})
49
+ """
50
+ And step "seam.naive" writes "src/calc.ts" with:
46
51
  """
47
52
  export const add = (a: number, b: number) => a + b
48
53
  export const subtract = (a: number, b: number) => a - b
@@ -90,18 +95,6 @@ Feature: a refactor-first judgment walks one fixed path to idle
90
95
  - [x] ./src/calc.ts#1-2
91
96
  add built on the shared op
92
97
  """
93
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
94
- """
95
- # Review: abc1234
96
-
97
- <!-- base: 0000000 -->
98
-
99
- ## calc
100
-
101
- - [ ] ./src/calc.ts#1-3
102
- subtract built on the shared op
103
- """
104
- And step "build.review.closing" runs its script
105
98
  When gtd lands
106
99
  And the process is driven
107
100
  Then the process rests at "implement.building"
@@ -116,21 +109,6 @@ Feature: a refactor-first judgment walks one fixed path to idle
116
109
  And step "implement.health.check" changes nothing
117
110
  And step "implement.closing" runs its script
118
111
  When the process is driven
119
- Then the process rests at "build.review.await-review"
120
-
121
- Given a file ".gtd/REVIEW.md" with:
122
- """
123
- # Review: abc1234
124
-
125
- <!-- base: 0000000 -->
126
-
127
- ## calc
128
-
129
- - [x] ./src/calc.ts#1-3
130
- subtract built on the shared op
131
- """
132
- When gtd lands
133
- And the process is driven
134
112
  Then the process rests at "idle"
135
113
  And "src/calc.ts" contains "op(a, b, 1)"
136
114
  And "src/calc.ts" contains "subtract"
@@ -141,7 +119,8 @@ Feature: a refactor-first judgment walks one fixed path to idle
141
119
  gtd(check): start-gate.check → design.triage
142
120
  gtd(agent): design.triage → design.gate.answer
143
121
  gtd(human): design.gate.answer → seam.naive
144
- gtd(agent): seam.naive → seam.judge
122
+ gtd(agent): seam.naive → seam.check
123
+ gtd(check): seam.check → seam.judge
145
124
  gtd(judge): seam.judge → refactor.deriving
146
125
  gtd(check): refactor.deriving → refactor.building
147
126
  gtd(agent): refactor.building → refactor.health.check
@@ -152,13 +131,10 @@ Feature: a refactor-first judgment walks one fixed path to idle
152
131
  gtd(check): refactor.build.review.closing → implement.building
153
132
  gtd(agent): implement.building → implement.health.check
154
133
  gtd(check): implement.health.check → implement.closing
155
- gtd(check): implement.closing → build.review.reviewing
156
- gtd(agent): build.review.reviewing → build.review.await-review
157
- gtd(human): build.review.await-review → build.review.closing
158
- gtd(check): build.review.closing → idle
134
+ gtd(check): implement.closing → idle
159
135
  """
160
136
  And the commit "gtd(human): idle → unwind" has a body containing "Gtd-Var: flag_risk_tier=0"
161
- And the commit "gtd(agent): seam.naive → seam.judge" has a body containing "Gtd-Kept:"
137
+ And the commit "gtd(agent): seam.naive → seam.check" has a body containing "Gtd-Kept:"
162
138
  And the commit "gtd(judge): seam.judge → refactor.deriving" has a body containing "\"answer\":\"refactor-first\""
163
139
  And no commit body contains "Gtd-Approved:"
164
140
  And the output lines of gtd "slices" start with:
@@ -36,7 +36,12 @@ Feature: the refactor review's lenses take their model hints from refactorQualit
36
36
  And step "design.gate.answer" changes nothing
37
37
 
38
38
  Scenario: a refactor lens runs on its refactorQualityReviews hint, else its default
39
- Given step "seam.naive" writes "src/calc.ts" with:
39
+ Given step "seam.check" changes nothing
40
+ And step "seam.naive" writes "src/acceptance.test.ts" with:
41
+ """
42
+ it("[AC-1] holds", () => {})
43
+ """
44
+ And step "seam.naive" writes "src/calc.ts" with:
40
45
  """
41
46
  export const add = (a: number, b: number) => a + b
42
47
  export const subtract = (a: number, b: number) => a - b