@pmelab/gtd 58.1.0 → 59.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 +115 -390
- package/dist/chunks/{Schema-B3o6eRNU.mjs → testkit-CMBAAyRK.mjs} +13409 -3351
- package/dist/gtd.bundle.mjs +76 -59
- package/dist/testkit/gherkin.mjs +30 -2
- package/dist/testkit.mjs +1 -1
- package/package.json +3 -42
- package/skills/authoring/SKILL.md +31 -25
- package/src/cli/Cli.test.ts +15 -19
- package/src/cli/Cli.ts +2 -4
- package/src/cli/Program.test.ts +60 -29
- package/src/cli/Program.ts +5 -7
- package/src/edge/Edge.ts +3 -3
- package/src/flags/index.test.ts +0 -13
- package/src/flags/index.ts +1 -3
- package/src/gherkin/git-control.feature +78 -0
- package/src/gherkin/index.ts +35 -1
- package/src/install/Install.test.ts +14 -11
- package/src/install/Install.ts +38 -15
- package/src/install/index.ts +1 -2
- package/src/replay/Replay.test.ts +1 -1
- package/src/replay/index.ts +1 -1
- package/src/step/planStart.ts +6 -1
- package/src/testkit/TestRepo.test.ts +118 -2
- package/src/testkit/TestRepo.ts +57 -6
- package/src/testkit/index.ts +1 -0
- package/src/twins/EmittedScriptRecognizer.ts +12 -14
- package/src/twins/FlowScripts.ts +10 -9
- package/src/twins/InMemRepo.ts +26 -1
- package/src/twins/Layers.ts +12 -1
- package/src/twins/index.ts +6 -1
- package/src/workflow/index.ts +1 -0
- package/src/workflow/load.test.ts +138 -113
- package/src/workflow/load.ts +1 -1
- package/src/workflow/vars.test.ts +30 -3
- package/src/workflow/vars.ts +34 -2
- package/src/workflow-kit/index.ts +1 -1
- package/dist/chunks/reserved-lMYCaapY.mjs +0 -1990
- package/dist/chunks/review-Bfaror38.mjs +0 -427
- package/dist/chunks/tail-Bd7L940p.mjs +0 -355
- package/dist/chunks/testkit-D1-auYau.mjs +0 -10362
- package/dist/workflows/cleanup.mjs +0 -36
- package/dist/workflows/feature.mjs +0 -1018
- package/dist/workflows/fix.mjs +0 -41
- package/dist/workflows/review.mjs +0 -45
- package/dist/workflows/rollout.mjs +0 -48
- package/dist/workflows.mjs +0 -40651
- package/src/install/ConfigScaffold.ts +0 -22
- package/src/workflows/cleanup/cleanup-path.feature +0 -94
- package/src/workflows/cleanup/cleanup.feature +0 -315
- package/src/workflows/cleanup/cleanup.test.ts +0 -276
- package/src/workflows/cleanup/cleanup.ts +0 -52
- package/src/workflows/cleanup/index.ts +0 -6
- package/src/workflows/feature/acceptance-criteria-tier.feature +0 -25
- package/src/workflows/feature/acceptance-criteria.feature +0 -389
- package/src/workflows/feature/criteria-coverage.feature +0 -102
- package/src/workflows/feature/criteria.test.ts +0 -147
- package/src/workflows/feature/criteria.ts +0 -267
- package/src/workflows/feature/fast-path.feature +0 -93
- package/src/workflows/feature/feature.test.ts +0 -338
- package/src/workflows/feature/feature.ts +0 -156
- package/src/workflows/feature/green.ts +0 -19
- package/src/workflows/feature/index.ts +0 -18
- package/src/workflows/feature/lens-models.feature +0 -69
- package/src/workflows/feature/lens-review.feature +0 -566
- package/src/workflows/feature/naive-acceptance.feature +0 -147
- package/src/workflows/feature/naive-test.feature +0 -263
- package/src/workflows/feature/one-step-land.feature +0 -93
- package/src/workflows/feature/planning.ts +0 -41
- package/src/workflows/feature/refactor-absorbs.feature +0 -131
- package/src/workflows/feature/refactor-first.feature +0 -158
- package/src/workflows/feature/refactor-lens-models.feature +0 -79
- package/src/workflows/feature/refactor-rebuild.feature +0 -273
- package/src/workflows/feature/refactor-review.feature +0 -1528
- package/src/workflows/feature/refactor.test.ts +0 -1220
- package/src/workflows/feature/refactor.ts +0 -368
- package/src/workflows/feature/release-flag.feature +0 -167
- package/src/workflows/feature/release-flag.test.ts +0 -49
- package/src/workflows/feature/release-flag.ts +0 -46
- package/src/workflows/feature/review-gate.feature +0 -241
- package/src/workflows/feature/reviewer-walkthrough.feature +0 -142
- package/src/workflows/feature/risk-tier.feature +0 -351
- package/src/workflows/feature/seam-rejection.feature +0 -146
- package/src/workflows/feature/seam.feature +0 -297
- package/src/workflows/feature/seam.test.ts +0 -527
- package/src/workflows/feature/seam.ts +0 -426
- package/src/workflows/feature/standards.feature +0 -354
- package/src/workflows/feature/steps.test.ts +0 -65
- package/src/workflows/feature/steps.ts +0 -45
- package/src/workflows/feature/tier-pin.feature +0 -66
- package/src/workflows/feature/tier.test.ts +0 -166
- package/src/workflows/feature/tier.ts +0 -56
- package/src/workflows/fix/fix-lens-origin.feature +0 -114
- package/src/workflows/fix/fix-quality.feature +0 -212
- package/src/workflows/fix/fix.feature +0 -79
- package/src/workflows/fix/fix.test.ts +0 -74
- package/src/workflows/fix/fix.ts +0 -52
- package/src/workflows/fix/index.ts +0 -6
- package/src/workflows/index.ts +0 -47
- package/src/workflows/review/index.ts +0 -6
- package/src/workflows/review/review-door.feature +0 -199
- package/src/workflows/review/review.test.ts +0 -27
- package/src/workflows/review/review.ts +0 -60
- package/src/workflows/rollout/index.ts +0 -6
- package/src/workflows/rollout/rollout.feature +0 -510
- package/src/workflows/rollout/rollout.test.ts +0 -263
- package/src/workflows/rollout/rollout.ts +0 -82
- package/src/workflows/shared/__fixtures__/feature-collecting-prompt.txt +0 -98
- package/src/workflows/shared/access.test.ts +0 -62
- package/src/workflows/shared/access.ts +0 -24
- package/src/workflows/shared/config.fixture.ts +0 -12
- package/src/workflows/shared/fences.ts +0 -24
- package/src/workflows/shared/health.test.ts +0 -148
- package/src/workflows/shared/health.ts +0 -191
- package/src/workflows/shared/learn.test.ts +0 -140
- package/src/workflows/shared/learn.ts +0 -201
- package/src/workflows/shared/lenses.test.ts +0 -39
- package/src/workflows/shared/lenses.ts +0 -294
- package/src/workflows/shared/options.test.ts +0 -157
- package/src/workflows/shared/options.ts +0 -92
- package/src/workflows/shared/progress.feature +0 -124
- package/src/workflows/shared/prose.ts +0 -263
- package/src/workflows/shared/recheck.feature +0 -60
- package/src/workflows/shared/registry.test.ts +0 -345
- package/src/workflows/shared/registry.ts +0 -183
- package/src/workflows/shared/reserved.ts +0 -11
- package/src/workflows/shared/review.test.ts +0 -1062
- package/src/workflows/shared/review.ts +0 -446
- package/src/workflows/shared/skills.test.ts +0 -121
- package/src/workflows/shared/skills.ts +0 -49
- package/src/workflows/shared/standards.test.ts +0 -90
- package/src/workflows/shared/standards.ts +0 -156
- package/src/workflows/shared/steps.test.ts +0 -219
- package/src/workflows/shared/steps.ts +0 -201
- package/src/workflows/shared/tail.test.ts +0 -454
- package/src/workflows/shared/tail.ts +0 -264
- package/src/workflows/shared/text.fixture.ts +0 -128
- package/src/workflows/shared/text.test.ts +0 -1430
- package/src/workflows/shared/text.ts +0 -1700
- package/src/workflows/shared/threads.test.ts +0 -129
- package/src/workflows/shared/vars.ts +0 -47
- package/src/workflows/shared/workflows.steps.ts +0 -54
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
// What `gtd install` writes as a repository's `gtd.config.ts`. The default
|
|
2
|
-
// export is also exported as `feature`, so a process shows that name.
|
|
3
|
-
export const CONFIG_SCAFFOLD = `// The workflows gtd runs here: gtd's shipped feature, review and fix.
|
|
4
|
-
// Every exported function is startable with \`gtd --workflow <name>\`; the
|
|
5
|
-
// default export is what a change in the tree starts. Each workflow brings
|
|
6
|
-
// its own doors: \`gtd door review [base]\` and \`gtd door fix\`. Export \`rollout\`
|
|
7
|
-
// from \`@pmelab/gtd/workflows/rollout\` and \`cleanup\` from
|
|
8
|
-
// \`@pmelab/gtd/workflows/cleanup\` to add \`gtd door rollout <flag>\` and
|
|
9
|
-
// \`gtd door cleanup <flag>\`.
|
|
10
|
-
export {
|
|
11
|
-
feature as default,
|
|
12
|
-
feature,
|
|
13
|
-
defaults,
|
|
14
|
-
envDefaults,
|
|
15
|
-
summary,
|
|
16
|
-
steering,
|
|
17
|
-
skills,
|
|
18
|
-
access,
|
|
19
|
-
} from "@pmelab/gtd/workflows/feature"
|
|
20
|
-
export { review } from "@pmelab/gtd/workflows/review"
|
|
21
|
-
export { fix } from "@pmelab/gtd/workflows/fix"
|
|
22
|
-
`
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# One SDLC path per file, so a changed path reds exactly one fixture — do not merge.
|
|
2
|
-
@inmem
|
|
3
|
-
Feature: cleanup walks one fixed path from the opening commit to idle
|
|
4
|
-
|
|
5
|
-
A default-on release flag is cleaned up by an agent that removes the registry
|
|
6
|
-
entry and the off path; health, review and closing follow and the process
|
|
7
|
-
rests at idle. Cleanup reads no release flag, so no flag is pinned here and
|
|
8
|
-
every flag state takes the same path.
|
|
9
|
-
|
|
10
|
-
Background:
|
|
11
|
-
Given the shipped workflows, as gtd install scaffolds them
|
|
12
|
-
And a gtd config with:
|
|
13
|
-
"""
|
|
14
|
-
export {
|
|
15
|
-
feature as default,
|
|
16
|
-
feature,
|
|
17
|
-
defaults,
|
|
18
|
-
envDefaults,
|
|
19
|
-
summary,
|
|
20
|
-
steering,
|
|
21
|
-
skills,
|
|
22
|
-
access,
|
|
23
|
-
} from "@pmelab/gtd/workflows/feature"
|
|
24
|
-
import { cleanup } from "@pmelab/gtd/workflows"
|
|
25
|
-
export { cleanup }
|
|
26
|
-
"""
|
|
27
|
-
And an environment variable "GTD_QUALITYREVIEWS" set to ""
|
|
28
|
-
And a file "src/flags/index.ts" with:
|
|
29
|
-
"""
|
|
30
|
-
export const FLAGS = [
|
|
31
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
32
|
-
{ name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
|
|
33
|
-
] as const
|
|
34
|
-
"""
|
|
35
|
-
And a file "src/calc.ts" with:
|
|
36
|
-
"""
|
|
37
|
-
export const on = process.env.GTD_FLAG_LIVE !== "0"
|
|
38
|
-
"""
|
|
39
|
-
And the working tree is committed as "feat: registry"
|
|
40
|
-
And step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
41
|
-
"""
|
|
42
|
-
export const FLAGS = [
|
|
43
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
44
|
-
] as const
|
|
45
|
-
"""
|
|
46
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
47
|
-
"""
|
|
48
|
-
export const on = true
|
|
49
|
-
"""
|
|
50
|
-
And step "build.health.check" changes nothing
|
|
51
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
52
|
-
"""
|
|
53
|
-
# Review: abc1234
|
|
54
|
-
|
|
55
|
-
<!-- base: 0000000 -->
|
|
56
|
-
|
|
57
|
-
## calc
|
|
58
|
-
|
|
59
|
-
- [ ] ./src/calc.ts#1-1
|
|
60
|
-
flag removed
|
|
61
|
-
"""
|
|
62
|
-
And step "build.review.closing" runs its script
|
|
63
|
-
|
|
64
|
-
Scenario: removing the entry and the off path runs health, review and closing to idle
|
|
65
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
66
|
-
And the process is driven
|
|
67
|
-
Then the process rests at "build.review.await-review"
|
|
68
|
-
Given a file ".gtd/REVIEW.md" with:
|
|
69
|
-
"""
|
|
70
|
-
# Review: abc1234
|
|
71
|
-
|
|
72
|
-
<!-- base: 0000000 -->
|
|
73
|
-
|
|
74
|
-
## calc
|
|
75
|
-
|
|
76
|
-
- [x] ./src/calc.ts#1-1
|
|
77
|
-
flag removed
|
|
78
|
-
"""
|
|
79
|
-
When gtd lands
|
|
80
|
-
And the process is driven
|
|
81
|
-
Then the process rests at "idle"
|
|
82
|
-
And "src/flags/index.ts" does not contain "live"
|
|
83
|
-
And "src/calc.ts" does not contain "GTD_FLAG_LIVE"
|
|
84
|
-
And the commit subjects end with:
|
|
85
|
-
"""
|
|
86
|
-
gtd(human): cleanup.removing
|
|
87
|
-
gtd(agent): cleanup.removing → build.health.check
|
|
88
|
-
gtd(check): build.health.check → build.review.reviewing
|
|
89
|
-
gtd(agent): build.review.reviewing → build.review.await-review
|
|
90
|
-
gtd(human): build.review.await-review → build.review.closing
|
|
91
|
-
gtd(check): build.review.closing → idle
|
|
92
|
-
"""
|
|
93
|
-
And the commit "gtd(human): cleanup.removing" has a body containing "Gtd-Workflow: cleanup"
|
|
94
|
-
And the commit "gtd(human): cleanup.removing" has a body containing "Gtd-Var: flag=live"
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
Feature: cleanup removes a default-on release flag and keeps its flag-on path
|
|
2
|
-
|
|
3
|
-
`gtd --workflow cleanup --var flag=<name>` has an agent delete the registry
|
|
4
|
-
entry and the off path; checks refuse a surviving entry or env-var reference,
|
|
5
|
-
then the shared health loop and review run; the same checks re-run after every later agent turn. A review note ends the process.
|
|
6
|
-
|
|
7
|
-
Background:
|
|
8
|
-
Given the shipped workflows, as gtd install scaffolds them
|
|
9
|
-
And a gtd config with:
|
|
10
|
-
"""
|
|
11
|
-
export {
|
|
12
|
-
feature as default,
|
|
13
|
-
feature,
|
|
14
|
-
defaults,
|
|
15
|
-
envDefaults,
|
|
16
|
-
summary,
|
|
17
|
-
steering,
|
|
18
|
-
skills,
|
|
19
|
-
access,
|
|
20
|
-
} from "@pmelab/gtd/workflows/feature"
|
|
21
|
-
import { cleanup } from "@pmelab/gtd/workflows"
|
|
22
|
-
export { cleanup }
|
|
23
|
-
"""
|
|
24
|
-
And an environment variable "GTD_QUALITYREVIEWS" set to ""
|
|
25
|
-
And a file "src/flags/index.ts" with:
|
|
26
|
-
"""
|
|
27
|
-
export const FLAGS = [
|
|
28
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
29
|
-
{ name: "ops1", owner: "c", expiry: "2027-03-01", kind: "ops" },
|
|
30
|
-
{ name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
|
|
31
|
-
] as const
|
|
32
|
-
"""
|
|
33
|
-
And a file "src/calc.ts" with:
|
|
34
|
-
"""
|
|
35
|
-
export const on = process.env.GTD_FLAG_LIVE !== "0"
|
|
36
|
-
"""
|
|
37
|
-
And the working tree is committed as "feat: registry"
|
|
38
|
-
|
|
39
|
-
Scenario: a turn leaving the registry entry is refused
|
|
40
|
-
Given step "cleanup.removing" writes "src/calc.ts" with:
|
|
41
|
-
"""
|
|
42
|
-
export const on = true
|
|
43
|
-
"""
|
|
44
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
45
|
-
Then driving the process is refused with "src/flags/index.ts still declares flag \"live\""
|
|
46
|
-
|
|
47
|
-
Scenario: a turn leaving the env var in a shipped source is refused naming path:line
|
|
48
|
-
Given step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
49
|
-
"""
|
|
50
|
-
export const FLAGS = [
|
|
51
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
52
|
-
] as const
|
|
53
|
-
"""
|
|
54
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
55
|
-
Then driving the process is refused with "src/calc.ts:1 still names GTD_FLAG_LIVE"
|
|
56
|
-
|
|
57
|
-
Scenario: the same env var in a test file is allowed
|
|
58
|
-
Given a file "src/calc.test.ts" with:
|
|
59
|
-
"""
|
|
60
|
-
process.env.GTD_FLAG_LIVE = "0"
|
|
61
|
-
"""
|
|
62
|
-
And the working tree is committed as "test: pin kill switch"
|
|
63
|
-
And step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
64
|
-
"""
|
|
65
|
-
export const FLAGS = [
|
|
66
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
67
|
-
] as const
|
|
68
|
-
"""
|
|
69
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
70
|
-
"""
|
|
71
|
-
export const on = true
|
|
72
|
-
"""
|
|
73
|
-
And step "build.health.check" changes nothing
|
|
74
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
75
|
-
And the process is driven
|
|
76
|
-
Then the process rests at "build.review.reviewing"
|
|
77
|
-
|
|
78
|
-
@inmem
|
|
79
|
-
Scenario: gtd door cleanup starts the cleanup of its flag argument and reaches the review
|
|
80
|
-
Given step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
81
|
-
"""
|
|
82
|
-
export const FLAGS = [
|
|
83
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
84
|
-
] as const
|
|
85
|
-
"""
|
|
86
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
87
|
-
"""
|
|
88
|
-
export const on = true
|
|
89
|
-
"""
|
|
90
|
-
And step "build.health.check" changes nothing
|
|
91
|
-
When gtd opens door "cleanup" with "live"
|
|
92
|
-
And the process is driven
|
|
93
|
-
Then the process rests at "build.review.reviewing"
|
|
94
|
-
|
|
95
|
-
@inmem
|
|
96
|
-
Scenario: gtd door cleanup with no argument is refused naming the flag
|
|
97
|
-
Then opening door "cleanup" is refused with "usage: gtd door cleanup <flag>"
|
|
98
|
-
|
|
99
|
-
@inmem
|
|
100
|
-
Scenario: a fix after a red suite that restores the registry entry is refused
|
|
101
|
-
Given step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
102
|
-
"""
|
|
103
|
-
export const FLAGS = [
|
|
104
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
105
|
-
] as const
|
|
106
|
-
"""
|
|
107
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
108
|
-
"""
|
|
109
|
-
export const on = true
|
|
110
|
-
"""
|
|
111
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
112
|
-
And the process is driven
|
|
113
|
-
Then the process rests at "build.health.check"
|
|
114
|
-
|
|
115
|
-
Given a file ".gtd/FEEDBACK.md" with:
|
|
116
|
-
"""
|
|
117
|
-
1 failing
|
|
118
|
-
"""
|
|
119
|
-
When gtd lands
|
|
120
|
-
Then the process rests at "build.fix"
|
|
121
|
-
|
|
122
|
-
Given step "build.fix" writes "src/flags/index.ts" with:
|
|
123
|
-
"""
|
|
124
|
-
export const FLAGS = [
|
|
125
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
126
|
-
{ name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
|
|
127
|
-
] as const
|
|
128
|
-
"""
|
|
129
|
-
Then driving the process is refused with "still declares flag \"live\""
|
|
130
|
-
|
|
131
|
-
@inmem
|
|
132
|
-
Scenario: a fix after a red suite that re-adds the env var to a shipped source is refused
|
|
133
|
-
Given step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
134
|
-
"""
|
|
135
|
-
export const FLAGS = [
|
|
136
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
137
|
-
] as const
|
|
138
|
-
"""
|
|
139
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
140
|
-
"""
|
|
141
|
-
export const on = true
|
|
142
|
-
"""
|
|
143
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
144
|
-
And the process is driven
|
|
145
|
-
Then the process rests at "build.health.check"
|
|
146
|
-
|
|
147
|
-
Given a file ".gtd/FEEDBACK.md" with:
|
|
148
|
-
"""
|
|
149
|
-
1 failing
|
|
150
|
-
"""
|
|
151
|
-
When gtd lands
|
|
152
|
-
Then the process rests at "build.fix"
|
|
153
|
-
|
|
154
|
-
Given step "build.fix" writes "src/calc.ts" with:
|
|
155
|
-
"""
|
|
156
|
-
export const on = process.env.GTD_FLAG_LIVE !== "0"
|
|
157
|
-
"""
|
|
158
|
-
Then driving the process is refused with "src/calc.ts:1 still names GTD_FLAG_LIVE"
|
|
159
|
-
|
|
160
|
-
@inmem
|
|
161
|
-
Scenario: a fix after a red suite that edits another file only reaches the review
|
|
162
|
-
Given step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
163
|
-
"""
|
|
164
|
-
export const FLAGS = [
|
|
165
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
166
|
-
] as const
|
|
167
|
-
"""
|
|
168
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
169
|
-
"""
|
|
170
|
-
export const on = true
|
|
171
|
-
"""
|
|
172
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
173
|
-
And the process is driven
|
|
174
|
-
Then the process rests at "build.health.check"
|
|
175
|
-
|
|
176
|
-
Given a file ".gtd/FEEDBACK.md" with:
|
|
177
|
-
"""
|
|
178
|
-
1 failing
|
|
179
|
-
"""
|
|
180
|
-
When gtd lands
|
|
181
|
-
Then the process rests at "build.fix"
|
|
182
|
-
|
|
183
|
-
Given step "build.fix" writes "src/other.ts" with:
|
|
184
|
-
"""
|
|
185
|
-
export const other = 1
|
|
186
|
-
"""
|
|
187
|
-
And step "build.health.check" changes nothing
|
|
188
|
-
When the process is driven
|
|
189
|
-
Then the process rests at "build.review.reviewing"
|
|
190
|
-
|
|
191
|
-
@inmem
|
|
192
|
-
Scenario: a risk-fix turn after the review that restores the registry entry is refused
|
|
193
|
-
Given step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
194
|
-
"""
|
|
195
|
-
export const FLAGS = [
|
|
196
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
197
|
-
] as const
|
|
198
|
-
"""
|
|
199
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
200
|
-
"""
|
|
201
|
-
export const on = true
|
|
202
|
-
"""
|
|
203
|
-
And step "build.health.check" changes nothing
|
|
204
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
205
|
-
"""
|
|
206
|
-
# Review: abc1234
|
|
207
|
-
|
|
208
|
-
<!-- base: 0000000 -->
|
|
209
|
-
|
|
210
|
-
## calc
|
|
211
|
-
|
|
212
|
-
- [ ] ./src/calc.ts#1-1
|
|
213
|
-
Risk: leaks
|
|
214
|
-
"""
|
|
215
|
-
And step "build.review.fix.risks.fixing" writes "src/flags/index.ts" with:
|
|
216
|
-
"""
|
|
217
|
-
export const FLAGS = [
|
|
218
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
219
|
-
{ name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
|
|
220
|
-
] as const
|
|
221
|
-
"""
|
|
222
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
223
|
-
Then driving the process is refused with "still declares flag \"live\""
|
|
224
|
-
|
|
225
|
-
@inmem
|
|
226
|
-
Scenario: the human's review sign-off may restore the registry entry
|
|
227
|
-
Given step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
228
|
-
"""
|
|
229
|
-
export const FLAGS = [
|
|
230
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
231
|
-
] as const
|
|
232
|
-
"""
|
|
233
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
234
|
-
"""
|
|
235
|
-
export const on = true
|
|
236
|
-
"""
|
|
237
|
-
And step "build.health.check" changes nothing
|
|
238
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
239
|
-
"""
|
|
240
|
-
# Review: abc1234
|
|
241
|
-
|
|
242
|
-
<!-- base: 0000000 -->
|
|
243
|
-
|
|
244
|
-
## calc
|
|
245
|
-
|
|
246
|
-
- [ ] ./src/calc.ts#1-1
|
|
247
|
-
fine
|
|
248
|
-
"""
|
|
249
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
250
|
-
And the process is driven
|
|
251
|
-
Then the process rests at "build.review.await-review"
|
|
252
|
-
|
|
253
|
-
Given a file "src/flags/index.ts" with:
|
|
254
|
-
"""
|
|
255
|
-
export const FLAGS = [
|
|
256
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
257
|
-
{ name: "live", owner: "d", expiry: "2027-04-01", kind: "release", defaultOn: true },
|
|
258
|
-
] as const
|
|
259
|
-
"""
|
|
260
|
-
When gtd lands
|
|
261
|
-
Then the process rests at "build.health.check"
|
|
262
|
-
|
|
263
|
-
Scenario: a review note ends the process leaving the review for fix
|
|
264
|
-
Given step "cleanup.removing" writes "src/flags/index.ts" with:
|
|
265
|
-
"""
|
|
266
|
-
export const FLAGS = [
|
|
267
|
-
{ name: "alpha", owner: "a", expiry: "2027-01-01", kind: "release" },
|
|
268
|
-
] as const
|
|
269
|
-
"""
|
|
270
|
-
And step "cleanup.removing" writes "src/calc.ts" with:
|
|
271
|
-
"""
|
|
272
|
-
export const on = true
|
|
273
|
-
"""
|
|
274
|
-
And step "build.health.check" changes nothing
|
|
275
|
-
And step "build.review.reviewing" writes ".gtd/REVIEW.md" with:
|
|
276
|
-
"""
|
|
277
|
-
# Review: abc1234
|
|
278
|
-
|
|
279
|
-
<!-- base: 0000000 -->
|
|
280
|
-
|
|
281
|
-
## calc
|
|
282
|
-
|
|
283
|
-
- [ ] ./src/calc.ts#1-1
|
|
284
|
-
flag removed
|
|
285
|
-
"""
|
|
286
|
-
When gtd starts workflow "cleanup" with "--var flag=live"
|
|
287
|
-
And the process is driven
|
|
288
|
-
Then the process rests at "build.review.await-review"
|
|
289
|
-
|
|
290
|
-
Given a file ".gtd/REVIEW.md" with:
|
|
291
|
-
"""
|
|
292
|
-
# Review: abc1234
|
|
293
|
-
|
|
294
|
-
<!-- base: 0000000 -->
|
|
295
|
-
|
|
296
|
-
## calc
|
|
297
|
-
|
|
298
|
-
- [ ] ./src/calc.ts#1-1
|
|
299
|
-
flag removed — also drop the constant
|
|
300
|
-
"""
|
|
301
|
-
And step "build.review.handing-off" runs its script
|
|
302
|
-
When gtd lands
|
|
303
|
-
And the process is driven
|
|
304
|
-
Then the process rests at "idle"
|
|
305
|
-
And ".gtd/REVIEW.md" contains "also drop the constant"
|
|
306
|
-
And ".gtd/REVIEW.orig.md" contains "flag removed"
|
|
307
|
-
|
|
308
|
-
Scenario: a default-off flag is refused at start
|
|
309
|
-
Then starting workflow "cleanup" with "--var flag=alpha" is refused with "flag \"alpha\" is not default-on — roll it out first"
|
|
310
|
-
|
|
311
|
-
Scenario: an unknown flag is refused at start
|
|
312
|
-
Then starting workflow "cleanup" with "--var flag=nope" is refused with "no flag \"nope\" in src/flags/index.ts"
|
|
313
|
-
|
|
314
|
-
Scenario: a non-release flag is refused at start
|
|
315
|
-
Then starting workflow "cleanup" with "--var flag=ops1" is refused with "flag \"ops1\" is ops, not release"
|