Skip to content

feat: add review-toolkit plugin (6 reviewer agents + quality-gate and code-review-fanout skills)#71

Merged
kyle-sexton merged 17 commits into
mainfrom
feat/publish-review-toolkit
Jul 11, 2026
Merged

feat: add review-toolkit plugin (6 reviewer agents + quality-gate and code-review-fanout skills)#71
kyle-sexton merged 17 commits into
mainfrom
feat/publish-review-toolkit

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Publishes the review-toolkit plugin from the medley migration EPIC (melodic-software/medley#1282).

What's included

  • 6 read-only reviewer agents: code-reviewer, security-reviewer, architecture-guardian, doc-drift-detector, ecosystem-specialist, ci-log-auditor
  • 2 orchestration skills: /review-toolkit:quality-gate (single-lens checkpoint, 8 modes) and /review-toolkit:code-review-fanout (multi-surface fan-out with severity-ranked normalized findings + fix pass)
  • Marketplace entry + README row

Gate evidence

  • claude plugin validate --strict — PASS (plugin + marketplace manifest, post-rebase)
  • markdownlint — 0 errors
  • Projected token cost (claude plugin details): ~931 tok always-on; per-component on-invoke ~860–2.3k (largest: security-reviewer ~2.3k, code-review-fanout ~2.2k)
  • Smoke test — clean non-medley repo, claude --plugin-dir ./plugins/review-toolkit -p: invoked review-toolkit:quality-gate criteria; skill resolved under the /review-toolkit: namespace and loaded successfully

Fix found during smoke test

The skills' pre-computed context embedded $(git branch --show-current) command substitution in the gh pr list line — the permission engine cannot statically analyze it, so the entire skill failed to load under restricted permissions (headless -p, scoped allowlists). Replaced with a substitution-free gh pr list --json number,title,headRefName that the model correlates against the branch line above.

🤖 Generated with Claude Code


Note

Low Risk
Adds documentation and agent/skill definitions only; consumer-repo impact is optional review artifacts and explicit fix-pass edits, with no changes to existing plugins' runtime behavior.

Overview
Adds the review-toolkit marketplace plugin: six read-only reviewer agents (code, security, architecture, doc drift, ecosystem build/test/lint, CI log audit) with memory: local, plus shared context/severity.md when the consumer repo defines no review vocabulary.

/review-toolkit:quality-gate is a single-lens checkpoint (eight modes including fresh-context self, delegated code/architecture/security, PR, criteria, per-slice, and markdown restatement). /review-toolkit:code-review-fanout scales reviewer breadth by diff size (or run-everything), runs an optional Workflow fan-out with main-thread fallback, normalizes heterogeneous outputs through a five-stage pipeline, persists a stable type: review-findings report under .claude/review/<branch-slug>/ (or project override), and exposes fix as the only mutating path (branch-scoped findings, correctness vs cleanup routing).

Catalog updates: .claude-plugin/marketplace.json entry and README catalog row. Skill pre-computed blocks use a static gh pr list --json … line (no nested command substitution) so skills load under restricted permissions.

Reviewed by Cursor Bugbot for commit 1a57262. Bugbot is set up for automated code reviews on this repo. Configure here.

The gh pr list line embedded $(git branch --show-current) command
substitution, which the permission engine cannot statically analyze —
the whole skill fails to load under restricted permissions (headless
-p runs, scoped allowlists). List PRs with headRefName instead and let
the model match against the branch line above.
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_54d67de6-752d-4d78-b16a-842d486550b8)

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: low. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

The gh pr list line embedded $(git branch --show-current) command
substitution, which the permission engine cannot statically analyze —
the whole skill fails to load under restricted permissions (headless
-p runs, scoped allowlists). List PRs with headRefName instead and let
the model match against the branch line above.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4c5f7b61dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review-toolkit/skills/code-review-fanout/SKILL.md Outdated
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_f918e4cb-6b6b-457a-8cb9-bd310bdf1236)

@claude

claude Bot commented Jul 11, 2026

Copy link
Copy Markdown

PR Review: feat/publish-review-toolkit

  • Gather context and read changed files
  • Review plugin manifest and marketplace entry
  • Review agent definitions (6 agents)
  • Review skill definitions (quality-gate, code-review-fanout)
  • Check CLAUDE.md compliance (repo-agnostic, configurable, plugin-form-safe)
  • Security review
  • Address Codex P2 finding (merge-base diff sizing)
  • Final summary

View job run

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: low. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_ad235509-60e8-4b42-9d6a-41867011d8ca)

@claude

claude Bot commented Jul 11, 2026

Copy link
Copy Markdown

PR Review: feat/publish-review-toolkit

  • Gather context and read changed files
  • Review plugin manifest and marketplace entry
  • Review agent definitions (6 agents)
  • Review skill definitions (quality-gate, code-review-fanout)
  • Check CLAUDE.md compliance (repo-agnostic, configurable, plugin-form-safe)
  • Security review
  • Address Codex P2 finding (merge-base diff sizing)
  • Final summary

View job run

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 34212e05a5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review-toolkit/skills/code-review-fanout/context/default-mode.md Outdated
Comment thread plugins/review-toolkit/skills/code-review-fanout/context/fix-pass-mode.md Outdated
Comment thread plugins/review-toolkit/skills/code-review-fanout/context/run-everything-mode.md Outdated
On a committed-clean branch git diff --shortstat HEAD is empty, so the
default mode under-classified large PRs and skipped tier-gated
reviewers. Use the same origin/HEAD -> origin/main -> HEAD fallback
chain the review diff base documents.
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_a2f5b458-d258-47b7-9a1b-44876be5c23f)

@claude

claude Bot commented Jul 11, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 4m 24s —— View job


PR Review: feat/publish-review-toolkit

  • Gather context and read changed files
  • Review plugin manifest and marketplace entry
  • Review agent definitions (6 agents)
  • Review skill definitions (quality-gate, code-review-fanout)
  • Check CLAUDE.md compliance (repo-agnostic, configurable, plugin-form-safe)
  • Security review
  • Address Codex P2 findings
  • Final summary

Overall Assessment

This is a well-architected, repo-agnostic plugin with thoughtful design decisions throughout. The CLAUDE.md rules are followed carefully. Three correctness bugs in the instruction documents warrant attention before merge; the Codex merge-base-shortstat P2 was already fixed in commit c838b26.


Confirmed Bugs

1. Clean-tree gate silently drops committed-clean branches that have no PR

default-mode.md:9–11 (also referenced from SKILL.md:43)

Case 1 fires when git status --porcelain is empty and no open PR — but never checks whether the branch is ahead of its base. A developer who commits a batch of work locally before pushing (no dirty tree, no PR yet) hits the "no changes to review" short-circuit and gets nothing. Case 2 already guards against this correctly (AND the branch is not ahead of its base); Case 1 needs the same qualifier.

Minimal fix: Add AND NOT ahead of its base to Case 1, matching the existing qualifier in Case 2:

1. **Truly clean**`git status --porcelain` empty AND no open PR AND NOT ahead of its base →
   report "no changes to review", spawn nothing, write no findings file.

Note: the pre-computed shortstat (origin/HEAD...HEAD) already contains the signal; the model can infer "ahead of base" from a non-empty/non-zero shortstat without running an extra command.

Fix this →


2. Fix mode picks the wrong file when quality-gate runs after fanout

fix-pass-mode.md:7–9

The fix action takes "the newest *.md by filename sort" from the branch findings directory. Both code-review-fanout and quality-gate modes write type: review-findings artifacts into that same directory. If a quality-gate self or quality-gate restatement run happens after a fanout run, the fix action picks the newer quality-gate file and tries to parse it as a fanout findings table — the table shapes differ (quality-gate doesn't include Surface(s) or Rank columns), so rows go to ## Unparsed and the actual fanout findings are never applied.

The fanout file always has tier: <small|medium|large> in its frontmatter; quality-gate files have mode: self/code/restatement/… instead. Adding one discriminator check to Step 1 fixes this:

## Step 1: Locate the findings file (current branch ONLY)

... take the newest `*.md` whose frontmatter contains `tier:` (fanout format)
rather than the newest `*.md` overall. Quality-gate artifacts have `mode:` in
frontmatter instead and must not be consumed by the fix action.

Fix this →


3. Partial extraction silently drops findings

run-everything-mode.md:134–136

rawFallback: (records.length === 0 && returned.length > 0) ? returned : null,

rawFallback is only populated when extraction yields zero records. If the Stage-0 extractor parses 1 finding but misses 3 others (a partial parse), rawFallback is null, and the 3 unextracted findings have no route to ## Unparsed. The "NEVER drop" invariant in findings-normalization.md is violated silently.

The fix is to always return the raw outputs alongside the records — not conditionally on all-zero — and let the main thread compare records.length against returned.length to decide whether there's unextracted content:

return {
  records,
  rawLeafOutputs: returned,  // always; main thread uses when records < returned count
  nulls,
  ran: roster.map(l => l.label),
}

Fix this →


Resolved (Codex P2 — already fixed)

The Codex finding about git diff --shortstat HEAD returning empty on committed-clean branches was addressed in commit c838b26: the SKILL.md pre-computed shortstat now uses origin/HEAD...HEAD as the primary command, falling back through origin/main...HEAD, and only reaching the bare HEAD form last. ✓


Suggestions

4. TIER2_AGENTS and TIER2_SLICES dispatched sequentially, not concurrently

run-everything-mode.md:83–88

t2a and t2s are separate awaited parallel() calls. There's no stated reason to barrier between them — they could be merged into one parallel() call so doc-drift-detector and the slice agents run concurrently rather than t2s waiting for t2a to complete.

5. Single-quote injection risk in OWNERLESS_SLICES substitution

run-everything-mode.md:63

When the Workflow script is constructed at dispatch, slice paths are injected as '<path>' JS string literals. A criteria doc whose filename contains a single quote (unlikely but valid on most filesystems) would produce a JS syntax error. Documenting that the dispatch step must escape or double-quote the injected paths would close this.


CLAUDE.md Compliance

Rule Status
Repo-agnostic (no hardcoded paths) ✅ Uses ${CLAUDE_PLUGIN_ROOT}, merge-base chains, and gh repo view for dynamic owner/repo
Configurable via userConfig ℹ️ No userConfig — the README explicitly documents this design choice; consumer customization routes through the project's own docs
Plugin-form-safe ${CLAUDE_PLUGIN_ROOT}/context/severity.md used throughout; no ../ reach-outs
No PII / secrets
Versioned 0.1.0
Plugin-form security ✅ Read-only agents; no remote MCP; no data egress; no secrets in config

The userConfig-less design is a deliberate choice (documented in README.md:60–64) and is defensible — all consumer customization routes through CLAUDE.md, review docs, and project rules, which is how the skill reads preferences. This does conflict with the CLAUDE.md design rule "Expose consumer choices through userConfig"; it's worth a follow-up issue but is not merge-blocking given the explicit documentation.


Summary

Three correctness bugs affect the fanout skill's instruction docs (committed-clean branch gate, fix-mode file disambiguation, partial-extraction drop). All three are localized text fixes in markdown instruction files with no manifest or agent changes required. The architecture, agent definitions, manifest, and marketplace entry are well-formed and CLAUDE.md-compliant.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c838b26516

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review-toolkit/skills/code-review-fanout/SKILL.md Outdated
Comment thread plugins/review-toolkit/skills/code-review-fanout/SKILL.md Outdated
- default-mode: clean-tree short-circuit now checks branch-ahead state
  so a committed-clean pre-PR branch is classified reviewable
- fix-pass-mode: findings-file lookup filters on the type:
  review-findings frontmatter marker instead of newest-any-markdown,
  since quality-gate shares the directory with different shapes
- run-everything-mode: Workflow script always returns raw leaf outputs
  so partial extraction preserves unparsed surfaces per the
  normalization contract, not only the all-zero case
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_194dccfa-52ca-47b7-ab22-fea8b95489ae)

@claude

claude Bot commented Jul 11, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 45s —— View job


PR Review: feat/publish-review-toolkit


Previous Findings — All Three Confirmed Fixed ✓

Commit a422507 correctly addresses all three bugs identified in the prior Claude review. Verified against the current file state:

Bug #1 (clean-tree gate)default-mode.md:9 — ✅ Fixed. Case 1 now reads: "git status --porcelain empty AND the branch is not ahead of its base (the pre-computed merge-base shortstat is empty) AND no open PR" — a committed-clean pre-PR branch correctly falls through to Case 3 (reviewable).

Bug #2 (fix-mode file disambiguation)fix-pass-mode.md:7 — ✅ Fixed. Step 1 now explicitly filters on type: review-findings frontmatter, with a note that quality-gate files share the directory with a different shape and must be skipped.

Bug #3 (partial extraction drop)run-everything-mode.md:134-138 — ✅ Fixed. The Workflow script now unconditionally returns raw: returned.map(r => ({ label: r.label, output: r.output })) alongside records. The design-constraints preamble (line 37) and Step 5 of the flow (line 13) both document that the main thread must reconcile per surface against raw, placing non-zero raw outputs from surfaces with zero extracted records through a Stage-0 re-run or into ## Unparsed.


New Open Findings (from Codex scan on c838b26)

These were flagged after the previous fix round and are not yet addressed:

P2-A — Dirty-tree diff omitted from tier sizing

SKILL.md:14

The pre-computed shortstat uses the three-dot form origin/HEAD...HEAD, which compares the merge-base commit to HEAD — it says nothing about uncommitted tracked edits in the working tree. When the skill is invoked on a dirty tree (edits not yet staged/committed), the shortstat can return 0 lines, causing the tier classifier to pick small and skip architecture and security surfaces — even if the actual dirty diff is 500 lines. The leaf agents that later run do diff HEAD and see all the uncommitted changes; the sizing and the review surface diverge.

The fix is to include the dirty portion: augment the pre-computed line with a git diff --shortstat (unstaged) + git diff --shortstat --cached (staged) call so the full working-tree change is visible to the classifier. The model can then take the larger of origin/HEAD...HEAD and the working-tree tally.

Fix this →

P2-B — PR base not resolved; non-default target branches get wrong diff surface

SKILL.md:14 / SKILL.md:26

The review diff base chains through origin/HEAD → origin/main → HEAD. When a PR targets a non-default branch (e.g., develop, a release branch, a feature umbrella), origin/HEAD and origin/main are both wrong — the diff includes commits merged to main but not part of the PR, inflating the surface and drowning out the actual changes.

The pre-computed gh pr list only fetches headRefName, so the model has no baseRefName to fall back on. Adding baseRefName to the JSON fields makes the correct base available at classification time:

# current
gh pr list --json number,title,headRefName --limit 10

# proposed
gh pr list --json number,title,headRefName,baseRefName --limit 10

The shared diff base in SKILL.md:26 should then prefer origin/<baseRefName> (when a PR match is found) before falling back to origin/HEAD / origin/main.

Fix this →


Summary

The three correctness bugs from the prior review are cleanly fixed in a422507. Two new P2-level findings from the post-fix Codex scan remain open: dirty-tree changes are invisible to the tier classifier (P2-A), and PRs targeting non-default branches use the wrong diff base for both classification and leaf dispatch (P2-B). Both are localized to SKILL.md and require small, targeted changes. The rest of the plugin — agents, quality-gate skill, manifest, marketplace entry — is well-formed and unchanged.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a42250740d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review-toolkit/skills/code-review-fanout/SKILL.md
Comment thread plugins/review-toolkit/agents/code-reviewer.md Outdated
Comment thread plugins/review-toolkit/skills/code-review-fanout/SKILL.md Outdated
- Split the pre-computed diff size into committed-vs-merge-base and
  uncommitted shortstats; three-dot diff compares commits only, so a
  large uncommitted change was tiered small. Tier size is now the sum.
- Pre-compute baseRefName and prefer the open PR's real base over
  origin/HEAD/origin/main in both skills' review diff base, so PRs
  targeting develop or release branches review the intended surface.
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_5ec31f31-2152-46a0-ad48-63acb2b95508)

@claude

claude Bot commented Jul 11, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 3m 30s —— View job


PR Review: feat/publish-review-toolkit

  • Read changed files (SKILL.md, agents, context docs)
  • Verify P2-A fix (dirty-tree diff in tier sizing)
  • Verify P2-B fix (real PR base resolution)
  • Assess new Codex P2 findings from a422507 scan
  • Check remaining open issues
  • Final summary

d674f2c: P2-A and P2-B Confirmed Fixed ✅

P2-A — Dirty-tree diff now included in tier sizing

SKILL.md:15 — New pre-computed context line Uncommitted diff size: !``git diff --shortstat HEAD```. [default-mode.md:19](https://github.com/melodic-software/claude-code-plugins/blob/d674f2c5b32ced3ea5cebe30f061c0f26fba2bb3/plugins/review-toolkit/skills/code-review-fanout/context/default-mode.md#L19) now mandates "Size = the SUM of the two pre-computed shortstats (committed-vs-merge-base + uncommitted) so dirty tracked edits count." git diff --shortstat HEAD` covers both staged and unstaged working-tree changes in one command, which is correct. ✅

P2-B — PR base resolved before diffing

SKILL.md:13baseRefName added to the gh pr list --json fields. SKILL.md:27 — "Review diff base" now prefers origin/<baseRefName> from the matched PR before falling back to origin/HEAD/origin/main. default-mode.md:19 adds the recompute instruction for non-default targets. ✅


Remaining Open Findings (from Codex P2 scan of a422507)

Three P2 items surface-flagged after the prior fix round are not yet addressed in d674f2c:

C — Branch slug collision lets fix-mode apply wrong branch's findings

fix-pass-mode.md:7

Step 1 filters by type: review-findings frontmatter and picks newest by filename sort. The directory-scope guard (.claude/review/<branch-slug>/) assumes the slug uniquely identifies the branch — but feature/foo and feature-foo both produce the slug feature-foo, sharing the same directory. If feature-foo runs a review after feature/foo, fix-mode on feature/foo will pick the newer feature-foo findings and apply them to the wrong working tree. The branch: <branch> field already exists in the findings-file frontmatter (default-mode.md "Findings-file shape") but is not checked.

Minimal fix: add one discriminator to Step 1 alongside the existing type check:

take the newest `*.md` whose frontmatter declares BOTH `type: review-findings`
AND `branch: <current-branch>` (exact match, not slug). Slug ambiguity means
the directory alone is not a safe fence; the branch field is.

Fix this →


D — memory: project enables project writes on all six agents

All six agents have memory: project in their frontmatter (code-reviewer.md:8, security-reviewer.md:8, architecture-guardian.md:8, doc-drift-detector.md:8, ecosystem-specialist.md:8, ci-log-auditor.md:8).

Under Claude Code's memory system, memory: project stores entries under .claude/agent-memory/<agent>/ in the consumer's repo and auto-enables Write/Edit for that path. The skill contract at SKILL.md:22–23 states "mutating nothing but the findings file" for review modes — memory: project is a second mutation path that breaks this promise on every run where the agent records a durable insight. The PR body also describes all six agents as "read-only."

Fix options (pick one):

  • memory: user — persists insights to the user's global memory, not the consumer repo. Preserves the durable-insights benefit without touching the project tree.
  • memory: none — remove the directive and drop the "## Memory" sections from agent prompts. Simpler contract; agents remain stateless across runs.
  • Document the write path explicitly in README.md so consumers opt in knowingly.

Fix this →


E — Orchestrator /code-review:code-review can post PR comments in report-only modes

SKILL.md:69

The skill promises at SKILL.md:22–23: "The default and run-everything modes fan out, normalize, and persist findings, mutating nothing but the findings file." The /code-review:code-review orchestrator, listed as an optional surface for medium/large tiers, is documented (in its own plugin) as posting findings as a PR comment. On any branch with an open PR, invoking it from within a report-only fanout run sends a PR comment to the remote — a mutation outside the findings file, and one that is externally visible and hard to reverse.

The orchestrator being optional (Absent → note the skip) mitigates the blast radius, but when present the contract is broken.

Fix: add one gate in the orchestrator description so the side effect is explicit:

- **`code-review`**`/code-review:code-review`: parallel reviewers + confidence scorer
  for an existing PR. **Note: this orchestrator posts a PR comment when an open PR
  exists — this is a visible remote side-effect outside the findings file; skip it
  when running in a findings-only context or add `--no-comment` if the plugin
  supports it.**

Fix this →


Minor Suggestion (Carryover)

t2a and t2s dispatched sequentiallyrun-everything-mode.md:82–87. There is no stated dependency between doc-drift-detector (t2a) and the slice agents (t2s). Merging them into one parallel() call would shorten wall-clock time on large reviews without changing correctness.


Cumulative Status

Finding Status
Bug #1 — clean-tree gate (default-mode.md) ✅ Fixed (a422507)
Bug #2 — fix-mode file disambiguation (fix-pass-mode.md) ✅ Fixed (a422507)
Bug #3 — partial extraction drop (run-everything-mode.md) ✅ Fixed (a422507)
P2-A — dirty-tree diff invisible to tier classifier ✅ Fixed (d674f2c)
P2-B — non-default PR base wrong diff surface ✅ Fixed (d674f2c)
P2-C — branch slug collision in fix-mode ⚠️ Open
P2-D — memory: project breaks read-only contract ⚠️ Open
P2-E — orchestrator posts PR comments in report-only mode ⚠️ Open
Suggestion — merge t2a+t2s barriers 💡 Open (non-blocking)

Five of eight findings are confirmed fixed. P2-C, P2-D, and P2-E are localized to fix-pass-mode.md, the six agent frontmatter files, and a one-line addition to SKILL.md:69 respectively — no manifest or marketplace changes required.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped, so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_cf736022-f94e-41a9-9bb3-315efdce057b)

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4b4812dc5a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review-toolkit/agents/ci-log-auditor.md Outdated
Comment thread plugins/review-toolkit/skills/code-review-fanout/SKILL.md
…ks, PR-list cap

- restatement artifact declares type: restatement-review so the fix
  action's type filter cannot pick it up as fanout findings
- line-less findings dedup on path + category + content gist, not path
  alone, so distinct file-scoped findings survive Stage 3
- all four diff-driven agents resolve the open PR's baseRefName before
  the origin/HEAD fallback, matching the skills' review diff base
- ci-log-auditor lists all step conclusions and hunts continue-on-error
  masks via workflow YAML + step logs; the REST conclusion can read
  success for a failed continue-on-error step
- both skills fall back to gh pr list --head when the capped
  pre-computed PR list omits the current branch
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_55dbad5f-d866-42e0-a2b3-7b14bf653fbd)

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped, so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3033b51d05

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review-toolkit/skills/code-review-fanout/context/default-mode.md Outdated
Comment thread plugins/review-toolkit/agents/ci-log-auditor.md Outdated
…oolkit

# Conflicts:
#	.claude-plugin/marketplace.json
#	README.md
- Leaf diff target uses the merge base unconditionally — git diff HEAD
  on a dirty ahead-of-base branch drops the committed changes
- ci-log-auditor paginates the jobs endpoint (per_page defaults to 30,
  so page-2+ matrix jobs were invisible to the audit)
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_b7e31aa4-2b56-4b8d-9e14-6f26673d43a1)

@claude

claude Bot commented Jul 11, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 3m 37s —— View job


PR Review: feat/publish-review-toolkit

  • Read current file state (HEAD: 8fa4465)
  • Verify F: restatement artifact passes fix-mode filter (fix-pass-mode.md)
  • Verify G: path-only dedup drops null-line findings (findings-normalization.md)
  • Verify H: direct agents use wrong diff base (all four diff-driven agents)
  • Verify Codex — dirty branch leaf diff (default-mode.md)
  • Verify Codex — CI masked failures (ci-log-auditor.md)
  • Verify Codex — CI pagination (ci-log-auditor.md)
  • Verify Codex — gh pr list cap (SKILL.md)
  • Final summary

All Previous Open Findings — Confirmed Fixed ✅

Commits 3033b51 and 8fa4465 collectively close every remaining open finding. Verified against current HEAD (8fa4465):

Finding F — Restatement artifact passes fix-mode filterquality-gate/context/restatement.md:28 — ✅ Fixed (3033b51). The restatement frontmatter now declares type: restatement-review (not review-findings), so fix-pass-mode.md's type: review-findings filter naturally excludes it. Cleaner fix than adding a tier: discriminator.

Finding G — Path-only dedup drops distinct null-line findingsfindings-normalization.md:45 — ✅ Fixed (3033b51). Stage 3 now reads: "File-scoped findings (null line) bucket by path + category + a content-gist check — merge two line-less records only when their raw_text describes the same issue; path alone would collapse distinct architecture/doc findings in the same file." The "Minimize FALSE-MERGE over FALSE-SPLIT" invariant is now correctly enforced.

Finding H — Direct reviewer agents use wrong diff base — ✅ Fixed (3033b51). All four diff-driven agents now resolve the open PR's baseRefName before falling back to origin/HEAD:

doc-drift-detector correctly omitted — it cross-references docs against the current codebase state (via Read/Grep/Glob) rather than diffing a change set.

Codex — CI masked failuresci-log-auditor.md:20–22, 29–31 — ✅ Fixed (3033b51). The agent now instructs listing ALL step conclusions (no pre-filter to failure/skipped) with an explicit explanation that continue-on-error steps surface success in the REST result, requiring YAML + log inspection. Section 1 documents the outcome vs conclusion distinction.

Codex — gh pr list capSKILL.md:27 — ✅ Fixed (3033b51). "The pre-computed PR list above is capped; when the current branch is absent from it, run gh pr list --head <current-branch> --json number,baseRefName before concluding no PR exists." The same fallback is present in quality-gate/SKILL.md.

Codex — Dirty branch leaf diffdefault-mode.md:15 — ✅ Fixed (8fa4465). The new "Leaf diff target" section explicitly mandates merge-base diffing in every case and prohibits hardcoded git diff HEAD: "Instruct each surface to run the merge-base command itself — never a hardcoded git diff HEAD." The file explains the failure mode: git diff HEAD on a dirty ahead-of-base branch would show only dirty edits, dropping the committed changes.

Codex — CI paginationci-log-auditor.md:18 — ✅ Fixed (8fa4465). gh api --paginate "repos/<owner>/<repo>/actions/runs/<run-id>/jobs" now fetches all job pages, so matrix jobs past page 1 are no longer silently absent.


Remaining Non-Blocking Suggestion

t2a and t2s dispatched sequentiallyrun-everything-mode.md:82–87

TIER2_AGENTS (doc-drift-detector) and TIER2_SLICES (slice subagents) are still two separate await parallel() calls. There's no stated dependency between them — merging into one parallel() call would reduce wall-clock time on large reviews. Not merge-blocking.


Cumulative Status

Finding Status
Bug #1 — clean-tree gate (default-mode.md) ✅ Fixed (a422507)
Bug #2 — fix-mode file disambiguation (fix-pass-mode.md) ✅ Fixed (a422507)
Bug #3 — partial extraction drop (run-everything-mode.md) ✅ Fixed (a422507)
P2-A — dirty-tree diff invisible to tier classifier ✅ Fixed (d674f2c)
P2-B — non-default PR base wrong diff surface (skill) ✅ Fixed (d674f2c)
P2-C — branch slug collision in fix-mode ✅ Fixed (cda3c1c)
P2-D — memory: project breaks read-only contract ✅ Fixed (cda3c1c)
P2-E — orchestrator posts PR comments in report-only mode ✅ Fixed (cda3c1c)
F — restatement artifact passes fix-mode filter ✅ Fixed (3033b51)
G — path-only dedup drops distinct null-line findings ✅ Fixed (3033b51)
H — direct agents use wrong diff base ✅ Fixed (3033b51)
Codex — CI masked failures (ci-log-auditor.md) ✅ Fixed (3033b51 + 8fa4465)
Codex — gh pr list cap misses current branch PR ✅ Fixed (3033b51)
Codex — dirty branch leaf uses git diff HEAD ✅ Fixed (8fa4465)
Codex — CI job listing not paginated ✅ Fixed (8fa4465)
Suggestion — merge t2a+t2s barriers 💡 Open (non-blocking)

All 15 tracked correctness findings are confirmed fixed. The plugin is well-formed, CLAUDE.md-compliant, repo-agnostic, and ready to merge.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were available to assign.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8fa4465954

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review-toolkit/skills/quality-gate/context/self.md Outdated
…tcher

The self and per-slice prompt templates hardcoded the origin/HEAD
merge-base, bypassing the PR-base resolution in Shared inputs; the
dispatcher now substitutes the resolved base into the prompt.
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_5d3c068a-c859-4d4a-99d2-59094db468d5)

@claude

claude Bot commented Jul 11, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 41s —— View job


PR Review: feat/publish-review-toolkit

  • Read new commit diff (0db7bf8 — worker prompts take resolved review diff base from dispatcher)
  • Verify final Codex P2: quality-gate self.md using hardcoded origin/HEAD
  • Check per-slice.md for same pattern
  • Assess any new findings
  • Final summary

0db7bf8 — Final Codex P2 Confirmed Fixed ✅

Codex P2 — quality-gate worker prompts hardcode origin/HEAD diff base

self.md:27–29 / per-slice.md:18–20 — ✅ Fixed.

Both worker prompt templates previously embedded git diff "$(git merge-base origin/HEAD HEAD...)" verbatim, bypassing the PR-base resolution the dispatcher already performs in SKILL.md "Shared inputs." The fix replaces the hardcoded command with git diff <review-diff-base> in both templates, with a parenthetical making the substitution contract explicit: "the dispatcher substitutes the resolved review diff base from SKILL.md 'Shared inputs' — the PR's real base when one exists, else the origin/HEAD → origin/main → HEAD fallback." The SKILL.md orchestrator (self.md Step 3) pairs with this — the dispatcher resolves the base before dispatch, so subagents on PRs targeting develop or release/* branches now diff against the correct target rather than always against origin/HEAD.

The design correctly delegates resolution to the main-thread orchestrator and documents the substitution requirement clearly in the template itself. No further changes needed.


Cumulative Status — All Findings Resolved

Finding Status
Bug #1 — clean-tree gate (default-mode.md) ✅ Fixed (a422507)
Bug #2 — fix-mode file disambiguation (fix-pass-mode.md) ✅ Fixed (a422507)
Bug #3 — partial extraction drop (run-everything-mode.md) ✅ Fixed (a422507)
P2-A — dirty-tree diff invisible to tier classifier ✅ Fixed (d674f2c)
P2-B — non-default PR base wrong diff surface (skill) ✅ Fixed (d674f2c)
P2-C — branch slug collision in fix-mode ✅ Fixed (cda3c1c)
P2-D — memory: project breaks read-only contract ✅ Fixed (cda3c1c)
P2-E — orchestrator posts PR comments in report-only mode ✅ Fixed (cda3c1c)
F — restatement artifact passes fix-mode filter ✅ Fixed (3033b51)
G — path-only dedup drops distinct null-line findings ✅ Fixed (3033b51)
H — direct agents use wrong diff base ✅ Fixed (3033b51)
Codex — CI masked failures (ci-log-auditor.md) ✅ Fixed (3033b51 + 8fa4465)
Codex — gh pr list cap misses current branch PR ✅ Fixed (3033b51)
Codex — dirty branch leaf uses git diff HEAD ✅ Fixed (8fa4465)
Codex — CI job listing not paginated ✅ Fixed (8fa4465)
Codex — worker prompts hardcode origin/HEAD diff base ✅ Fixed (0db7bf8)
Suggestion — merge t2a+t2s barriers 💡 Open (non-blocking)

All 16 tracked correctness findings are confirmed fixed. The plugin is well-formed, CLAUDE.md-compliant, repo-agnostic, and ready to merge.


CLAUDE.md Compliance

Rule Status
Repo-agnostic (no hardcoded paths) ✅ Uses ${CLAUDE_PLUGIN_ROOT}, merge-base chains, gh repo view
Plugin-form-safe ${CLAUDE_PLUGIN_ROOT}/context/severity.md throughout; no ../ reach-outs
No PII / secrets
Versioned 0.1.0
Plugin-form security ✅ Read-only agents; no remote MCP; no data egress; memory: local on all six agents

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were available to assign.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0db7bf80e6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/review-toolkit/agents/code-reviewer.md
- Agents fetch origin/<baseRefName> before computing the merge base —
  shallow and single-branch clones lack the ref, and the silent
  origin/main fallback reviewed the wrong diff
- Findings-file contract requires escaping literal | and flattening
  newlines in Finding/Action cells so the fix action's table parse
  cannot split rows on reviewer text
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_d4aee8c9-8ef9-489a-90f9-464712ed0496)

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale comment

Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were available to assign.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

…oolkit

# Conflicts:
#	.claude-plugin/marketplace.json
#	README.md
@cursor

cursor Bot commented Jul 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_786fa80a-15b6-40e2-9961-b1a71fd708ef)

@claude

claude Bot commented Jul 11, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 57s —— View job


PR Review: feat/publish-review-toolkit

  • Read current HEAD state and recent commits
  • Verify Codex P2-I fix (shallow checkout PR base fetch — code-reviewer.md)
  • Verify Codex P2-II fix (pipe escaping in findings table — default-mode.md)
  • Check for remaining open findings
  • Final summary

5b357d7 — Final Two Codex P2 Findings Confirmed Fixed ✅

P2-I — Fetch resolved PR base before merge-base in shallow clones

code-reviewer.md:18–20 — ✅ Fixed. The "Identify the change set" block now explicitly fetches the PR base ref before running merge-base:

PR_BASE="$(gh pr list --head "$(git branch --show-current)" --json baseRefName -q '.[0].baseRefName' 2>/dev/null)"
[ -n "$PR_BASE" ] && git fetch origin "$PR_BASE" 2>/dev/null   # shallow/single-branch clones may lack the base ref
git diff "$(git merge-base "origin/${PR_BASE:-HEAD}" HEAD 2>/dev/null || git merge-base origin/main HEAD 2>/dev/null || echo HEAD)"

The same fetch-before-merge-base pattern is consistently applied across all four diff-driven agents: security-reviewer.md:18–20, architecture-guardian.md:18–20, and ecosystem-specialist.md:15. In shallow or single-branch checkouts where the PR targets a non-default base (e.g. develop, release/*), merge-base no longer silently falls back to origin/main with the wrong base available — the explicit git fetch origin "$PR_BASE" ensures the ref is local before the merge-base call.

P2-II — Escape | in Finding and Action table cells

default-mode.md:75 — ✅ Fixed. The findings-file shape now carries an explicit cell-escaping rule:

Cell-escaping rule (required — the fix action parses this table): inside Finding and Action cells, escape literal | as \| and replace newlines with spaces. Reviewer text routinely contains pipes (TypeScript unions, shell pipelines); unescaped, a row splits into phantom columns and the fix action misreads it.

This closes the silent-drop path identified by Codex: a TypeScript union type or shell pipeline in a finding body would have split the Markdown row into phantom columns, causing the fix-pass parser to misread or skip the affected row.


Cumulative Status — All Findings Resolved

Finding Status
Bug #1 — clean-tree gate (default-mode.md) ✅ Fixed (a422507)
Bug #2 — fix-mode file disambiguation (fix-pass-mode.md) ✅ Fixed (a422507)
Bug #3 — partial extraction drop (run-everything-mode.md) ✅ Fixed (a422507)
P2-A — dirty-tree diff invisible to tier classifier ✅ Fixed (d674f2c)
P2-B — non-default PR base wrong diff surface (skill) ✅ Fixed (d674f2c)
P2-C — branch slug collision in fix-mode ✅ Fixed (cda3c1c)
P2-D — memory: project breaks read-only contract ✅ Fixed (cda3c1c)
P2-E — orchestrator posts PR comments in report-only mode ✅ Fixed (cda3c1c)
F — restatement artifact passes fix-mode filter ✅ Fixed (3033b51)
G — path-only dedup drops distinct null-line findings ✅ Fixed (3033b51)
H — direct agents use wrong diff base ✅ Fixed (3033b51)
Codex — CI masked failures (ci-log-auditor.md) ✅ Fixed (3033b51 + 8fa4465)
Codex — gh pr list cap misses current branch PR ✅ Fixed (3033b51)
Codex — dirty branch leaf uses git diff HEAD ✅ Fixed (8fa4465)
Codex — CI job listing not paginated ✅ Fixed (8fa4465)
Codex — worker prompts hardcode origin/HEAD diff base ✅ Fixed (0db7bf8)
P2-I — merge-base fails in shallow clones (agent direct path) ✅ Fixed (5b357d7)
P2-II — unescaped | in Finding/Action cells corrupts fix-pass table ✅ Fixed (5b357d7)
Suggestion — merge t2a+t2s barriers in run-everything-mode.md 💡 Open (non-blocking)

All 18 tracked correctness findings are confirmed fixed. The only open item is the non-blocking performance suggestion to merge the sequential t2a/t2s parallel() calls into one at run-everything-mode.md:82–87doc-drift-detector and the slice subagents have no dependency on each other and could run concurrently. Not merge-blocking.


CLAUDE.md Compliance

Rule Status
Repo-agnostic (no hardcoded paths) ${CLAUDE_PLUGIN_ROOT}, merge-base chains, gh repo view throughout
Configurable via userConfig ℹ️ No userConfig — deliberately documented in README.md:60–64; consumer customization routes through project docs
Plugin-form-safe ${CLAUDE_PLUGIN_ROOT}/context/severity.md used throughout; no ../ reach-outs
No PII / secrets
Versioned 0.1.0
Security (agents read-only, no remote MCP, no data egress) memory: local on all six agents; fix-mode is the only mutating path and is confirmation-gated

The plugin is well-formed, CLAUDE.md-compliant, repo-agnostic, and ready to merge. ✅

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached), so the primary automated review signal is incomplete. Human review is needed; no non-author reviewers were available to assign.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@kyle-sexton
kyle-sexton merged commit e0301c3 into main Jul 11, 2026
22 checks passed
@kyle-sexton
kyle-sexton deleted the feat/publish-review-toolkit branch July 11, 2026 18:04

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1a57262d43

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


## Primary path — `pr-review-toolkit` orchestrator plugin (when installed)

When the `pr-review-toolkit` plugin (from the `claude-plugins-official` marketplace) is available, invoke `/pr-review-toolkit:review-pr` with aspects detected from the changed files:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Gate PR-only review toolkit on an actual PR

In the pre-PR local-review case this mode advertises, having pr-review-toolkit installed sends the review to /pr-review-toolkit:review-pr and never reaches the local code-reviewer fallback, even when the current branch has no PR. That command is PR-oriented, so a dirty or committed branch before PR creation can fail/no-op instead of receiving code review; check for an open PR before using it, otherwise dispatch the local reviewer.

Useful? React with 👍 / 👎.


## Primary path — `code-review` orchestrator plugin (when installed)

When the `code-review` plugin (from the `claude-plugins-official` marketplace) is available, invoke `/code-review:code-review`. It detects the current branch's PR, runs parallel review agents with confidence scoring, and posts findings as a PR comment.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Pass explicit PR targets to the PR reviewer

When the user asks to review someone else's PR, or invokes something like pr 123, this path drops that target and calls /code-review:code-review in current-branch detection mode; the fallback gh pr diff is also unqualified. From any branch other than the PR branch this reviews the wrong PR or fails, so preserve a PR number/URL argument and pass it through to the orchestrator and gh command.

Useful? React with 👍 / 👎.

kyle-sexton added a commit that referenced this pull request Jul 16, 2026
…ss lint (#203)

## Summary

Closes decisions #38, #71, #72 (Decisions Log:
https://claude.ai/code/artifact/232ecdce-8316-4880-8c0a-dc3c7dcf3a63).

- **#38** `formatting-create-md-attribution-footer-drift`: `create.md`'s
PR-body heredoc now emits the `🤖 Generated with Claude Code` attribution
footer it documents elsewhere but previously didn't actually emit.
- **#71** `naming-work-items-checklist-template-staleness`:
`templates/checklist.md`'s `add` action reconciled to `add.md`'s actual
current behavior — `--force` skip, `--type` native-Issue-Type resolution
(org repos) vs. `type:` label (personal/non-org repos), `--agent-ready`
body template, `--recurring` title prefix — none of which the checklist
previously mentioned.
- **#72** `tooling-gov-commit-skill-composition-lint`: new `guardrails`
plugin hook `flag-commit-pr-skill-bypass.sh` — advisory
`PreToolUse`/`Bash` guard that flags direct `git commit` (missing the
canonical `-F -` + `--trailer` shape) or any `gh pr create`, nudging
toward this marketplace's own `/commit` / `/pull-request create` skills.
Gated on the consuming project actually having `source-control` enabled
in its own `.claude/settings.json` (fails quiet on uncertain state, per
the plugin's existing advisory-guard posture). Mirrors
`block-hook-bypass.sh`'s literal-stripping detection and the shared
telemetry envelope.

## Verification

- New hook's own test suite: 19/19 passed.
- `shellcheck` on both the hook and its test — clean.
- `guardrails` version bumped 0.3.2 → 0.4.0 (new toggleable guard),
README's guard table/kill-switch table/consumer-seams section updated to
match.

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
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.

1 participant