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