@pmelab/gtd 9.1.2 → 9.3.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 (3) hide show
  1. package/README.md +178 -113
  2. package/dist/gtd.bundle.mjs +164 -131
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -21,9 +21,10 @@ No chat scrollback. No lost sessions. No infinite fix loops. Just git.
21
21
  - **Shareable.** Push the branch, and the workflow travels with it — the state
22
22
  lives in the commits, so another machine (or another person) picks up exactly
23
23
  where you left off.
24
- - **Files, not chat.** Plans live in `.gtd/TODO.md`. Request changes by editing
25
- it, approve by leaving the tree clean — all in your own editor. There is no
26
- chat UI to lose.
24
+ - **Files, not chat.** Plans live in `.gtd/` steering files (`REQUIREMENTS.md`,
25
+ `ARCHITECTURE.md`, the package files under `.gtd/packages/`). Request changes
26
+ by editing them, approve by leaving the tree clean — all in your own editor.
27
+ There is no chat UI to lose.
27
28
  - **Harness agnostic.** gtd emits prompts to stdout (or JSON). Claude Code, a
28
29
  bash loop, a CI job, or you reading it out loud — the workflow doesn't care
29
30
  who executes it.
@@ -61,17 +62,23 @@ gtd init
61
62
  This writes a minimal `.gtdrc.json` seeding the one variable most projects
62
63
  change — the test command (`vars.testCommand`, defaulting to `npm test`) — plus
63
64
  a top-level `modes:` block suggesting **Prettier** as the steering-file
64
- formatter (`npx prettier --write` for the built-in `qa`/`review`/`prose` modes —
65
- format only, so gtd still validates the `qa`/`review` ones; `prose`, used by the
66
- simple flow's plan file, has no validator to begin with); edit or drop either
67
- freely (point `testCommand` at your suite, swap Prettier for dprint or a script,
68
- delete a key). It writes **no** `workflow:` key — the machine is built in — so
69
- review and commit the file before your first `gtd land`. `gtd init` takes no
70
- argument and refuses to clobber an existing config; it may also run in a plain
71
- parent directory (not a git repo) to seed a shared config a nested repo picks
72
- up. To customize the machine itself, add a `workflow:` key (there is no default
65
+ formatter (`npx prettier --write` for the built-in `qa`/`review` modes — format
66
+ only, so gtd still validates them); edit or drop either freely (point
67
+ `testCommand` at your suite, swap Prettier for dprint or a script, delete a
68
+ key). It writes **no** `workflow:` key — the machine is built in — so review and
69
+ commit the file before your first `gtd land`. `gtd init` takes no argument and
70
+ refuses to clobber an existing config; it may also run in a plain parent
71
+ directory (not a git repo) to seed a shared config a nested repo picks up. To
72
+ customize the machine itself, add a `workflow:` key (there is no default
73
73
  fallback to merge over — a `workflow:` is the whole definition).
74
74
 
75
+ gtd requires a repository with **at least one commit** before any state command
76
+ (`land`, `--entry`, `next`, `status`, `abandon`, `restore`, `validate`) will run
77
+ — there is no workflow state to derive from an empty history. Committing the
78
+ `.gtdrc.json` above (or anything else) satisfies this by construction;
79
+ `gtd init`, `gtd install`, `gtd lsp`, `gtd visualize`, and `gtd check` are
80
+ unaffected since none of them derive workflow state.
81
+
75
82
  ## How it works
76
83
 
77
84
  gtd is a small **pattern machine**: named states, each awaiting one actor and
@@ -110,76 +117,100 @@ together: the `action` leads when the edge declares one, with the raw pattern
110
117
  (and `describe`) still shown alongside it, so a human choosing between routes
111
118
  reads intent first, glob second.
112
119
 
113
- The unified workflow has **entry points behind a green-baseline gate, into one
114
- shared tail**. Every entry first runs your test suite and only starts once it's
115
- green — you never build (or review) on top of a red baseline; a red run halts
116
- and tells you to repair it first (that's what `gtd --entry fix-precheck` is
117
- for). The two steering-file entries are chosen by which file you create:
118
-
119
- - Create **`.gtd/TODO.md`** with a short sketch to start the **simple** flow: an
120
- agent develops your sketch into a concrete plan — deciding open points itself
121
- rather than asking questions — and hands it back for you to accept as-is or
122
- edit. Editing sends it round again; accepting builds the plan in one turn and
123
- runs your tests (looping on failures) — the check run also mechanically sweeps
124
- `.gtd/TODO.md` and other spent steering files, so a plan that's left in place
125
- by mistake never leaks into the review diff or the final squash.
126
- - Create **`.gtd/REQUIREMENTS.md`** to start the **advanced** flow: one design
127
- conversation across product then technical Q&A (`.gtd/REQUIREMENTS.md` →
128
- `.gtd/ARCHITECTURE.md`) and decomposition — each open question offers a couple
129
- of candidate answers plus a `- [ ] _your answer_` slot, and you tick exactly
130
- one per question (the gate won't let a phase advance while any question is
131
- unanswered) — then decomposition into work **packages** (each a set of
132
- independent tasks a single build turn fans out to parallel subagents), a
133
- per-package test loop, and a per-package **agentic review** that verifies the
134
- package against its spec. All three phases share one machine identity, so the
135
- agent never re-explores the codebase from scratch between them, and the
136
- human's answers carry forward into decomposition. A package whose work already
137
- landed (an earlier package's fix turn pulled it in) is not a dead end: the
138
- build turn records per-criterion evidence in `.gtd/SATISFIED.md` instead of
139
- implementing anything, and the package still goes through the checks and the
140
- spec review before closing out. If a queue item ever _does_ dead-end (a build
141
- turn that authors nothing stalls), the supported recovery is to write that
142
- same file yourself and `gtd land` — no hand-authored state commit.
143
-
144
- Both flows converge on the same tail: an agent hands you a `.gtd/REVIEW.md`
145
- checkbox review of the diff — the prompt never inlines the diff itself; it names
146
- the commit the changes are based at and the agent runs `git diff` to read the
147
- range before writing the review. While the process rests at that gate, the
148
- landing script opens a **review checkout window**: HEAD is rewound to the review
149
- base with the working tree untouched, so the whole reviewable change shows up as
150
- ordinary uncommitted changes in your editor's normal git integration (and files
151
- added during the process show up as ordinary untracked files, so discarding one
152
- deletes it — an untracked file you leave alone is not a pending change, and only
153
- actually removing it from disk counts as a deletion). The next landing's own
154
- script closes the window before it commits. Tick a box as you review each hunk
155
- (ticking just records "I read this"), and leave a **comment** to request
156
- changes: a note on a line, an inline `// TODO`-style comment in the code, or a
157
- direct code edit. Any comment sends a build + re-review round — an agent first
158
- turns your comments into an explicit instruction list, then a build turn
159
- implements it (a re-review then covers only the follow-through, and a hand-edit
160
- is treated as your own fix the agent completes without reverting your lines; a
161
- comment can't be silently dropped — a build turn that addresses nothing is
162
- refused). For the simple flow, the build turn that follows through on feedback
163
- and the turn that drafts the final squash message both resume the same session
164
- that built the feature in the first place, since the review tail is nested
165
- inside that build identity rather than sitting beside it. Ticking every box with
166
- no comment is the sign-off, which collapses the whole process into one commit (a
167
- **squash finale** whose message an agent drafts). Landing with a box still
168
- unticked and no comment is refused (finish reviewing first), as is deleting
169
- `.gtd/REVIEW.md`. Both refusals hold wherever the review doc lives: repointing
170
- `reviewFile` out of `.gtd/` (say to `REVIEW.md` at the repo root) changes
171
- nothing about them — your own edit to the review doc is never mistaken for a
172
- code comment, and the doc's pre-turn copy is read at the review window's saved
173
- head rather than at the rewound `HEAD`.
174
-
175
- The same review tail also has a direct entry point —
120
+ **Your input is a spec, not the work.** The unified workflow treats ANY change
121
+ to the tree — a hand-edit to real code, a scratch note in some file, anything at
122
+ all — as a sketch to be finished, never as work to be preserved: there is no
123
+ fork on which steering file you happen to create, and `idle` has exactly one
124
+ outgoing edge, into `unwind`. `.gtd/TODO.md` (the `todoFile` var) is a good
125
+ default place to start sketching when you'd rather write a note than touch code
126
+ — despite living beside the workflow's own state files, that sketch is your
127
+ input for `design.triage` to fold in, never gtd bookkeeping to preserve or
128
+ ignore. `unwind` reverts that whole diff back out of your working tree
129
+ (`git revert --no-commit` against the commit it just landed in) before planning
130
+ ever starts — your tree is back to exactly what it was, and your intent doesn't
131
+ disappear, it survives in history for `design.triage` to read.
132
+
133
+ From there, `start-gate.check` runs your test suite on the tree as it now stands
134
+ — which, thanks to the unwind, is simply your repo's own baseline. The rule is
135
+ the plain one: the baseline must be green. A red run halts the process and tells
136
+ you to repair it first (that's what `gtd --entry fix-precheck` is for);
137
+ `review-gate` follows the same rule.
138
+
139
+ Once past the gate, `design.triage` reads the diff that started the process
140
+ itself — the prompt never inlines it; it finds the entry commit (the one
141
+ `unwind` reverted) and runs `git show` against it — and groups that diff into an
142
+ ORDERED list of **concerns**, each one able to leave the test suite green on its
143
+ own, classifying each as **product** (a user-facing/requirements decision) or
144
+ **technical** (an implementation decision). It raises open questions for the
145
+ product concerns only, in `.gtd/REQUIREMENTS.md`, folding EVERYTHING the entry
146
+ commit added into those concerns — a scratch sketch and a hand-edited code
147
+ change alike, since the unwind already reverted both; nothing is left to delete.
148
+ A shared check+answer gate then probes `.gtd/REQUIREMENTS.md` for unanswered
149
+ questions: each open question offers a couple of candidate answers plus a
150
+ `- [ ] _your answer_` slot, and you tick exactly one per question (the gate
151
+ won't let the phase advance while any question is unanswered) — but a phase
152
+ whose document has no open questions skips that human stop entirely and falls
153
+ straight through.
154
+
155
+ Once the product questions are settled, `architecture.author` picks up as a
156
+ **cold reader** — a separate machine with its own memory scope, so it does not
157
+ resume the triage conversation but reads `.gtd/REQUIREMENTS.md` in full — and
158
+ develops the _how_ for each settled concern, raising only technical open
159
+ questions in `.gtd/ARCHITECTURE.md` (routed through that same shared
160
+ check+answer gate shape, again skipping the human stop when nothing is open),
161
+ deleting `.gtd/REQUIREMENTS.md` once its content is folded in. Once those are
162
+ settled, `architecture.decompose` is a purely mechanical write-out — **one
163
+ package file per concern**, in the settled order, with no merge/split judgement
164
+ of its own (that already happened in triage's grouping) — handing off to the
165
+ per-package build queue: each package (a set of independent tasks a single build
166
+ turn fans out to parallel subagents) runs its own test loop and a per-package
167
+ **agentic review** that verifies it against its own spec. A package whose work
168
+ already landed (an earlier package's fix turn pulled it in) is not a dead end:
169
+ the build turn records per-criterion evidence in `.gtd/SATISFIED.md` instead of
170
+ implementing anything, and the package still goes through the checks and the
171
+ spec review before closing out. If a queue item ever _does_ dead-end (a build
172
+ turn that authors nothing stalls), the supported recovery is to write that same
173
+ file yourself and `gtd land` — no hand-authored state commit.
174
+
175
+ The process converges on that same shared tail: an agent hands you a
176
+ `.gtd/REVIEW.md` checkbox review of the diff — the prompt never inlines the diff
177
+ itself; it names the commit the changes are based at and the agent runs
178
+ `git diff` to read the range before writing the review. While the process rests
179
+ at that gate, the landing script opens a **review checkout window**: HEAD is
180
+ rewound to the review base with the working tree untouched, so the whole
181
+ reviewable change shows up as ordinary uncommitted changes in your editor's
182
+ normal git integration (and files added during the process show up as ordinary
183
+ untracked files, so discarding one deletes it — an untracked file you leave
184
+ alone is not a pending change, and only actually removing it from disk counts as
185
+ a deletion). The next landing's own script closes the window before it commits.
186
+ Tick a box as you review each hunk (ticking just records "I read this"), and
187
+ leave a **comment** to request changes: a note on a line, an inline
188
+ `// TODO`-style comment in the code, or a direct code edit. Any comment sends a
189
+ build + re-review round — an agent first turns your comments into an explicit
190
+ instruction list, then a build turn implements it (a re-review then covers only
191
+ the follow-through, and a hand-edit is treated as your own fix the agent
192
+ completes without reverting your lines; a comment can't be silently dropped — a
193
+ build turn that addresses nothing is refused). The build turn that follows
194
+ through on feedback and the turn that drafts the final squash message both
195
+ resume the same session that built the feature in the first place, since the
196
+ review tail is nested inside that build identity rather than sitting beside it.
197
+ Ticking every box with no comment is the sign-off, which collapses the whole
198
+ process into one commit (a **squash finale** whose message an agent drafts).
199
+ Landing with a box still unticked and no comment is refused (finish reviewing
200
+ first), as is deleting `.gtd/REVIEW.md`. Both refusals hold wherever the review
201
+ doc lives: repointing `reviewFile` out of `.gtd/` (say to `REVIEW.md` at the
202
+ repo root) changes nothing about them — your own edit to the review doc is never
203
+ mistaken for a code comment, and the doc's pre-turn copy is read at the review
204
+ window's saved head rather than at the rewound `HEAD`.
205
+
206
+ A second entry, the same review tail's own direct entry point —
176
207
  `gtd --entry review-gate.check --var reviewBase=<commitish>` starts a brand new
177
208
  process reviewing `<commitish>..HEAD` with no build of its own, e.g. a
178
209
  colleague's PR branch (`review-gate.check`'s `reviewBase:` is a template bound
179
210
  to the `reviewBase` var, so supplying it via `--var` fixes the whole process's
180
211
  diff base to that commitish). Its squash keeps and describes only the fixes made
181
212
  _during_ the review (not the reviewed changeset); a clean sign-off with no fixes
182
- becomes an empty `chore: human review` commit. A fourth entry,
213
+ becomes an empty `chore: human review` commit. A third entry,
183
214
  `gtd --entry fix-precheck`, starts from a clean `idle` and goes straight into
184
215
  repairing a red baseline — repair, review, and squash into one commit. If the
185
216
  suite is already green there is nothing to fix, and the log is left untouched —
@@ -191,19 +222,23 @@ no commit is left behind.
191
222
  _extra_ reachability root (and drives a badge in `gtd visualize`) for a state
192
223
  that would otherwise be unreachable from the ordinary `idle` rest —
193
224
  `review-gate.check` and `fix-precheck` need it for exactly that reason, while
194
- `plan-gate.check`/`spec-gate.check` carry it too (the bundled template dedups
195
- the three `entryGate` instances into one shared machine, so flagging the shared
196
- state flags all three) even though `idle` already reaches them the ordinary way.
197
- `entry: true` is not a precondition for `--entry` to target a state.
225
+ `start-gate.check` carries it too (the bundled template dedups its two
226
+ `entryGate` instances — `start-gate` and `review-gate` — into one shared
227
+ machine, so flagging the shared state flags both) even though `idle` already
228
+ reaches it the ordinary way. `entry: true` is not a precondition for `--entry`
229
+ to target a state.
198
230
 
199
231
  Every agent state routes its model through two `vars` tiers — `plannerModel`
200
232
  (heavier planning and review) and `coderModel` (the coding turns) — so you can
201
233
  repoint the models globally in one place (a `vars:` edit or a `GTD_PLANNERMODEL`
202
- override) instead of per state. Steering-file path vars (`feedbackFile`,
203
- `reviewFile`, …) work the same way, and propagate to the `on` patterns that
204
- route on them too — a repointed path var actually reroutes the machine, not just
205
- the templates that read/write the file. A separate `stateDir` var (default
206
- `.gtd`) names only where the check scripts keep their own scratch/bookkeeping,
234
+ override) instead of per state. Steering-file path vars (`todoFile`,
235
+ `feedbackFile`, `reviewFile`, …) work the same way, and propagate to the `on`
236
+ patterns that route on them too — a repointed path var actually reroutes the
237
+ machine, not just the templates that read/write the file. `todoFile` (default
238
+ `.gtd/TODO.md`, `idle`'s own `file:` hint) is the one exception: it's the only
239
+ per-file var gtd never writes and never reads, since it names your own sketch
240
+ pad, not a file any state produces. A separate `stateDir` var (default `.gtd`)
241
+ names only where the check scripts keep their own scratch/bookkeeping,
207
242
  independent of the per-file vars — relocate one steering file without touching
208
243
  it.
209
244
 
@@ -280,7 +315,9 @@ Commands:
280
315
  non-zero when there are any. Resolves no workflow state and
281
316
  reads no config — standalone, runnable from any directory
282
317
  with <mode>/<file> given explicitly. This is what a
283
- workflow's emitted validation script invokes as a leaf step
318
+ workflow's emitted validation script invokes as a leaf step.
319
+ --open-questions runs the qa unanswered-questions predicate
320
+ instead (see --help)
284
321
  install Print a complete, self-contained briefing that teaches an
285
322
  agent (or a human) to build a gtd driver in any shell or
286
323
  runtime — the self-serve version of README's 'Writing
@@ -303,6 +340,10 @@ Options:
303
340
  (with --entry; repeatable) supply a fixed it.vars
304
341
  override for the new process; the name must already be
305
342
  declared by the workflow's own vars: or the .gtdrc vars:
343
+ --open-questions (gtd check only) ignore <mode>'s structural findings and
344
+ instead run the qa open-questions predicate over <file>,
345
+ printing each unanswered question one per line and exiting
346
+ non-zero when any remain
306
347
  --version, -v Print version and exit
307
348
  --help, -h Print this help and exit
308
349
  ```
@@ -383,17 +424,17 @@ exits. You act by editing files (answer a plan question, tick a review box, fix
383
424
  code) and re-running it — your pending edit arrives as the loop's first beat
384
425
  (`kind: "capture"`, landed immediately), so you never run `gtd land` by hand.
385
426
 
386
- Some gates accept by INACTION instead: the bundled template's `plan.await-plan`
387
- routes its `"C"` (clean-tree) pattern onward, so changing nothing there means
388
- "accept the plan". That reaches the driver as `kind: "message"`, which no
389
- inspection can tell apart from a gate you have not read yet — so the driver
390
- treats its OPENING beat as yours either way and lands it: you re-ran it while
391
- resting there, and that invocation IS the decision. Every later beat halts as
392
- usual, because a gate the driver produced mid-run is one you have not seen.
393
- Landing an opening beat at a gate with no `"C"` pattern is harmless — a benign
394
- no-op (see `gtd land`'s exit codes below) — and the gate then prints on the next
395
- beat. A mid-process restart simply resumes driving from whatever beat is
396
- actually next.
427
+ Some gates could accept by INACTION instead: a workflow may declare a `"C"`
428
+ (clean-tree) pattern on a human-actor state that routes onward, so changing
429
+ nothing there means "accept as-is" rather than nothing happening. That reaches
430
+ the driver as `kind: "message"` either way, which no inspection can tell apart
431
+ from a gate you have not read yet — so the driver treats its OPENING beat as
432
+ yours regardless and lands it: you re-ran it while resting there, and that
433
+ invocation IS the decision. Every later beat halts as usual, because a gate the
434
+ driver produced mid-run is one you have not seen. Landing an opening beat at a
435
+ gate with no `"C"` pattern is harmless — a benign no-op (see `gtd land`'s exit
436
+ codes below) — and the gate then prints on the next beat. A mid-process restart
437
+ simply resumes driving from whatever beat is actually next.
397
438
 
398
439
  Anything richer at that boundary — opening your editor, desktop notifications,
399
440
  terminal-multiplexer status — is the job of an outer wrapper around the driver,
@@ -758,17 +799,14 @@ emitted script opens by asserting its own precondition
758
799
  and the same shape for a review window's saved ref — see `src/Emit.ts`'s
759
800
  `headAssertion`/`reviewWindowAssertion`), so a script generated against a
760
801
  repository state that has since moved refuses loudly instead of corrupting
761
- anything. In a repository with no commits yet, `<expected>` is the empty string
762
- — the deciding read's own convention for "no commits yet" — so the first
763
- workflow commit is allowed to land instead of being blocked by an unborn `HEAD`.
764
- **Emitted scripts are re-runnable**: this is the single most important property
765
- for a driver's recovery logic. Re-running a script that already fully applied is
766
- a no-op (its git writes are `--allow-empty` commits, idempotent ref updates, and
767
- tolerant staged-restore calls), and re-running one that only partially applied
768
- resumes correctly, because the precondition either still holds (nothing landed
769
- yet — safe to retry verbatim) or gtd's next invocation reads the new real state
770
- and emits a fresh script for what remains. A driver never needs its own
771
- retry/resume logic beyond "if the script failed, ask gtd again."
802
+ anything. **Emitted scripts are re-runnable**: this is the single most important
803
+ property for a driver's recovery logic. Re-running a script that already fully
804
+ applied is a no-op (its git writes are `--allow-empty` commits, idempotent ref
805
+ updates, and tolerant staged-restore calls), and re-running one that only
806
+ partially applied resumes correctly, because the precondition either still holds
807
+ (nothing landed yet — safe to retry verbatim) or gtd's next invocation reads the
808
+ new real state and emits a fresh script for what remains. A driver never needs
809
+ its own retry/resume logic beyond "if the script failed, ask gtd again."
772
810
 
773
811
  ### Prerequisites
774
812
 
@@ -1037,6 +1075,26 @@ model, pattern grammar, load-time rules, and how to verify a change compiles.
1037
1075
  > discard it and start over (or finish the process on the pre-upgrade workflow
1038
1076
  > version first).
1039
1077
 
1078
+ > **Upgrading a `workflow:` from the old two-flow (`.gtd/TODO.md` vs.
1079
+ > `.gtd/REQUIREMENTS.md`) shape?** The bundled template collapsed that fork into
1080
+ > one flow: `idle` now has a single outgoing edge — any change at all starts the
1081
+ > process, never a fork on which steering file you create — and
1082
+ > `plan-gate.check`/`spec-gate.check` merged into one shared `start-gate.check`.
1083
+ > The old plan-iteration machine's `plan.planning`/`plan.await-plan` states and
1084
+ > its monolithic `build.building` state are gone outright; every concern now
1085
+ > goes through the same per-package build queue instead. Renamed:
1086
+ > `design.product-author` → `design.triage`, `design.product-answer` →
1087
+ > `design.gate.answer`, `design.technical-author` → `architecture.author`,
1088
+ > `design.technical-answer` → `architecture.gate.answer`, `design.decompose` →
1089
+ > `architecture.decompose` (architecture is now its own sibling machine with its
1090
+ > own memory scope, not nested under `design`). The `prose` mode is gone and
1091
+ > there is no more free-form _plan_ file — `todoFile` itself came back later
1092
+ > with a different job: `idle`'s own mode-less `file:` hint, gtd's sketch pad
1093
+ > that no state writes or reads. As with every rename above, an in-flight
1094
+ > process resting at one of the old names can no longer be resumed;
1095
+ > `gtd abandon` it (or finish it on the pre-upgrade workflow version) before
1096
+ > upgrading.
1097
+
1040
1098
  ### Variables
1041
1099
 
1042
1100
  Every template — `script`/`prompt`/`message`/`commit`, a machine's own `model:`,
@@ -1148,7 +1206,14 @@ separator), symbols over a `qa`-mode file's open questions plus "pick this
1148
1206
  option"/"uncheck this option" code actions on each option — offered anywhere on
1149
1207
  the option's list item, including any wrapped continuation lines, not just its
1150
1208
  own `- [ ]` line — diagnostics for both (live as you edit), and a
1151
- `gtd.openSteeringFile` command that jumps to the current state's steering file.
1209
+ `gtd.openSteeringFile` command that jumps to the current state's steering file —
1210
+ including `idle`, whose `todoFile` hint gives the one keybinding an answer even
1211
+ before a process has started. The command only names that path — it never
1212
+ stat-checks or creates it — so on a repo that has never run gtd, `.gtd/` may not
1213
+ exist yet and editors differ on opening a file whose parent directory is missing
1214
+ (an empty buffer that creates it on save vs. refusing the path outright); this
1215
+ bites only the very first sketch in a fresh repo, since the workflow's own check
1216
+ scripts create the state directory on the first `gtd next`/`gtd land`.
1152
1217
 
1153
1218
  It is config-driven via each state's `file:`/`mode:`, and falls back to basename
1154
1219
  dispatch (`REVIEW.md` → `review`) with no config in sight. `qa` and `review` are
@@ -1160,10 +1225,10 @@ itself, so you bring your own formatter and your own checkers. Overriding one of
1160
1225
  actions — those come from the FORMAT (the name), independent of who validates —
1161
1226
  but `gtd lsp` never runs a shell command per keystroke, so live diagnostics
1162
1227
  become one `Information` notice pointing at `gtd validate` instead of the
1163
- built-in findings. Any OTHER mode name — `prose` (used by the simple flow's plan
1164
- file), or a project's own declared name — has no built-in format, so it gets no
1165
- live editor support at all: `gtd validate`'s emitted script and the `gtd land`
1166
- gate still format and validate it like any other mode.
1228
+ built-in findings. Any OTHER mode name — a project's own declared name (e.g.
1229
+ `prose`, for a free-form note) — has no built-in format, so it gets no live
1230
+ editor support at all: `gtd validate`'s emitted script and the `gtd land` gate
1231
+ still format and validate it like any other mode.
1167
1232
 
1168
1233
  ## Development
1169
1234