Skip to content

feat(skill-management): subagent-driven audit + residual review suggestions for migrate-config-to-opus-5 - #564

Merged
wkoutre merged 5 commits into
nextfrom
nickkoutrelakos/opus-5-skill-review-suggestions
Aug 5, 2026
Merged

feat(skill-management): subagent-driven audit + residual review suggestions for migrate-config-to-opus-5#564
wkoutre merged 5 commits into
nextfrom
nickkoutrelakos/opus-5-skill-review-suggestions

Conversation

@wkoutre

@wkoutre wkoutre commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #562, now three parts:

1. Residual github-actions[bot] inline suggestions from #562 (the other two inline comments were already addressed pre-merge):

  • Model-ID audit grep also matches fable/mythos tier IDs, and the current-IDs list mentions claude-fable-5 where the top tier is wanted. (comment)
  • Dead-weight deletion rule tightened: delete outright only on a git surface with a clean tree; on a non-git surface route candidates to the Step 3 interview instead of deleting. (comment) Mirrored into SKILL.md Step 4 per the Codex consistency finding on this PR.

2. Subagent read-every-file audit (the feature, hence minor bump): Step 2 now mandates a subagent fan-out that reads each in-scope file in full, audits it against references/audit-patterns.md, and reports structured per-file findings (quoted text, proposed specific change, classification, rationale) back to the main thread. Grep sweeps are demoted to a completeness cross-check — a hit in a file no subagent reported on means a missed batch, never a patch source. Behavioral compensations live in prose no regex matches; reading every file is the only audit that catches them.

3. Version/docs: skill-management 1.1.0 → 1.2.0 (minor — feature-level enhancement), root CLAUDE.md version table, plugin CLAUDE.md, and README updated to match.

Test plan

  • node scripts/validate-plugin.cjs packages/plugins/skill-management → PASSED
  • bunx markdownlint-cli2 on touched markdown → 0 errors
  • Lefthook pre-commit (format, lint, typecheck, lockfile) → all green

🤖 Generated with Claude Code

…onfig-to-opus-5

Applies the two github-actions[bot] inline suggestions from PR #562 that
were not fully adopted before merge:

- Model-ID grep now also matches fable/mythos tier IDs, and the current-IDs
  list mentions claude-fable-5 for top-tier use
- Dead-weight deletion now requires a clean tree on git surfaces, and routes
  non-git dead weight to the Step 3 interview

Patch bump skill-management 1.1.0 -> 1.1.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@wkoutre
wkoutre requested a review from a team as a code owner August 5, 2026 13:22
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ai-toolkit-slack-oauth-backend Ready Ready Preview Aug 5, 2026 2:44pm

Request Review

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

📚 Documentation Check ✅

Verdict: Passed

Plugin version was correctly bumped (1.1.0→1.2.0) in both plugin.json and the root CLAUDE.md version table, with an appropriate minor-bump magnitude for a backward-compatible feature enhancement. Plugin CLAUDE.md and README.md were both updated consistently to describe the new subagent fan-out behavior. No missing or inconsistent documentation found.


All required documentation updates for this PR are present and internally consistent:\n\n- Version bump: packages/plugins/skill-management/.claude-plugin/plugin.json 1.1.0 → 1.2.0, mirrored in root CLAUDE.md's plugin version table. Minor bump is the correct semver choice (new feature/backward-compatible enhancement to an existing skill, not a new component or breaking change).\n- Plugin CLAUDE.md: updated to describe the Step 2 rewrite (subagent fan-out, read-every-file audit) matching the SKILL.md diff.\n- README.md: skill description row updated with consistent language describing the new fan-out behavior.\n- SKILL.md / audit-patterns.md: substantive, mutually consistent changes — no stale cross-references between the two files or against the summaries in CLAUDE.md/README.\n- Changelog: none exists for this plugin; not applicable (informational check only).\n\nOne informational item outside the scope of diff-based verification: the repo's CLAUDE.md also requires updating an external Notion Plugin Marketplace doc after any packages/plugins/ change. This can't be confirmed from the diff and is not part of the blocking criteria (fail_on_missing_docs: false), so it's noted but does not affect the verdict.

Missing Updates

Type File Severity Reason
📝 changelog N/A (external) ℹ️ info Repo CLAUDE.md requires updating the Notion Plugin Marketplace doc after packages/plugins/ changes; this cannot be verified from the diff alone.

✨ No Documentation Updates Needed

All documentation appears to be up to date with the code changes.


🤖 Generated by Claude Documentation Validator | Mode: suggest

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

● Reviewed · against 2d9e31e · 2026-08-05 14:46 UTC · 5 reviews · view run ↗

Note

Approved — one open note on the Notion marketplace description.

Makes Step 2 of migrate-config-to-opus-5 a subagent read-every-file fan-out with grep demoted to a completeness cross-check, applies the residual #562 suggestions (fable/mythos tiers in the model-ID grep, clean-tree deletion rule mirrored into SKILL.md Step 4), and bumps skill-management to 1.2.0 with matching docs.

Suggestions

  • Notion marketplace description is stale. The skill's behavior changed materially (subagent fan-out replacing the grep scan); the migrate-config-to-opus-5 entry in the marketplace doc needs a matching update. Counts are unaffected.
Iteration history · 5 reviews
2026-08-05 14:46 UTC · ✅ approved · 0 findings · 2d9e31e · run ↗

(no findings)

2026-08-05 14:39 UTC · ✅ approved · 2 findings · 32e0f81 · run ↗
  • packages/plugins/skill-management/CLAUDE.md:25 — info · plugin-conventions
  • packages/plugins/skill-management/skills/migrate-config-to-opus-5/SKILL.md:63 — info · workflow-ordering
2026-08-05 14:32 UTC · ✅ approved · 1 finding · 92524ba · run ↗
  • packages/plugins/skill-management/skills/migrate-config-to-opus-5/SKILL.md:41 — warning · correctness
2026-08-05 13:57 UTC · ✅ approved · 0 findings · fbe1fd2 · run ↗

(no findings)

2026-08-05 13:27 UTC · ✅ approved · 1 finding · f5893c4 · run ↗
  • packages/plugins/skill-management/skills/migrate-config-to-opus-5/references/audit-patterns.md:61 — info · consistency

Tip

Teach the reviewer. React 👍 on findings that helped, 👎 on false positives. Reply to push back or add context — we aggregate this weekly to tune the bot.

Comment @request-claude-review to re-run.

@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: f5893c433a

ℹ️ 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".

- **Context-window logic:** scripts branching on model ID for window size. All current non-Haiku models are 1M; Haiku 4.5 is 200K. Keying "haiku → 200K, else 1M" beats enumerating model names. Test with synthetic payloads for both branches.
- **API params:** `budget_tokens` is rejected with a 400 on the Claude 5 family — replace `thinking: {type: "enabled", budget_tokens: N}` with `thinking: {type: "adaptive"}`. Also flag hardcoded `temperature` alongside thinking, and Priority Tier assumptions (not supported on Opus 5).
- **Dead weight:** vendored commands referencing nonexistent agents, archive directories, `.backup`/`.bak` settings snapshots (these often pin old models), marketplace entries pointing at dead repos. Delete outright only when the surface is a git repo — git holds history there. On a non-git surface (a plain `~/.claude` is the common case) deletion is unrecoverable, so treat dead-weight removal as a user decision, or confirm an external backup (Time Machine, sync) before deleting.
- **Dead weight:** vendored commands referencing nonexistent agents, archive directories, `.backup`/`.bak` settings snapshots (these often pin old models), marketplace entries pointing at dead repos. Delete outright only when the surface is a git repo with a clean tree — git holds history there. On a non-git surface (a plain `~/.claude` is the common case) deletion is unrecoverable, so list the candidates for the Step 3 interview instead of deleting, or confirm an external backup (Time Machine, sync) first.

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 Keep dead-weight deletion rules consistent

When the selected surface is a git repo with uncommitted or untracked dead-weight files, this tightened reference says to delete only with a clean tree, but the actual execution step still says to delete dead things outright whenever the surface is a git repo (packages/plugins/skill-management/skills/migrate-config-to-opus-5/SKILL.md:54). Agents following the later Step 4 instruction can still remove unrecoverable dirty-tree content, so the clean-tree/Step 3 routing needs to be mirrored in the executable workflow text as well.

Useful? React with 👍 / 👎.

@github-actions github-actions Bot 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.

Note

Approved — see full review in the sticky comment ↑

…ep 4

Codex review flagged that the executable workflow text still permitted
outright deletion on any git repo while the reference required a clean
tree. Both now agree: clean tree required, dirty/non-git dead weight
routes to the Step 3 interview.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…fig-to-opus-5

Step 2 now mandates a subagent fan-out that reads each in-scope file in
full, audits it against references/audit-patterns.md, and reports
structured per-file findings (quoted text, proposed change,
classification, rationale) back to the main thread. Grep sweeps are
demoted to a completeness cross-check — a hit in an unreported file
means a missed batch, never a patch source.

Bump becomes minor (1.1.1 -> 1.2.0) since this is a feature-level
enhancement; plugin CLAUDE.md and README updated to match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@wkoutre wkoutre changed the title fix(skill-management): apply residual review suggestions to migrate-config-to-opus-5 feat(skill-management): subagent-driven audit + residual review suggestions for migrate-config-to-opus-5 Aug 5, 2026
The audit itself is read-every-file, not search. Grep finds only what a pattern anticipates (model IDs, API params); the behavioral deltas live in prose that no regex matches — a reviewer prompt's confidence filter, a rule's verification ceremony, a delegation nudge. Deploy subagents to do the reading:

- Partition the Step 1 inventory into batches of related files (a rules directory, one plugin's skills, the CI scripts) — one subagent per batch, sized so each agent reads every assigned file in full.
- Give each subagent its file list, the full text of `references/audit-patterns.md`, and this contract: read each file completely, audit it against the reference's deltas, mechanical checks, and user-decision settings, and report back per-file structured findings — file, location, quoted current text, proposed specific change (replacement text, "delete", or "keep as policy"), classification (the four buckets below), and a one-line rationale. A file with no findings is reported as audited-clean, not skipped. No subagent may judge a file it did not read.

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.

⚠️ warning · correctness — The payload enumerated here (file list + audit-patterns.md) doesn't include the four classification buckets, but the contract asks each subagent to classify into "the four buckets below" — those live at lines 49-52 of this file, which the subagent never sees, and audit-patterns.md doesn't define them. Each subagent invents its own labels and the main thread re-classifies.

Suggested change
- Give each subagent its file list, the full text of `references/audit-patterns.md`, and this contract: read each file completely, audit it against the reference's deltas, mechanical checks, and user-decision settings, and report back per-file structured findings — file, location, quoted current text, proposed specific change (replacement text, "delete", or "keep as policy"), classification (the four buckets below), and a one-line rationale. A file with no findings is reported as audited-clean, not skipped. No subagent may judge a file it did not read.
- Give each subagent its file list, the full text of `references/audit-patterns.md`, the four classification buckets defined below, and this contract: read each file completely, audit it against the reference's deltas, mechanical checks, and user-decision settings, and report back per-file structured findings — file, location, quoted current text, proposed specific change (replacement text, "delete", or "keep as policy"), classification (one of the four buckets), and a one-line rationale. A file with no findings is reported as audited-clean, not skipped. No subagent may judge a file it did not read.

…load

AI review caught that the contract referenced 'the four buckets below'
while the enumerated payload omitted them — subagents never see the
rest of SKILL.md, so each would invent its own labels.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
behavioral changes. Interviews for scope first (global `~/.claude` vs the current project),
inventories the surface, classifies findings (fix mechanically / rewrite / user decision / leave
alone), and executes with granular commits plus a verification probe. Bundles
inventories the surface, fans out subagents that read every in-scope file in full and report

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.

🔵 info · plugin-conventions — The skill's described behavior changed materially (subagent fan-out replacing the grep scan), so the Notion marketplace doc's migrate-config-to-opus-5 description is stale. Component counts are unaffected — nothing was added, removed, or renamed.

- For shared/synced files, apply the machine-agnostic path rule from Step 0.
- When editing `settings.json`, validate with `python3 -c "import json; json.load(open('...'))"` after every edit, and check `git diff` first so pre-existing drift from other sessions is named in the commit message rather than silently swept in.
- Delete dead things outright (superseded commands, archives, backup files) when the surface is a git repo — git history is the recovery path, and "kept for recovery" copies keep loading into context. On a non-git surface, deletion is unrecoverable: confirm the user has a backup (Time Machine, sync) or ask before deleting.
- Delete dead things outright (superseded commands, archives, backup files) when the surface is a git repo with a clean tree — git history is the recovery path, and "kept for recovery" copies keep loading into context. Uncommitted or untracked dead weight has no history to fall back on: commit it first or route it to the Step 3 interview. On a non-git surface, deletion is unrecoverable: list the candidates for the Step 3 interview instead, or confirm the user has a backup (Time Machine, sync) before deleting.

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.

🔵 info · workflow-ordering — Step 4 routes dirty-tree and non-git dead weight "to the Step 3 interview", but Step 3 has already run by the time an agent reaches this branch. The git case has commit it first as a forward path; the non-git case needs one too — e.g. "raise it with the user now" rather than pointing back at a completed step.

…dead weight

Step 4 routed dirty-tree/non-git dead weight back to the Step 3
interview, which has already run by then. Now a follow-up
AskUserQuestion, with Step 3 as the ideal earlier surfacing point.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@wkoutre
wkoutre merged commit f9f2336 into next Aug 5, 2026
18 checks passed
@wkoutre
wkoutre deleted the nickkoutrelakos/opus-5-skill-review-suggestions branch August 5, 2026 14:47
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