Skip to content

Review-loop skills disagree with each other and stop short of decisions the loop needs #1164

Description

@ptr727

The canonical-review gate added in #1148 forced the first whole-text read of the review-loop skills merged in #1109 and #1125, on the develop -> main promotion PR #1163. Eight units were read whole. The wrong-command and false-claim defects were fixed in that promotion's own feature PR. The items below are the ones that need a decision rather than a wording correction, so they are recorded here rather than guessed at.

The rules disagree with each other

  • When the class sweep is owed. agent-conduct binds it on the first occurrence ("A review flags an instance, so fix the class: sweep for the siblings before replying, because reviewers sample rather than enumerate"), and GOVERNANCE.md "Verification Discipline" says the same. pr-review-conduct outcome 5 makes it conditional on a finding that "keeps recurring". An agent holding only the five outcomes fixes the instance and replies.
  • What local-strict-review's pass binds. It says the pass runs "before the pull request opens" and, under outcome 1, "before any fix push". GOVERNANCE.md binds every push toward a pull request, and agent-conduct says "Every push toward a pull request owes one". A push answering outcome 4 or 5, a rebase, or a CI-only push is exempted in one place and not the other.

Rules that stop short of a decision

  • A terminal review decline versus the Merge Gate. pr-review-conduct says a decline "is terminal the other way. Nothing follows it", while the Merge Gate requires a review confirmed on the current head SHA, which a terminal decline can then never satisfy. pr_review.py exit 46 carries the missing route (proceed on the coverage other reviewers give); the skill carries none.
  • Who may resolve a declined thread. Outcome 2 says "Either shape closes the thread on its own evidence", while the loop's step 7 says "resolve what was addressed", and a decline is not addressed. Whether the agent may resolve its own evidence-backed decline is unstated, and it recurs every review round.
  • Which repository outcome 4 files in. "File the issue first, then reply with its link" names no repository. For a finding against carried content the fix belongs at the hub, so followed literally in a carrier the deferral is filed where the fix cannot land.

Completeness

  • agent-conduct "Before Claiming Done" lists 11 checks where the source section has about 20, and the dropped ones include two that fire at exactly that moment: "A workflow change is only fully exercised by CI" and "A test runner failing to spawn is not evidence that no test coverage applies here." The list reads as the complete claim-time set.
  • GOVERNANCE.md "Durable Knowledge and Self-Improvement" omits GOVERNANCE.md and .agents/skills/ from where a durable rule belongs, listing AGENTS.md, CODESTYLE.md, WORKFLOW.md and a committed backlog. AGENTS.md designates GOVERNANCE.md as the file holding rule text and forbids restating rules in AGENTS.md, so following this bullet literally puts a new cross-cutting rule where AGENTS.md says it must not go.
  • GOVERNANCE.md's upstream-proposal remedy names no upstream and no mechanism, and in the hub itself its precondition never holds, so the section's only remedy sentence is inert in the repository that owns it. Its own skill summary carries a stricter rule the section does not: search open and closed issues first, then update the matching issue or file a new one.

Permission surface

  • drive-pr's Drive Loop prescribes opening a pull request, squash-merging it, and deleting a remote branch, three outward-facing and hard-to-reverse writes, with no permission gate stated in that section. The authorization lives in a separate section of the same skill. A reader who reaches the loop directly is told to perform all three unconditionally.

Worked examples a carrier cannot check

GOVERNANCE.md "Durable Knowledge and Self-Improvement" is carried verbatim and grounds its three-condition test on gh-write-guard and the hub's .husky/pre-push. A carrier holds neither artifact and gets no pointer to either, so the reader who most needs the worked example is the one who cannot check it.

Method note

Every item above was found by reading one unit's whole current text rather than a diff of it, which is what #1138 predicted and what the gate in #1148 now forces at the promotion. The eight units are recorded in reports/canonical-review.json with their finding counts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions