@pmelab/gtd 6.13.0 → 7.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/README.md +26 -23
- package/dist/gtd.bundle.mjs +338 -156
- package/docs/cli.md +35 -32
- package/docs/configuration.md +69 -71
- package/docs/development.md +2 -1
- package/docs/upgrading.md +15 -19
- package/package.json +1 -1
package/docs/cli.md
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
Usage: gtd [command] [options]
|
|
5
5
|
|
|
6
6
|
Commands:
|
|
7
|
-
init Scaffold a .gtdrc.json for this repo
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
to review and commit
|
|
7
|
+
init Scaffold a minimal .gtdrc.json for this repo, seeding a
|
|
8
|
+
testCommand var (npm test) and a ready-to-edit Prettier
|
|
9
|
+
formatting suggestion under modes:. Writes no workflow — gtd
|
|
10
|
+
runs the bundled unified workflow as its built-in default.
|
|
11
|
+
Takes no argument. Refuses if a gtd config already exists.
|
|
12
|
+
Leaves the file uncommitted for you to review and commit
|
|
13
13
|
step <actor> Authenticate as <actor>, match the resolved rest's
|
|
14
14
|
declared patterns against the pending changes, and commit
|
|
15
15
|
(or squash) the one resulting transition. Pass
|
|
@@ -65,31 +65,34 @@ mistyped flag can never degrade a JSON caller to plain-text mode. A bare
|
|
|
65
65
|
|
|
66
66
|
## `gtd init`
|
|
67
67
|
|
|
68
|
-
Scaffolds a `.gtdrc.json` at the repository root
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
68
|
+
Scaffolds a **minimal** `.gtdrc.json` at the repository root, plus a `$schema`
|
|
69
|
+
link. It writes **no** `workflow:` key — gtd runs the bundled **unified**
|
|
70
|
+
workflow as its built-in default, so a state command works out of the box with
|
|
71
|
+
no config and no init at all. What `gtd init` seeds is the two things most
|
|
72
|
+
projects tune: a `vars: { "testCommand": "npm test" }` entry (the var the
|
|
73
|
+
bundled workflow's check script reads) and a ready-to-edit `modes:` block
|
|
74
|
+
suggesting a Prettier `format:` for each built-in steering-file mode
|
|
75
|
+
(`qa`/`review`). It takes **no argument** — passing one is a usage error
|
|
76
|
+
(`gtd init: too many arguments — init takes no argument`).
|
|
77
|
+
|
|
78
|
+
The bundled default has four entry points — each behind a green-baseline gate
|
|
77
79
|
that runs the suite before starting — into one shared review/squash tail (see
|
|
78
80
|
[STATES.md §10](../STATES.md#10-the-bundled-workflow-templates)): creating
|
|
79
|
-
`.gtd/TODO.md` starts the simple flow (
|
|
81
|
+
`.gtd/TODO.md` starts the simple flow (planning → building → checking), creating
|
|
80
82
|
`.gtd/REQUIREMENTS.md` starts the advanced flow (two-phase Q&A planning,
|
|
81
83
|
per-package parallel build, agentic spec-review), `gtd review <commitish>`
|
|
82
84
|
enters review directly, and `gtd fix` goes straight into repairing failing
|
|
83
85
|
tests. A red baseline halts at a `*-start-blocked` gate rather than starting new
|
|
84
|
-
work.
|
|
86
|
+
work. To CUSTOMIZE that machine, add your own `workflow:` key (a full definition
|
|
87
|
+
— there is no `extends`/merge); see
|
|
88
|
+
[Configuration](configuration.md#the-workflow-key).
|
|
85
89
|
|
|
86
90
|
The file is written **uncommitted**; review and commit it before your first
|
|
87
91
|
`gtd step` (an uncommitted `.gtdrc.json` is a pending change the initial state
|
|
88
92
|
would otherwise capture). `gtd init` refuses if the repo root already has its
|
|
89
|
-
own gtd config (a global/ancestor config, e.g. `~/.gtdrc`, does not count)
|
|
90
|
-
requires the repository root
|
|
91
|
-
|
|
92
|
-
`{"written":".gtdrc.json","workflow":"unified","prompts":[…]}`. See
|
|
93
|
+
own gtd config (a global/ancestor config, e.g. `~/.gtdrc`, does not count) and
|
|
94
|
+
requires the repository root (or a directory outside any repo). `--json` prints
|
|
95
|
+
`{"written":".gtdrc.json","inRepo":true}`. See
|
|
93
96
|
[Configuration](configuration.md#gtd-init).
|
|
94
97
|
|
|
95
98
|
## `gtd step <actor> [--cost=<n>] [--model=<name>]`
|
|
@@ -126,7 +129,7 @@ to `--json`.
|
|
|
126
129
|
Plain-mode output is one line:
|
|
127
130
|
|
|
128
131
|
```
|
|
129
|
-
committed: gtd(human): idle →
|
|
132
|
+
committed: gtd(human): idle → planning
|
|
130
133
|
```
|
|
131
134
|
|
|
132
135
|
or, at a no-op:
|
|
@@ -142,7 +145,7 @@ not passed):
|
|
|
142
145
|
```json
|
|
143
146
|
{
|
|
144
147
|
"state": "idle",
|
|
145
|
-
"subject": "gtd(human): idle →
|
|
148
|
+
"subject": "gtd(human): idle → planning",
|
|
146
149
|
"cost": 1450,
|
|
147
150
|
"model": "claude-opus-4-8"
|
|
148
151
|
}
|
|
@@ -385,7 +388,7 @@ agent or human:
|
|
|
385
388
|
declares `file:`+`mode:` formats that file in place and validates it first
|
|
386
389
|
(with the very same mode commands), and **refuses the step** (committing
|
|
387
390
|
nothing) when it is invalid — so a human's edit at a gate (answering at
|
|
388
|
-
`grilling-answer`, reviewing at `await-review`) is formatted and checked
|
|
391
|
+
`adv-grilling-answer`, reviewing at `await-review`) is formatted and checked
|
|
389
392
|
exactly like an agent's draft, and a malformed steering file is never
|
|
390
393
|
committed.
|
|
391
394
|
|
|
@@ -409,10 +412,10 @@ output is identical regardless of the current process/branch state.
|
|
|
409
412
|
$ gtd mermaid
|
|
410
413
|
stateDiagram-v2
|
|
411
414
|
state "idle" as idle
|
|
412
|
-
state "
|
|
415
|
+
state "planning" as planning
|
|
413
416
|
...
|
|
414
417
|
[*] --> idle
|
|
415
|
-
idle -->
|
|
418
|
+
idle --> planning : * **
|
|
416
419
|
...
|
|
417
420
|
note right of idle : human · message
|
|
418
421
|
...
|
|
@@ -425,7 +428,7 @@ Mermaid-aware renderer (GitHub, GitLab, VS Code, Obsidian, the
|
|
|
425
428
|
|
|
426
429
|
State names are aliased to Mermaid-safe identifiers (non-word characters fold to
|
|
427
430
|
`_`; a digit-led name gets an `s_` prefix) via a `state "<name>" as <alias>`
|
|
428
|
-
declaration up front, so a hyphenated name like `
|
|
431
|
+
declaration up front, so a hyphenated name like `plan-review` still displays
|
|
429
432
|
with its exact declared spelling. Rejects `--json` (exit 1,
|
|
430
433
|
`gtd mermaid does not accept --json`) — there is no structured shape to emit
|
|
431
434
|
beyond the Mermaid source itself — and takes no arguments (extra positional args
|
|
@@ -460,11 +463,11 @@ naming the state instead — bind it to an editor keybinding for a "jump to the
|
|
|
460
463
|
active steering file" command.
|
|
461
464
|
|
|
462
465
|
Dispatched before the repository-root guard and the config-reading path — the
|
|
463
|
-
server needs no git/workflow state of its own (like `gtd init`, it
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
466
|
+
server needs no git/workflow state of its own (like `gtd init`, it needs no
|
|
467
|
+
config to run). Rejects `--json` (exit 1, `gtd lsp does not accept --json`) and
|
|
468
|
+
extra positional arguments — it's a long-running server, not a state command.
|
|
469
|
+
Runs until the client disconnects (the LSP `exit` notification), then exits
|
|
470
|
+
cleanly.
|
|
468
471
|
|
|
469
472
|
## Error envelope
|
|
470
473
|
|
package/docs/configuration.md
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
# Configuration
|
|
2
2
|
|
|
3
|
-
gtd reads
|
|
4
|
-
[cosmiconfig](https://github.com/cosmiconfig/cosmiconfig). gtd ships
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
`
|
|
9
|
-
(
|
|
3
|
+
gtd reads an optional `.gtdrc` config file via
|
|
4
|
+
[cosmiconfig](https://github.com/cosmiconfig/cosmiconfig). gtd ships the bundled
|
|
5
|
+
**unified** workflow as its **built-in default**: with no `workflow:` configured
|
|
6
|
+
anywhere in the cwd→home config chain, that default is used automatically, so a
|
|
7
|
+
state command works out of the box with no config at all.
|
|
8
|
+
[`gtd init`](#gtd-init) is optional — it seeds a minimal `.gtdrc.json` with the
|
|
9
|
+
two things most projects tune (a `testCommand` var and a Prettier formatting
|
|
10
|
+
suggestion), not the workflow. To CUSTOMIZE the machine itself, add your own
|
|
11
|
+
[`workflow:`](#the-workflow-key) key. Supported filenames (searched in this
|
|
12
|
+
order):
|
|
10
13
|
|
|
11
14
|
- `.gtdrc`
|
|
12
15
|
- `.gtdrc.json`
|
|
@@ -19,10 +22,11 @@ prompts as editable Markdown under `gtd-prompts/`). A state command run with no
|
|
|
19
22
|
|
|
20
23
|
v3's `.gtdrc` has exactly three blessed top-level keys:
|
|
21
24
|
|
|
22
|
-
- **`workflow`** (object,
|
|
23
|
-
|
|
24
|
-
`src/PatternConfig.ts`. Absent =
|
|
25
|
-
|
|
25
|
+
- **`workflow`** (object, optional) — the whole machine definition (its states,
|
|
26
|
+
plus its own `vars:` defaults and `modes:`), compiled by
|
|
27
|
+
`src/PatternConfig.ts`. Absent = gtd's built-in default (the bundled unified
|
|
28
|
+
workflow) is used. Declare it to fully REPLACE that default with your own
|
|
29
|
+
machine (there is no `extends`/merge). See
|
|
26
30
|
["The `workflow:` key" below](#the-workflow-key) for its schema.
|
|
27
31
|
- **`vars`** (object, optional) — a flat `name -> scalar` map, one layer of the
|
|
28
32
|
merged `it.vars` every template sees — see ["Variables"](#variables) below.
|
|
@@ -52,11 +56,12 @@ interprets.
|
|
|
52
56
|
> verify a change compiles. This section is the exhaustive schema reference
|
|
53
57
|
> behind it.
|
|
54
58
|
|
|
55
|
-
|
|
56
|
-
no merge-over-a-built-in. The
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
A declared `workflow:` key fully REPLACES gtd's built-in default — there is no
|
|
60
|
+
`extends`, no merge-over-a-built-in. The built-in default is itself a YAML asset
|
|
61
|
+
(`src/workflows/unified.yaml`) compiled through the exact same compiler
|
|
62
|
+
(`compileWorkflowConfig`) your own `workflow:` value goes through — no
|
|
63
|
+
privileged code path — so you can materialize it into config form as a starting
|
|
64
|
+
point to edit (`renderInitConfig` in `src/workflows/templates.ts`). Its shape:
|
|
60
65
|
|
|
61
66
|
```yaml
|
|
62
67
|
workflow:
|
|
@@ -107,8 +112,8 @@ root, discovers the parent `.gtdrc` by walking up the directory chain (see
|
|
|
107
112
|
level's `./`-relative references against that level's own directory. When
|
|
108
113
|
workflows are layered across levels, every reference resolves against the file
|
|
109
114
|
that wrote it, so a parent's `./gtd-prompts/x.md` and a child's never collide.
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
(This is a capability of a `.gtdrc` you write yourself — `gtd init` seeds only
|
|
116
|
+
`vars:`/`modes:`, not a `workflow:` with file references.)
|
|
112
117
|
|
|
113
118
|
```yaml
|
|
114
119
|
workflow:
|
|
@@ -156,7 +161,7 @@ workflow:
|
|
|
156
161
|
"Delete `.gtd/REVIEW.md` to approve the whole cycle and rest at
|
|
157
162
|
idle."
|
|
158
163
|
"* **":
|
|
159
|
-
to:
|
|
164
|
+
to: planning
|
|
160
165
|
describe:
|
|
161
166
|
"Change any source file to leave feedback and start another round."
|
|
162
167
|
```
|
|
@@ -214,18 +219,18 @@ Forbidden on a commit state (never at rest):
|
|
|
214
219
|
```yaml
|
|
215
220
|
workflow:
|
|
216
221
|
states:
|
|
217
|
-
|
|
222
|
+
planning:
|
|
218
223
|
actor: agent
|
|
219
224
|
memory: plan
|
|
220
|
-
prompt: develop the
|
|
225
|
+
prompt: develop the sketch into a concrete plan
|
|
221
226
|
on:
|
|
222
|
-
"* **":
|
|
223
|
-
|
|
227
|
+
"* **": plan-review
|
|
228
|
+
plan-review:
|
|
224
229
|
actor: human
|
|
225
|
-
message:
|
|
230
|
+
message: accept the plan, or edit it to iterate
|
|
226
231
|
on:
|
|
227
232
|
"C": building
|
|
228
|
-
"* **":
|
|
233
|
+
"* **": planning
|
|
229
234
|
building:
|
|
230
235
|
actor: agent
|
|
231
236
|
memory: build # a different scope — implementation starts fresh
|
|
@@ -236,7 +241,7 @@ workflow:
|
|
|
236
241
|
commit: "feat: done"
|
|
237
242
|
```
|
|
238
243
|
|
|
239
|
-
Because `
|
|
244
|
+
Because `planning` re-enters itself around the review loop, every lap emits
|
|
240
245
|
`memory: plan` and the planner keeps its accumulated exploration; the move to
|
|
241
246
|
`building` emits a different label (`build`), which is where the driver clears
|
|
242
247
|
memory for a fresh implementation turn. A loop of same-labelled turns retains; a
|
|
@@ -282,10 +287,10 @@ workflow:
|
|
|
282
287
|
**steering-file mode**. Two names are BUILT IN, each carrying a VALIDATOR gtd
|
|
283
288
|
implements itself:
|
|
284
289
|
|
|
285
|
-
| `mode` | Format
|
|
286
|
-
| -------- |
|
|
287
|
-
| `qa` | The open-questions format (`## Open Questions` near the top and `## Answered Questions` at the bottom, one `###` sub-heading per question with a free-form body; status is positional, no marker line). |
|
|
288
|
-
| `review` | The checkbox review format (`# Review: <hash>` header, `<!-- base: <hash> -->` comment, `##` chunks, `- [ ]` pointers).
|
|
290
|
+
| `mode` | Format |
|
|
291
|
+
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
292
|
+
| `qa` | The open-questions format (`## Open Questions` near the top and `## Answered Questions` at the bottom, one `###` sub-heading per question with a free-form body; status is positional, no marker line). The bundled advanced flow additionally writes each open question as a checkbox list (candidate answers + a `- [ ] _your answer_` slot) and gates the human's answer step with `answerGate` (exactly one tick per question) — but that convention + gate live in the workflow/edge, not in this validator, which only checks the structure above. |
|
|
293
|
+
| `review` | The checkbox review format (`# Review: <hash>` header, `<!-- base: <hash> -->` comment, `##` chunks, `- [ ]` pointers). |
|
|
289
294
|
|
|
290
295
|
Any other name must be declared in a `modes:` map (next section) — as must a
|
|
291
296
|
`format:` command for these two, since gtd ships no formatter. A `mode:` naming
|
|
@@ -380,16 +385,17 @@ So for a state declaring `mode: qa`:
|
|
|
380
385
|
| both | its `format:` | its `validate:` |
|
|
381
386
|
|
|
382
387
|
That is what makes the built-in modes extensible rather than all-or-nothing —
|
|
383
|
-
and the top-level key means a project can plug its formatter into the
|
|
384
|
-
|
|
385
|
-
itself. **`gtd init` seeds exactly this block by default** (the
|
|
386
|
-
suggestion below), so a fresh repo already formats its steering files —
|
|
387
|
-
drop it to taste. It
|
|
388
|
+
and the top-level key means a project can plug its formatter into the built-in
|
|
389
|
+
default workflow (or its own) without re-declaring a `modes:` block on the
|
|
390
|
+
workflow itself. **`gtd init` seeds exactly this block by default** (the
|
|
391
|
+
Prettier suggestion below), so a fresh repo already formats its steering files —
|
|
392
|
+
edit or drop it to taste. It is what a scaffolded `.gtdrc.json` contains
|
|
393
|
+
(`gtd init` writes no `workflow:` key — the built-in default is used):
|
|
388
394
|
|
|
389
395
|
```jsonc
|
|
390
|
-
// .gtdrc.json —
|
|
396
|
+
// .gtdrc.json — as scaffolded by `gtd init`: a testCommand var and the markdown formatter
|
|
391
397
|
{
|
|
392
|
-
"
|
|
398
|
+
"vars": { "testCommand": "npm test" },
|
|
393
399
|
"modes": {
|
|
394
400
|
"qa": { "format": "npx prettier --write <%= it.file %>" },
|
|
395
401
|
"review": { "format": "npx prettier --write <%= it.file %>" },
|
|
@@ -702,24 +708,21 @@ can still override with its own `.gtdrc`.
|
|
|
702
708
|
|
|
703
709
|
## `gtd init`
|
|
704
710
|
|
|
705
|
-
gtd ships
|
|
706
|
-
command works
|
|
711
|
+
gtd ships the bundled unified workflow as its **built-in default**, so a state
|
|
712
|
+
command works out of the box with **no** config and no init at all. `gtd init`
|
|
713
|
+
is therefore optional — it just seeds the two things most projects tune:
|
|
707
714
|
|
|
708
715
|
```bash
|
|
709
716
|
gtd init # takes no argument
|
|
710
717
|
```
|
|
711
718
|
|
|
712
|
-
`gtd init` writes a `.gtdrc.json` at the repository root
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
[file reference](#content-values-inline-or-a-file-reference) — gtd inlines it at
|
|
720
|
-
load time, so a prompt is editable Markdown and editing it changes the workflow
|
|
721
|
-
with no config edit. Human `message:` blocks and check `script:` bodies stay
|
|
722
|
-
inline in the config (they are workflow mechanics, not prompts).
|
|
719
|
+
`gtd init` writes a **minimal** `.gtdrc.json` at the repository root — a
|
|
720
|
+
`$schema` link (so editors pick up completion/validation), a
|
|
721
|
+
`vars: { "testCommand": "npm test" }` entry (the var the built-in workflow's
|
|
722
|
+
check script reads), and a ready-to-edit `modes:` formatting suggestion (below).
|
|
723
|
+
It writes **no** `workflow:` key — the built-in default is used until you
|
|
724
|
+
declare your own. It takes **no argument** — passing one is a usage error
|
|
725
|
+
(`gtd init: too many arguments — init takes no argument`).
|
|
723
726
|
|
|
724
727
|
`gtd init` writes only config — it derives no git state — so it need not run in
|
|
725
728
|
a git repository. It runs at a **repository root** or in a directory **outside
|
|
@@ -731,9 +734,9 @@ only to write into a repository **subdirectory**, where the upward config walk
|
|
|
731
734
|
would never find the file. Either way, it will not overwrite an existing config
|
|
732
735
|
at that directory (remove it first to re-scaffold).
|
|
733
736
|
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
+
The [`modes:`](#modes--pluggable-steering-file-modes) block it seeds is a
|
|
738
|
+
ready-to-edit suggestion — a Prettier `format:` for each built-in steering-file
|
|
739
|
+
mode the default workflow uses:
|
|
737
740
|
|
|
738
741
|
```jsonc
|
|
739
742
|
"modes": {
|
|
@@ -748,12 +751,12 @@ this is the one default it suggests: a fresh repo auto-formats its steering
|
|
|
748
751
|
files out of the box, and you edit or drop the block freely (swap Prettier for
|
|
749
752
|
dprint, point at a script, or delete the key).
|
|
750
753
|
|
|
751
|
-
The
|
|
752
|
-
(all walked through in
|
|
754
|
+
The built-in default workflow has three entry points into a shared review/squash
|
|
755
|
+
tail (all walked through in
|
|
753
756
|
[STATES.md §10](../STATES.md#10-the-bundled-workflow-templates)):
|
|
754
757
|
|
|
755
|
-
- **the simple flow** — creating `.gtd/TODO.md` starts idle →
|
|
756
|
-
|
|
758
|
+
- **the simple flow** — creating `.gtd/TODO.md` starts idle → planning ⇄
|
|
759
|
+
plan-review → building → checking ⇄ fixing (→ escalate) → reviewing →
|
|
757
760
|
await-review.
|
|
758
761
|
- **the advanced flow** — creating `.gtd/REQUIREMENTS.md` starts the fuller
|
|
759
762
|
machine: two-phase Q&A planning (product then architecture), package
|
|
@@ -763,20 +766,15 @@ The one bundled template has three entry points into a shared review/squash tail
|
|
|
763
766
|
review a foreign branch.
|
|
764
767
|
|
|
765
768
|
Both file-created flows converge on `reviewing` → `await-review`, and a full
|
|
766
|
-
sign-off squashes the whole cycle into one commit.
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
fails with:
|
|
776
|
-
|
|
777
|
-
```
|
|
778
|
-
gtd: no workflow configured — run `gtd init` to create .gtdrc.json
|
|
779
|
-
```
|
|
769
|
+
sign-off squashes the whole cycle into one commit. To CUSTOMIZE any of this, add
|
|
770
|
+
a [`workflow:`](#the-workflow-key) key that fully replaces the default.
|
|
771
|
+
|
|
772
|
+
The file is written **uncommitted** — review it, then commit `.gtdrc.json`
|
|
773
|
+
before your first `gtd step` (an uncommitted file is a pending change the
|
|
774
|
+
initial state's `* **` edge would otherwise capture). `gtd init` refuses if the
|
|
775
|
+
repo root already has its OWN gtd config (remove it first to re-init; a
|
|
776
|
+
global/ancestor config such as `~/.gtdrc` does not count) and requires the
|
|
777
|
+
repository root (or a directory outside any repo).
|
|
780
778
|
|
|
781
779
|
## A complete example
|
|
782
780
|
|
package/docs/development.md
CHANGED
|
@@ -31,7 +31,8 @@ registry to keep in sync: a workflow's content strings are either inline in its
|
|
|
31
31
|
YAML/`.gtdrc` or a `./`-relative file reference auto-inlined at config load
|
|
32
32
|
(`src/PatternConfig.ts`) — see
|
|
33
33
|
[Configuration](configuration.md#content-values-inline-or-a-file-reference). The
|
|
34
|
-
bundled workflow template (`src/workflows/unified.yaml`)
|
|
34
|
+
bundled workflow template (`src/workflows/unified.yaml`) gtd runs as its
|
|
35
|
+
built-in default (and materializes into config form via `renderInitConfig`) is
|
|
35
36
|
imported as raw text via tsdown's `.yaml`-as-text loader (`tsdown.config.ts`)
|
|
36
37
|
and compiled through the same path a `.gtdrc` `workflow:` key goes through
|
|
37
38
|
(`src/workflows/templates.ts`) — no privileged code path.
|
package/docs/upgrading.md
CHANGED
|
@@ -122,29 +122,25 @@ upgrading.
|
|
|
122
122
|
|
|
123
123
|
## How to adopt
|
|
124
124
|
|
|
125
|
-
`workflow:` is
|
|
126
|
-
upgrading
|
|
125
|
+
`workflow:` is **optional** — gtd ships the bundled **unified** workflow as its
|
|
126
|
+
built-in default, so after upgrading a repo works with **no** config and no init
|
|
127
|
+
at all. The default forks on which steering file you create: `.gtd/TODO.md`
|
|
128
|
+
starts the **simple flow** (a `planning` ⇄ `plan-review` plan-iteration loop,
|
|
129
|
+
direct `building`, a `checking`/`fixing` loop), while `.gtd/REQUIREMENTS.md`
|
|
130
|
+
starts the **advanced flow** (two-phase grilling ⇄ grilling-answer /
|
|
131
|
+
architecting ⇄ architecting-answer / decompose / picking / per-package build
|
|
132
|
+
with an agentic spec-review gate). Both converge on the same `reviewing` →
|
|
133
|
+
`await-review` tail, and a full sign-off squashes the whole cycle into one
|
|
134
|
+
commit (see [STATES.md §10](../STATES.md#10-the-bundled-workflow-templates)).
|
|
135
|
+
|
|
136
|
+
`gtd init` is now optional and no longer writes a workflow — it seeds only a
|
|
137
|
+
minimal `.gtdrc.json` (a `testCommand` var and a Prettier formatting
|
|
138
|
+
suggestion). Run it if you want to tune those; otherwise nothing is required:
|
|
127
139
|
|
|
128
140
|
```bash
|
|
129
|
-
gtd init #
|
|
141
|
+
gtd init # optional — seeds testCommand + a formatting suggestion
|
|
130
142
|
```
|
|
131
143
|
|
|
132
|
-
`gtd init` (no argument) writes a `.gtdrc.json` for the single bundled
|
|
133
|
-
**unified** template (its agent prompts extracted to editable `gtd-prompts/*.md`
|
|
134
|
-
files the config references). The template forks on which steering file you
|
|
135
|
-
create: `.gtd/TODO.md` starts the **simple flow** (a single-shot `grilling`
|
|
136
|
-
plan, direct `building`, a `checking`/`fixing` loop), while
|
|
137
|
-
`.gtd/REQUIREMENTS.md` starts the **advanced flow** (two-phase grilling ⇄
|
|
138
|
-
grilling-answer / architecting ⇄ architecting-answer / decompose / picking /
|
|
139
|
-
per-package build with an agentic spec-review gate). Both converge on the same
|
|
140
|
-
`reviewing` → `await-review` tail, and a full sign-off squashes the whole cycle
|
|
141
|
-
into one commit (see
|
|
142
|
-
[STATES.md §10](../STATES.md#10-the-bundled-workflow-templates)). Review and
|
|
143
|
-
commit the generated `.gtdrc.json` (and its `gtd-prompts/` directory), then
|
|
144
|
-
continue from a settled `idle` boundary. **Note:** a repo relying on earlier
|
|
145
|
-
gtd's auto-created `.gtdrc.json` `$schema` stub (which carried no `workflow:`)
|
|
146
|
-
will now fail until you `gtd init` — the stub alone is no longer enough.
|
|
147
|
-
|
|
148
144
|
A repo that customized v2's `workflow:` key (actors, gates, guard vocabulary,
|
|
149
145
|
ladders) needs to rewrite it from scratch in the v3 schema — see
|
|
150
146
|
[Configuration](configuration.md) for the schema and a complete worked example.
|