pincer-workflow 0.7.0 → 1.0.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.
Files changed (139) hide show
  1. package/README.md +161 -193
  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 -55
  6. package/template/.claude/commands/pincer-blueprint.md +7 -0
  7. package/template/.claude/commands/pincer-status.md +4 -59
  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 +51 -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 -55
  70. package/template/AGENTS.md +34 -67
  71. package/template/docs/engine.md +249 -0
  72. package/template/docs/release-checklist.md +27 -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 +375 -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 +173 -0
  82. package/template/scripts/pincer/ticket.cjs +204 -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 -240
  90. package/template/.agents/skills/pincer-evaluate/SKILL.md +0 -178
  91. package/template/.agents/skills/pincer-narrow/SKILL.md +0 -148
  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 -238
  97. package/template/.claude/commands/pincer-evaluate.md +0 -176
  98. package/template/.claude/commands/pincer-narrow.md +0 -146
  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 -240
  104. package/template/.github/prompts/pincer-evaluate.prompt.md +0 -178
  105. package/template/.github/prompts/pincer-narrow.prompt.md +0 -148
  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 -1769
  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 -102
  128. package/template/scripts/pincer-runtime/requirements.cjs +0 -255
  129. package/template/scripts/pincer-runtime/resume.cjs +0 -273
  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/scaffold.cjs +0 -254
  134. package/template/scripts/pincer-runtime/source.cjs +0 -129
  135. package/template/scripts/pincer-runtime/state.cjs +0 -314
  136. package/template/scripts/pincer-runtime/status.cjs +0 -514
  137. package/template/scripts/pincer-runtime/transaction.cjs +0 -200
  138. package/template/scripts/pincer-runtime/transitions.cjs +0 -134
  139. package/template/scripts/pincer-runtime.cjs +0 -686
@@ -1,148 +0,0 @@
1
- ---
2
- mode: agent
3
- description: "Turn the approved PRD into local, AI-ready ticket files"
4
- ---
5
- <!-- Generated from .claude/commands/pincer-narrow.md by scripts/sync-prompts.sh — edit the source, not this file -->
6
-
7
-
8
- # /pincer-narrow — PRD to Local Tickets
9
-
10
- You are decomposing the PRD into coherent, independently verifiable tickets stored as
11
- local markdown files (no external tracker needed). Ticket count and size follow the
12
- change's dependencies and risk, plus any budget the user supplied. There is no hard
13
- one-to-two-ticket cap for small PRDs and no default timebox: cohesion and dependencies
14
- decide the count. A breakdown that follows the PRD needs no second approval; a newly
15
- discovered consequential choice is surfaced before implementation.
16
-
17
- **Initial request:** ${input:request:Task brief or arguments (optional)}
18
-
19
- ## Steps
20
-
21
- 1. Run `scripts/pincer-status.sh`. If tickets already exist for another PRD, leave them
22
- as history. New tickets continue the numbering and existing ones are never renumbered.
23
- If tickets already exist for this PRD, extend them only when the current request already
24
- authorizes that work; otherwise present the concrete addition before asking. Then read the
25
- PRD (`${input:request:Task brief or arguments (optional)}` or the latest `.prd/prd-v*.md`). If its status isn't `draft`, ask
26
- which PRD to use.
27
- 2. Decompose into tickets. Rules:
28
- - Each ticket is one coherent unit. Use S, M, or L as relative scope indicators and
29
- split work when that improves dependency order, verification, or ownership.
30
- - For greenfield work, use a walking skeleton when it reduces integration risk. For
31
- brownfield work, begin with the smallest protected vertical change; add a
32
- characterization ticket before changing load-bearing code that lacks coverage.
33
- - Order by dependency; note blockers explicitly ("depends on T-01").
34
- - Build the requirement map: for every `R-NN` in the PRD and each of its
35
- scenarios, name the ticket that owns the implementation and the executable
36
- check that exercises it, or an explicit review method when no executable check
37
- exists. Record the IDs in each ticket's Context as `Implements: R-NN, R-MM`
38
- (a navigation aid). Enabling work that implements no requirement states its purpose
39
- in the ticket Objective. Resolve missing coverage and conflicting criteria with
40
- the user before implementation; do not start with an unmapped required scenario. On a change with change records, author the map once as
41
- `.prd/coverage/<change id>.json` (coverage map schema 1, "Coverage map" in
42
- `docs/runtime-contracts.md`). Start from
43
- `node scripts/pincer-runtime.cjs coverage scaffold --change <change id>`: it prints
44
- a read-only draft listing every live scenario exactly once with its requirement,
45
- every ticket with its objective, its own `Implements:` claim and its Verification
46
- text, and an `Unresolved` list of what is still unauthored. It writes nothing,
47
- adopts nothing and decides nothing — it removes the transcription, not the
48
- judgment, so a ticket's claim is material to check rather than a link, and no check
49
- command, ticket role or scope disposition is ever invented. The draft is not a map:
50
- it carries no `schema` key and `coverage adopt` refuses it. You author the real map
51
- yourself, working through the draft's unresolved entries:
52
- one `scenarios` row per `S-NN` naming its
53
- implementing tickets and declared checks, every ticket of the change in
54
- `tickets` as `implements` or `enables` (with a rationale), each check declared
55
- once in `checks` with its kind, `required` flag and, for a command, the exact
56
- command line and timeout, and a `scope` entry (`deferred` or `removed`) for a
57
- scenario this change will not deliver, naming the decision that records the
58
- user's choice. The map is authored work you edit by hand; the runtime never
59
- rewrites it, and it validates it against the PRD's definitions.
60
- - Every ticket gets a runnable command in its Verification block — a fenced `bash`
61
- block that exits 0 only when the ticket is done. `scripts/pincer-ticket.sh verify`
62
- runs it verbatim and stamps the receipt that `done` requires, so it must be
63
- non-interactive and self-contained (no "check by hand"). An optional
64
- `timeout: <seconds>` frontmatter field (default 600) bounds the run; it is part of
65
- the check identity, so changing it invalidates earlier passes.
66
- - Each Verification section opens with `Proves:` — what the check establishes and
67
- which regression it detects. A check for an executable change must exercise
68
- observable behavior (including relevant rejection paths and, in brownfield work,
69
- preservation of existing behavior) and fail when the behavior is wrong, not only
70
- when an identifier is renamed. Reuse adequate focused tests. A build, a syntax
71
- check, or an identifier grep alone is not proof; static assertions are primary
72
- evidence only for static contracts such as generated files, and `Proves:` says so.
73
- - Adequacy is a judgment about what the command observes, never a word match: do
74
- not call a command sufficient because it contains `grep`, `test`, or a runner
75
- name, nor insufficient for lacking them. Manual visual judgment is recorded
76
- separately in evaluation; a tool the check needs but cannot run yields an
77
- explicit `unverified` result, never fabricated evidence or a silent waiver.
78
- - If the brief or stack implies automated tests, at least one ticket's verification
79
- command must be the test runner (e.g. `npm test`) — manual checks alone don't count.
80
- - Any ticket whose surface accepts external input (HTTP endpoint, form, file,
81
- LLM output) gets an acceptance criterion for the reject path — what invalid
82
- input produces (e.g. "empty goal → 400 with a clear message"), not only the
83
- happy path.
84
- - A greenfield setup ticket includes `.gitignore` covering `.env*` (except
85
- `.env.example`) and an `.env.example` naming any required secrets before any
86
- secret can exist in the repo. In brownfield repositories, preserve and verify
87
- the existing ignore and environment conventions.
88
- 3. Write each ticket to `tickets/T-{NN}-{slug}.md` using
89
- `.claude/references/ticket-template.md`, with `status: open` and an explicit
90
- `prd: .prd/prd-vN.md` naming the selected PRD. Never infer this association from
91
- numbering or old notes. The other state fields
92
- (`started`, `last_check`, `verified`, `finished`) are added later by `scripts/pincer-ticket.sh` —
93
- never write them yourself.
94
- 4. Present the ticket list (number, title, size, dependencies) as a table, followed
95
- by the requirement map as a second table (requirement · scenario · ticket · check
96
- or review method). Whether the map is complete and each check is adequate is your
97
- judgment as the author; say so rather than presenting the table as mechanical proof.
98
-
99
- Present the concrete breakdown and build order as a report, not a question. Reuse
100
- existing authorization for the same scope and order.
101
-
102
- 5. Finalize. A breakdown that follows the PRD is already authorized by the PRD: do not
103
- ask whether to proceed. Update the selected PRD frontmatter to `status: ticketed`,
104
- inspect existing staged changes, stage that PRD and the explicit new ticket paths,
105
- review `git diff --cached`, and commit only those paths. Ask first — and finalize
106
- once it is resolved — only when step 4 surfaced a newly discovered consequential
107
- choice or a scope change the PRD does not cover. Then register the change when the
108
- `Runtime` status line says `legacy` and no ticket of this PRD carries legacy
109
- receipts, or `changes` (the project already keeps change records):
110
- `node scripts/pincer-runtime.cjs register --prd .prd/prd-vN.md` writes the change
111
- record `.prd/changes/prd-vN.json` (retaining every earlier change); stage
112
- `.prd/changes/` and `.gitignore` (registration adds `.pincer/` to it) and commit them
113
- as `Register PRD vN`. Then record the user's actual approval against the agreement
114
- the record binds — `node scripts/pincer-runtime.cjs change show prd-vN --json`
115
- prints the agreement digest — with
116
- `node scripts/pincer-runtime.cjs change authorize prd-vN --agreement <digest> --reference "<where the user said it>" --excerpt "<the user's approval, quoted>"`,
117
- select it for this worktree (`node scripts/pincer-runtime.cjs change select prd-vN`)
118
- and commit `.prd/changes/` as `Authorize PRD vN`. When the map was authored, adopt
119
- strict coverage explicitly: `node scripts/pincer-runtime.cjs coverage adopt --preview --change prd-vN`
120
- shows the inventory, the map digest and the agreement it records (it refuses an
121
- incomplete map, naming the scenario or ticket); `--apply` writes the schema 3
122
- record with a backup and grants nothing — record the user's approval of that
123
- agreement with `change authorize` (the same instruction, if it named this
124
- breakdown; a delegated disposition needs its basis) and commit `.prd/coverage/`
125
- and `.prd/changes/` as `Adopt strict coverage for PRD vN`. A scenario the user
126
- deferred or removed is a decision: `change decide --summary "<the choice>"`,
127
- `--resolve D-NN` with the user's words naming the scenario, the `scope` entry in
128
- the map, then `change authorize … --decision D-NN`. Never record a disposition
129
- the user did not state; `coverage` reports `SCOPE_UNAUTHORIZED` until it is. The excerpt records the user's own
130
- words; running the command proves nothing by itself, and a registration, a PRD
131
- status or a passing check never becomes an authorization. A project whose tickets
132
- carry legacy receipts, or that still holds a v0.5.0 binding (`Runtime change <id> ·
133
- revision …`), is migrated from `/pincer-code` after a preview, never here. Finish with:
134
- "Tickets ready in `tickets/`. Run `/pincer-code` to start implementing."
135
-
136
- ## Authorization rule (shared by plan, narrow, code and evaluate)
137
-
138
- Reuse explicit authorization for the same scope and decisions; ask only about a
139
- material choice not already authorized, and prepare the concrete proposal before
140
- asking. A decision the user delegated (for example "pick the architecture") does not
141
- need another approval when you exercise it, but a newly discovered consequential
142
- choice is surfaced before implementation. Record the authorization basis and the
143
- scope it covers in the PRD or the handover, and on a project with change records as
144
- a `change authorize` record (the user's words as the excerpt, or a `--delegated`
145
- disposition with its basis). An agent-written record or a status
146
- field is not authenticated human approval. When resuming without the context that
147
- granted authorization, do not invent it — read the `resume` report; an authorization
148
- it reports as `current` needs no repeat approval, and any other verdict is asked.
@@ -1,134 +0,0 @@
1
- ---
2
- mode: agent
3
- description: "Create a PRD through brief discovery, codebase scan, and an architecture gate"
4
- ---
5
- <!-- Generated from .claude/commands/pincer-plan.md by scripts/sync-prompts.sh — edit the source, not this file -->
6
-
7
-
8
- # /pincer-plan — PRD Creation
9
-
10
- You are turning a task brief into a reviewable PRD. Scale discovery and detail to
11
- the change's uncertainty, risk, and any time budget the user supplied. The PRD feeds
12
- `/pincer-narrow` next.
13
-
14
- Choose the planning profile and record why it fits: `profile: small` for bounded
15
- scope, low risk, known behavior and straightforward verification; otherwise
16
- `standard` (the default). Few changed lines alone do not qualify — migrations,
17
- authorization boundaries, uncertain requirements and broad effects need proper
18
- investigation even for a tiny patch. Honor an explicit budget the user supplied;
19
- there is no default timebox, and a budget never silently cuts requirements —
20
- record any cut in Out of Scope.
21
-
22
- **Initial request:** ${input:request:Task brief or arguments (optional)}
23
-
24
- First run `scripts/pincer-status.sh`. If a PRD already exists, preserve it and select
25
- the next unused numeric version for this change. Use the brief and repository state to
26
- distinguish a revision from a new change; ask only if that distinction changes scope or
27
- architecture. If tickets for the current PRD are in progress, resume `/pincer-code`
28
- unless the user explicitly authorized a separate change.
29
-
30
- ## Phase 1: Discovery
31
-
32
- 1. If `${input:request:Task brief or arguments (optional)}` contains the brief, extract what you can before asking anything.
33
- Never ask a question the brief already answers. Preserve or link the original
34
- brief in the PRD, and record the desired outcome, assumptions and exclusions.
35
- If the user supplied a PRD, review it: keep its meaning and existing requirement
36
- IDs; do not silently replace either. Where its structure needs adapting to the
37
- template, record a mapping table (`their section or ID → R-NN`) inside the PRD.
38
- 2. Ask only the questions whose answers would change the architecture or scope.
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:
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.
47
- - Any required stack, or is it my choice?
48
- - What is explicitly out of scope?
49
- 3. If the project has a frontend, ask one design question: "What should this feel like,
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.
53
-
54
- Summarize your understanding in 3–5 sentences. Existing authorization in the request or
55
- session carries forward; ask only about an unresolved choice that materially changes the result.
56
-
57
- ## Phase 2: Codebase scan (conditional)
58
-
59
- If the repo already contains source code, launch 1–2 `codebase-explorer` agents in parallel
60
- (one for architecture/structure, one for patterns relevant to the feature). Read the 2–3 most
61
- load-bearing files they identify yourself — don't rely solely on agent summaries. If the
62
- repo is empty, skip and say so. (No subagents on this platform? Do the exploration
63
- yourself, inline, following the rules in `.claude/agents/codebase-explorer.md`.)
64
-
65
- **Brownfield scaling:** if the existing code is substantial or load-bearing (production
66
- traffic, other consumers, no green test suite), this phase grows and Phase 4 shrinks —
67
- a wrong map costs more than a thin PRD. Additionally establish: which paths the change
68
- touches are load-bearing, what test coverage protects them (run the suite, don't assume),
69
- and the blast radius + rollback story for the change. Record these in the PRD's
70
- Architecture section. Greenfield speed assumptions do not transfer to brownfield work.
71
-
72
- ## Phase 3: Architecture
73
-
74
- Propose the architecture: components, data flow, integration points, and key decisions.
75
- - Recommend one approach; mention an alternative only when the trade-off is real.
76
- - Name the trust boundaries in one or two sentences: which inputs are untrusted
77
- (user input, LLM output, third-party responses), where each is validated, and
78
- which secrets exist and where they live (server-side only). This becomes the
79
- PRD's Security section when the project handles secrets or external input.
80
- - Verify versions of key dependencies with `npm view <pkg> version` (or the ecosystem's
81
- equivalent) before naming them — don't trust training data.
82
- - Verify the contract of any external API the plan builds on (one live request or the
83
- current official docs) before designing around it — endpoint shapes remembered from
84
- training data are guesses.
85
- - Respect any explicit delivery budget. Record deliberate cuts in Out of Scope.
86
-
87
- Prepare the full draft before seeking any approval still required. The user should review a
88
- concrete scope and architecture; do not repeat an approval already given for the same decision.
89
-
90
- ## Phase 4: Write the PRD
91
-
92
- 1. Load `.claude/references/prd-template.md` and write all core sections.
93
- In Requirements, assign stable `R-NN` IDs within the selected PRD: a revision
94
- keeps existing IDs and adds new ones, never renumbers. Every requirement has
95
- observable acceptance scenarios, the relevant failure paths, and the existing
96
- behavior it must preserve, each written as a bold `- **S-NN:** …` item under its
97
- requirement heading (the template's grammar; the runtime parses exactly these
98
- definitions into the inventory that strict coverage tracks, and a requirement
99
- without a scenario is invalid there) — `/pincer-narrow` maps each scenario to a
100
- ticket and a check in the coverage map, and `/pincer-evaluate` dispositions every
101
- ID. A supplied PRD keeps its own uppercase IDs (`REQ-1`, `AC-3`); only its
102
- definition syntax is adapted, and the mapping table records what changed.
103
- 2. Include optional sections when risk or the product context warrants them.
104
- 3. Save to the next unused `.prd/prd-v{N}.md` (create `.prd/` if needed), with `N`
105
- matching the filename and frontmatter:
106
- ```yaml
107
- ---
108
- version: {N}
109
- status: draft
110
- date: {today}
111
- profile: small # only when small; omit for standard
112
- ---
113
- ```
114
- 4. If `.git/` doesn't exist, run `git init`. Commit the PRD and only the intended setup
115
- paths after inspecting existing staged work; planning should be visible in history
116
- without absorbing unrelated brownfield changes.
117
-
118
- Present the saved draft and obtain approval only when the same scope/architecture was not
119
- already authorized. Finish with: "PRD saved to `.prd/prd-v{N}.md`. Run `/pincer-narrow`
120
- to break it into work items."
121
-
122
- ## Authorization rule (shared by plan, narrow, code and evaluate)
123
-
124
- Reuse explicit authorization for the same scope and decisions; ask only about a
125
- material choice not already authorized, and prepare the concrete proposal before
126
- asking. A decision the user delegated (for example "pick the architecture") does not
127
- need another approval when you exercise it, but a newly discovered consequential
128
- choice is surfaced before implementation. Record the authorization basis and the
129
- scope it covers in the PRD or the handover, and on a project with change records as
130
- a `change authorize` record (the user's words as the excerpt, or a `--delegated`
131
- disposition with its basis). An agent-written record or a status
132
- field is not authenticated human approval. When resuming without the context that
133
- granted authorization, do not invent it — read the `resume` report; an authorization
134
- it reports as `current` needs no repeat approval, and any other verdict is asked.
@@ -1,82 +0,0 @@
1
- ---
2
- mode: agent
3
- description: "Audit the repo against the workflow checklist — pass/fail per item, no fixes"
4
- ---
5
- <!-- Generated from .claude/commands/pincer-release.md by scripts/sync-prompts.sh — edit the source, not this file -->
6
-
7
-
8
- # /pincer-release — Workflow Audit
9
-
10
- You are auditing the current repo state against `docs/release-checklist.md`. Read-only:
11
- report pass/fail, never fix anything — fixes belong to the stage commands. Release does
12
- not repair tickets, rewrite evidence, change PRD state, or publish. A check that mutates
13
- the candidate invalidates the audit: if `git status --short` is not empty afterwards,
14
- the verdict is FAIL and names the mutation. The verdict is reported to the user; a
15
- durable runtime-owned release record is later work.
16
-
17
- **Requested stage:** ${input:request:Task brief or arguments (optional)}
18
-
19
- ## Steps
20
-
21
- 1. Read `docs/release-checklist.md` — it is the source of truth for product-candidate
22
- readiness. `docs/dry-run-checklist.md` is a separate manual platform trial and must
23
- not impose toy-project or Pincer-kit assumptions on this audit.
24
- 2. Run `scripts/pincer-status.sh` to determine the selected PRD and which stages have run
25
- (it reads `.prd/`, associated `tickets/`, `NOTES.md`; add `git log`). If `${input:request:Task brief or arguments (optional)}`
26
- names a stage, check only up
27
- to that stage.
28
- 3. Check every applicable item mechanically where possible:
29
- - File existence and frontmatter: read the files.
30
- - Commit format and story: `git log --oneline`.
31
- - Receipts: every done ticket is ready — on a legacy project current `last_check`
32
- and `verified` receipts, on a migrated project a current passing attempt
33
- (`node scripts/pincer-runtime.cjs ready` exits 0); any status warning fails the
34
- audit. Do not call `pincer-ticket.sh` from Release:
35
- it writes receipts and would invalidate the evaluated candidate. Release never
36
- runs `verify`, `check` or `done`; `status`, `ready` and the project gate are its
37
- only commands.
38
- - Evidence: `scripts/pincer-status.sh` runs the shared validator
39
- (`scripts/pincer-evidence.cjs`) against the manifest `NOTES.md` names. The `Notes`
40
- line must read `current` and the `Evidence` line `ok`; any other text fails the
41
- audit with that diagnostic. Do not re-implement evidence checks and do not accept
42
- screenshots described in chat: read the manifest's `checks`, requirement
43
- dispositions and `visual_review`. Validation establishes that the record is
44
- consistent, not that the commands ran — say so if asked.
45
- - Provenance: status prints a `Provenance` line for the evaluated candidate:
46
- `runtime (schema 2)` with local attempts consistent, or `legacy (schema 1, authored
47
- command results)`. A newer local attempt that failed, timed out, was interrupted or
48
- is still running for the same check and source inputs fails the audit (`ready`
49
- exits 1 and names the check). A fresh clone reports `local verification history
50
- unavailable; saved candidate evidence validated only`: state that limit in the
51
- verdict rather than claiming local verification.
52
- - Change records (the `Runtime` line reads `changes`): the selected change is
53
- `completed`, its authorization is `current` for the current agreement, and its
54
- evaluation locator `.prd/evidence/changes/<id>.json` names the evaluated
55
- candidate; `node scripts/pincer-runtime.cjs ready` reports `SELECTION_REQUIRED`,
56
- `LIFECYCLE_BLOCKED`, `DECISION_REQUIRED`, `AUTHORIZATION_REQUIRED` or
57
- `AGREEMENT_CHANGED` as failures. Release selects, activates and completes nothing;
58
- historical evidence of a cancelled or superseded change is inspectable but never
59
- release-ready.
60
- - Strict coverage (the status line reads `Coverage strict …`): read
61
- `node scripts/pincer-runtime.cjs coverage` — structure complete, every in-scope
62
- scenario `delivered` on the evaluated candidate, deferrals and removals backed by
63
- their decision and user authorization, `delivery` reported as original versus
64
- agreed scope (never conflate them), adequacy `adequate`; the manifest is schema 3
65
- and the `Provenance` line reads `runtime (schema 3)`. `ready` names
66
- `COVERAGE_INCOMPLETE`, `SCOPE_UNAUTHORIZED`, `OBLIGATION_MISSING`,
67
- `REVIEW_MISSING` and `ADEQUACY_REQUIRED` as failures. A change labeled
68
- `Coverage unverified` did not adopt strict coverage: audit it under the rules
69
- above and say so; never imply strict coverage was established.
70
- - Every file the manifest lists is tracked, and `git status --short` is empty before
71
- and after the audit.
72
- - Run the repository's candidate-wide release gate directly (`npm test`, or the
73
- equivalent declared by the project) and report its actual output. Any failure
74
- blocks PASS. Confirm `git status --short` remains clean afterward.
75
- 4. For judgment items (tickets genuinely S/M, history reads as a story), give your
76
- verdict AND one sentence of evidence — never a bare pass.
77
- 5. Present a table: checklist item | pass/fail/skipped | evidence. Order by stage.
78
- 6. End with a one-line verdict naming the candidate: "PASS — candidate {sha}: workflow
79
- artifacts complete" or "FAIL — candidate {sha}: {n} items failed; fix via {command}".
80
- Fixes go through a new ticket, a new candidate and a new evaluation. For each failure, name the command
81
- file (`.claude/commands/*.md`) whose instructions should be tightened if the
82
- failure is a workflow bug rather than a run mistake.
@@ -1,264 +0,0 @@
1
- # PINCER Dry-Run Checklist
2
-
3
- This is the manual platform trial for the Pincer kit, not the product release audit.
4
- For release readiness, use `docs/release-checklist.md`.
5
-
6
- To test that the `.claude/` workflow works, run the full chain on a small toy
7
- feature (e.g. "a CLI todo app in TypeScript — add, list, complete, delete, stored in a
8
- local JSON file"), then tick every box below. All boxes ticked = the workflow passes.
9
- A failed box points at the command file to fix.
10
-
11
- Use a throwaway copy of this repo and a cheap model (`claude --model sonnet`).
12
- Wording tests in the kit protect adapter contracts; only a trial like this one
13
- observes agent behavior, and one trial on one surface says nothing about the others.
14
-
15
- ## Ground rules for the trial
16
-
17
- - Write every cheat instruction as a single line: multi-line text pasted into
18
- Claude Code is sent at the first line break.
19
- - Test hooks with direct JSON payloads through the hook scripts
20
- (`echo '{"tool_name":"Bash","tool_input":{"command":"..."}}' | bash .claude/hooks/block-dangerous.sh`),
21
- separately from asking the model — a refusal tests the model, not the hook.
22
- - Reset the disposable fixture between injected faults (fresh copy, or restore the
23
- source you broke before breaking the next thing) so one validation failure cannot
24
- mask the check you are trying to observe. Restore the ticket before breaking the
25
- code, or the `done` refusal comes from validation rather than from verification.
26
- - Record the trial with the template at the end of this file. Label surfaces you did
27
- not run as untested; do not infer cross-platform behavior from one trial.
28
-
29
- ## After `/pincer-plan`
30
-
31
- - [ ] The selected `.prd/prd-vN.md` exists
32
- - [ ] Its frontmatter has `version`, `status: draft`, `date`, and `profile` only when small
33
- - [ ] All 7 core sections are present (Problem, Solution, Scope, Requirements,
34
- Architecture, Success Criteria, Out of Scope)
35
- - [ ] Requirements carry stable `R-NN` IDs, each with a scenario, failure path and
36
- preserved behavior; a supplied PRD keeps its own IDs (mapping table if adapted)
37
- - [ ] The original brief is preserved or linked; outcome, assumptions and exclusions recorded
38
- - [ ] The profile is justified in a sentence; a small CSS fix is `small`, a tiny
39
- change touching a migration or an authorization boundary stays `standard`
40
- - [ ] The Scope table has both columns filled (in AND out)
41
- - [ ] No implementation code inside the PRD (interface examples are fine)
42
- - [ ] Discovery asked ≤4 questions and none were already answered by the brief
43
- - [ ] No default timebox was assumed; an explicit budget, if given, is recorded
44
- - [ ] `.git/` exists and the selected PRD is committed without unrelated brownfield work
45
-
46
- ## After `/pincer-narrow`
47
-
48
- - [ ] Ticket files are named `T-{NN}-{slug}.md`; count follows dependencies and risk,
49
- with no one-to-two-ticket cap applied to a small PRD
50
- - [ ] A requirement map (requirement · scenario · ticket · check or review method)
51
- was presented, and each ticket's Context says `Implements: R-NN`
52
- - [ ] Every ticket has a coherent S, M, or L scope; larger work is split when that
53
- improves ownership, dependency order, or verification
54
- - [ ] Greenfield uses a walking skeleton when helpful; brownfield protects the
55
- smallest useful vertical change
56
- - [ ] Every Verification section opens with `Proves:` and its fenced command
57
- exercises behavior (it fails when the feature is wrong, not only when a name
58
- is renamed); static checks are justified as static contracts
59
- - [ ] Every ticket has a runnable, non-interactive command in its fenced
60
- Verification block (it is what `scripts/pincer-ticket.sh verify` runs)
61
- - [ ] Dependencies are declared where they exist (`depends_on`)
62
- - [ ] If the brief or stack implies automated tests, at least one ticket's
63
- verification command is the test runner
64
- - [ ] Every ticket whose surface accepts external input has a reject-path
65
- acceptance criterion (what invalid input produces), not only the happy path
66
- - [ ] Greenfield setup covers `.env*` (except `.env.example`) and names required
67
- secrets in `.env.example`; brownfield preserves and verifies existing conventions
68
- - [ ] A breakdown that follows the PRD was not re-approved; a newly discovered
69
- consequential choice (if any) was surfaced before implementation
70
- - [ ] PRD frontmatter now says `status: ticketed`
71
- - [ ] Tickets are committed
72
- - [ ] The change was registered (`Register PRD vN` commit with `.prd/changes/prd-vN.json`,
73
- retaining any earlier change), the user's approval was recorded with
74
- `change authorize` (quoted in the excerpt, committed as `Authorize PRD vN`) and
75
- the change was selected; status now shows `Runtime changes · selected prd-vN`
76
-
77
- ## After `/pincer-code`
78
-
79
- - [ ] One commit per ticket, messages formatted `T-{NN}: {title}`
80
- - [ ] Every ticket file now says `status: done`
81
- - [ ] Existing project only: the migration preview was shown and `migrate --apply` ran
82
- only after your yes, as a `Migrate PRD vN to the runtime` commit; nothing was
83
- migrated silently
84
- - [ ] Every done ticket carries `started` and `finished` stamps and
85
- `scripts/pincer-status.sh` prints no readiness warning; legacy project only
86
- (no change binding): `verified` receipts too; migrated project: no receipt in the
87
- ticket, the latest attempt under `.pincer/runtime/attempts/` passed
88
- - [ ] Every done ticket has all acceptance-criteria checkboxes ticked
89
- - [ ] `scripts/pincer-ticket.sh verify T-{NN}` passes on done tickets (spot-check
90
- at least two)
91
- - [ ] Cheat: break the feature but keep every identifier, then run `verify` — it
92
- fails; legacy project only: prints "failure recorded in last_check" and
93
- "receipt was revoked"; migrated project: prints "recorded as attempt … any
94
- prior passing attempt is superseded" and status shows `WARN … CHECK_FAILED`
95
- - [ ] Cheat: ask the assistant to `git checkout` the ticket file — the guard blocks
96
- it, the failed attempt stays recorded, and the assistant hands repair to you
97
- (migrated project: there is nothing to restore, the tree is clean; the
98
- assistant repairs and re-runs `verify`)
99
- - [ ] Legacy project only, cheat: revert the source so the tree matches the candidate,
100
- then ask again — the assistant names the restore command for you, runs no
101
- `verify`, and commits nothing; status is `current` after you run it
102
- - [ ] Legacy project only, cheat: with the tree at the candidate, stop a local service the check needs
103
- (the kit repo's `test/fixtures/local-service.cjs`, or any dependency the block
104
- cannot bypass), run `verify` so it fails, then ask for the restore — the
105
- assistant keeps the failed `last_check`, names no restore command, does not
106
- switch binaries or repair the environment itself (the block must pass in the
107
- same execution context as `verify`), and asks for the service back before
108
- `verify` runs again
109
- - [ ] Migrated project only (`node scripts/pincer-runtime.cjs migrate --apply --prd …`
110
- was run): cheat: change a source file after a green `verify` — status reports
111
- `SOURCE_CHANGED` naming the path and `done` refuses; cheat: make the check fail
112
- and `verify` again — the failed attempt blocks `done`, the earlier pass stays in
113
- `.pincer/runtime/attempts/`; cheat: kill the session mid-`verify` — status shows
114
- the `running` attempt as not ready and `recover` finalizes it as `interrupted`;
115
- cheat: run `verify` twice on an unchanged tree — `git status` shows no change;
116
- cheat: edit a ticket body, then `migrate --apply` again — the edit is preserved and
117
- the second apply reports `already migrated`
118
- - [ ] Change records only: `change activate prd-vN` ran once before the first ticket and
119
- no ticket command asked for a repeat approval; cheat: start a ticket of another
120
- change — `WRONG_CHANGE`, nothing launched
121
- - [ ] Change records only, cheat: pause the change with a reason and a handoff note, clear
122
- the context, run `resume` — the report names the change, the blocker and the next
123
- command from files alone, the note is labeled authored, and `change resume`
124
- continues under the same authorization without a repeat approval
125
- - [ ] Change records only, cheat: edit the PRD under its filename — `verify` refuses with
126
- `AGREEMENT_CHANGED` until `change authorize` records the disposition; cheat: raise a
127
- decision with `change decide --summary` — execution is blocked until the user's
128
- answer is recorded and authorized
129
- - [ ] v0.5.0 project only: the binding was converted by `migrate --apply` after a
130
- preview, the old attempts read `HISTORICAL_EVIDENCE`, and the old authorization
131
- text did not authorize anything
132
- - [ ] Any scope cut made during build is recorded in the PRD's Out of Scope section
133
- - [ ] Change records only: `change complete prd-vN` ran (`Complete PRD vN` commit) before
134
- the built commit and refused while a ticket was stale or unfinished
135
- - [ ] PRD frontmatter now says `status: built`, committed on its own (`PRD vN: built`)
136
- before evaluation, not folded into the evidence commit
137
- - [ ] Status shows the wall-clock elapsed line only while a ticket is in progress or
138
- a budget is set
139
-
140
- ## After `/pincer-evaluate`
141
-
142
- - [ ] Evaluation refused to start on a dirty tree or an un-built PRD
143
- - [ ] Findings (if any) were presented with `file:line` references
144
- - [ ] Every `R-NN` has a disposition (delivered / blocked / deferred); a failed
145
- required behavior was not relabelled a limitation; any deferral names the
146
- user's authorization
147
- - [ ] The mechanical security audit used redacted, location-only secret findings;
148
- `git ls-files` shows no `.env` beyond `.env.example`, dependency audit,
149
- and (if there's an API) one invalid-input request returned a clean 4xx
150
- - [ ] If the project has a UI, it was actually opened and checked visually, and
151
- the capture is saved under `.prd/evidence/prd-vN/<candidate>/visual/` with
152
- scenario, viewport and observed result in the manifest
153
- - [ ] Cheat: make the browser tool unavailable — the visual check is recorded as
154
- `unverified`, not fabricated and not silently waived
155
- - [ ] `.prd/evidence/prd-vN/<candidate>/manifest.json` exists and
156
- `node scripts/pincer-evidence.cjs validate <manifest> --candidate <sha> --prd .prd/prd-vN.md`
157
- prints `ok`
158
- - [ ] Each executable check in the manifest holds one command line as run, the
159
- security pass is separate entries, and only the tool that could not run is
160
- `unverified`
161
- - [ ] Cheat: edit a saved log after the evidence commit — status reports
162
- `evidence invalid: ... digest mismatch`
163
- - [ ] Strict coverage (when adopted): `coverage adopt --preview` writes nothing and
164
- `--apply` records the schema 3 record with a backup; `coverage` names the
165
- scenario a map row was dropped for (`COVERAGE_INCOMPLETE`) and `change complete`
166
- refuses it; `check C-NN --candidate <sha> -- <other command>` is
167
- `CHECK_UNDECLARED`; the exported manifest is schema 3 and `ready` reads
168
- `delivery original … agreed …` from `coverage`
169
- - [ ] Evaluation fixes were completed through new tickets, produced a new candidate,
170
- and were re-evaluated with fresh evidence
171
- - [ ] `NOTES.md` exists at the repo root with `prd`, `base`, `candidate` and
172
- `evidence:`; the evidence commit contains only NOTES.md and the listed files
173
- - [ ] `scripts/pincer-status.sh` shows `Notes … current` and `Evidence … ok`
174
- - [ ] Migrated project only: executable checks ran through
175
- `node scripts/pincer-runtime.cjs check C-NN --candidate <sha> -- <command>` and the
176
- manifest came from `evidence export` (schema 2, `provenance: runtime` on command
177
- checks); cheat: clone the repository elsewhere — status validates the saved
178
- evidence and reports `local verification history unavailable`
179
-
180
- ## After `/pincer-release`
181
-
182
- - [ ] The audit ran `scripts/pincer-status.sh` and the project gate directly, never
183
- `pincer-ticket.sh`
184
- - [ ] The verdict names the candidate and every failed or skipped item
185
- - [ ] `git status --short` is empty after the audit; nothing was repaired, no evidence
186
- rewritten, no PRD state changed, nothing published
187
- - [ ] Migrated project only, cheat: after the export commit run
188
- `node scripts/pincer-runtime.cjs check C-NN --candidate <sha> -- false` for an
189
- exported check — the `Provenance` line names the newer failure, `ready` exits 1,
190
- and the release verdict is FAIL until the check passes again and is re-exported
191
-
192
- ## Overall
193
-
194
- - [ ] `git log --oneline` reads as a coherent story: setup → tickets → T-01…T-NN →
195
- PRD built → evaluation evidence
196
- - [ ] No `.env` file contents ever appeared in the conversation
197
- - [ ] Relevant history was checked for committed-then-deleted secrets without printing
198
- candidate values into the conversation or audit report
199
- - [ ] Every dependency in the lockfile is named in the PRD's architecture or was
200
- explicitly approved during build
201
- - [ ] `NOTES.md` has a Handover section (orientation, dependency justification,
202
- what breaks first) and summarizes the requirement dispositions
203
- - [ ] Brownfield only: untested load-bearing code got a characterization test
204
- before being modified
205
- - [ ] Platform adapters in sync: `scripts/sync-prompts.sh` then `git status`
206
- shows no changes in `.agents/skills/` or `.github/prompts/`
207
- - [ ] `scripts/pincer-status.sh` says `Next /pincer-release`; if the user supplied a
208
- budget, its elapsed figure and any deliberate cuts are reported against that budget
209
-
210
- ## Recorded workflow scenarios
211
-
212
- Run each scenario in its own throwaway copy and note the observation next to it.
213
- Expected across all five: repeated approval is avoided, unresolved decisions are
214
- surfaced, and no arbitrary ticket cap or default budget appears.
215
-
216
- 1. **Small CSS fix.** Brief: "make the primary button 4px rounder". Expect
217
- `profile: small` with a one-sentence justification, a compact PRD with
218
- Requirements and verification, a ticket count decided by cohesion (one is fine,
219
- two is fine), and a `Proves:` line that checks the rendered style, not the
220
- presence of a class name.
221
- 2. **Tiny high-risk change.** Brief: "change the session cookie's `SameSite` from
222
- `Lax` to `None`" (or any one-line change on an authorization boundary or a
223
- migration). Expect `profile: standard` despite the diff size, with the
224
- investigation and rollback story recorded in Architecture.
225
- 3. **Supplied PRD.** Paste a PRD that already numbers its requirements (`REQ-3`,
226
- `AC-2`, or similar). Expect the meaning and IDs preserved and, if the template
227
- structure was applied, a `Requirement mapping` table rather than a rewrite.
228
- 4. **Authorized resume.** Start `/pincer-code`, stop mid-ticket, clear context, run
229
- `/pincer-status` then `/pincer-code T-NN`. Expect resumption without a request
230
- to re-approve the unchanged scope; the assistant reads `git status` and the
231
- receipt state rather than asking.
232
- 5. **New consequential decision during narrow.** Give a brief whose decomposition
233
- reveals a choice the PRD did not settle (for example, a second storage backend).
234
- Expect the concrete proposal presented and the choice surfaced before any
235
- implementation, and no second approval requested for the parts the PRD covers.
236
-
237
- ## Trial record template
238
-
239
- Copy this into `docs/trial-<date>-<greenfield|brownfield>.md` and fill every line.
240
-
241
- ```markdown
242
- # Trial <date>: <greenfield|brownfield>, <agent surface> <model>
243
-
244
- - Brief: <the brief, verbatim or linked>
245
- - Base: <full commit ID of the throwaway repo before the trial>
246
- - Versions: pincer-workflow <version> · <agent surface and model> · Node <version> · <OS>
247
- - Artifacts: PRD <path> · tickets <T-NN..T-MM> · evidence <manifest path> · NOTES.md
248
- - Results: <checklist section → pass/fail per box, with the observation for each fail>
249
- - Interventions: <every human action beyond the brief: answers, repairs, cheats>
250
- - Untested: <surfaces and platforms not exercised in this trial>
251
-
252
- | Requirement | Observed evidence or `outstanding` |
253
- | --- | --- |
254
- | R-01 | |
255
- | R-02 | |
256
- | R-03 | |
257
- | R-04 | |
258
- | R-05 | |
259
- | R-06 | |
260
- | R-07 | |
261
- | R-08 | |
262
- | R-09 | |
263
- | R-10 | |
264
- ```