chore: enforce one-PR-per-story in orchestration (workflow + implementer + implement skill + git-workflow) [+ gate/test ADL pointer]#326
Conversation
- implement-batch.js Input: batch items are STORIES (one branch + one PR, create-or-update), never one-PR-per-task; second PR forbidden unless human instructs - implementer.md: add one-PR-per-story operating rule + pointer to gate/test ADL - implement SKILL (dataset + .claude mirror): one-PR-per-story reinforcement line - git-workflow (dataset + root mirror): normative one-PR-per-story in branch/PR strategy - reviewer.md unchanged (never opens PRs — Rule 2 no-op) Refs owner rules 1 (gate/test) + 2 (one-PR-per-story); gate/test ADL lands on PR #315. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Code Review — PR #326Review InformationPR Number: #326 Review SummaryOverall Assessment
Key ChangesEncodes owner Rule 2 at every point of authorship: the Business ValueRemoves the ambiguity that let #312/#313 issue bodies carry contradictory per-task/per-batch-PR instructions. The one-PR-per-story rule is now unambiguous everywhere an implementer/agent reads authoring rules. Verification vs acceptance bar
Detailed Review CommentsPositive Feedback
Minor Issues 💡
Questions / Notes ❓
Testing ReviewMirror byte-consistency (verified directly):
Adoption ComplianceRule 2 is backed by adoption: Tech DebtNone introduced. Docs/comment-only change. Risk AssessmentLow. No runtime behavior change; documentation + one JS comment block + one tooling comment block. No dependencies, no API/schema surface. Non-actionable / Accepted findings (carried to human merge gate)
Out-of-PR PM-data note (spot-check, not in the git diff)Issues #312 and #313 were edited separately via Verdict: Approved with Comments. All eight verification items pass; the rule is consistent and non-contradictory across all four targets, mirrors are byte-consistent, scope is clean, gates are green, and |
- implement-batch.js Input: batch items are STORIES (one branch + one PR, create-or-update), never one-PR-per-task; second PR forbidden unless human instructs - implementer.md: add one-PR-per-story operating rule + pointer to gate/test ADL - implement SKILL (dataset + .claude mirror): one-PR-per-story reinforcement line - git-workflow (dataset + root mirror): normative one-PR-per-story in branch/PR strategy - reviewer.md unchanged (never opens PRs — Rule 2 no-op) Refs owner rules 1 (gate/test) + 2 (one-PR-per-story); gate/test ADL lands on PR #315. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
What Changed
Encodes two owner-mandated rules into the Pair orchestration tooling and shipped process, as one PR (this change itself follows one-PR-per-story):
.pair/adoption/decision-log/2026-07-13-gate-tooling-code-in-tested-modules.md) added where implementers see coding rules — not restated in full.Why This Change
The convention (single-PR-per-story) is already recorded in adoption (
way-of-working.md) and its ADL (2026-07-12-one-pr-per-story-default.md), but the orchestration tooling and process files that implementers/agents execute did not state it explicitly. Recent stories (#312, #313) carried standing per-task/per-batch-PR instructions in their issue bodies, which contradicted the norm. This PR makes the rule unambiguous at every point of authorship.Story Context
Owner rules, no PM story issue. Rule 1's gate/test ADL is added on PR #315 (this PR only adds the pointer to that adoption path; it does not create the ADL file).
Changes Made
Implementation Details
.claude/workflows/implement-batch.js(local tooling, no dataset mirror) — Input comment block now states batch items are STORIES (never tasks); each story = ONE branch + ONE PR opened once and updated iteratively (create-or-update, reusing the existing branch/{prNumber}); a second PR for the same story is forbidden unless a human explicitly instructs it. Code behavior unchanged (it already drives one PR per input story) — contract/comment clarification only..claude/agents/implementer.md(local) — new operating rule: "One PR per story (the open-PR step is create-or-update)"; and a Rule-1 pointer to the gate/test ADL appended to the test-first rule. Frontmatterdescriptionleft as-is (its "opens the PR" is correct).pair-process-implementSKILL.md (datasetpackages/knowledge-hub/dataset/.skills/process/implement/SKILL.md+.claude/skills/pair-process-implement/SKILL.mdmirror) — single reinforcement line under the overview: one PR per story, subsequent work updates the same PR. Byte-consistent under the name-prefix transform (validated bytransfer-datasettests).development-process.md(dataset + root.pair/mirror) — normative "PR granularity — one PR per story" bullet added to the Feature Branches (branch/PR strategy) section. Mirrors byte-identical..claude/agents/reviewer.md— reviewed, left untouched. The reviewer never opens PRs or merges, and contains no PR-granularity language, so Rule 2 requires no change there.Per-task-PR phrasing audit
Grepped the dataset skills + collaboration templates for "each task ... own PR" / "one PR per task" / "PR per task": zero editable hits. The only PR-granularity statements in the implement skill already say the correct thing ("Single PR at end", "Single PR per story regardless of commit strategy");
commit-per-taskis a commit strategy within one PR, not a PR-per-task mandate. The stale per-task/per-batch-PR instruction existed only in the issue bodies of #312/#313 (PM data), which are being corrected separately viagh issue edit— not in this PR.Files Changed
.claude/workflows/implement-batch.js,.claude/agents/implementer.md,.claude/skills/pair-process-implement/SKILL.md,packages/knowledge-hub/dataset/.skills/process/implement/SKILL.md,.pair/knowledge/guidelines/technical-standards/git-workflow/development-process.md,packages/knowledge-hub/dataset/.pair/knowledge/guidelines/technical-standards/git-workflow/development-process.mdTesting
Test Results
Quality Assurance
Code Quality Checklist
.claude/root mirrors byte-consistent in the same commit for every shipped file touchedgit add -A)implement-batch.jsbehavior unchanged (comment/contract clarification only)🤖 Generated with Claude Code