pincer-workflow 0.4.0 → 0.4.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/README.md +1 -1
- package/package.json +1 -1
- package/template/.agents/skills/pincer-code/SKILL.md +14 -1
- package/template/.agents/skills/pincer-evaluate/SKILL.md +10 -1
- package/template/.agents/skills/pincer-plan/SKILL.md +9 -1
- package/template/.agents/skills/pincer-status/SKILL.md +2 -0
- package/template/.claude/commands/pincer-code.md +14 -1
- package/template/.claude/commands/pincer-evaluate.md +10 -1
- package/template/.claude/commands/pincer-plan.md +9 -1
- package/template/.claude/commands/pincer-status.md +2 -0
- package/template/.github/prompts/pincer-code.prompt.md +14 -1
- package/template/.github/prompts/pincer-evaluate.prompt.md +10 -1
- package/template/.github/prompts/pincer-plan.prompt.md +9 -1
- package/template/.github/prompts/pincer-status.prompt.md +2 -0
- package/template/docs/dry-run-checklist.md +6 -0
package/README.md
CHANGED
|
@@ -86,7 +86,7 @@ want the repo-side rules too can copy `AGENTS.md` from the
|
|
|
86
86
|
npx pincer-workflow@latest update
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
Files you never touched are refreshed in place. (Installs older than v0.2.0 gain the ticket state machine, the status report and the ticket-guard hook on update; `.claude/settings.json` conflicts if you edited it — merge the new hook entry from the `.new` file. v0.2.2 replaces the Codex adapter: the commands are now skills in `.agents/skills/` invoked as `$pincer-*`, since Codex no longer loads `~/.codex/prompts/` — you can delete the copies there. v0.2.3 ships the playbooks, rubrics and templates under `.claude/` on every platform, which Codex- and Copilot-only installs were missing. v0.3.0 makes trust revocable: every verification attempt is recorded, `done` re-runs the check, tickets carry `prd:`, the release audit is read-only, and `.pincer.json` moves to schema 2 — an install from 0.2.x is treated as an untrusted baseline, so on the first update every changed file arrives as a `.new` proposal once; hooks now need Node 18+. v0.4.0 carries requirement IDs and `Proves:` checks from the PRD to evaluation, adds `profile: small|standard`, and saves candidate evidence under `.prd/evidence/`; the update is additive, but an existing `NOTES.md` without an `evidence:` manifest reads as stale until `/pincer-evaluate` is re-run.) Files you edited are left
|
|
89
|
+
Files you never touched are refreshed in place. (Installs older than v0.2.0 gain the ticket state machine, the status report and the ticket-guard hook on update; `.claude/settings.json` conflicts if you edited it — merge the new hook entry from the `.new` file. v0.2.2 replaces the Codex adapter: the commands are now skills in `.agents/skills/` invoked as `$pincer-*`, since Codex no longer loads `~/.codex/prompts/` — you can delete the copies there. v0.2.3 ships the playbooks, rubrics and templates under `.claude/` on every platform, which Codex- and Copilot-only installs were missing. v0.3.0 makes trust revocable: every verification attempt is recorded, `done` re-runs the check, tickets carry `prd:`, the release audit is read-only, and `.pincer.json` moves to schema 2 — an install from 0.2.x is treated as an untrusted baseline, so on the first update every changed file arrives as a `.new` proposal once; hooks now need Node 18+. v0.4.0 carries requirement IDs and `Proves:` checks from the PRD to evaluation, adds `profile: small|standard`, and saves candidate evidence under `.prd/evidence/`; the update is additive, but an existing `NOTES.md` without an `evidence:` manifest reads as stale until `/pincer-evaluate` is re-run. v0.4.1 is playbook wording only: the code playbook gains one recovery exception (a tree back at the evaluated candidate is restored by the user and nothing is committed), evaluate records one check per command, and plan asks only the open part of a partly answered question.) Files you edited are left
|
|
90
90
|
alone — the new version lands next to them as `<file>.new` for a manual merge.
|
|
91
91
|
`npx pincer-workflow doctor` checks the health of an install (hook executable,
|
|
92
92
|
`.gitignore` covering `.env*`, no unmerged `*.new` files, version current).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pincer-workflow",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "PINCER — a PRD-driven agentic delivery workflow for Claude Code, Codex CLI, and GitHub Copilot. Plan · Investigate · Narrow · Code · Evaluate · Release.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"pincer": "bin/pincer.js"
|
|
@@ -89,7 +89,20 @@ the script or `scripts/pincer-status.sh` printed, and hand the repair to the use
|
|
|
89
89
|
performs it in their own terminal. Then return through the lifecycle — `start`,
|
|
90
90
|
`verify`, `done` — so the ticket carries fresh verification; a restored receipt is
|
|
91
91
|
never evidence. Do not recommend restoring source files or unrelated edits as routine
|
|
92
|
-
ticket repair.
|
|
92
|
+
ticket repair. One exception: when the PRD is built with valid candidate evidence,
|
|
93
|
+
tracked files other than the ticket file being restored match the evaluated candidate
|
|
94
|
+
(or the candidate plus its evidence-only commit) with nothing untracked, and the
|
|
95
|
+
ticket's Verification block passes when run
|
|
96
|
+
directly rather than through `verify` (which would write a receipt), then
|
|
97
|
+
the committed evaluation still describes the tree. Say so, name the exact command
|
|
98
|
+
for the user to restore the ticket file in their own terminal, and
|
|
99
|
+
do not run `verify`, refresh the receipt or commit anything — the restored file is
|
|
100
|
+
what is already committed, not new evidence. If the block fails on that clean tree,
|
|
101
|
+
the failure is real: keep the failed `last_check` and repair through the lifecycle.
|
|
102
|
+
If source still differs from the candidate, name the differing paths and let the
|
|
103
|
+
user decide rather than asking which way to fix them; permission to restore a ticket
|
|
104
|
+
does not authorize discarding source changes. Automated recovery that preserves
|
|
105
|
+
attempt history is later work (M1).
|
|
93
106
|
|
|
94
107
|
## Budget rules
|
|
95
108
|
|
|
@@ -66,7 +66,16 @@ run the pipeline, then present results.
|
|
|
66
66
|
write fresh evidence in step 9 — never reuse a manifest from a previous candidate.
|
|
67
67
|
9. Persist evidence for the candidate under `.prd/evidence/prd-vN/<candidate>/`:
|
|
68
68
|
- `checks/C-NN.log` — the command and a redacted summary or safe log of each
|
|
69
|
-
executable check. Never secrets, never an environment dump.
|
|
69
|
+
executable check. Never secrets, never an environment dump. Record
|
|
70
|
+
one check per command: `command` holds the command line as run, never prose
|
|
71
|
+
describing a session, and a manual smoke run is recorded as the command lines
|
|
72
|
+
that were run (separate entries when they establish independent outcomes).
|
|
73
|
+
Independently assessed commands — the tracked `.env` check, the secret scan,
|
|
74
|
+
the dependency audit — are separate `checks` entries with their own `result`
|
|
75
|
+
and log, so only the tool that could not run is `unverified`. A test runner
|
|
76
|
+
such as `npm test` stays one aggregate check; do not split every subprocess or
|
|
77
|
+
assertion. Visual and review checks keep their kinds and get no artificial
|
|
78
|
+
shell command. Note a redaction rather than inventing a substitute command.
|
|
70
79
|
- `visual/<scenario>.png` — each visual capture from step 4, with its scenario,
|
|
71
80
|
viewport and observed result recorded in the manifest. When nothing renders,
|
|
72
81
|
record `visual_review: {applicable: false, reason}` and say why.
|
|
@@ -36,12 +36,20 @@ unless the user explicitly authorized a separate change.
|
|
|
36
36
|
IDs; do not silently replace either. Where its structure needs adapting to the
|
|
37
37
|
template, record a mapping table (`their section or ID → R-NN`) inside the PRD.
|
|
38
38
|
2. Ask only the questions whose answers would change the architecture or scope.
|
|
39
|
-
Batch them (max 3–4 at once).
|
|
39
|
+
Batch them (max 3–4 at once). A question the brief partly answers is
|
|
40
|
+
asked only for its open part, naming the settled part; when the brief settles
|
|
41
|
+
every material decision, including acceptance behavior, ask no discovery
|
|
42
|
+
question and record the brief's answers. Do not add a question to fill the budget.
|
|
43
|
+
Typical ones:
|
|
40
44
|
- What does "done" look like — what will be run, demoed, or reviewed at the end?
|
|
45
|
+
A named test runner settles the verification choice, not every acceptance
|
|
46
|
+
behavior; ask about the demo or manual check only if that is still open.
|
|
41
47
|
- Any required stack, or is it my choice?
|
|
42
48
|
- What is explicitly out of scope?
|
|
43
49
|
3. If the project has a frontend, ask one design question: "What should this feel like,
|
|
44
50
|
and what should it NOT look like?" Capture the answer for the Visual Direction section.
|
|
51
|
+
The same rule applies: when the brief already supplies design direction, record it
|
|
52
|
+
and ask only about what it leaves open.
|
|
45
53
|
|
|
46
54
|
Summarize your understanding in 3–5 sentences. Existing authorization in the request or
|
|
47
55
|
session carries forward; ask only about an unresolved choice that materially changes the result.
|
|
@@ -23,3 +23,5 @@ start of a session. Read-only: change nothing.
|
|
|
23
23
|
`$pincer-code T-{NN}`. If the script printed a warning, surface it — a done ticket
|
|
24
24
|
without a receipt was marked by hand and needs `scripts/pincer-ticket.sh verify T-{NN}`.
|
|
25
25
|
Never restore a ticket file from git to clear a warning; a failed attempt is a record.
|
|
26
|
+
The one exception is the tree-back-at-candidate case in the recovery section of
|
|
27
|
+
`$pincer-code`: the user restores the ticket file, and nothing is verified or committed.
|
|
@@ -87,7 +87,20 @@ the script or `scripts/pincer-status.sh` printed, and hand the repair to the use
|
|
|
87
87
|
performs it in their own terminal. Then return through the lifecycle — `start`,
|
|
88
88
|
`verify`, `done` — so the ticket carries fresh verification; a restored receipt is
|
|
89
89
|
never evidence. Do not recommend restoring source files or unrelated edits as routine
|
|
90
|
-
ticket repair.
|
|
90
|
+
ticket repair. One exception: when the PRD is built with valid candidate evidence,
|
|
91
|
+
tracked files other than the ticket file being restored match the evaluated candidate
|
|
92
|
+
(or the candidate plus its evidence-only commit) with nothing untracked, and the
|
|
93
|
+
ticket's Verification block passes when run
|
|
94
|
+
directly rather than through `verify` (which would write a receipt), then
|
|
95
|
+
the committed evaluation still describes the tree. Say so, name the exact command
|
|
96
|
+
for the user to restore the ticket file in their own terminal, and
|
|
97
|
+
do not run `verify`, refresh the receipt or commit anything — the restored file is
|
|
98
|
+
what is already committed, not new evidence. If the block fails on that clean tree,
|
|
99
|
+
the failure is real: keep the failed `last_check` and repair through the lifecycle.
|
|
100
|
+
If source still differs from the candidate, name the differing paths and let the
|
|
101
|
+
user decide rather than asking which way to fix them; permission to restore a ticket
|
|
102
|
+
does not authorize discarding source changes. Automated recovery that preserves
|
|
103
|
+
attempt history is later work (M1).
|
|
91
104
|
|
|
92
105
|
## Budget rules
|
|
93
106
|
|
|
@@ -64,7 +64,16 @@ run the pipeline, then present results.
|
|
|
64
64
|
write fresh evidence in step 9 — never reuse a manifest from a previous candidate.
|
|
65
65
|
9. Persist evidence for the candidate under `.prd/evidence/prd-vN/<candidate>/`:
|
|
66
66
|
- `checks/C-NN.log` — the command and a redacted summary or safe log of each
|
|
67
|
-
executable check. Never secrets, never an environment dump.
|
|
67
|
+
executable check. Never secrets, never an environment dump. Record
|
|
68
|
+
one check per command: `command` holds the command line as run, never prose
|
|
69
|
+
describing a session, and a manual smoke run is recorded as the command lines
|
|
70
|
+
that were run (separate entries when they establish independent outcomes).
|
|
71
|
+
Independently assessed commands — the tracked `.env` check, the secret scan,
|
|
72
|
+
the dependency audit — are separate `checks` entries with their own `result`
|
|
73
|
+
and log, so only the tool that could not run is `unverified`. A test runner
|
|
74
|
+
such as `npm test` stays one aggregate check; do not split every subprocess or
|
|
75
|
+
assertion. Visual and review checks keep their kinds and get no artificial
|
|
76
|
+
shell command. Note a redaction rather than inventing a substitute command.
|
|
68
77
|
- `visual/<scenario>.png` — each visual capture from step 4, with its scenario,
|
|
69
78
|
viewport and observed result recorded in the manifest. When nothing renders,
|
|
70
79
|
record `visual_review: {applicable: false, reason}` and say why.
|
|
@@ -34,12 +34,20 @@ unless the user explicitly authorized a separate change.
|
|
|
34
34
|
IDs; do not silently replace either. Where its structure needs adapting to the
|
|
35
35
|
template, record a mapping table (`their section or ID → R-NN`) inside the PRD.
|
|
36
36
|
2. Ask only the questions whose answers would change the architecture or scope.
|
|
37
|
-
Batch them (max 3–4 at once).
|
|
37
|
+
Batch them (max 3–4 at once). A question the brief partly answers is
|
|
38
|
+
asked only for its open part, naming the settled part; when the brief settles
|
|
39
|
+
every material decision, including acceptance behavior, ask no discovery
|
|
40
|
+
question and record the brief's answers. Do not add a question to fill the budget.
|
|
41
|
+
Typical ones:
|
|
38
42
|
- What does "done" look like — what will be run, demoed, or reviewed at the end?
|
|
43
|
+
A named test runner settles the verification choice, not every acceptance
|
|
44
|
+
behavior; ask about the demo or manual check only if that is still open.
|
|
39
45
|
- Any required stack, or is it my choice?
|
|
40
46
|
- What is explicitly out of scope?
|
|
41
47
|
3. If the project has a frontend, ask one design question: "What should this feel like,
|
|
42
48
|
and what should it NOT look like?" Capture the answer for the Visual Direction section.
|
|
49
|
+
The same rule applies: when the brief already supplies design direction, record it
|
|
50
|
+
and ask only about what it leaves open.
|
|
43
51
|
|
|
44
52
|
Summarize your understanding in 3–5 sentences. Existing authorization in the request or
|
|
45
53
|
session carries forward; ask only about an unresolved choice that materially changes the result.
|
|
@@ -21,3 +21,5 @@ start of a session. Read-only: change nothing.
|
|
|
21
21
|
`/pincer-code T-{NN}`. If the script printed a warning, surface it — a done ticket
|
|
22
22
|
without a receipt was marked by hand and needs `scripts/pincer-ticket.sh verify T-{NN}`.
|
|
23
23
|
Never restore a ticket file from git to clear a warning; a failed attempt is a record.
|
|
24
|
+
The one exception is the tree-back-at-candidate case in the recovery section of
|
|
25
|
+
`/pincer-code`: the user restores the ticket file, and nothing is verified or committed.
|
|
@@ -89,7 +89,20 @@ the script or `scripts/pincer-status.sh` printed, and hand the repair to the use
|
|
|
89
89
|
performs it in their own terminal. Then return through the lifecycle — `start`,
|
|
90
90
|
`verify`, `done` — so the ticket carries fresh verification; a restored receipt is
|
|
91
91
|
never evidence. Do not recommend restoring source files or unrelated edits as routine
|
|
92
|
-
ticket repair.
|
|
92
|
+
ticket repair. One exception: when the PRD is built with valid candidate evidence,
|
|
93
|
+
tracked files other than the ticket file being restored match the evaluated candidate
|
|
94
|
+
(or the candidate plus its evidence-only commit) with nothing untracked, and the
|
|
95
|
+
ticket's Verification block passes when run
|
|
96
|
+
directly rather than through `verify` (which would write a receipt), then
|
|
97
|
+
the committed evaluation still describes the tree. Say so, name the exact command
|
|
98
|
+
for the user to restore the ticket file in their own terminal, and
|
|
99
|
+
do not run `verify`, refresh the receipt or commit anything — the restored file is
|
|
100
|
+
what is already committed, not new evidence. If the block fails on that clean tree,
|
|
101
|
+
the failure is real: keep the failed `last_check` and repair through the lifecycle.
|
|
102
|
+
If source still differs from the candidate, name the differing paths and let the
|
|
103
|
+
user decide rather than asking which way to fix them; permission to restore a ticket
|
|
104
|
+
does not authorize discarding source changes. Automated recovery that preserves
|
|
105
|
+
attempt history is later work (M1).
|
|
93
106
|
|
|
94
107
|
## Budget rules
|
|
95
108
|
|
|
@@ -66,7 +66,16 @@ run the pipeline, then present results.
|
|
|
66
66
|
write fresh evidence in step 9 — never reuse a manifest from a previous candidate.
|
|
67
67
|
9. Persist evidence for the candidate under `.prd/evidence/prd-vN/<candidate>/`:
|
|
68
68
|
- `checks/C-NN.log` — the command and a redacted summary or safe log of each
|
|
69
|
-
executable check. Never secrets, never an environment dump.
|
|
69
|
+
executable check. Never secrets, never an environment dump. Record
|
|
70
|
+
one check per command: `command` holds the command line as run, never prose
|
|
71
|
+
describing a session, and a manual smoke run is recorded as the command lines
|
|
72
|
+
that were run (separate entries when they establish independent outcomes).
|
|
73
|
+
Independently assessed commands — the tracked `.env` check, the secret scan,
|
|
74
|
+
the dependency audit — are separate `checks` entries with their own `result`
|
|
75
|
+
and log, so only the tool that could not run is `unverified`. A test runner
|
|
76
|
+
such as `npm test` stays one aggregate check; do not split every subprocess or
|
|
77
|
+
assertion. Visual and review checks keep their kinds and get no artificial
|
|
78
|
+
shell command. Note a redaction rather than inventing a substitute command.
|
|
70
79
|
- `visual/<scenario>.png` — each visual capture from step 4, with its scenario,
|
|
71
80
|
viewport and observed result recorded in the manifest. When nothing renders,
|
|
72
81
|
record `visual_review: {applicable: false, reason}` and say why.
|
|
@@ -36,12 +36,20 @@ unless the user explicitly authorized a separate change.
|
|
|
36
36
|
IDs; do not silently replace either. Where its structure needs adapting to the
|
|
37
37
|
template, record a mapping table (`their section or ID → R-NN`) inside the PRD.
|
|
38
38
|
2. Ask only the questions whose answers would change the architecture or scope.
|
|
39
|
-
Batch them (max 3–4 at once).
|
|
39
|
+
Batch them (max 3–4 at once). A question the brief partly answers is
|
|
40
|
+
asked only for its open part, naming the settled part; when the brief settles
|
|
41
|
+
every material decision, including acceptance behavior, ask no discovery
|
|
42
|
+
question and record the brief's answers. Do not add a question to fill the budget.
|
|
43
|
+
Typical ones:
|
|
40
44
|
- What does "done" look like — what will be run, demoed, or reviewed at the end?
|
|
45
|
+
A named test runner settles the verification choice, not every acceptance
|
|
46
|
+
behavior; ask about the demo or manual check only if that is still open.
|
|
41
47
|
- Any required stack, or is it my choice?
|
|
42
48
|
- What is explicitly out of scope?
|
|
43
49
|
3. If the project has a frontend, ask one design question: "What should this feel like,
|
|
44
50
|
and what should it NOT look like?" Capture the answer for the Visual Direction section.
|
|
51
|
+
The same rule applies: when the brief already supplies design direction, record it
|
|
52
|
+
and ask only about what it leaves open.
|
|
45
53
|
|
|
46
54
|
Summarize your understanding in 3–5 sentences. Existing authorization in the request or
|
|
47
55
|
session carries forward; ask only about an unresolved choice that materially changes the result.
|
|
@@ -23,3 +23,5 @@ start of a session. Read-only: change nothing.
|
|
|
23
23
|
`/pincer-code T-{NN}`. If the script printed a warning, surface it — a done ticket
|
|
24
24
|
without a receipt was marked by hand and needs `scripts/pincer-ticket.sh verify T-{NN}`.
|
|
25
25
|
Never restore a ticket file from git to clear a warning; a failed attempt is a record.
|
|
26
|
+
The one exception is the tree-back-at-candidate case in the recovery section of
|
|
27
|
+
`/pincer-code`: the user restores the ticket file, and nothing is verified or committed.
|
|
@@ -83,6 +83,9 @@ observes agent behavior, and one trial on one surface says nothing about the oth
|
|
|
83
83
|
fails, prints "failure recorded in last_check" and "receipt was revoked"
|
|
84
84
|
- [ ] Cheat: ask the assistant to `git checkout` the ticket file — the guard blocks
|
|
85
85
|
it, the failed attempt stays recorded, and the assistant hands repair to you
|
|
86
|
+
- [ ] Cheat: revert the source so the tree matches the candidate, then ask again —
|
|
87
|
+
the assistant names the restore command for you, runs no `verify`, and
|
|
88
|
+
commits nothing; status is `current` after you run it
|
|
86
89
|
- [ ] Any scope cut made during build is recorded in the PRD's Out of Scope section
|
|
87
90
|
- [ ] PRD frontmatter now says `status: built`, committed on its own (`PRD vN: built`)
|
|
88
91
|
before evaluation, not folded into the evidence commit
|
|
@@ -107,6 +110,9 @@ observes agent behavior, and one trial on one surface says nothing about the oth
|
|
|
107
110
|
- [ ] `.prd/evidence/prd-vN/<candidate>/manifest.json` exists and
|
|
108
111
|
`node scripts/pincer-evidence.cjs validate <manifest> --candidate <sha> --prd .prd/prd-vN.md`
|
|
109
112
|
prints `ok`
|
|
113
|
+
- [ ] Each executable check in the manifest holds one command line as run, the
|
|
114
|
+
security pass is separate entries, and only the tool that could not run is
|
|
115
|
+
`unverified`
|
|
110
116
|
- [ ] Cheat: edit a saved log after the evidence commit — status reports
|
|
111
117
|
`evidence invalid: ... digest mismatch`
|
|
112
118
|
- [ ] Evaluation fixes were completed through new tickets, produced a new candidate,
|