pi-gauntlet 7.10.0 → 7.10.1
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v7.10.1 - 2026-10-13
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- `gauntlet-resume` repairs plan citation drift on a `plan_check` failure instead of stopping: moved anchors, missing literals, `Modify:` rows that completed tasks deleted, and renamed `Test:` paths are fixed in place through a new `## Plan repair` section of the brief contract, re-checked up to three rounds, committed alone when the plan was tracked and clean, and reported on a `Repaired plan:` receipt line; the restore then continues with the task list verbatim. A finding that needs a task renamed, reordered, added, or removed stops before any write with a `Repair stopped:` line. Reconstruction reads task evidence from the union of the working-copy and plan-commit `Files:` paths. New eval target `eval/gauntlet-resume`.
|
|
8
|
+
|
|
3
9
|
## v7.10.0 - 2026-10-11
|
|
4
10
|
|
|
5
11
|
### Changed
|
package/README.md
CHANGED
|
@@ -87,7 +87,7 @@ pi-gauntlet is **opinionated**: it recommends this pipeline for non-trivial chan
|
|
|
87
87
|
|
|
88
88
|
## Handoff and resume
|
|
89
89
|
|
|
90
|
-
`/skill:gauntlet-handoff` and `/skill:gauntlet-resume` are a pair: cohort's `handoff` skill writes the six flow-agnostic headings, gauntlet-handoff appends `## Process state`, and gauntlet-resume reads the whole brief back. Both gauntlet skills read one grammar file, `skills/gauntlet-resume/reference/brief-contract.md`; the repo validator (`scripts/ci.mjs`) fails if a grammar line appears anywhere else under `skills/`. Requires pi-cohort >= 7.1.0 (the `handoff` skill, [pi-cohort #18](https://github.com/jjuraszek/pi-cohort/issues/18)); on an older pi-cohort, gauntlet-handoff stops before writing. A resume also reads the spec's `**Amend-grant:**` header line and prints `Standing grant active: <sentence>` or `No standing grant.` on the line after its closing line; the brief itself carries no grant.
|
|
90
|
+
`/skill:gauntlet-handoff` and `/skill:gauntlet-resume` are a pair: cohort's `handoff` skill writes the six flow-agnostic headings, gauntlet-handoff appends `## Process state`, and gauntlet-resume reads the whole brief back. Both gauntlet skills read one grammar file, `skills/gauntlet-resume/reference/brief-contract.md`; the repo validator (`scripts/ci.mjs`) fails if a grammar line appears anywhere else under `skills/`. Requires pi-cohort >= 7.1.0 (the `handoff` skill, [pi-cohort #18](https://github.com/jjuraszek/pi-cohort/issues/18)); on an older pi-cohort, gauntlet-handoff stops before writing. A resume also reads the spec's `**Amend-grant:**` header line and prints `Standing grant active: <sentence>` or `No standing grant.` on the line after its closing line; the brief itself carries no grant. On a `plan_check` failure, resume repairs plan citation drift itself (moved anchors, changed literals, file rows that completed tasks deleted) and stops only when a task must change.
|
|
91
91
|
|
|
92
92
|
### Smoke walkthrough (release-gated)
|
|
93
93
|
|
package/package.json
CHANGED
|
@@ -23,7 +23,8 @@ before any tracker mutation; every stop names the offending path, field, or line
|
|
|
23
23
|
|
|
24
24
|
- Reads: anything.
|
|
25
25
|
- Writes: `phase_tracker` / `plan_tracker` state after every check passes and every
|
|
26
|
-
human question is answered;
|
|
26
|
+
human question is answered; the plan file, only through `reference/brief-contract.md`
|
|
27
|
+
`## Plan repair`; on the seed route, what `/skill:using-git-worktrees`
|
|
27
28
|
writes. Never a spec copy, rename, or marker commit.
|
|
28
29
|
- Never: `git worktree add` directly; worktree creation by resume itself only on
|
|
29
30
|
the seed route, only through `/skill:using-git-worktrees`; infer approval from
|
|
@@ -130,7 +130,7 @@ announcement without re-resolving it.
|
|
|
130
130
|
|---|---|
|
|
131
131
|
| brainstorm | `start brainstorm`; `substep` if the brief shows one |
|
|
132
132
|
| plan | `start brainstorm`; `skip brainstorm S`; `start plan`; `substep` if shown |
|
|
133
|
-
| implement | `start brainstorm`; `skip brainstorm S`; `start plan`; `plan_check({ planPath })`; on FAIL
|
|
133
|
+
| implement | `start brainstorm`; `skip brainstorm S`; `start plan`; `plan_check({ planPath })`; on FAIL run `## Plan repair`; on PASS `skip plan R`; `start implement`; `substep` if shown; `plan_tracker init` |
|
|
134
134
|
| verify | as implement through `skip plan R`, then `skip implement R`; `start verify`; `substep` if shown; `plan_tracker init` |
|
|
135
135
|
| ship | as verify. Restoration stops at verify in_progress: `complete verify` needs a fresh conformance dispatch and `skip verify` would bypass a real gate. Announce that the closure review re-runs before ship |
|
|
136
136
|
|
|
@@ -141,6 +141,42 @@ spec was added after base or tracked from base (`reconstruction.md` "Candidates"
|
|
|
141
141
|
resolve the selected plan to an absolute path under the worktree before `plan_check`.
|
|
142
142
|
Zero pairs -> stop; more than one -> human picks.
|
|
143
143
|
|
|
144
|
+
## Plan repair
|
|
145
|
+
|
|
146
|
+
Entered from the call table's `implement` row and from `reconstruction.md` "Spec with plan" step 2 when `plan_check` returns FAIL. Inputs: the findings, and the task list with statuses (the brief's, or the confirmed reconstruction snapshot) - read it for evidence, never rewrite it.
|
|
147
|
+
|
|
148
|
+
Record the plan's state before any write: tracked and clean when `git -C <worktree> ls-files --error-unmatch -- <plan path>` exits 0 and `git -C <worktree> status --porcelain -- <plan path>` prints nothing (index and working copy both match HEAD; a staged edit alone makes it dirty); otherwise copy the file to a temp path outside the worktree.
|
|
149
|
+
|
|
150
|
+
Classify every finding against the table by its `check` and `reason`, gathering the row's evidence first. One finding with no row -> stop (below) before any write.
|
|
151
|
+
|
|
152
|
+
| Finding (`check`, `reason`) | Evidence | Edit |
|
|
153
|
+
|---|---|---|
|
|
154
|
+
| `anchor-resolution`, range outside section or line shift | the anchor's heading string matches exactly one current spec heading | set the `**Spec:**` `L<n>-L<m>` range to the current span of that section that holds the task body's existing literals |
|
|
155
|
+
| `quote-integrity`, task-owned row | the row's anchor already resolves (repair anchors first) | add the missing backtick literal to the owning task's body; never replace or remove task text |
|
|
156
|
+
| `quote-integrity`, `Verification`-owned row | as above | add the missing literal to the header `**Verification:**` line |
|
|
157
|
+
| `table-closure`, row anchor not in the owner's `**Spec:**` set | the owner cell names an existing task whose body does the row's requirement | move the row's anchor together with that same owner's `**Spec:**` anchor; the owner cell never changes |
|
|
158
|
+
| `paths-exist`, `Modify: path "<p>" does not exist` | the owning task is `complete` or `skipped` in the task list, and `git -C <worktree> log --diff-filter=D --format=%h -1 -- <p>` is non-empty | drop that `Modify:` row |
|
|
159
|
+
| `paths-exist` or `tests-block`, a `Test:` path that does not exist or a `Tests:` segment not anchored | `git -C <worktree> log --diff-filter=R --format= --name-status -M -1 -- <old> <new>` shows the rename `<old>` -> `<new>` | substitute `<new>` for `<old>` in the `Test:` line and in the `Tests:` command; nothing else in the command changes |
|
|
160
|
+
|
|
161
|
+
Every other `check` (`input`, `placeholder-scan`, `header-entrypoint`, `header-happy-path`, `waiver-literal`, `wave-file-disjointness`, `solo-line`, `internal`) and every reason not listed (a missing `Files:` block, an invalid or empty glob, a missing or ambiguous heading, a `pending`/`in_progress` owner of a dead `Modify:` row, a command broadening) has no row. Task names, count, order, wave membership, `Solo:` lines, the owner column, and task text beyond an added literal or a substituted path never change.
|
|
162
|
+
|
|
163
|
+
Loop: write every classified edit, re-run `plan_check({ planPath })`, classify any new finding the same way; at most 3 rounds.
|
|
164
|
+
|
|
165
|
+
PASS with the plan tracked and clean before the loop -> commit the plan alone:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
git -C <worktree> add -- <plan path> && git -C <worktree> commit -q -m "resume: plan citation repair - <n> findings" -- <plan path>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
The subject is not `amend:`, so `finishing-a-development-branch` Step 4's digest ignores it; a failed commit stops with git's output. PASS with the plan untracked or dirty before the loop -> leave the repair in the working copy; it lands with the next task commit. Then continue the originating route: the call table from `skip plan R`, or reconstruction step 3.
|
|
172
|
+
|
|
173
|
+
Stop (a finding with no row, or a finding surviving the third round): when a round wrote the plan, restore its pre-loop bytes (`git -C <worktree> checkout -- <plan path>` when tracked and clean, else the saved copy) - a stop before the first write runs no git command; print the findings (a dead `Modify:` row prefixed with its owning task, e.g. `Task 5:`), leave `plan` in_progress with no `init`, and print one line:
|
|
174
|
+
|
|
175
|
+
- no row: `Repair stopped: <check> - <reason> is outside citation repair; the plan file is unchanged. Edit the plan (task changes allowed), then re-run /skill:gauntlet-resume.`
|
|
176
|
+
- third round: `Repair stopped: <check> - <reason> survived 3 rounds. Edit the plan, then re-run /skill:gauntlet-resume.`
|
|
177
|
+
|
|
178
|
+
Resume never edits the spec; no Open Question is written.
|
|
179
|
+
|
|
144
180
|
"Exact" restoration binds: the active phase identity and substep, and the plan task list
|
|
145
181
|
(names, order, statuses) verbatim. Prior phases show `⊘ (resume: ...)` regardless of the
|
|
146
182
|
brief's glyph - skip-arming is the mechanism and completing priors would fabricate gated
|
|
@@ -161,3 +197,5 @@ Gate history not restored; re-validating `<task>` before any stage advance
|
|
|
161
197
|
where `<task>` is the brief's `Active task`, else the first in-progress task, else `none`
|
|
162
198
|
(whole-deliverable re-validation). Gate history, closure-review evidence, and fix rounds
|
|
163
199
|
are never inferred or restored; a ship-stage brief resumes at verify.
|
|
200
|
+
|
|
201
|
+
A restore that ran `## Plan repair` prints `Repaired plan: <n> findings (<comma-separated check names, deduplicated>)` on its own line directly before the closing line; the `Standing grant` line (SKILL.md "Post-restore continuation") keeps its place after the closing line. A first-check PASS prints no receipt and makes no commit.
|
|
@@ -69,7 +69,11 @@ with this unapproved spec as the draft? Show the spec path (and the brief's
|
|
|
69
69
|
Show, and ask the human to confirm or edit both in one reply:
|
|
70
70
|
|
|
71
71
|
1. Per task, in plan order: the commits after the plan commit that touch any path in
|
|
72
|
-
the task's declared `Files:` block
|
|
72
|
+
the task's declared `Files:` block, taking the union of the block in the working
|
|
73
|
+
copy and in `git -C <worktree> show <plan-commit>:<plan path relative to the worktree>`
|
|
74
|
+
(an object path inside the repository, never the absolute `planPath`; a `Modify:` row
|
|
75
|
+
dropped by `brief-contract.md` "Plan repair" still yields its `complete` evidence).
|
|
76
|
+
Strip a trailing `:digits[-digits]` range from
|
|
73
77
|
each `Modify:` path before matching `git -C <worktree> log -- <path>`:
|
|
74
78
|
`git -C <worktree> log --format=%h --oneline <plan-commit>..HEAD -- <path>`.
|
|
75
79
|
Uncommitted plan (no
|
|
@@ -94,7 +98,8 @@ edits override proposals; never rewrite confirmed state silently.
|
|
|
94
98
|
After confirmation:
|
|
95
99
|
|
|
96
100
|
1. Run SKILL.md entry check 6 on `<spec path>` (a malformed `**Amend-grant:**` line stops here, no tracker call); then `start brainstorm`; `skip brainstorm resume: <spec path>`; `start plan`.
|
|
97
|
-
2. `plan_check` with `planPath` = the plan's absolute path. FAIL ->
|
|
101
|
+
2. `plan_check` with `planPath` = the plan's absolute path. FAIL -> run `brief-contract.md`
|
|
102
|
+
`## Plan repair`; its PASS continues at step 3, its stop ends the restore with plan
|
|
98
103
|
in_progress, no `init`.
|
|
99
104
|
3. PASS -> `skip plan` with the same `resume:` reason; for stage verify also
|
|
100
105
|
`skip implement`; `start <stage>`.
|