@pmelab/gtd 52.0.0 → 53.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 (108) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +96 -131
  3. package/claude/hooks/drive.ts +0 -3
  4. package/claude/hooks/register.tsx +3 -68
  5. package/claude/hooks/ship.ts +85 -1595
  6. package/dist/chunks/{reserved-D0MKVFFa.mjs → reserved-CQ7amcKG.mjs} +87 -133
  7. package/dist/chunks/{review-ZzUQH1KZ.mjs → review-CNgN_V8T.mjs} +2 -2
  8. package/dist/chunks/{tail-I1-vVq0P.mjs → tail-JZ9PAOwp.mjs} +2 -14
  9. package/dist/chunks/{wire-BJuZWR3C.mjs → wire-C12dahrH.mjs} +2 -130
  10. package/dist/flows.mjs +1 -16
  11. package/dist/gtd.bundle.mjs +476 -982
  12. package/dist/testkit.mjs +58 -417
  13. package/dist/wire.mjs +2 -2
  14. package/dist/workflows/cleanup.mjs +2 -2
  15. package/dist/workflows/feature.mjs +159 -363
  16. package/dist/workflows/fix.mjs +2 -2
  17. package/dist/workflows/review.mjs +3 -3
  18. package/dist/workflows/rollout.mjs +1 -1
  19. package/dist/workflows.mjs +400 -675
  20. package/package.json +5 -4
  21. package/src/cli/Cli.test.ts +1 -86
  22. package/src/cli/Cli.ts +13 -133
  23. package/src/cli/Metrics.test.ts +21 -31
  24. package/src/cli/Metrics.ts +25 -36
  25. package/src/cli/Program.test.ts +1 -35
  26. package/src/cli/Program.ts +5 -64
  27. package/src/cli/ToolCommands.ts +0 -3
  28. package/src/edge/Edge.test.ts +20 -322
  29. package/src/edge/Edge.ts +10 -181
  30. package/src/edge/index.ts +0 -1
  31. package/src/flows/runtime.test.ts +0 -27
  32. package/src/flows/runtime.ts +1 -49
  33. package/src/install/Install.ts +15 -24
  34. package/src/replay/Replay.test.ts +0 -169
  35. package/src/replay/Replay.ts +4 -93
  36. package/src/replay/index.ts +0 -1
  37. package/src/testkit/Layers.ts +0 -1
  38. package/src/testkit/steps.ts +13 -0
  39. package/src/wire/BeatDocument.ts +2 -12
  40. package/src/wire/BeatStatus.ts +0 -3
  41. package/src/wire/WireSchema.test.ts +0 -18
  42. package/src/wire/index.ts +0 -2
  43. package/src/wire/types.ts +0 -7
  44. package/src/workflow/Workflow.ts +1 -9
  45. package/src/workflows/feature/acceptance-criteria.feature +159 -3
  46. package/src/workflows/feature/criteria.test.ts +23 -15
  47. package/src/workflows/feature/criteria.ts +72 -39
  48. package/src/workflows/feature/fast-path.feature +4 -0
  49. package/src/workflows/feature/feature.test.ts +6 -5
  50. package/src/workflows/feature/feature.ts +34 -118
  51. package/src/workflows/feature/flag-mode.feature +4 -0
  52. package/src/workflows/feature/hands-on-skip.feature +37 -65
  53. package/src/workflows/feature/index.ts +0 -1
  54. package/src/workflows/feature/lens-models.feature +4 -0
  55. package/src/workflows/feature/lens-review.feature +4 -0
  56. package/src/workflows/feature/naive-acceptance.feature +4 -0
  57. package/src/workflows/feature/one-step-land.feature +4 -4
  58. package/src/workflows/feature/planning.ts +2 -1
  59. package/src/workflows/feature/prototype-rounds.feature +5 -1
  60. package/src/workflows/feature/prototype.feature +11 -3
  61. package/src/workflows/feature/prototype.ts +18 -29
  62. package/src/workflows/feature/refactor-absorbs.feature +7 -8
  63. package/src/workflows/feature/refactor-first.feature +4 -5
  64. package/src/workflows/feature/refactor-lens-models.feature +4 -0
  65. package/src/workflows/feature/refactor-rebuild.feature +4 -6
  66. package/src/workflows/feature/refactor-review.feature +31 -11
  67. package/src/workflows/feature/refactor.ts +30 -64
  68. package/src/workflows/feature/review-answers.feature +4 -0
  69. package/src/workflows/feature/review-gate.feature +13 -1
  70. package/src/workflows/feature/reviewer-walkthrough.feature +4 -0
  71. package/src/workflows/feature/risk-tier.feature +32 -0
  72. package/src/workflows/feature/seam-rejection.feature +8 -4
  73. package/src/workflows/feature/seam.feature +8 -0
  74. package/src/workflows/feature/seam.test.ts +11 -28
  75. package/src/workflows/feature/seam.ts +52 -165
  76. package/src/workflows/feature/severity-budget.feature +4 -0
  77. package/src/workflows/feature/severity-sorted-review.feature +4 -0
  78. package/src/workflows/feature/standards.feature +4 -0
  79. package/src/workflows/feature/tier-pin.feature +4 -0
  80. package/src/workflows/index.ts +0 -1
  81. package/src/workflows/shared/lenses.ts +0 -13
  82. package/src/workflows/shared/options.test.ts +2 -11
  83. package/src/workflows/shared/options.ts +4 -21
  84. package/src/workflows/shared/review.test.ts +3 -3
  85. package/src/workflows/shared/steps.ts +0 -2
  86. package/src/workflows/shared/text.test.ts +41 -71
  87. package/src/workflows/shared/text.ts +82 -212
  88. package/src/workflows/shared/vars.ts +2 -8
  89. package/src/workflows/shared/workflows.steps.ts +0 -13
  90. package/claude/hooks/context.ts +0 -66
  91. package/src/replay/Slices.test.ts +0 -73
  92. package/src/replay/Slices.ts +0 -45
  93. package/src/wire/ContextLimit.fixture.ts +0 -30
  94. package/src/wire/ContextLimit.test.ts +0 -96
  95. package/src/wire/ContextLimit.ts +0 -169
  96. package/src/wire/Slices.ts +0 -25
  97. package/src/wire/golden/1/slices.json +0 -11
  98. package/src/workflows/feature/context-limit.feature +0 -37
  99. package/src/workflows/feature/continuation-cap.feature +0 -65
  100. package/src/workflows/feature/continuation-rebuild.feature +0 -88
  101. package/src/workflows/feature/continuation-slices.feature +0 -64
  102. package/src/workflows/feature/continuation.feature +0 -205
  103. package/src/workflows/feature/slice-findings.feature +0 -252
  104. package/src/workflows/feature/slicing-cap.feature +0 -23
  105. package/src/workflows/feature/slicing.feature +0 -265
  106. package/src/workflows/feature/slicing.test.ts +0 -49
  107. package/src/workflows/feature/slicing.ts +0 -105
  108. package/src/workflows/shared/continuation.ts +0 -92
@@ -1,64 +0,0 @@
1
- @inmem
2
- Feature: a continuation stays inside its coarse slice
3
-
4
- A naive pass of one coarse slice that stops at its context limit is
5
- continued with that slice's criteria still open, never another slice's.
6
-
7
- Background:
8
- Given the shipped workflows, as gtd install scaffolds them
9
- And an environment variable "GTD_QUALITYREVIEWS" set to ""
10
- And an environment variable "GTD_FLAGMODE" set to "false"
11
- And an environment variable "GTD_SLICEMAXCRITERIA" set to "2"
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
- # More arithmetic
20
-
21
- subtract, multiply and divide.
22
- """
23
- And step "unwind" changes nothing
24
- And step "start-gate.check" changes nothing
25
- And step "design.gate.answer" changes nothing
26
- And step "seam.check" changes nothing
27
-
28
- Scenario: the first slice's continuation is told only that slice's open criterion
29
- Given step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
30
- """
31
- # Requirements
32
-
33
- ## Acceptance Criteria
34
-
35
- - AC-1: subtract(a, b) returns a - b.
36
- - AC-2: multiply(a, b) returns a * b.
37
- - AC-3: divide(a, b) returns a / b.
38
- """
39
- And step "design.slicing" writes ".gtd/SLICES.md" with:
40
- """
41
- # Slices
42
-
43
- ## Subtract and divide
44
-
45
- - AC-1
46
- - AC-3
47
-
48
- ## Multiply
49
-
50
- - AC-2
51
- """
52
- And step "seam.naive" writes "src/sub.test.ts" with:
53
- """
54
- it("[AC-1] subtracts", () => {})
55
- """
56
- And step "seam.naive" writes ".gtd/HANDOFF.md" with:
57
- """
58
- Subtract is tested; divide was next.
59
- """
60
- When the process is driven
61
- Then the process rests at "seam.continue.naive"
62
- And the resting step's content contains "This slice builds AC-1, AC-3 only"
63
- And the resting step's content contains "Still open: AC-3."
64
- And the resting step's content does not contain "AC-2"
@@ -1,205 +0,0 @@
1
- @inmem
2
- Feature: a turn stopped at its context limit is snapshotted and continued
3
-
4
- A naive pass, refactor or build turn told to stop at its context limit
5
- writes its handoff note to `.gtd/HANDOFF.md`. That turn is the snapshot —
6
- the naive pass's kept tip, or the refactor's or build's own commit — and a
7
- continuation in a fresh conversation (`<phase>.continue.<step>`) picks up
8
- from it with the note and what is still open. After `continuations` (3) of
9
- them, or `continuationStall` (2) in a row that close nothing still open, the
10
- phase rests at `<phase>.oversized`.
11
-
12
- Background:
13
- Given the shipped workflows, as gtd install scaffolds them
14
- And an environment variable "GTD_QUALITYREVIEWS" set to ""
15
- And an environment variable "GTD_REFACTORQUALITYREVIEWS" set to ""
16
- And an environment variable "GTD_FLAG_RISK_TIER" set to "0"
17
- And a file "src/calc.ts" with:
18
- """
19
- export const add = (a: number, b: number) => a + b
20
- """
21
- And the working tree is committed as "feat: add calculator"
22
- And a file "TODO.md" with:
23
- """
24
- # Add subtract and multiply
25
- """
26
- And step "unwind" changes nothing
27
- And step "start-gate.check" changes nothing
28
- And step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
29
- """
30
- # Requirements
31
-
32
- ## Acceptance Criteria
33
-
34
- - AC-1: `subtract(5, 3)` returns 2.
35
- - AC-2: `multiply(2, 3)` returns 6.
36
- """
37
- And step "design.gate.answer" changes nothing
38
- And step "seam.check" changes nothing
39
-
40
- Scenario: a naive pass stopped at its context limit is continued from its kept tip with the open IDs
41
- Given step "seam.naive" writes "tests/calc.test.ts" with:
42
- """
43
- it("[AC-1] subtracts", () => {})
44
- """
45
- And step "seam.naive" writes ".gtd/HANDOFF.md" with:
46
- """
47
- Wrote subtract and its test; multiply was next.
48
- """
49
- When the process is driven
50
- Then the process rests at "seam.continue.naive"
51
- And the resting step's content contains "Your previous turn stopped at its context limit"
52
- And the resting step's content contains "Still open: AC-2."
53
- And the resting step's content contains "Wrote subtract and its test; multiply was next."
54
- And the resting step's content contains "':(top)' ':(top,exclude).gtd/HANDOFF.md' | git apply"
55
- And ".gtd/HANDOFF.md" does not exist
56
- And the output of gtd "next --json" contains "\"resume\":false"
57
- And the output of gtd "next --json" contains "\"memory\":\"seam.continue#"
58
-
59
- Given step "seam.continue.naive" writes "tests/calc.test.ts" with:
60
- """
61
- it("[AC-1] subtracts", () => {})
62
- it("[AC-2] multiplies", () => {})
63
- """
64
- When the process is driven
65
- Then the process rests at "implement.applying"
66
- And the commit subjects end with:
67
- """
68
- gtd(human): design.gate.answer → seam.naive
69
- gtd(agent): seam.naive → seam.continue.naive
70
- gtd(agent): seam.continue.naive → seam.check
71
- gtd(check): seam.check → implement.applying
72
- """
73
-
74
- Scenario: two continuations in a row that close nothing rest for a person
75
- Given step "seam.naive" writes "tests/calc.test.ts" with:
76
- """
77
- it("[AC-1] subtracts", () => {})
78
- """
79
- And step "seam.naive" writes ".gtd/HANDOFF.md" with:
80
- """
81
- Subtract is tested; multiply was next.
82
- """
83
- And step "seam.continue.naive" writes ".gtd/HANDOFF.md" with:
84
- """
85
- Still on multiply.
86
- """
87
- When the process is driven
88
- Then the process rests at "seam.oversized"
89
- And the resting step's content contains "the last 2 continuations closed nothing still open"
90
- And the commit subjects end with:
91
- """
92
- gtd(human): design.gate.answer → seam.naive
93
- gtd(agent): seam.naive → seam.continue.naive
94
- gtd(agent): seam.continue.naive
95
- gtd(agent): seam.continue.naive → seam.oversized
96
- """
97
-
98
- Scenario: a refactor stopped at its context limit is run green before its continuation
99
- Given step "seam.naive" writes "tests/calc.test.ts" with:
100
- """
101
- it("[AC-1] subtracts", () => {})
102
- it("[AC-2] multiplies", () => {})
103
- """
104
- And step "seam.naive" writes "src/calc.ts" with:
105
- """
106
- export const add = (a: number, b: number) => a + b
107
- export const subtract = (a: number, b: number) => a - b
108
- export const multiply = (a: number, b: number) => a * b
109
- """
110
- And judge step "seam.judge" answers:
111
- """
112
- [{"id":"shape","answer":"refactor-first","p":0.9}]
113
- """
114
- And step "seam.note" writes ".gtd/REFACTOR-NOTE.md" with:
115
- """
116
- Seam: a shared `op` in src/calc.ts.
117
- """
118
- And step "refactor.deriving" runs its script
119
- And step "refactor.building" writes ".gtd/HANDOFF.md" with:
120
- """
121
- Started on op; nothing changed yet.
122
- """
123
- And step "refactor.health.check" changes nothing
124
- When the process is driven
125
- Then the process rests at "refactor.continue.building"
126
- And the resting step's content contains "Still open: src/calc.ts."
127
- And the resting step's content contains "Started on op; nothing changed yet."
128
- And the commit subjects end with:
129
- """
130
- gtd(agent): refactor.building → refactor.health.check
131
- gtd(check): refactor.health.check → refactor.continue.building
132
- """
133
-
134
- Scenario: a refactor continuation that leaves the note in place stopped again
135
- Given step "seam.naive" writes "tests/calc.test.ts" with:
136
- """
137
- it("[AC-1] subtracts", () => {})
138
- it("[AC-2] multiplies", () => {})
139
- """
140
- And step "seam.naive" writes "src/calc.ts" with:
141
- """
142
- export const add = (a: number, b: number) => a + b
143
- export const subtract = (a: number, b: number) => a - b
144
- """
145
- And judge step "seam.judge" answers:
146
- """
147
- [{"id":"shape","answer":"refactor-first","p":0.9}]
148
- """
149
- And step "seam.note" writes ".gtd/REFACTOR-NOTE.md" with:
150
- """
151
- Seam: a shared `op` in src/calc.ts.
152
- """
153
- And step "refactor.deriving" runs its script
154
- And step "refactor.building" writes "src/calc.ts" with:
155
- """
156
- export const op = (a: number, b: number, sign: number) => a + sign * b
157
- export const add = (a: number, b: number) => a + b
158
- """
159
- And step "refactor.building" writes ".gtd/HANDOFF.md" with:
160
- """
161
- op is in; routing add through it was next.
162
- """
163
- And step "refactor.health.check" changes nothing
164
- And step "refactor.continue.building" writes "src/calc.ts" with:
165
- """
166
- export const op = (a: number, b: number, sign: number) => a + sign * b
167
- export const add = (a: number, b: number) => op(a, b, 1)
168
- """
169
- When the process is driven
170
- Then the process rests at "refactor.continue.building"
171
- And the commit subjects end with:
172
- """
173
- gtd(agent): refactor.building → refactor.health.check
174
- gtd(check): refactor.health.check → refactor.continue.building
175
- gtd(agent): refactor.continue.building → refactor.health.check
176
- gtd(check): refactor.health.check → refactor.continue.building
177
- gtd(agent): refactor.continue.building
178
- """
179
-
180
- Scenario: once a naive pass has continued, its retry runs in a fresh conversation, not as a continuation
181
- Given step "seam.naive" writes "tests/calc.test.ts" with:
182
- """
183
- it("[AC-1] subtracts", () => {})
184
- """
185
- And step "seam.naive" writes ".gtd/HANDOFF.md" with:
186
- """
187
- Multiply was next.
188
- """
189
- And step "seam.continue.naive" writes "tests/calc.test.ts" with:
190
- """
191
- it("[AC-1] subtracts", () => {})
192
- it("[AC-2] multiplies", () => {})
193
- """
194
- And step "seam.continue.naive" writes "src/calc.ts" with:
195
- """
196
- export const add = (a: number, b: number) => a - b
197
- """
198
- And judge step "seam.judge" answers:
199
- """
200
- [{"id":"shape","answer":"reject","p":0.9}]
201
- """
202
- When the process is driven
203
- Then the process rests at "seam.fresh.naive"
204
- And the resting step's content contains "rejected"
205
- And the output of gtd "next --json" contains "\"resume\":false"
@@ -1,252 +0,0 @@
1
- @inmem
2
- Feature: every slice's quality lap is triaged, and its leftovers wait for the review
3
-
4
- A judge sorts each slice's findings like the last slice's (see
5
- `lens-review.feature`): mechanical ones are fixed, noise is dropped, design
6
- ones are never sent to the fixer. Nothing between slices asks a person
7
- anything — what a lap leaves is carried to the review after the last slice,
8
- each finding naming its slice and lens.
9
-
10
- Background:
11
- Given the shipped workflows, as gtd install scaffolds them
12
- And an environment variable "GTD_PROTOTYPEROUNDS" set to "0"
13
- And an environment variable "GTD_QUALITYREVIEWS" set to "correctness"
14
- And an environment variable "GTD_FLAGMODE" set to "false"
15
- And an environment variable "GTD_SLICEMAXCRITERIA" set to "1"
16
- And a file "src/calc.ts" with:
17
- """
18
- export const add = (a: number, b: number) => a + b
19
- """
20
- And the working tree is committed as "feat: add calculator"
21
- And a file "TODO.md" with:
22
- """
23
- # More arithmetic
24
-
25
- subtract and multiply.
26
- """
27
- And step "unwind" changes nothing
28
- And step "start-gate.check" changes nothing
29
- And step "design.triage" writes ".gtd/REQUIREMENTS.md" with:
30
- """
31
- # Requirements
32
-
33
- ## Acceptance Criteria
34
-
35
- - AC-1: subtract(a, b) returns a - b.
36
- - AC-2: multiply(a, b) returns a * b.
37
- """
38
- And step "design.gate.answer" changes nothing
39
- And step "design.slicing" writes ".gtd/SLICES.md" with:
40
- """
41
- # Slices
42
-
43
- ## Subtract
44
-
45
- - AC-1
46
-
47
- ## Multiply
48
-
49
- - AC-2
50
- """
51
- And step "seam.naive", when prompted with "This slice builds AC-1 only", writes "src/sub.test.ts" with:
52
- """
53
- it("[AC-1] subtracts", () => {})
54
- """
55
- And step "seam.naive", when prompted with "This slice builds AC-2 only", writes "src/mul.test.ts" with:
56
- """
57
- it("[AC-2] multiplies", () => {})
58
- """
59
- And step "seam.check" changes nothing
60
- And step "implement.applying" runs its script
61
- And step "implement.health.check" changes nothing
62
- And step "implement.closing" runs its script
63
- And step "build.quality.sorting" runs its script
64
- And step "build.quality.closing" runs its script
65
- And step "build.health.check" changes nothing
66
- And step "build.review.carrying" runs its script
67
- And judge step "build.review.ranking" answers:
68
- """
69
- []
70
- """
71
-
72
- Scenario: a finding questioning a criterion reaches the final review, never the fixer
73
- Given step "build.quality.correctness.reviewing" writes ".gtd/QUALITY.md" with:
74
- """
75
- # Quality
76
-
77
- ## AC-1 ignores floating point
78
-
79
- Should subtract round? The criterion does not say.
80
- """
81
- And judge step "build.quality.triage" answers:
82
- """
83
- [{"id":"Q1","answer":"design","p":0.9}]
84
- """
85
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
86
- """
87
- # Review: abc1234
88
-
89
- <!-- base: 0000000 -->
90
-
91
- ## Subtract and multiply
92
-
93
- - [ ] ./src/sub.test.ts#1-1 — subtract
94
- - [ ] ./src/mul.test.ts#1-1 — multiply
95
-
96
- ## AC-1 ignores floating point
97
-
98
- - [ ] ./src/sub.test.ts#1-1 — where it applies
99
-
100
- ## AC-1 ignores floating point (2)
101
-
102
- - [ ] ./src/sub.test.ts#1-1 — where it applies
103
- """
104
- When the process is driven
105
- Then the process rests at "build.review.await-review"
106
- And no commit body contains "build.fix.quality.fixing"
107
- And ".gtd/QUALITY.md" does not exist
108
- And ".gtd/REVIEW.md" contains:
109
- """
110
- ### AC-1 ignores floating point
111
-
112
- _critical: judge unsure_
113
-
114
- _From slice 1, lens correctness._
115
-
116
- Should subtract round? The criterion does not say.
117
- """
118
- And ".gtd/REVIEW.md" contains:
119
- """
120
- ### AC-1 ignores floating point (2)
121
-
122
- _critical: judge unsure_
123
-
124
- _From slice 2, lens correctness._
125
- """
126
- And the commit subjects end with:
127
- """
128
- gtd(check): implement.closing → build.quality.correctness.reviewing
129
- gtd(agent): build.quality.correctness.reviewing → build.quality.triage
130
- gtd(judge): build.quality.triage → build.quality.sorting
131
- gtd(check): build.quality.sorting → seam.naive
132
- gtd(agent): seam.naive → seam.check
133
- gtd(check): seam.check → implement.applying
134
- gtd(check): implement.applying → implement.health.check
135
- gtd(check): implement.health.check → implement.closing
136
- gtd(check): implement.closing → build.quality.correctness.reviewing
137
- gtd(agent): build.quality.correctness.reviewing → build.quality.triage
138
- gtd(judge): build.quality.triage → build.quality.sorting
139
- gtd(check): build.quality.sorting → build.review.reviewing
140
- gtd(agent): build.review.reviewing → build.review.ranking
141
- gtd(judge): build.review.ranking → build.review.carrying
142
- gtd(check): build.review.carrying → build.review.await-review
143
- """
144
-
145
- Scenario: a mechanical finding the fix cap leaves in an early slice is carried, never escalated
146
- Given step "build.quality.correctness.reviewing" writes ".gtd/QUALITY.md" with:
147
- """
148
- # Quality
149
-
150
- ## subtract has no negative test
151
-
152
- Add a test subtracting a larger number.
153
- """
154
- And judge step "build.quality.triage" answers:
155
- """
156
- [{"id":"Q1","answer":"mechanical","p":0.9}]
157
- """
158
- And step "build.fix.quality.fixing" changes nothing
159
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
160
- """
161
- # Review: abc1234
162
-
163
- <!-- base: 0000000 -->
164
-
165
- ## Subtract and multiply
166
-
167
- - [ ] ./src/sub.test.ts#1-1 — subtract
168
- - [ ] ./src/mul.test.ts#1-1 — multiply
169
-
170
- ## subtract has no negative test
171
-
172
- - [ ] ./src/sub.test.ts#1-1 — where it applies
173
-
174
- ## subtract has no negative test (2)
175
-
176
- - [ ] ./src/sub.test.ts#1-1 — where it applies
177
- """
178
- When the process is driven
179
- Then the process rests at "build.review.await-review"
180
- And no commit body contains "build.health.describe"
181
- And ".gtd/REVIEW.md" contains:
182
- """
183
- ### subtract has no negative test
184
-
185
- _critical: judge unsure_
186
-
187
- _From slice 1, lens correctness._
188
-
189
- _The fixer left this unresolved._
190
- """
191
- And the commit subjects end with:
192
- """
193
- gtd(check): implement.closing → build.quality.correctness.reviewing
194
- gtd(agent): build.quality.correctness.reviewing → build.quality.triage
195
- gtd(judge): build.quality.triage → build.fix.quality.fixing
196
- gtd(agent): build.fix.quality.fixing
197
- gtd(agent): build.fix.quality.fixing
198
- gtd(agent): build.fix.quality.fixing → build.health.check
199
- gtd(check): build.health.check → build.quality.closing
200
- gtd(check): build.quality.closing → seam.naive
201
- gtd(agent): seam.naive → seam.check
202
- gtd(check): seam.check → implement.applying
203
- gtd(check): implement.applying → implement.health.check
204
- gtd(check): implement.health.check → implement.closing
205
- gtd(check): implement.closing → build.quality.correctness.reviewing
206
- gtd(agent): build.quality.correctness.reviewing → build.quality.triage
207
- gtd(judge): build.quality.triage → build.fix.quality.fixing
208
- gtd(agent): build.fix.quality.fixing
209
- gtd(agent): build.fix.quality.fixing
210
- gtd(agent): build.fix.quality.fixing → build.health.check
211
- gtd(check): build.health.check → build.quality.closing
212
- gtd(check): build.quality.closing → build.review.reviewing
213
- gtd(agent): build.review.reviewing → build.review.ranking
214
- gtd(judge): build.review.ranking → build.review.carrying
215
- gtd(check): build.review.carrying → build.review.await-review
216
- """
217
-
218
- Scenario: the final review lists every slice's fixes with their commits
219
- Given step "build.quality.correctness.reviewing" writes ".gtd/QUALITY.md" with:
220
- """
221
- # Quality
222
-
223
- ## subtract has no negative test
224
-
225
- Add a test subtracting a larger number.
226
- """
227
- And judge step "build.quality.triage" answers:
228
- """
229
- [{"id":"Q1","answer":"mechanical","p":0.9}]
230
- """
231
- And step "build.fix.quality.fixing" writes "src/edge.test.ts" with:
232
- """
233
- it("subtracts a larger number", () => {})
234
- """
235
- And step "build.fix.quality.fixing" deletes ".gtd/QUALITY.md"
236
- And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
237
- """
238
- # Review: abc1234
239
-
240
- <!-- base: 0000000 -->
241
-
242
- ## Subtract and multiply
243
-
244
- - [ ] ./src/sub.test.ts#1-1 — subtract
245
- - [ ] ./src/mul.test.ts#1-1 — multiply
246
- """
247
- When the process is driven
248
- Then the process rests at "build.review.await-review"
249
- And ".gtd/REVIEW.md" contains ", slice 1, lens correctness)"
250
- And ".gtd/REVIEW.md" contains ", slice 2, lens correctness)"
251
- And ".gtd/REVIEW.md" contains the short hash of the commit "gtd(agent): build.fix.quality.fixing → build.health.check"
252
- And no commit body contains "build.quality.closing"
@@ -1,23 +0,0 @@
1
- @inmem
2
- Feature: a bad sliceMaxCriteria refuses the landing that would pin it
3
-
4
- The cap is read right after idle, so a value that is not a positive integer
5
- never gets pinned into a process that would refuse every later landing.
6
-
7
- Scenario: a zero cap refuses the idle landing
8
- Given the shipped workflows, as gtd install scaffolds them
9
- And an environment variable "GTD_SLICEMAXCRITERIA" set to "0"
10
- And a file "TODO.md" with:
11
- """
12
- # Something
13
- """
14
- Then driving the process is refused with "sliceMaxCriteria must be a positive integer, got \"0\""
15
-
16
- Scenario: a prototypeRounds that is not a whole number refuses the idle landing
17
- Given the shipped workflows, as gtd install scaffolds them
18
- And an environment variable "GTD_PROTOTYPEROUNDS" set to "-1"
19
- And a file "TODO.md" with:
20
- """
21
- # Something
22
- """
23
- Then driving the process is refused with "prototypeRounds must be a non-negative integer, got \"-1\""