feat(plan): plan_version 1.9 is the current target, the file first on every line [skip-docs]

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-10-12 16:42:28 +02:00
commit 64e6771c8b
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q
14 changed files with 219 additions and 34 deletions

View file

@ -18,7 +18,7 @@ source_findings:
> **Plan quality: {grade}** ({score}/100) — {APPROVE | APPROVE_WITH_NOTES | REVISE | REPLAN}
>
> Generated by trekplan v{version} on {YYYY-MM-DD} — `plan_version: 1.8` · `ceremony: {small | bounded | architectural}`
> Generated by trekplan v{version} on {YYYY-MM-DD} — `plan_version: 1.9` · `ceremony: {small | bounded | architectural}`
## Context
@ -71,7 +71,7 @@ their relationships, and the data flow between them.*
Each step targets 1–2 files and one focused change, and is a vertical slice:
a narrow but complete path through every layer it touches, verifiable on its
own. Preparatory refactoring comes first, as its own steps. Every step has
`Test first:` (plan_version 1.8 requires it), and one step runs the thing
`Test first:` (plan_version 1.8 or later requires it), and one step runs the thing
end to end (`End-to-end:`). The test for a behaviour belongs in the step that
builds it: a step of only tests for behaviour an earlier step delivered passes
at its start point and can never be proven red (the validator warns:
@ -89,6 +89,17 @@ runs green before the checkpoint, on a step that can break existing tests;
never empty. `On failure:` opens with `revert`, `retry`, `skip` or `escalate`,
then the specifics.
From plan_version 1.9 the rule is the file first on every line: each `Files:`
entry and each `Test first:` `File:` line opens with its backticked path(s),
separated only by commas or spaces, and everything after the first other text
is description that is never read. A 1.9 step always names a file (`none` or
an empty `Files:` is refused). In `Files:`,
every path stands before any annotation: `` `src/a.mjs`, `src/b.mjs` (new) ``,
never `` `src/a.mjs` (new), `src/b.mjs` `` (in 1.9 that second path is
description).
Several test files share one `File:` line the same way:
`` File: `a.test.mjs`, `b.test.mjs` *(new)* ``.
### Step 1: {description}
- **Files:** `path/to/file.ts`
@ -146,8 +157,8 @@ then the specifics.
*A project without tests still gets `Test first:` on every step: the first step
adds the test runner (or a script under `tests/`) the later steps use. A plan
without an `End-to-end:` step is invalid at plan_version 1.8 — without it the
result can only be "not verified end to end", never green.*
without an `End-to-end:` step is invalid at plan_version 1.8 or later — without
it the result can only be "not verified end to end", never green.*
### Manifest — objective completion predicate