Skip to content

Add Triage-Order and Scope Guardrails to pr-review-conduct - #684

Merged
ptr727 merged 1 commit into
developfrom
feature/pr-review-conduct-triage-guardrails
Aug 13, 2026
Merged

Add Triage-Order and Scope Guardrails to pr-review-conduct#684
ptr727 merged 1 commit into
developfrom
feature/pr-review-conduct-triage-guardrails

Conversation

@ptr727

@ptr727 ptr727 commented Aug 13, 2026

Copy link
Copy Markdown
Owner

Why

A real mis-triage this session, on a downstream PR (HomeAutomation-Config#50): two findings were factually real but structurally out of that repo's scope to fix (verbatim-fidelity-locked GOVERNANCE.md content owned by this hub). Neither of the skill's five outcomes named that shape cleanly, so I reached for outcome 3 ("the maintainer's call") and left the threads open with a plan to ask later — which never happened once attention moved to other in-flight work in the same session. That's an unresolved thread with no closing mechanism, exactly what outcome 3's own "never resolve this one by silence" line exists to prevent, just from the other direction (never leave it unresolved by silence either).

What changed

  • Outcome 2 broadened from "not real" only to also cover "real but structurally out of scope, provable" — either shape closes the thread on cited evidence (a command's output, a code path, or now also a governing rule/manifest entry establishing the boundary), rather than needing outcome 3's maintainer consultation at all.
  • Outcome 3 tightened to apply only once outcome 2 is ruled out (a fix genuinely possible here, the question is value not scope), and now requires the maintainer's answer in the same turn rather than deferred — a plan to ask later is treated explicitly as resolution by silence.
  • New closing line: a disposition decided on one PR does not carry to a sibling PR or repo in the same batch, even when the finding shape is identical — each instance needs its own close.

.claude-plugin/fleet-skills/skills/pr-review-conduct/SKILL.md regenerated via scripts/build_dist.py to match.

Verification

python3 scripts/prose_lint.py .agents/skills/pr-review-conduct/SKILL.md   # scope: 1 file(s) read, whole tree
python3 scripts/build_dist.py --check                                     # is current

No scripts/test_*.py coupling to this file's content (checked before editing, per the Phase 3 gotcha).

🤖 Generated with Claude Code

Outcome 2 ('not real, so disprove it') read narrowly for a
factually-wrong finding, with no outcome naming a finding that is
real but structurally out of this repo's scope (a verbatim-fidelity
manifest entry, ownership elsewhere). That gap caused a real
mis-triage this session: two out-of-scope-but-real findings on a
downstream PR were classified as outcome 3 ('the maintainer's
call') and left open with a plan to ask later, which never
happened once the session moved to other in-flight work, an
unresolved thread with no closing mechanism.

Broadened outcome 2 to cover both shapes (wrong, or real but out of
scope, either closing the thread on cited evidence). Tightened
outcome 3 to apply only once outcome 2 is ruled out, and to require
the maintainer's answer in the same turn rather than deferred, since
a plan to ask later is resolution by silence the moment attention
moves elsewhere. Added a line closing the second gap this exposed:
a disposition decided on one PR does not carry to a sibling PR or
repo in the same batch, even when the finding shape is identical.

Regenerated .claude-plugin/fleet-skills via build_dist.py.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 13, 2026 21:53

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the pr-review-conduct skill to prevent mis-triage by explicitly distinguishing “out of scope” findings from “value judgment” findings, and by enforcing immediate closure mechanics to avoid unresolved threads being left behind.

Changes:

  • Broadened outcome 2 to cover findings that are factually correct but structurally out of scope, with an evidence-backed decline requirement.
  • Tightened outcome 3 to apply only after outcome 2 is ruled out, and to require an explicit maintainer answer in the same turn (no “ask later”).
  • Added a guardrail that outcomes do not carry across sibling PRs/repos; each instance must be closed independently.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
.agents/skills/pr-review-conduct/SKILL.md Clarifies triage/closure outcomes to handle out-of-scope findings and prevent “defer-by-silence” thread drift.
.claude-plugin/fleet-skills/skills/pr-review-conduct/SKILL.md Regenerated dist copy to mirror the updated source skill text for Claude plugin consumption.
.claude-plugin/fleet-skills/.source-digest Updates the dist digest stamp to match the regenerated plugin content.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 6b0b496 into develop Aug 13, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/pr-review-conduct-triage-guardrails branch August 13, 2026 21:58
ptr727 added a commit that referenced this pull request Aug 15, 2026
…Python CI Gates (#718)

Thirty-one squashes, `56f4d7d..d54862a`. 115 files, +20436/-5298.

**Merge with a merge commit, never a squash, and never with
`--delete-branch`.** This pull request's head is `develop` itself.

## What lands

**Fleet Skills.** The `.agents/skills/` source tree, the generated
`.claude-plugin/` distribution, `scripts/build_dist.py` with its
`--check` gate, and `scripts/skills_install.py` with its host stamp
(#676). Packaged as skills on top of the scaffold: PR review conduct and
Copilot instructions upkeep (#677), comment and doc style (#678),
resync-a-repo and fleet-conformance-check (#679), the per-language
codestyles (#680), git commit conventions and operational vs release
workflow (#681), stand up a repo (#683), and repo-worktree (#717).
Coverage gaps closed in three passes (#690, #691, #692) plus the P4
sentence-length opt-in (#697).

**Host setup.** The Windows host-setup tooling and its PowerShell gate
(#674), the Windows bootstrap loader (#682), Docker install and upgrade
on Linux and Windows with a version floor (#701, #705), a `uv` floor in
`spec/host-tools.json` (#698), self-healing of a shadowing `uv`, `jq`,
or `git-restore-mtime` copy (#689), node's real winget package id
(#696), and a README for the Linux host-setup nuances (#710).

**Python and CI.** Python tooling in CI with the script tests moved to
`scripts/tests` (#704), `ruff format` adopted and gated (#709), and the
PSScriptAnalyzer claim conditioned on repos that carry `.ps1` files
(#686).

**Conduct rules.** Triage-order and scope guardrails in
pr-review-conduct (#684), `pr_review.py wait` requesting a review rather
than only polling for one (#685), a tech-agnostic signed-commit
verification (#708), execution rather than analogy to verify
platform-specific code (#715), and a unique worktree for every task
(#717).

**Docs.** The fleet map and gap register with peer messaging declared
(#687), mermaid flow diagrams in the kept-authority docs (#702), and the
map pointed at the shipped diagrams and current tooling (#703).

## Issues this promotion closes

Each landed on `develop` on its own pull request. The keyword fires only
on a merge into `main`, so it sits here rather than on the feature pull
requests.

Closes #700
Closes #707
Closes #711
Closes #712
Closes #714
Closes #688

#699 stays open on purpose: #717 shipped the layout convention and the
skill, and the physical migration of existing checkouts is still tracked
there.

## Review record

Every squash closed its own Copilot loop on its own pull request before
merging to `develop`. This promotion carries no new content of its own,
so its review is the merged tree as a whole.

## Consequence worth stating

The `GOVERNANCE.md` and `AGENTS.md` sections these squashes changed
become the canonical the moment this reaches `main`, and every carrying
repository reads as drifted from that point until it resyncs. That is
the ordinary consequence of a canonical moving rather than a defect. The
Skills installer added here is also how a machine picks the new skills
up, so a session that keeps restating a rule already packaged as a skill
is the signal to run it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants