pincer-workflow 0.6.0 → 1.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.
Files changed (138) hide show
  1. package/README.md +157 -106
  2. package/bin/pincer.js +189 -166
  3. package/package.json +4 -3
  4. package/template/.agents/skills/pincer-blueprint/SKILL.md +70 -0
  5. package/template/.agents/skills/pincer-status/SKILL.md +29 -41
  6. package/template/.claude/commands/pincer-blueprint.md +7 -0
  7. package/template/.claude/commands/pincer-status.md +4 -45
  8. package/template/.claude/hooks/hook-policy.cjs +60 -25
  9. package/template/.claude/hooks/ticket-guard.sh +6 -3
  10. package/template/.claude/pincer/library/agents/accessibility-reviewer.md +27 -0
  11. package/template/.claude/pincer/library/agents/code-quality-reviewer.md +25 -0
  12. package/template/.claude/pincer/library/agents/codebase-explorer.md +23 -0
  13. package/template/.claude/pincer/library/agents/fix-agent.md +23 -0
  14. package/template/.claude/pincer/library/agents/history-reviewer.md +26 -0
  15. package/template/.claude/pincer/library/agents/implementer.md +24 -0
  16. package/template/.claude/pincer/library/agents/security-reviewer.md +26 -0
  17. package/template/.claude/pincer/library/agents/silent-failure-hunter.md +27 -0
  18. package/template/.claude/pincer/library/agents/standards-reviewer.md +25 -0
  19. package/template/.claude/pincer/library/agents/test-coverage-reviewer.md +26 -0
  20. package/template/.claude/pincer/library/agents-skeleton.md +89 -0
  21. package/template/.claude/pincer/library/agreement.md +46 -0
  22. package/template/.claude/pincer/library/models.json +6 -0
  23. package/template/.claude/pincer/library/stages/blueprint/SKILL.md +69 -0
  24. package/template/.claude/pincer/library/stages/blueprint/formats/harness.md +82 -0
  25. package/template/.claude/pincer/library/stages/blueprint/formats/roster-rules.md +61 -0
  26. package/template/.claude/pincer/library/stages/blueprint/prompts/confirm-kind.md +19 -0
  27. package/template/.claude/pincer/library/stages/blueprint/prompts/first-job.md +18 -0
  28. package/template/.claude/pincer/library/stages/blueprint/prompts/q-handoffs.md +21 -0
  29. package/template/.claude/pincer/library/stages/blueprint/prompts/q-models.md +20 -0
  30. package/template/.claude/pincer/library/stages/blueprint/prompts/q-pipeline.md +27 -0
  31. package/template/.claude/pincer/library/stages/blueprint/prompts/q-repo.md +21 -0
  32. package/template/.claude/pincer/library/stages/blueprint/prompts/q-responsibility.md +30 -0
  33. package/template/.claude/pincer/library/stages/blueprint/prompts/q-roster.md +20 -0
  34. package/template/.claude/pincer/library/stages/blueprint/prompts/q-simplify.md +26 -0
  35. package/template/.claude/pincer/library/stages/blueprint/prompts/q-systems.md +28 -0
  36. package/template/.claude/pincer/library/stages/code/SKILL.md +59 -0
  37. package/template/.claude/pincer/library/stages/code/formats/pr.md +55 -0
  38. package/template/.claude/pincer/library/stages/code/prompts/implement.md +25 -0
  39. package/template/.claude/pincer/library/stages/evaluate/SKILL.md +51 -0
  40. package/template/.claude/pincer/library/stages/evaluate/formats/evidence.md +49 -0
  41. package/template/.claude/pincer/library/stages/evaluate/formats/finding-report.md +72 -0
  42. package/template/.claude/pincer/library/stages/evaluate/formats/finding.md +35 -0
  43. package/template/.claude/pincer/library/stages/evaluate/prompts/review.md +25 -0
  44. package/template/.claude/pincer/library/stages/narrow/SKILL.md +47 -0
  45. package/template/.claude/pincer/library/stages/narrow/formats/ticket.md +126 -0
  46. package/template/.claude/pincer/library/stages/narrow/prompts/explore.md +19 -0
  47. package/template/.claude/pincer/library/stages/plan/SKILL.md +46 -0
  48. package/template/.claude/pincer/library/stages/plan/formats/spec.md +100 -0
  49. package/template/.claude/pincer/library/stages/plan/prompts/explore.md +20 -0
  50. package/template/.claude/pincer/library/stages/release/SKILL.md +48 -0
  51. package/template/.claude/pincer/library/stages/status/SKILL.md +37 -0
  52. package/template/.claude/skills/pincer-blueprint/SKILL.md +69 -0
  53. package/template/.claude/skills/pincer-blueprint/formats/harness.md +82 -0
  54. package/template/.claude/skills/pincer-blueprint/formats/roster-rules.md +61 -0
  55. package/template/.claude/skills/pincer-blueprint/prompts/confirm-kind.md +19 -0
  56. package/template/.claude/skills/pincer-blueprint/prompts/first-job.md +18 -0
  57. package/template/.claude/skills/pincer-blueprint/prompts/q-handoffs.md +21 -0
  58. package/template/.claude/skills/pincer-blueprint/prompts/q-models.md +20 -0
  59. package/template/.claude/skills/pincer-blueprint/prompts/q-pipeline.md +27 -0
  60. package/template/.claude/skills/pincer-blueprint/prompts/q-repo.md +21 -0
  61. package/template/.claude/skills/pincer-blueprint/prompts/q-responsibility.md +30 -0
  62. package/template/.claude/skills/pincer-blueprint/prompts/q-roster.md +20 -0
  63. package/template/.claude/skills/pincer-blueprint/prompts/q-simplify.md +26 -0
  64. package/template/.claude/skills/pincer-blueprint/prompts/q-systems.md +28 -0
  65. package/template/.claude/skills/pincer-status/SKILL.md +37 -0
  66. package/template/.codex/README.md +39 -35
  67. package/template/.github/copilot-instructions.md +19 -14
  68. package/template/.github/prompts/pincer-blueprint.prompt.md +70 -0
  69. package/template/.github/prompts/pincer-status.prompt.md +29 -41
  70. package/template/AGENTS.md +34 -67
  71. package/template/docs/engine.md +236 -0
  72. package/template/docs/release-checklist.md +22 -28
  73. package/template/scripts/pincer/blueprint.cjs +137 -0
  74. package/template/scripts/pincer/cli.cjs +233 -0
  75. package/template/scripts/pincer/evidence.cjs +142 -0
  76. package/template/scripts/pincer/generate.cjs +373 -0
  77. package/template/scripts/pincer/harness.cjs +269 -0
  78. package/template/scripts/pincer/models.cjs +121 -0
  79. package/template/scripts/{pincer-runtime → pincer}/parse.cjs +83 -133
  80. package/template/scripts/pincer/recon.cjs +205 -0
  81. package/template/scripts/pincer/status.cjs +161 -0
  82. package/template/scripts/pincer/ticket.cjs +203 -0
  83. package/template/scripts/pincer/util.cjs +104 -0
  84. package/template/scripts/pincer-blueprint.cjs +7 -0
  85. package/template/scripts/pincer-evidence.cjs +5 -73
  86. package/template/scripts/pincer-status.sh +10 -12
  87. package/template/scripts/pincer-ticket.sh +15 -18
  88. package/template/scripts/sync-prompts.sh +2 -50
  89. package/template/.agents/skills/pincer-code/SKILL.md +0 -237
  90. package/template/.agents/skills/pincer-evaluate/SKILL.md +0 -178
  91. package/template/.agents/skills/pincer-narrow/SKILL.md +0 -138
  92. package/template/.agents/skills/pincer-plan/SKILL.md +0 -134
  93. package/template/.agents/skills/pincer-release/SKILL.md +0 -82
  94. package/template/.claude/agents/code-quality-reviewer.md +0 -38
  95. package/template/.claude/agents/codebase-explorer.md +0 -23
  96. package/template/.claude/commands/pincer-code.md +0 -235
  97. package/template/.claude/commands/pincer-evaluate.md +0 -176
  98. package/template/.claude/commands/pincer-narrow.md +0 -136
  99. package/template/.claude/commands/pincer-plan.md +0 -132
  100. package/template/.claude/commands/pincer-release.md +0 -80
  101. package/template/.claude/references/prd-template.md +0 -108
  102. package/template/.claude/references/ticket-template.md +0 -86
  103. package/template/.github/prompts/pincer-code.prompt.md +0 -237
  104. package/template/.github/prompts/pincer-evaluate.prompt.md +0 -178
  105. package/template/.github/prompts/pincer-narrow.prompt.md +0 -138
  106. package/template/.github/prompts/pincer-plan.prompt.md +0 -134
  107. package/template/.github/prompts/pincer-release.prompt.md +0 -82
  108. package/template/docs/dry-run-checklist.md +0 -264
  109. package/template/docs/runtime-contracts.md +0 -1683
  110. package/template/scripts/pincer-runtime/adopt.cjs +0 -132
  111. package/template/scripts/pincer-runtime/agreement.cjs +0 -240
  112. package/template/scripts/pincer-runtime/authorization.cjs +0 -167
  113. package/template/scripts/pincer-runtime/changes.cjs +0 -517
  114. package/template/scripts/pincer-runtime/checks.cjs +0 -48
  115. package/template/scripts/pincer-runtime/coverage.cjs +0 -361
  116. package/template/scripts/pincer-runtime/dispositions.cjs +0 -95
  117. package/template/scripts/pincer-runtime/evidence.cjs +0 -676
  118. package/template/scripts/pincer-runtime/fsutil.cjs +0 -37
  119. package/template/scripts/pincer-runtime/gates.cjs +0 -73
  120. package/template/scripts/pincer-runtime/identity.cjs +0 -163
  121. package/template/scripts/pincer-runtime/impact.cjs +0 -177
  122. package/template/scripts/pincer-runtime/io.cjs +0 -41
  123. package/template/scripts/pincer-runtime/lifecycle.cjs +0 -311
  124. package/template/scripts/pincer-runtime/locator.cjs +0 -158
  125. package/template/scripts/pincer-runtime/migrate.cjs +0 -204
  126. package/template/scripts/pincer-runtime/phases.cjs +0 -245
  127. package/template/scripts/pincer-runtime/readiness.cjs +0 -97
  128. package/template/scripts/pincer-runtime/requirements.cjs +0 -255
  129. package/template/scripts/pincer-runtime/resume.cjs +0 -205
  130. package/template/scripts/pincer-runtime/routing.cjs +0 -54
  131. package/template/scripts/pincer-runtime/runner.cjs +0 -242
  132. package/template/scripts/pincer-runtime/sanitize.cjs +0 -63
  133. package/template/scripts/pincer-runtime/source.cjs +0 -129
  134. package/template/scripts/pincer-runtime/state.cjs +0 -314
  135. package/template/scripts/pincer-runtime/status.cjs +0 -514
  136. package/template/scripts/pincer-runtime/transaction.cjs +0 -200
  137. package/template/scripts/pincer-runtime/transitions.cjs +0 -134
  138. package/template/scripts/pincer-runtime.cjs +0 -661
@@ -1,176 +0,0 @@
1
- ---
2
- description: "Final quality pass over everything built — high-confidence findings only"
3
- argument-hint: "[none]"
4
- ---
5
-
6
- # /pincer-evaluate — Final Quality Pass
7
-
8
- You are reviewing all work built this session against the PRD and tickets. Autonomous —
9
- run the pipeline, then present results.
10
-
11
- ## Steps
12
-
13
- 1. Run `scripts/pincer-status.sh`. Review only tickets associated with the selected
14
- PRD. Every such ticket should be `done` with a current receipt; if one
15
- is still open or in progress, stop and ask whether it was cut (then it goes in the
16
- PRD's Out of Scope) or should be finished first via `/pincer-code`. Then get the full
17
- diff of the change: identify the actual base commit before this change from
18
- its ticket commits and recorded context. If it cannot be established, resolve
19
- that uncertainty before claiming a complete review. Record full commit IDs for
20
- `base` and `candidate` (`git rev-parse HEAD`), then review `git diff <base>..<candidate>`.
21
- The candidate is the clean, committed tree that already includes the implementation,
22
- the ticket closures, on a project with change records the `change complete` commit
23
- (the `Runtime` line reads `… · completed ·`; `check` and `evidence export` refuse an
24
- active, paused or unauthorized change), and the PRD `status: built` commit:
25
- `git status --short` must be empty before review. If anything is uncommitted or the PRD is not yet built, return
26
- to `/pincer-code`; do not review a dirty tree.
27
- 2. Dispatch a `code-quality-reviewer` agent with: the diff, the PRD's Success Criteria and
28
- Scope sections, and the list of tickets. If the diff is large, split by area and
29
- dispatch two in parallel. (No subagents on this platform? Review the diff yourself
30
- in a separate pass, applying `.claude/agents/code-quality-reviewer.md` as the rubric.)
31
- Keep the reviewer's report — or its explicit no-findings statement — for step 9,
32
- where it is saved as an artifact; a review that left no record cannot be audited.
33
- 3. Yourself, in parallel, check spec compliance. On a change with strict coverage
34
- (`Coverage strict …` in status) start from `node scripts/pincer-runtime.cjs coverage`:
35
- its structure must be complete, and its scenario rows are the obligations — the
36
- export derives every disposition from the map and the outcomes, so you do not
37
- author `requirements`; your judgment is recorded as `adequacy` (whether the
38
- declared checks and reviews really establish their scenarios) and in
39
- `coverage_review`. Otherwise, for every requirement `R-NN` in the
40
- PRD record one disposition: `delivered` (evidence on this candidate), `blocked`
41
- (required behavior failed or was left unverified — this blocks PASS; do not relabel
42
- it a known limitation to pass), or `deferred` (only with explicit user authorization;
43
- record the scope decision in the PRD's Out of Scope and evaluate the revised
44
- candidate). Compare what was built against every ticket's acceptance criteria and
45
- the PRD scope, and list any gaps. Whether the requirement map is complete and each
46
- check is semantically adequate is your judgment as reviewer — record that judgment
47
- in the evaluation; the kit is not a mechanical traceability engine and does not
48
- validate requirement-revision impact.
49
- 4. If the project has a UI, look at it — don't only read the code. Start it, open it in
50
- the browser (screenshot via Chrome DevTools MCP if available), and check it against
51
- the PRD's Visual Direction and Success Criteria. Note anything visibly broken or off.
52
- 5. Run a mechanical security audit:
53
- - Inspect the relevant history with a secret scanner that redacts values, when one is
54
- available. Otherwise review likely locations without copying candidate values into
55
- output. Report file, line, and remediation only; a secret committed then deleted is
56
- still leaked.
57
- - `.gitignore` covers `.env*` (except `.env.example`), and `git ls-files | grep -i env`
58
- shows only `.env.example`.
59
- - `npm audit --omit=dev` (or the ecosystem's equivalent) — report high/critical only.
60
- - If there's an HTTP API: hit one endpoint with invalid input (empty, oversized)
61
- and confirm a clean 4xx with a generic message, no stack trace.
62
- 6. Filter the agent's findings: report only issues you'd flag in a real PR review —
63
- concrete bugs, silent failures, misleading code. Drop nitpicks and style opinions.
64
- 7. Present findings as a short list with `file:line` references, ordered by severity.
65
- Security findings always rank above style-adjacent ones. For each, say whether you
66
- recommend fixing now through a ticket or recording it as a known issue.
67
- 8. Fix findings clearly within the authorized PRD through a new ticket associated with
68
- that PRD. Use `pincer-ticket.sh` to start, verify, and close it, then make a scoped
69
- `T-{NN}: {title}` commit. Ask only when a fix changes scope, architecture, or another
70
- material decision; never make an ad-hoc `review: fixes` commit. Every fix commit
71
- produces a new candidate: re-record `candidate`, re-run the checks against it, and
72
- write fresh evidence in step 9 — never reuse a manifest from a previous candidate.
73
- 9. Persist evidence for the candidate under `.prd/evidence/prd-vN/<candidate>/`.
74
- Strict coverage: run every declared command check as
75
- `node scripts/pincer-runtime.cjs check C-NN --candidate <sha>` (no command, no
76
- timeout: the map's declaration is the only source, and a supplied command is
77
- `CHECK_UNDECLARED`); record each declared review or visual obligation in the
78
- draft with its `result` and an artifact saved under the candidate's evidence
79
- directory (a required one that is not passed with an artifact is
80
- `REVIEW_MISSING`); write `adequacy: { verdict: "adequate" | "inadequate", note }`;
81
- list every declared check once and no `requirements` (they are derived). The
82
- export writes the inventory and map snapshots under `coverage/`, derives the
83
- scenario and requirement rows and `delivery` (original versus agreed scope) and
84
- validates them against the committed candidate; an `inadequate` judgment or a
85
- failed required check is recorded honestly and blocks readiness. Migrated
86
- project without strict coverage (the `Runtime` status line names a change): run
87
- each executable check through the runtime on the clean candidate view —
88
- `node scripts/pincer-runtime.cjs check C-NN --candidate <sha> -- <command>` (one
89
- command per check, the command line as run; `npm test` stays one aggregate check) —
90
- then write the authored fields to a draft outside the evidence directory, for
91
- example `.pincer/drafts/<sha>.json`: `environment.tools` and `environment.limitations`,
92
- `coverage_review`, `requirements`, review and visual checks with their saved
93
- artifacts, `visual_review`, and a stub `{"id": "C-NN", "kind": "command",
94
- "required": true|false}` for each executable check. Then run
95
- `node scripts/pincer-runtime.cjs evidence export --candidate <sha> --base <base> --prd .prd/prd-vN.md --draft <file>`.
96
- The export writes `checks/C-NN.log` from the captured logs, fills `command`,
97
- `result`, `provenance: runtime` and `attempt` from the attempts, labels review and
98
- visual checks `provenance: authored`, computes the digests and writes an evidence
99
- schema 2 manifest; it refuses a dirty tree, a HEAD that is not the candidate, a stub
100
- without an attempt, and a `passed` or `failed` command result written by hand. On a
101
- project with change records the export also appends the evaluation to the change's
102
- locator `.prd/evidence/changes/<id>.json` (the identity of this change's
103
- evaluation; root `NOTES.md` stays the human summary and may be overwritten by a
104
- later change's evaluation without losing this one) — commit the locator with the
105
- evidence. A tool that cannot run is recorded as an authored command check with
106
- `result: unverified` and a note, as before. Legacy project (no change binding):
107
- author the schema 1 manifest as follows.
108
- - `checks/C-NN.log` — the command and a redacted summary or safe log of each
109
- executable check. Never secrets, never an environment dump. Record
110
- one check per command: `command` holds the command line as run, never prose
111
- describing a session, and a manual smoke run is recorded as the command lines
112
- that were run (separate entries when they establish independent outcomes).
113
- Independently assessed commands — the tracked `.env` check, the secret scan,
114
- the dependency audit — are separate `checks` entries with their own `result`
115
- and log, so only the tool that could not run is `unverified`. A test runner
116
- such as `npm test` stays one aggregate check; do not split every subprocess or
117
- assertion. Visual and review checks keep their kinds and get no artificial
118
- shell command. Note a redaction rather than inventing a substitute command.
119
- - `visual/<scenario>.png` — each visual capture from step 4, with its scenario,
120
- viewport and observed result recorded in the manifest. When nothing renders,
121
- record `visual_review: {applicable: false, reason}` and say why.
122
- - `review/code-quality.md` — the reviewer's findings from step 2 with their
123
- dispositions, or its explicit no-findings statement, recorded as a check of
124
- kind `review` and referenced by the requirements it covers.
125
- - `manifest.json` — evidence schema 1 (field list in the header of
126
- `scripts/pincer-evidence.cjs`): selected PRD, full `base` and `candidate` IDs,
127
- `created`, `environment` with tool limitations, `coverage_review` (your judgment
128
- from step 3), one `requirements` entry per `R-NN` with its disposition, tickets
129
- and check IDs, one `checks` entry per check with `kind`, `required`, `result`,
130
- `command`, timestamp and artifact paths, and `artifacts` with digests from
131
- `node scripts/pincer-evidence.cjs digest <file>...`.
132
- A tool you cannot run yields a check with `result: unverified` and a note — never a
133
- fabricated artifact. A deferred requirement carries `authorized_by` naming the
134
- user's explicit authorization. Then run
135
- `node scripts/pincer-evidence.cjs validate .prd/evidence/prd-vN/<candidate>/manifest.json --candidate <candidate> --prd .prd/prd-vN.md`
136
- and correct the manifest until it prints `ok`; the same validator runs in status
137
- and release. It checks the record's consistency, not that the commands ran.
138
- 10. Close out: write a brief `NOTES.md` at the repo root with frontmatter:
139
- ```yaml
140
- ---
141
- prd: .prd/prd-vN.md
142
- base: <full reviewed base commit ID>
143
- candidate: <full reviewed candidate commit ID>
144
- evidence: .prd/evidence/prd-vN/<candidate>/manifest.json
145
- ---
146
- ```
147
- Then commit NOTES.md, the manifest, its listed artifacts and (change records) the
148
- evaluation locator — and nothing else —
149
- as `evaluate: PRD vN candidate <short sha>`. Status accepts this later commit only
150
- when its diff from the candidate is limited to `NOTES.md`, the candidate's evidence
151
- directories and evaluation locators; changes to source, tests, configuration,
152
- tickets, the PRD or the change record (a lifecycle transition after the
153
- candidate) require reevaluation. Legacy notes without these references
154
- do not establish readiness. Then describe what was built, what was cut
155
- and why, known issues, and what you'd do next with more time. Then a **Handover**
156
- section, written for the stranger who inherits this repo in six months: how to get
157
- oriented (which file to read first), what each dependency is for and why it earned
158
- its place, and what breaks first as the code ages (the riskiest assumption, the
159
- least-tested path). This is the first document a reviewer of this repo should read;
160
- summarize the requirement dispositions from the manifest in it.
161
- 11. Suggest `/pincer-release` as the final step: "Run `/pincer-release` for a pass/fail audit of the
162
- whole workflow's artifacts."
163
-
164
- ## Authorization rule (shared by plan, narrow, code and evaluate)
165
-
166
- Reuse explicit authorization for the same scope and decisions; ask only about a
167
- material choice not already authorized, and prepare the concrete proposal before
168
- asking. A decision the user delegated (for example "pick the architecture") does not
169
- need another approval when you exercise it, but a newly discovered consequential
170
- choice is surfaced before implementation. Record the authorization basis and the
171
- scope it covers in the PRD or the handover, and on a project with change records as
172
- a `change authorize` record (the user's words as the excerpt, or a `--delegated`
173
- disposition with its basis). An agent-written record or a status
174
- field is not authenticated human approval. When resuming without the context that
175
- granted authorization, do not invent it — read the `resume` report; an authorization
176
- it reports as `current` needs no repeat approval, and any other verdict is asked.
@@ -1,136 +0,0 @@
1
- ---
2
- description: "Turn the approved PRD into local, AI-ready ticket files"
3
- argument-hint: "Path to PRD (optional — defaults to the latest in .prd/)"
4
- ---
5
-
6
- # /pincer-narrow — PRD to Local Tickets
7
-
8
- You are decomposing the PRD into coherent, independently verifiable tickets stored as
9
- local markdown files (no external tracker needed). Ticket count and size follow the
10
- change's dependencies and risk, plus any budget the user supplied. There is no hard
11
- one-to-two-ticket cap for small PRDs and no default timebox: cohesion and dependencies
12
- decide the count. A breakdown that follows the PRD needs no second approval; a newly
13
- discovered consequential choice is surfaced before implementation.
14
-
15
- **Initial request:** $ARGUMENTS
16
-
17
- ## Steps
18
-
19
- 1. Run `scripts/pincer-status.sh`. If tickets already exist for another PRD, leave them
20
- as history. New tickets continue the numbering and existing ones are never renumbered.
21
- If tickets already exist for this PRD, extend them only when the current request already
22
- authorizes that work; otherwise present the concrete addition before asking. Then read the
23
- PRD (`$ARGUMENTS` or the latest `.prd/prd-v*.md`). If its status isn't `draft`, ask
24
- which PRD to use.
25
- 2. Decompose into tickets. Rules:
26
- - Each ticket is one coherent unit. Use S, M, or L as relative scope indicators and
27
- split work when that improves dependency order, verification, or ownership.
28
- - For greenfield work, use a walking skeleton when it reduces integration risk. For
29
- brownfield work, begin with the smallest protected vertical change; add a
30
- characterization ticket before changing load-bearing code that lacks coverage.
31
- - Order by dependency; note blockers explicitly ("depends on T-01").
32
- - Build the requirement map: for every `R-NN` in the PRD and each of its
33
- scenarios, name the ticket that owns the implementation and the executable
34
- check that exercises it, or an explicit review method when no executable check
35
- exists. Record the IDs in each ticket's Context as `Implements: R-NN, R-MM`
36
- (a navigation aid). Enabling work that implements no requirement states its purpose
37
- in the ticket Objective. Resolve missing coverage and conflicting criteria with
38
- the user before implementation; do not start with an unmapped required scenario. On a change with change records, author the map once as
39
- `.prd/coverage/<change id>.json` (coverage map schema 1, "Coverage map" in
40
- `docs/runtime-contracts.md`): one `scenarios` row per `S-NN` naming its
41
- implementing tickets and declared checks, every ticket of the change in
42
- `tickets` as `implements` or `enables` (with a rationale), each check declared
43
- once in `checks` with its kind, `required` flag and, for a command, the exact
44
- command line and timeout, and a `scope` entry (`deferred` or `removed`) for a
45
- scenario this change will not deliver, naming the decision that records the
46
- user's choice. The map is authored work you edit by hand; the runtime never
47
- rewrites it, and it validates it against the PRD's definitions.
48
- - Every ticket gets a runnable command in its Verification block — a fenced `bash`
49
- block that exits 0 only when the ticket is done. `scripts/pincer-ticket.sh verify`
50
- runs it verbatim and stamps the receipt that `done` requires, so it must be
51
- non-interactive and self-contained (no "check by hand"). An optional
52
- `timeout: <seconds>` frontmatter field (default 600) bounds the run; it is part of
53
- the check identity, so changing it invalidates earlier passes.
54
- - Each Verification section opens with `Proves:` — what the check establishes and
55
- which regression it detects. A check for an executable change must exercise
56
- observable behavior (including relevant rejection paths and, in brownfield work,
57
- preservation of existing behavior) and fail when the behavior is wrong, not only
58
- when an identifier is renamed. Reuse adequate focused tests. A build, a syntax
59
- check, or an identifier grep alone is not proof; static assertions are primary
60
- evidence only for static contracts such as generated files, and `Proves:` says so.
61
- - Adequacy is a judgment about what the command observes, never a word match: do
62
- not call a command sufficient because it contains `grep`, `test`, or a runner
63
- name, nor insufficient for lacking them. Manual visual judgment is recorded
64
- separately in evaluation; a tool the check needs but cannot run yields an
65
- explicit `unverified` result, never fabricated evidence or a silent waiver.
66
- - If the brief or stack implies automated tests, at least one ticket's verification
67
- command must be the test runner (e.g. `npm test`) — manual checks alone don't count.
68
- - Any ticket whose surface accepts external input (HTTP endpoint, form, file,
69
- LLM output) gets an acceptance criterion for the reject path — what invalid
70
- input produces (e.g. "empty goal → 400 with a clear message"), not only the
71
- happy path.
72
- - A greenfield setup ticket includes `.gitignore` covering `.env*` (except
73
- `.env.example`) and an `.env.example` naming any required secrets before any
74
- secret can exist in the repo. In brownfield repositories, preserve and verify
75
- the existing ignore and environment conventions.
76
- 3. Write each ticket to `tickets/T-{NN}-{slug}.md` using
77
- `.claude/references/ticket-template.md`, with `status: open` and an explicit
78
- `prd: .prd/prd-vN.md` naming the selected PRD. Never infer this association from
79
- numbering or old notes. The other state fields
80
- (`started`, `last_check`, `verified`, `finished`) are added later by `scripts/pincer-ticket.sh` —
81
- never write them yourself.
82
- 4. Present the ticket list (number, title, size, dependencies) as a table, followed
83
- by the requirement map as a second table (requirement · scenario · ticket · check
84
- or review method). Whether the map is complete and each check is adequate is your
85
- judgment as the author; say so rather than presenting the table as mechanical proof.
86
-
87
- Present the concrete breakdown and build order as a report, not a question. Reuse
88
- existing authorization for the same scope and order.
89
-
90
- 5. Finalize. A breakdown that follows the PRD is already authorized by the PRD: do not
91
- ask whether to proceed. Update the selected PRD frontmatter to `status: ticketed`,
92
- inspect existing staged changes, stage that PRD and the explicit new ticket paths,
93
- review `git diff --cached`, and commit only those paths. Ask first — and finalize
94
- once it is resolved — only when step 4 surfaced a newly discovered consequential
95
- choice or a scope change the PRD does not cover. Then register the change when the
96
- `Runtime` status line says `legacy` and no ticket of this PRD carries legacy
97
- receipts, or `changes` (the project already keeps change records):
98
- `node scripts/pincer-runtime.cjs register --prd .prd/prd-vN.md` writes the change
99
- record `.prd/changes/prd-vN.json` (retaining every earlier change); stage
100
- `.prd/changes/` and `.gitignore` (registration adds `.pincer/` to it) and commit them
101
- as `Register PRD vN`. Then record the user's actual approval against the agreement
102
- the record binds — `node scripts/pincer-runtime.cjs change show prd-vN --json`
103
- prints the agreement digest — with
104
- `node scripts/pincer-runtime.cjs change authorize prd-vN --agreement <digest> --reference "<where the user said it>" --excerpt "<the user's approval, quoted>"`,
105
- select it for this worktree (`node scripts/pincer-runtime.cjs change select prd-vN`)
106
- and commit `.prd/changes/` as `Authorize PRD vN`. When the map was authored, adopt
107
- strict coverage explicitly: `node scripts/pincer-runtime.cjs coverage adopt --preview --change prd-vN`
108
- shows the inventory, the map digest and the agreement it records (it refuses an
109
- incomplete map, naming the scenario or ticket); `--apply` writes the schema 3
110
- record with a backup and grants nothing — record the user's approval of that
111
- agreement with `change authorize` (the same instruction, if it named this
112
- breakdown; a delegated disposition needs its basis) and commit `.prd/coverage/`
113
- and `.prd/changes/` as `Adopt strict coverage for PRD vN`. A scenario the user
114
- deferred or removed is a decision: `change decide --summary "<the choice>"`,
115
- `--resolve D-NN` with the user's words naming the scenario, the `scope` entry in
116
- the map, then `change authorize … --decision D-NN`. Never record a disposition
117
- the user did not state; `coverage` reports `SCOPE_UNAUTHORIZED` until it is. The excerpt records the user's own
118
- words; running the command proves nothing by itself, and a registration, a PRD
119
- status or a passing check never becomes an authorization. A project whose tickets
120
- carry legacy receipts, or that still holds a v0.5.0 binding (`Runtime change <id> ·
121
- revision …`), is migrated from `/pincer-code` after a preview, never here. Finish with:
122
- "Tickets ready in `tickets/`. Run `/pincer-code` to start implementing."
123
-
124
- ## Authorization rule (shared by plan, narrow, code and evaluate)
125
-
126
- Reuse explicit authorization for the same scope and decisions; ask only about a
127
- material choice not already authorized, and prepare the concrete proposal before
128
- asking. A decision the user delegated (for example "pick the architecture") does not
129
- need another approval when you exercise it, but a newly discovered consequential
130
- choice is surfaced before implementation. Record the authorization basis and the
131
- scope it covers in the PRD or the handover, and on a project with change records as
132
- a `change authorize` record (the user's words as the excerpt, or a `--delegated`
133
- disposition with its basis). An agent-written record or a status
134
- field is not authenticated human approval. When resuming without the context that
135
- granted authorization, do not invent it — read the `resume` report; an authorization
136
- it reports as `current` needs no repeat approval, and any other verdict is asked.
@@ -1,132 +0,0 @@
1
- ---
2
- description: "Create a PRD through brief discovery, codebase scan, and an architecture gate"
3
- argument-hint: "Brief description of the task/feature (paste the full brief if you have one)"
4
- ---
5
-
6
- # /pincer-plan — PRD Creation
7
-
8
- You are turning a task brief into a reviewable PRD. Scale discovery and detail to
9
- the change's uncertainty, risk, and any time budget the user supplied. The PRD feeds
10
- `/pincer-narrow` next.
11
-
12
- Choose the planning profile and record why it fits: `profile: small` for bounded
13
- scope, low risk, known behavior and straightforward verification; otherwise
14
- `standard` (the default). Few changed lines alone do not qualify — migrations,
15
- authorization boundaries, uncertain requirements and broad effects need proper
16
- investigation even for a tiny patch. Honor an explicit budget the user supplied;
17
- there is no default timebox, and a budget never silently cuts requirements —
18
- record any cut in Out of Scope.
19
-
20
- **Initial request:** $ARGUMENTS
21
-
22
- First run `scripts/pincer-status.sh`. If a PRD already exists, preserve it and select
23
- the next unused numeric version for this change. Use the brief and repository state to
24
- distinguish a revision from a new change; ask only if that distinction changes scope or
25
- architecture. If tickets for the current PRD are in progress, resume `/pincer-code`
26
- unless the user explicitly authorized a separate change.
27
-
28
- ## Phase 1: Discovery
29
-
30
- 1. If `$ARGUMENTS` contains the brief, extract what you can before asking anything.
31
- Never ask a question the brief already answers. Preserve or link the original
32
- brief in the PRD, and record the desired outcome, assumptions and exclusions.
33
- If the user supplied a PRD, review it: keep its meaning and existing requirement
34
- IDs; do not silently replace either. Where its structure needs adapting to the
35
- template, record a mapping table (`their section or ID → R-NN`) inside the PRD.
36
- 2. Ask only the questions whose answers would change the architecture or scope.
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:
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.
45
- - Any required stack, or is it my choice?
46
- - What is explicitly out of scope?
47
- 3. If the project has a frontend, ask one design question: "What should this feel like,
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.
51
-
52
- Summarize your understanding in 3–5 sentences. Existing authorization in the request or
53
- session carries forward; ask only about an unresolved choice that materially changes the result.
54
-
55
- ## Phase 2: Codebase scan (conditional)
56
-
57
- If the repo already contains source code, launch 1–2 `codebase-explorer` agents in parallel
58
- (one for architecture/structure, one for patterns relevant to the feature). Read the 2–3 most
59
- load-bearing files they identify yourself — don't rely solely on agent summaries. If the
60
- repo is empty, skip and say so. (No subagents on this platform? Do the exploration
61
- yourself, inline, following the rules in `.claude/agents/codebase-explorer.md`.)
62
-
63
- **Brownfield scaling:** if the existing code is substantial or load-bearing (production
64
- traffic, other consumers, no green test suite), this phase grows and Phase 4 shrinks —
65
- a wrong map costs more than a thin PRD. Additionally establish: which paths the change
66
- touches are load-bearing, what test coverage protects them (run the suite, don't assume),
67
- and the blast radius + rollback story for the change. Record these in the PRD's
68
- Architecture section. Greenfield speed assumptions do not transfer to brownfield work.
69
-
70
- ## Phase 3: Architecture
71
-
72
- Propose the architecture: components, data flow, integration points, and key decisions.
73
- - Recommend one approach; mention an alternative only when the trade-off is real.
74
- - Name the trust boundaries in one or two sentences: which inputs are untrusted
75
- (user input, LLM output, third-party responses), where each is validated, and
76
- which secrets exist and where they live (server-side only). This becomes the
77
- PRD's Security section when the project handles secrets or external input.
78
- - Verify versions of key dependencies with `npm view <pkg> version` (or the ecosystem's
79
- equivalent) before naming them — don't trust training data.
80
- - Verify the contract of any external API the plan builds on (one live request or the
81
- current official docs) before designing around it — endpoint shapes remembered from
82
- training data are guesses.
83
- - Respect any explicit delivery budget. Record deliberate cuts in Out of Scope.
84
-
85
- Prepare the full draft before seeking any approval still required. The user should review a
86
- concrete scope and architecture; do not repeat an approval already given for the same decision.
87
-
88
- ## Phase 4: Write the PRD
89
-
90
- 1. Load `.claude/references/prd-template.md` and write all core sections.
91
- In Requirements, assign stable `R-NN` IDs within the selected PRD: a revision
92
- keeps existing IDs and adds new ones, never renumbers. Every requirement has
93
- observable acceptance scenarios, the relevant failure paths, and the existing
94
- behavior it must preserve, each written as a bold `- **S-NN:** …` item under its
95
- requirement heading (the template's grammar; the runtime parses exactly these
96
- definitions into the inventory that strict coverage tracks, and a requirement
97
- without a scenario is invalid there) — `/pincer-narrow` maps each scenario to a
98
- ticket and a check in the coverage map, and `/pincer-evaluate` dispositions every
99
- ID. A supplied PRD keeps its own uppercase IDs (`REQ-1`, `AC-3`); only its
100
- definition syntax is adapted, and the mapping table records what changed.
101
- 2. Include optional sections when risk or the product context warrants them.
102
- 3. Save to the next unused `.prd/prd-v{N}.md` (create `.prd/` if needed), with `N`
103
- matching the filename and frontmatter:
104
- ```yaml
105
- ---
106
- version: {N}
107
- status: draft
108
- date: {today}
109
- profile: small # only when small; omit for standard
110
- ---
111
- ```
112
- 4. If `.git/` doesn't exist, run `git init`. Commit the PRD and only the intended setup
113
- paths after inspecting existing staged work; planning should be visible in history
114
- without absorbing unrelated brownfield changes.
115
-
116
- Present the saved draft and obtain approval only when the same scope/architecture was not
117
- already authorized. Finish with: "PRD saved to `.prd/prd-v{N}.md`. Run `/pincer-narrow`
118
- to break it into work items."
119
-
120
- ## Authorization rule (shared by plan, narrow, code and evaluate)
121
-
122
- Reuse explicit authorization for the same scope and decisions; ask only about a
123
- material choice not already authorized, and prepare the concrete proposal before
124
- asking. A decision the user delegated (for example "pick the architecture") does not
125
- need another approval when you exercise it, but a newly discovered consequential
126
- choice is surfaced before implementation. Record the authorization basis and the
127
- scope it covers in the PRD or the handover, and on a project with change records as
128
- a `change authorize` record (the user's words as the excerpt, or a `--delegated`
129
- disposition with its basis). An agent-written record or a status
130
- field is not authenticated human approval. When resuming without the context that
131
- granted authorization, do not invent it — read the `resume` report; an authorization
132
- it reports as `current` needs no repeat approval, and any other verdict is asked.
@@ -1,80 +0,0 @@
1
- ---
2
- description: "Audit the repo against the workflow checklist — pass/fail per item, no fixes"
3
- argument-hint: "Stage to check (optional: plan | narrow | code | evaluate — defaults to all completed stages)"
4
- ---
5
-
6
- # /pincer-release — Workflow Audit
7
-
8
- You are auditing the current repo state against `docs/release-checklist.md`. Read-only:
9
- report pass/fail, never fix anything — fixes belong to the stage commands. Release does
10
- not repair tickets, rewrite evidence, change PRD state, or publish. A check that mutates
11
- the candidate invalidates the audit: if `git status --short` is not empty afterwards,
12
- the verdict is FAIL and names the mutation. The verdict is reported to the user; a
13
- durable runtime-owned release record is later work.
14
-
15
- **Requested stage:** $ARGUMENTS
16
-
17
- ## Steps
18
-
19
- 1. Read `docs/release-checklist.md` — it is the source of truth for product-candidate
20
- readiness. `docs/dry-run-checklist.md` is a separate manual platform trial and must
21
- not impose toy-project or Pincer-kit assumptions on this audit.
22
- 2. Run `scripts/pincer-status.sh` to determine the selected PRD and which stages have run
23
- (it reads `.prd/`, associated `tickets/`, `NOTES.md`; add `git log`). If `$ARGUMENTS`
24
- names a stage, check only up
25
- to that stage.
26
- 3. Check every applicable item mechanically where possible:
27
- - File existence and frontmatter: read the files.
28
- - Commit format and story: `git log --oneline`.
29
- - Receipts: every done ticket is ready — on a legacy project current `last_check`
30
- and `verified` receipts, on a migrated project a current passing attempt
31
- (`node scripts/pincer-runtime.cjs ready` exits 0); any status warning fails the
32
- audit. Do not call `pincer-ticket.sh` from Release:
33
- it writes receipts and would invalidate the evaluated candidate. Release never
34
- runs `verify`, `check` or `done`; `status`, `ready` and the project gate are its
35
- only commands.
36
- - Evidence: `scripts/pincer-status.sh` runs the shared validator
37
- (`scripts/pincer-evidence.cjs`) against the manifest `NOTES.md` names. The `Notes`
38
- line must read `current` and the `Evidence` line `ok`; any other text fails the
39
- audit with that diagnostic. Do not re-implement evidence checks and do not accept
40
- screenshots described in chat: read the manifest's `checks`, requirement
41
- dispositions and `visual_review`. Validation establishes that the record is
42
- consistent, not that the commands ran — say so if asked.
43
- - Provenance: status prints a `Provenance` line for the evaluated candidate:
44
- `runtime (schema 2)` with local attempts consistent, or `legacy (schema 1, authored
45
- command results)`. A newer local attempt that failed, timed out, was interrupted or
46
- is still running for the same check and source inputs fails the audit (`ready`
47
- exits 1 and names the check). A fresh clone reports `local verification history
48
- unavailable; saved candidate evidence validated only`: state that limit in the
49
- verdict rather than claiming local verification.
50
- - Change records (the `Runtime` line reads `changes`): the selected change is
51
- `completed`, its authorization is `current` for the current agreement, and its
52
- evaluation locator `.prd/evidence/changes/<id>.json` names the evaluated
53
- candidate; `node scripts/pincer-runtime.cjs ready` reports `SELECTION_REQUIRED`,
54
- `LIFECYCLE_BLOCKED`, `DECISION_REQUIRED`, `AUTHORIZATION_REQUIRED` or
55
- `AGREEMENT_CHANGED` as failures. Release selects, activates and completes nothing;
56
- historical evidence of a cancelled or superseded change is inspectable but never
57
- release-ready.
58
- - Strict coverage (the status line reads `Coverage strict …`): read
59
- `node scripts/pincer-runtime.cjs coverage` — structure complete, every in-scope
60
- scenario `delivered` on the evaluated candidate, deferrals and removals backed by
61
- their decision and user authorization, `delivery` reported as original versus
62
- agreed scope (never conflate them), adequacy `adequate`; the manifest is schema 3
63
- and the `Provenance` line reads `runtime (schema 3)`. `ready` names
64
- `COVERAGE_INCOMPLETE`, `SCOPE_UNAUTHORIZED`, `OBLIGATION_MISSING`,
65
- `REVIEW_MISSING` and `ADEQUACY_REQUIRED` as failures. A change labeled
66
- `Coverage unverified` did not adopt strict coverage: audit it under the rules
67
- above and say so; never imply strict coverage was established.
68
- - Every file the manifest lists is tracked, and `git status --short` is empty before
69
- and after the audit.
70
- - Run the repository's candidate-wide release gate directly (`npm test`, or the
71
- equivalent declared by the project) and report its actual output. Any failure
72
- blocks PASS. Confirm `git status --short` remains clean afterward.
73
- 4. For judgment items (tickets genuinely S/M, history reads as a story), give your
74
- verdict AND one sentence of evidence — never a bare pass.
75
- 5. Present a table: checklist item | pass/fail/skipped | evidence. Order by stage.
76
- 6. End with a one-line verdict naming the candidate: "PASS — candidate {sha}: workflow
77
- artifacts complete" or "FAIL — candidate {sha}: {n} items failed; fix via {command}".
78
- Fixes go through a new ticket, a new candidate and a new evaluation. For each failure, name the command
79
- file (`.claude/commands/*.md`) whose instructions should be tightened if the
80
- failure is a workflow bug rather than a run mistake.
@@ -1,108 +0,0 @@
1
- # PRD Template
2
-
3
- Used by `/pincer-plan` Phase 4. Core sections are always included. Add optional detail
4
- when uncertainty, product context, or risk warrants it; a small fix may remain compact.
5
-
6
- ## Profile
7
-
8
- The frontmatter field `profile: small | standard` sets the planning weight; a PRD
9
- without it is `standard`. `small` means bounded scope, low risk, known behavior and
10
- straightforward verification. Few changed lines alone do not qualify: migrations,
11
- authorization boundaries, uncertain requirements and broad effects stay `standard`
12
- even for a tiny patch. The PRD records in one or two sentences why the profile fits.
13
-
14
- A small PRD keeps Problem (with the outcome), Scope, Requirements with scenarios,
15
- Success Criteria (its verification), risks and exclusions, and omits empty sections
16
- and repetition. Interface examples may clarify a contract; implementation code must
17
- not substitute for requirements in any profile.
18
-
19
- ---
20
-
21
- ## Core Sections (always include)
22
-
23
- ### 1. Problem
24
- What problem does this solve? Who has it? (2–4 sentences.) Preserve or link the
25
- original brief (quote it in an appendix or name where it lives) so the source of
26
- every requirement stays reviewable.
27
-
28
- ### 2. Solution
29
- One-paragraph summary of what we're building: the desired outcome, the assumptions
30
- it rests on, and what it deliberately excludes.
31
-
32
- ### 3. Scope
33
-
34
- | This PRD covers | This PRD does NOT cover |
35
- | --- | --- |
36
- | ... | ... |
37
-
38
- ### 4. Requirements
39
- One entry per requirement with a stable ID. IDs are assigned once within this PRD
40
- and never renumbered: a revision keeps existing IDs and adds new ones. Tickets
41
- name the IDs they implement and evaluation dispositions every ID.
42
-
43
- #### R-01 — short title
44
- - **S-01:** an observable acceptance scenario (given / when / then, or a command
45
- and its expected output). One bold `S-NN` item per scenario, defined under its
46
- requirement heading; every requirement has at least one.
47
- - **S-02:** Failure path: what invalid input or the relevant failure produces.
48
- - **S-03:** Preserve: existing behavior this must not change (brownfield).
49
-
50
- Scenario IDs are stable like requirement IDs. The runtime reads exactly this
51
- grammar (a `##`..`####` heading `R-NN — title`, bold `- **S-NN:** text` items
52
- under it, continuation lines indented); mentions in prose, tables and fenced
53
- examples define nothing. On a change with strict coverage the parsed inventory is
54
- what the coverage map and the evaluation must cover completely.
55
-
56
- When the user supplied a PRD, keep its meaning and its existing requirement IDs.
57
- If its structure needs adapting to this template, add a `Requirement mapping`
58
- table under this section (`their section or ID → R-NN`) instead of rewriting it.
59
-
60
- ### 5. Architecture
61
-
62
- #### Structure
63
- ```
64
- directory tree showing new/modified files
65
- ```
66
-
67
- #### Key components
68
- What each component does, owns, and depends on.
69
-
70
- #### Data flow
71
- Input → processing → output.
72
-
73
- ### 6. Success Criteria
74
-
75
- | Criterion | How to verify |
76
- | --- | --- |
77
- | ... | a command to run or a thing to observe |
78
-
79
- ### 7. Out of Scope
80
- Explicit list. Anything cut for time during `/pincer-code` gets appended here with a reason.
81
-
82
- ---
83
-
84
- ## Optional Sections (include when relevant)
85
-
86
- ### Visual Direction
87
- Only if there's a frontend. 4–6 lines: tone (3 concrete words), theme (light/dark + why),
88
- typography pairing, colour direction (dominant + accent), and what to avoid.
89
-
90
- ### Security & Trust Boundaries
91
- Include whenever the project handles secrets or external input (which is almost always).
92
- 3–5 lines: which inputs are untrusted and where each is validated, which secrets exist
93
- and where they live (server-side only, named in `.env.example`), and what the client
94
- sees on failure (generic message — details stay in server logs).
95
-
96
- ### Dependencies & Risks
97
- Include when something outside our control or a migration/rollback concern could sink delivery.
98
-
99
- ---
100
-
101
- ## Formatting Rules
102
-
103
- - Save as `.prd/prd-v{N}.md` with YAML frontmatter (`version`, `status`, `date`,
104
- and `profile` when small).
105
- - Status lifecycle: `draft → ticketed → built`.
106
- - Diagrams as ASCII or markdown tables only.
107
- - No implementation code and no exact line numbers — those belong in tickets.
108
- - The Scope table always has both columns filled.