@pmelab/gtd 39.0.0 → 40.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 (32) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +54 -53
  3. package/dist/chunks/{reserved-B6tTYjeb.mjs → reserved-Qt5FM6Ia.mjs} +7 -5
  4. package/dist/chunks/{tail-_CZTP7Hu.mjs → tail-tAHx_AHe.mjs} +1 -1
  5. package/dist/workflows/cleanup.mjs +2 -2
  6. package/dist/workflows/feature.mjs +98 -37
  7. package/dist/workflows/fix.mjs +2 -2
  8. package/dist/workflows/review.mjs +2 -2
  9. package/dist/workflows/rollout.mjs +1 -1
  10. package/dist/workflows.mjs +103 -40
  11. package/package.json +1 -1
  12. package/skills/authoring/SKILL.md +3 -2
  13. package/src/workflows/feature/coverage.feature +5 -5
  14. package/src/workflows/feature/criteria.test.ts +20 -1
  15. package/src/workflows/feature/criteria.ts +24 -0
  16. package/src/workflows/feature/fast-path.feature +4 -4
  17. package/src/workflows/feature/feature.ts +82 -22
  18. package/src/workflows/feature/flag-mode.feature +2 -2
  19. package/src/workflows/feature/one-step-land.feature +4 -4
  20. package/src/workflows/feature/planning.ts +3 -2
  21. package/src/workflows/feature/quality-unresolved.feature +6 -6
  22. package/src/workflows/feature/refactor-absorbs.feature +3 -3
  23. package/src/workflows/feature/refactor-first.feature +5 -5
  24. package/src/workflows/feature/refactor-rebuild.feature +2 -2
  25. package/src/workflows/feature/refactor-review.feature +8 -8
  26. package/src/workflows/feature/review-gate.feature +271 -0
  27. package/src/workflows/feature/seam-rejection.feature +4 -4
  28. package/src/workflows/feature/seam.feature +2 -2
  29. package/src/workflows/feature/seam.ts +17 -7
  30. package/src/workflows/feature/slicing.feature +63 -4
  31. package/src/workflows/shared/text.ts +7 -5
  32. package/src/workflows/review/review-door.feature +0 -121
@@ -92,14 +92,14 @@ What each change does next (then run \`gtd land\`):
92
92
 
93
93
  export const qualityUnresolvedMessage = (): string =>
94
94
  `The quality lap's fix turns hit their cap and \`.gtd/QUALITY.md\` still
95
- holds findings. Nothing reviews the change after this, so the process
96
- will not end with them open.
95
+ holds findings. Nothing after this fixes them, so the process will not
96
+ go on with them open.
97
97
 
98
98
  Fix what matters by hand, then delete or empty \`.gtd/QUALITY.md\` —
99
99
  dropping a finding is your call to make.
100
100
 
101
101
  What each change does next (then run \`gtd land\`):
102
- - **Delete or empty \`.gtd/QUALITY.md\`** — the suite runs on your edits, then the process ends (**idle**).
102
+ - **Delete or empty \`.gtd/QUALITY.md\`** — the suite runs on your edits, then the next slice is built, or after the last one you review the change (**build.review.reviewing**).
103
103
  - **Anything else** — rests here again.
104
104
  `
105
105
 
@@ -144,8 +144,10 @@ reword a criterion in place, append a new one with the next unused
144
144
  number, delete a dropped one — never renumber, never reuse an ID. When
145
145
  the file holds no list (a review loop-back rewrites it), recover the
146
146
  last settled one from history (\`git log -p -- .gtd/REQUIREMENTS.md\`)
147
- and carry its IDs over. Landing is refused while a criterion has no ID or
148
- two share one.
147
+ and carry its IDs over: after a review a built criterion keeps its ID,
148
+ reworded in place when the review changes its behaviour, and new
149
+ behaviour gets a new ID. Landing is refused while a criterion has no ID
150
+ or two share one.
149
151
  `
150
152
 
151
153
  const riskTierBlock = `
@@ -1,121 +0,0 @@
1
- @inmem
2
- Feature: human review is the review door's, never the feature workflow's
3
-
4
- A feature process ends once its last slice lands: the quality lap is its
5
- last look at the change, and no human review rest follows it. Human review
6
- runs only when someone opens the `review` door.
7
-
8
- Background:
9
- Given the shipped workflows, as gtd install scaffolds them
10
- And an environment variable "GTD_QUALITYREVIEWS" set to ""
11
- And an environment variable "GTD_FLAGMODE" set to "false"
12
- And a file "src/calc.ts" with:
13
- """
14
- export const add = (a: number, b: number) => a + b
15
- """
16
- And the working tree is committed as "feat: add calculator"
17
- And a file "TODO.md" with:
18
- """
19
- # Add subtract
20
-
21
- subtract(a, b) returns the difference.
22
- """
23
- And step "unwind" changes nothing
24
- And step "start-gate.check" changes nothing
25
- And step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
26
- """
27
- # Requirements
28
-
29
- ## Concerns
30
-
31
- ### Subtract
32
-
33
- - `subtract(a, b)` returns `a - b`.
34
-
35
- ## Acceptance Criteria
36
-
37
- - AC-1: subtract(a, b) returns a - b.
38
- """
39
- And step "design.gate.answer" changes nothing
40
- And step "seam.naive" writes "src/calc.test.ts" with:
41
- """
42
- it("[AC-1] subtracts", () => {})
43
- """
44
- And step "seam.naive" writes "src/calc.ts" with:
45
- """
46
- export const add = (a: number, b: number) => a + b
47
- export const subtract = (a: number, b: number) => a - b
48
- """
49
- And step "seam.check" changes nothing
50
- And step "implement.applying" runs its script
51
- And step "implement.health.check" changes nothing
52
- And step "implement.closing" runs its script
53
- And judge step "implement.coverage" answers:
54
- """
55
- [{"id":"AC-1","answer":"yes","p":0.9}]
56
- """
57
-
58
- Scenario: a feature process ends at idle with no review rest
59
- When the process is driven
60
- Then the process rests at "idle"
61
- And "src/calc.ts" contains "subtract"
62
- And ".gtd/REVIEW.md" does not exist
63
- And the commit subjects end with:
64
- """
65
- gtd(human): design.gate.answer → seam.naive
66
- gtd(agent): seam.naive → seam.check
67
- gtd(check): seam.check → implement.applying
68
- gtd(check): implement.applying → implement.health.check
69
- gtd(check): implement.health.check → implement.coverage
70
- gtd(judge): implement.coverage → implement.closing
71
- gtd(check): implement.closing → idle
72
- """
73
-
74
- Scenario: the review door still runs human review over the finished feature
75
- When the process is driven
76
- Then the process rests at "idle"
77
-
78
- Given step "review-gate.check" changes nothing
79
- And step "build.health.check" changes nothing
80
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
81
- """
82
- # Review: abc1234
83
-
84
- <!-- base: 0000000 -->
85
-
86
- ## calc
87
-
88
- - [ ] ./src/calc.ts#2-2
89
- new subtract function
90
- """
91
- When gtd opens door "review" with "HEAD~11"
92
- And the process is driven
93
- Then the process rests at "build.review.await-review"
94
- And the resting step's content contains the hash of the commit "feat: add calculator"
95
-
96
- Given a file ".gtd/REVIEW.md" with:
97
- """
98
- # Review: abc1234
99
-
100
- <!-- base: 0000000 -->
101
-
102
- ## calc
103
-
104
- - [x] ./src/calc.ts#2-2
105
- new subtract function
106
- """
107
- And step "build.review.closing" runs its script
108
- When gtd lands
109
- And the process is driven
110
- Then the process rests at "idle"
111
- And ".gtd/REVIEW.md" does not exist
112
- And the commit subjects end with:
113
- """
114
- gtd(check): implement.closing → idle
115
- gtd(human): review-gate.check
116
- gtd(check): review-gate.check → build.health.check
117
- gtd(check): build.health.check → build.review.reviewing
118
- gtd(agent): build.review.reviewing → build.review.await-review
119
- gtd(human): build.review.await-review → build.review.closing
120
- gtd(check): build.review.closing → idle
121
- """