Skip to content

feat(marketplace)!: recalibrate planning and verification skills for tiered-model execution#150

Open
anderskev wants to merge 6 commits into
mainfrom
feat/tiered-model-skill-modernization
Open

feat(marketplace)!: recalibrate planning and verification skills for tiered-model execution#150
anderskev wants to merge 6 commits into
mainfrom
feat/tiered-model-skill-modernization

Conversation

@anderskev

Copy link
Copy Markdown
Member

Summary

These skills were written when one expensive model did planning and execution alike. The workflow now uses planning-tier models to plan and review while execution-tier models execute, and the old framing was burning tokens by over-verifying and getting stuck. This bounds every verification loop, gives executors a legal way to stop, and removes ceremony that defended against a failure mode the current topology already handles.

The headline is not line count — it is that every verification loop now has a cap and every executor has a legal way to stop.

Changes

Added

  • beagle-core:execution-contract (internal, 93 lines) — capability-role vocabulary (planning vs. execution model, defined by decision authority, never by model name), failure matching by shape rather than the planner's guessed string, a baseline-diffed pre-existing-red policy, a two-attempt-per-step budget, and a stop-and-report template. States explicitly that halting with a report is a success state. Inlined verbatim into every emitted plan.
  • beagle-core:verification-budget (internal, 75 lines) — reversibility-based risk tiers, the required loop-budget syntax (max passes, an observable stop condition, a proceed-and-flag tie-break), the one-echo rule, and a prove-a-negative ban. Review and verify skills import this instead of restating their own gates.

Changed

  • Unbounded loops bounded. Not one loop in these skills declared a stop condition. The recurring "Advance only when every item is honestly yes" — 17 rows in write-plan, 12 in quick-plan, a double layer in brainstorm-beagle, three uncapped restart loops in verify-llm-artifacts — is gone everywhere. Criteria were preserved; only the delivery mechanism changed.
  • Executors given an exit. Emitted plans open with a mandatory ## Executor Contract. Removed subagent-prompt's "no 'use your judgment' escape hatches" and "do not stop until the final integration check passes", which instructed models to grind.
  • Verification applied once per review, not once per finding. The per-finding framing was embedded at ~55 call sites across every language plugin ("completed for every reported issue", "Run once per FastAPI-related finding"). Reporting a finding is tier REVERSIBLE and earns no ceremony; only IRREVERSIBLE-action findings keep the full evidence gate.
  • Deduplicated. write-plan 462 → 181 lines. review-verification-protocol 1,848 → 926 across seven copies (language-neutral core + six thin deltas, every language-specific pattern kept). Detection criteria 1,046 → 298, with per-language examples now loading only on a language match.
  • Risk-tiered adjudication. verify-llm-artifacts collapses five hard gates into one tier-based gate and drops ~1,300 lines/run of cross-skill preloading. fix-llm-artifacts keeps every protective control — stash gate, per-fix code-presence check, git_head staleness abort, risky-fix prompts, post-fix lint and tests.

Fixed

  • Broken spec handoff. spec-template.md and resolve-beagle both pointed at docs/specs/ while brainstorm-beagle writes to .beagle/concepts/<slug>/spec.md, so resolve-beagle could not find the specs it exists to resolve.
  • quick-plan frontmatter description was 1,033 characters against a 1,024 limit.
  • Undefined [WORKSPACE/...] placeholder in fanout-brief.md sent subagent reports to a path no skill established.
  • Dangling Anti-confabulation (gate 0) reference left by the protocol refactor, plus review-structure's local restatement of that gate.

Motivation

Agents using these skills spent disproportionate time over-verifying and getting stuck. Five root causes: unbounded loops with no stop condition; emitted plans with no legal halt state; per-verdict anti-confabulation echoes that defended against one long-lived context adjudicating code it never read (a much weaker risk with fresh, narrow subagent contexts); no capability tiering anywhere; and duplication that multiplied every instruction token.

Testing

This repo has no build system, no tests, and no linter — it is a pure markdown plugin marketplace where validation is manual inspection (see CLAUDE.md). Stating that plainly rather than checking boxes that do not apply.

  • Unit tests added/updated — N/A, no test framework in this repo
  • Integration tests added/updated — N/A
  • Structural verification performed (scripted)

Verification performed

Scripted checks across every changed file:

  • No model names anywhere (capability roles only) — required for the guidance to survive model releases
  • Every name: frontmatter value byte-identical to HEAD
  • No frontmatter description over 1,024 chars; no SKILL.md over 500 lines
  • All relative markdown links resolve on disk
  • Both artifacts JSON schemas unchanged field-for-field (id, category, file:line, risk, fix_safety, fix_actionconfirmed_issue/false_positive/inconclusive, confidence, checks_performed)
  • No residual "honestly yes" / "advance only when" gate phrasing outside the file that documents it as an anti-pattern

Handoffs confirmed intact

.beagle/concepts/<slug>/spec.mdwrite-plan.beagle/concepts/<slug>/plan.md; quick-plan.beagle/plans/<slug>/plan.md (sibling tree); both → subagent-prompt; the spec's eight sections, slug rules, needs-spike-before-planning marker, and the resolve-beagle Open Questions hook.

Breaking Changes

Version bumped to 5.0.0.

  • Emitted plan.md gains a mandatory ## Executor Contract section. Plans generated before this change carry no attempt budget and no pre-existing-red policy. They still execute; they just lack the stop rules.
  • Review skills apply the verification protocol once per review rather than once per finding. Anything depending on per-finding protocol output should expect one consolidated pass.
  • review-verification-protocol no longer has an Anti-confabulation (gate 0) section — replaced by verification-budget's one-echo rule. External references to that heading need repointing.
  • No migration is required for in-flight specs; spec.md structure is unchanged.

Reviewer notes

Worth a careful look at the tradeoff: risk-tiering verification will let some false positives through, and this PR verifies structure, not review outcomes. The counterargument is that a review nobody can afford to run has precision zero, so ceremony is kept on destructive paths and stripped where reversible. I'd suggest an A/B on a known-artifact repo before tagging 5.0.0 — that has not been done.

Note also that .beagle/ is gitignored, so the plan document with the full execution record is not in this diff.

Checklist

  • Code follows project style guidelines
  • Self-review completed
  • Tests pass locally — N/A, no test suite in this repo
  • Linting passes — N/A, no linter configured
  • Documentation updated (CHANGELOG, CLAUDE.md skill table and counts, marketplace version)

anderskev and others added 3 commits July 21, 2026 07:06
…ndations

Phase 0 of the tiered-model skill modernization. Adds the two internal
skills that later phases import instead of restating their own gates.

execution-contract defines what an execution-tier model is trusted to
decide, and gives it a legal way to stop: failure matching by shape
rather than by the planner's guessed string, a baseline-diffed
pre-existing-red policy, a two-attempt budget, and a stop-and-report
template. Halting with a report is stated explicitly as a success state.

verification-budget defines reversibility-based risk tiers, the required
loop-budget syntax (max passes, observable stop condition, proceed-and-flag
tie-break), the one-echo rule, and a ban on prove-a-negative checks.

Also fixes a broken link in the brainstorm to write-plan handoff chain:
spec-template.md and resolve-beagle both pointed at docs/specs/, while
brainstorm-beagle writes to .beagle/concepts/<slug>/spec.md, so
resolve-beagle could not find the specs it exists to resolve.

quick-plan's frontmatter description was 1033 chars against a 1024 limit;
trimmed to 645 without losing a trigger phrase.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Entire-Checkpoint: 54782f8ae050
…execution

BREAKING CHANGE: emitted plan.md gains a mandatory Executor Contract
section; review/verify skills import shared vocabulary instead of
restating their own gates. In-flight plans and specs keep working, but
plans emitted before this change carry no attempt budget.

These skills assumed one expensive model both planned and executed. The
workflow now uses planning-tier models to plan and review while
execution-tier models execute, and the old framing burned tokens by
over-verifying and getting stuck. Five root causes, all fixed:

Unbounded loops. No verification loop declared a cap or stop condition.
Every remaining loop now declares max passes, an observable stop
condition, and a proceed-and-flag tie-break. The "advance only when every
item is honestly yes" gate is gone from write-plan, quick-plan,
brainstorm-beagle, and verify-llm-artifacts. Criteria are preserved --
only the delivery mechanism changed.

No legal way to stop. Plans now open with an Executor Contract inlining
beagle-core:execution-contract, so a blocked executor halts and reports
rather than grinding. This closes four stuck-states, including matching
against a planner-guessed failure string and an absolute zero-regressions
demand with no pre-existing-red policy.

Redundant ceremony. Per-verdict echo gates defended against one
long-lived context adjudicating code it never read -- a much weaker risk
with fresh subagent contexts. Replaced by the one-echo rule, retaining a
staleness re-read before irreversible actions.

Risk tiering. verify-llm-artifacts collapses five hard gates into one
tier-based gate. fix-llm-artifacts keeps every protective control and
drops only the duplicate echo and ID-lock.

Duplication. write-plan 462 -> 181 lines; review-verification-protocol
1848 -> 926 across seven copies; detection criteria 1046 -> 298 with
per-language examples now loaded conditionally.

Handoffs preserved: spec.md -> write-plan -> plan.md, quick-plan's
sibling tree, subagent-prompt, the spec's eight sections and
resolve-beagle hook, and both artifacts JSON schemas field-for-field.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Entire-Checkpoint: 068a0c6c4f08
…t per finding

BREAKING CHANGE: code review skills across all seven plugins now apply
review-verification-protocol once at review entry rather than once per
reported finding.

The protocol refactor in the previous commit was only half the win. A
repo-wide grep found ~55 call sites that embedded the per-finding framing
themselves -- "completed for every reported issue", "Run once per
FastAPI-related finding", "For every substantive finding, you can name
which protocol subsection you satisfied". A perfectly budgeted core
protocol still burns the same tokens when 55 call sites independently
demand per-finding application.

Every call site now loads the protocol once and applies it in a single
pass over the assembled finding list. Reporting a finding is
verification-budget tier REVERSIBLE and earns no ceremony; only a finding
whose recommended action is IRREVERSIBLE keeps the full evidence gate.

Eight prove-a-negative demands ("search ALL references", "did you search
all references?") became enumerated pattern lists reported as match
counts, since absence over an open search space has no terminating check.
Every remaining loop declares max passes, an observable stop condition,
and a proceed-and-flag tie-break.

Also resolves the one dangling "Anti-confabulation (gate 0)" link left by
the protocol refactor, and review-structure's local restatement of that
gate, against verification-budget's one-echo rule.

What each review skill looks for is unchanged -- this alters how often
and how expensively the protocol runs, not the review criteria.
review-llm-artifacts keeps its producer-side echo as the pipeline's
single upstream echo; its JSON schema is byte-identical.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Entire-Checkpoint: f4b02dbf0861
@anderskev anderskev added enhancement New feature or request breaking-change Breaking changes requiring user migration labels Jul 21, 2026
@anderskev anderskev self-assigned this Jul 21, 2026
anderskev and others added 2 commits July 21, 2026 07:36
…describing terms

The planning skills referenced "tier-3 tests" as though the reader shared a
tiering scheme that beagle never defines anywhere. The term comes from one
project's test taxonomy; a plan-writing model reading "enumerate every
tier-3 trigger" against a repo with no such scheme will either invent one
or stall. This marketplace is installed across many projects, so it cannot
assume a private convention.

The underlying concept is real and stays: some behavior cannot be proven
below the real entrypoint -- launch/bootstrap, CLI arg parsing, env-var
resolution, pty/signal handling, shell scripts whose contract is shell
semantics. That checklist is now named for what it is ("real-entrypoint
coverage") and instructs the planner to use the project's own vocabulary,
read from its AGENTS.md/CLAUDE.md, rather than importing a taxonomy.

Also drops the numeric tier aliases from verification-budget, which had the
same defect: it named its tiers REVERSIBLE and IRREVERSIBLE in the table but
then referred to "tier 1" in prose. Tiers are now always named, never
numbered.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Entire-Checkpoint: 1193a8c27f14
Entire is personal tooling, not a repo dependency. Committing its harness
integrations would opt every contributor who has the CLI installed into
session capture to a checkpoint remote, which is a per-developer choice
rather than a project one.

Untracks .entire/settings.json (added in #148) and ignores the harness
integrations Entire generates for Claude Code, Codex, Cursor, opencode, and
pi. The Claude Code hooks move to .claude/settings.local.json so local setup
keeps working while the tracked .claude/settings.json returns to just
enabledPlugins.

.codex/INSTALL.md stays tracked -- that is Beagle's own Codex support doc
referenced from CLAUDE.md, not an Entire artifact. Only .codex/config.toml
and .codex/hooks.json are ignored.

Also ignores .claude/settings.local.json, which was previously excluded only
by a personal global gitignore and so was unprotected for other contributors.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Entire-Checkpoint: c0e61d709d33
@anderskev

Copy link
Copy Markdown
Member Author

Two follow-up commits pushed.

fix(beagle-analysis): removed project-specific tier jargon. The planning skills referenced tier-3 tests as though the reader shared a tiering scheme — but that scheme is never defined anywhere in beagle. It came from one project's private test taxonomy and predates this branch (3 occurrences on main in write-plan/SKILL.md); the reference split in this PR propagated it to 4 occurrences across 3 files without flagging it.

The concept is real and stays — some behavior can't be proven below the real entrypoint (launch/bootstrap, CLI arg parsing, env-var resolution, pty/signal handling, shell scripts whose contract is shell semantics). It's now named "real-entrypoint coverage" and instructs the planner to read the project's own vocabulary from its AGENTS.md/CLAUDE.md rather than importing a taxonomy. A model reading "enumerate every tier-3 trigger" against a repo with no tiering scheme would either invent one or stall.

This also caught the same defect in a file added by this PR: verification-budget named its tiers REVERSIBLE/IRREVERSIBLE in the table but then said "tier 1" in prose. Tiers are now always named, never numbered.

chore: Entire session recording kept local. Untracks .entire/settings.json (from #148) and ignores the harness integrations Entire generates for Claude Code, Codex, Cursor, opencode, and pi. Committing them would opt every contributor with the CLI installed into session capture to a checkpoint remote — a per-developer choice, not a project one. .codex/INSTALL.md stays tracked; it's Beagle's own Codex support doc, not an Entire artifact.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ae1eacbb-44dc-417f-8dd2-7694eff245e0

📥 Commits

Reviewing files that changed from the base of the PR and between 57c69f7 and 284473a.

📒 Files selected for processing (48)
  • SKILLS.md
  • plugins/beagle-elixir/README.md
  • plugins/beagle-elixir/skills/elixir-code-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-performance-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-security-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-verification-protocol/SKILL.md
  • plugins/beagle-elixir/skills/exunit-code-review/SKILL.md
  • plugins/beagle-elixir/skills/liveview-code-review/SKILL.md
  • plugins/beagle-elixir/skills/phoenix-code-review/SKILL.md
  • plugins/beagle-elixir/skills/review-elixir/SKILL.md
  • plugins/beagle-go/README.md
  • plugins/beagle-go/skills/bubbletea-code-review/SKILL.md
  • plugins/beagle-go/skills/go-code-review/SKILL.md
  • plugins/beagle-go/skills/go-testing-code-review/SKILL.md
  • plugins/beagle-go/skills/go-verification-protocol/SKILL.md
  • plugins/beagle-go/skills/review-go/SKILL.md
  • plugins/beagle-go/skills/review-tui/SKILL.md
  • plugins/beagle-ios/README.md
  • plugins/beagle-ios/skills/app-intents-code-review/SKILL.md
  • plugins/beagle-ios/skills/cloudkit-code-review/SKILL.md
  • plugins/beagle-ios/skills/ios-verification-protocol/SKILL.md
  • plugins/beagle-ios/skills/review-ios/SKILL.md
  • plugins/beagle-ios/skills/swift-code-review/SKILL.md
  • plugins/beagle-ios/skills/swift-testing-code-review/SKILL.md
  • plugins/beagle-ios/skills/watchos-code-review/SKILL.md
  • plugins/beagle-ios/skills/widgetkit-code-review/SKILL.md
  • plugins/beagle-python/README.md
  • plugins/beagle-python/skills/fastapi-code-review/SKILL.md
  • plugins/beagle-python/skills/python-code-review/SKILL.md
  • plugins/beagle-python/skills/python-verification-protocol/SKILL.md
  • plugins/beagle-python/skills/review-python/SKILL.md
  • plugins/beagle-python/skills/sqlalchemy-code-review/SKILL.md
  • plugins/beagle-react/README.md
  • plugins/beagle-react/skills/react-router-code-review/SKILL.md
  • plugins/beagle-react/skills/react-verification-protocol/SKILL.md
  • plugins/beagle-react/skills/review-frontend/SKILL.md
  • plugins/beagle-react/skills/shadcn-code-review/SKILL.md
  • plugins/beagle-rust/README.md
  • plugins/beagle-rust/skills/axum-code-review/SKILL.md
  • plugins/beagle-rust/skills/ffi-code-review/SKILL.md
  • plugins/beagle-rust/skills/macros-code-review/SKILL.md
  • plugins/beagle-rust/skills/review-rust/SKILL.md
  • plugins/beagle-rust/skills/rust-code-review/SKILL.md
  • plugins/beagle-rust/skills/rust-testing-code-review/SKILL.md
  • plugins/beagle-rust/skills/rust-verification-protocol/SKILL.md
  • plugins/beagle-rust/skills/serde-code-review/SKILL.md
  • plugins/beagle-rust/skills/sqlx-code-review/SKILL.md
  • plugins/beagle-rust/skills/tokio-async-code-review/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (28)
  • plugins/beagle-ios/skills/swift-code-review/SKILL.md
  • plugins/beagle-rust/skills/macros-code-review/SKILL.md
  • plugins/beagle-go/skills/review-go/SKILL.md
  • plugins/beagle-elixir/skills/liveview-code-review/SKILL.md
  • plugins/beagle-ios/skills/swift-testing-code-review/SKILL.md
  • plugins/beagle-rust/skills/ffi-code-review/SKILL.md
  • plugins/beagle-python/skills/sqlalchemy-code-review/SKILL.md
  • plugins/beagle-ios/skills/cloudkit-code-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-security-review/SKILL.md
  • plugins/beagle-elixir/skills/phoenix-code-review/SKILL.md
  • plugins/beagle-go/skills/go-code-review/SKILL.md
  • plugins/beagle-rust/skills/tokio-async-code-review/SKILL.md
  • plugins/beagle-python/skills/python-code-review/SKILL.md
  • plugins/beagle-react/skills/shadcn-code-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-performance-review/SKILL.md
  • plugins/beagle-ios/skills/app-intents-code-review/SKILL.md
  • plugins/beagle-ios/skills/watchos-code-review/SKILL.md
  • plugins/beagle-ios/skills/review-ios/SKILL.md
  • plugins/beagle-python/skills/fastapi-code-review/SKILL.md
  • plugins/beagle-rust/skills/rust-code-review/SKILL.md
  • plugins/beagle-react/skills/review-frontend/SKILL.md
  • plugins/beagle-ios/skills/widgetkit-code-review/SKILL.md
  • plugins/beagle-elixir/skills/exunit-code-review/SKILL.md
  • plugins/beagle-rust/skills/sqlx-code-review/SKILL.md
  • plugins/beagle-rust/skills/review-rust/SKILL.md
  • plugins/beagle-go/skills/bubbletea-code-review/SKILL.md
  • plugins/beagle-go/skills/go-testing-code-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-code-review/SKILL.md

Walkthrough

This change introduces execution and verification contracts with bounded attempts, explicit stop conditions, and tiered evidence rules. Planning workflows now use standardized specifications, executor contracts, deterministic task structures, and one-pass reviews. Artifact detection separates language-neutral criteria from Python examples. Core and language-specific review skills now apply verification once per assembled finding list, with enumerated checks for absence claims and specialized guidance for Elixir, Go, iOS, Python, React, and Rust.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: recalibrating planning and verification skills for tiered-model execution.
Description check ✅ Passed The description is directly related to the changeset and matches the PR’s tiered-model planning and verification updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 13

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
plugins/beagle-ios/skills/watchos-code-review/SKILL.md (1)

1-1: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Make watchOS and WidgetKit verification review-level, not finding-level.

  • plugins/beagle-ios/skills/watchos-code-review/SKILL.md#L51-L53: replace the per-finding gates with one pass over the assembled finding list.
  • plugins/beagle-ios/skills/widgetkit-code-review/SKILL.md#L49-L51: apply the same once-per-review rule and stop condition.

This is required to match the PR’s bounded verification contract and the other updated review protocols.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-ios/skills/watchos-code-review/SKILL.md` at line 1, Update the
watchOS and WidgetKit review protocols to perform verification once per review,
after assembling the complete finding list, rather than once for each finding.
Replace the per-finding gates in the watchOS and WidgetKit skill instructions
with a single review-level pass and preserve the defined stop condition.
🟡 Minor comments (9)
CHANGELOG.md-7-7 (1)

7-7: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a new version section for the release.

Since marketplace.json was bumped to 5.0.0 in this PR, CHANGELOG.md should reflect this release with a new version section rather than leaving the changes under [Unreleased]. As per coding guidelines, maintain CHANGELOG.md using the Keep a Changelog format and add a new version section for releases.

📝 Proposed fix to add the version section
-## [Unreleased]
+## [Unreleased]
+
+## [5.0.0] - 2026-07-21
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` at line 7, Update the changelog header around [Unreleased] to
add a Keep a Changelog version section for release 5.0.0, moving the release
changes out of the unreleased section while preserving the existing changelog
entries and format.

Sources: Coding guidelines, Learnings

plugins/beagle-core/skills/review-plan/SKILL.md-45-57 (1)

45-57: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the lens-signal count.

The pass condition says “six signals,” but the list contains five lens-selection signals. Either add the missing signal explicitly or change the wording to five; otherwise the gate has an impossible or ambiguous completion condition.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/review-plan/SKILL.md` around lines 45 - 57,
Correct the inconsistency in the extraction instructions by updating the “six
signals” wording to “five signals,” matching the five listed lens-selection
signals. Keep the existing signal list and pass-condition behavior unchanged.
plugins/beagle-core/skills/execution-contract/SKILL.md-57-73 (1)

57-73: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add language identifiers to all fenced Markdown blocks.

Use text for report/prompt templates and the appropriate language identifier for code examples so the repository’s Markdown checks pass.

  • plugins/beagle-core/skills/execution-contract/SKILL.md#L57-L73: tag the stop-and-report template fence.
  • plugins/beagle-core/skills/review-plan/SKILL.md#L95-L200: tag each lens prompt, report-template, and suggested-edit fence.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/execution-contract/SKILL.md` around lines 57 - 73,
Add language identifiers to every fenced Markdown block in
plugins/beagle-core/skills/execution-contract/SKILL.md lines 57-73 and
plugins/beagle-core/skills/review-plan/SKILL.md lines 95-200: use text for
report and prompt templates, and the appropriate language identifier for each
code example. Update all lens prompt, report-template, suggested-edit, and
stop-and-report fences without changing their contents.

Source: Linters/SAST tools

plugins/beagle-analysis/skills/write-plan/references/plan-template.md-9-11 (1)

9-11: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use the repository’s bare skill-name reference style consistently.

These Markdown references use the qualified plugin:skill form. Replace them with bare skill names in prose and tables, reserving qualified forms only for contexts that explicitly require them.

  • plugins/beagle-analysis/skills/write-plan/references/plan-template.md#L9-L11: reference execution-contract without the qualified prefix.
  • plugins/beagle-analysis/skills/write-plan/references/planning-disciplines.md#L146-L146: reference verification-budget without the qualified prefix.
  • plugins/beagle-core/skills/subagent-prompt/SKILL.md#L48-L48: use the repository-standard execution-contract name.
  • plugins/beagle-core/skills/subagent-prompt/SKILL.md#L77-L77: use bare names for the brainstorming, plan-writing, and quick-plan skills.
  • plugins/beagle-core/skills/verify-llm-artifacts/SKILL.md#L11-L11: use the bare verification-budget name.
  • plugins/beagle-core/skills/review-feedback-schema/SKILL.md#L183-L183: use bare names for both referenced protocols.
  • plugins/beagle-core/skills/review-llm-artifacts/SKILL.md#L295-L295: use the bare verification-budget name.
  • plugins/beagle-core/skills/review-plan/SKILL.md#L65-L76: update the skill table entries to the repository-standard bare names.
  • plugins/beagle-core/skills/review-plan/SKILL.md#L77-L77: update the referenced analysis skills consistently.

Based on learnings, avoid the outdated plugin:skill reference format in Markdown and prefer bare skill names.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-analysis/skills/write-plan/references/plan-template.md` around
lines 9 - 11, Replace outdated qualified plugin:skill references with bare skill
names throughout the documentation. Update execution-contract references in
plugins/beagle-analysis/skills/write-plan/references/plan-template.md:9-11 and
plugins/beagle-core/skills/subagent-prompt/SKILL.md:48; update
verification-budget in
plugins/beagle-analysis/skills/write-plan/references/planning-disciplines.md:146,
plugins/beagle-core/skills/verify-llm-artifacts/SKILL.md:11, and
plugins/beagle-core/skills/review-llm-artifacts/SKILL.md:295; update the
brainstorming, plan-writing, quick-plan, and review-plan references in
plugins/beagle-core/skills/subagent-prompt/SKILL.md:77,
plugins/beagle-core/skills/review-feedback-schema/SKILL.md:183, and
plugins/beagle-core/skills/review-plan/SKILL.md:65-77. Keep qualified names only
where explicitly required.

Source: Learnings

plugins/beagle-core/skills/subagent-prompt/SKILL.md-36-36 (1)

36-36: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Avoid unpinned npx in this example. npx vitest run ... can fall back to a registry download when Vitest isn’t installed locally; use a project-local command or npx --no-install vitest ..., and pin the version if a download is intentional.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/subagent-prompt/SKILL.md` at line 36, Update the
test-command examples in the skill guidance to avoid unpinned npx execution:
replace the npx vitest example with a project-local invocation or npx
--no-install, and specify an explicit version only if downloading Vitest is
intentional. Preserve the existing scoped, single-command testing guidance.

Source: Linters/SAST tools

plugins/beagle-core/skills/llm-artifacts-detection/SKILL.md-45-45 (1)

45-45: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add language identifiers to fenced blocks.

The two fenced prompt blocks omit a language identifier. Use text (or the appropriate language) after each opening fence.

Also applies to: 126-126

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/llm-artifacts-detection/SKILL.md` at line 45, Add
the text language identifier to the opening fences of both fenced prompt blocks
in the llm-artifacts-detection skill documentation, including the block
referenced near the secondary location, while preserving their contents and
closing fences.

Sources: Coding guidelines, Linters/SAST tools

plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/abstraction.md-230-239 (1)

230-239: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Close the final fenced code block.

The Unused configuration options example opens a ```python fence but never closes it, leaving the Markdown document structurally invalid.

Proposed fix
 # config.py
 class Settings:
     database_url: str
     cache_ttl: int = 3600
     max_retries: int = 3
     enable_metrics: bool = True  # Never read!
     legacy_mode: bool = False  # Never read!
     debug_sql: bool = False  # Never read!
+```
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/abstraction.md`
around lines 230 - 239, Close the unclosed fenced code block in the “Unused
configuration options” example after the Settings class, adding the matching
Markdown fence so the document structure is valid.

Source: Coding guidelines

plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/dead-code.md-141-141 (1)

141-141: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Specify a language for the fenced block.

The orphaned-tests directory-tree example uses an untyped fence, violating the repository’s Markdown validation rule.

-```
+```text
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/dead-code.md`
at line 141, Update the orphaned-tests directory-tree fenced code block in
dead-code.md to specify the text language by changing its untyped fence to a
text-labeled fence, while preserving the example content.

Sources: Coding guidelines, Linters/SAST tools

plugins/beagle-go/skills/go-code-review/SKILL.md-21-22 (1)

21-22: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Gate on the verdict, not the recommendation.

The core risk-tier contract applies the full evidence gate only when the verdict authorizes an irreversible action. These lines trigger it based on the recommended action, which changes the protocol semantics. Use “verdict authorizes” consistently in both Go skills.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-go/skills/go-code-review/SKILL.md` around lines 21 - 22,
Update the pre-report verification guidance in both
plugins/beagle-go/skills/go-code-review/SKILL.md:21-22 and
plugins/beagle-go/skills/go-testing-code-review/SKILL.md:21-22 to apply the full
evidence gate only when the verdict authorizes an irreversible action, not when
the recommended action is irreversible; use “verdict authorizes” consistently
while preserving the existing reversible-finding and one-pass budget rules.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/beagle-core/skills/fix-llm-artifacts/SKILL.md`:
- Around line 81-92: Update the findings integrity check in the documented jq
command to fail closed: wrap it in an explicit if ! jq condition and exit 1 on
validation failure instead of using || echo. Validate that findings is
non-empty, IDs are integers forming a contiguous 1..N sequence with no
duplicates, and enforce the upstream summary-count invariants alongside the
existing type checks.

In
`@plugins/beagle-core/skills/llm-artifacts-detection/references/dead-code-criteria.md`:
- Around line 9-26: Update the dead-code criteria in
plugins/beagle-core/skills/llm-artifacts-detection/references/dead-code-criteria.md,
covering the unused-symbol patterns and “Before flagging” guidance, to exempt
framework callbacks, lifecycle hooks, and protocol/interface members; include
checks for framework registration, dynamic dispatch, and string-based invocation
alongside ordinary references. Update the unused-code detection guidance in
plugins/beagle-core/skills/llm-artifacts-detection/SKILL.md at lines 73-79 to
perform the same framework-invocation check before emitting findings.

In `@plugins/beagle-core/skills/review-feedback-schema/SKILL.md`:
- Around line 150-152: Update the verification-budget guidance in the review
feedback schema so unresolved items are never dropped: replace the “or drop it”
tie-break with a deterministic status such as INCONCLUSIVE, and require the
unresolved finding to remain in the output while preserving the one-pass budget.

In `@plugins/beagle-core/skills/review-plan/SKILL.md`:
- Around line 257-269: Update the choice list in the review-plan skill to remove
the “Apply fixes now” option that permits editing the plan; replace it with a
handoff to a separate editing session or explicitly state that editing occurs
outside this skill. Preserve the existing “Save & fix later” and “Proceed
anyway” behavior, and keep the non-editing contract consistent throughout.

In `@plugins/beagle-core/skills/review-verification-protocol/SKILL.md`:
- Around line 25-34: The gate procedure in the review-verification protocol
currently requires a pass once per finding; update the scope to perform exactly
one pass over the complete assembled finding list, consistent with the later
single-pass instruction. Adjust the opening directive and loop-budget wording to
describe shared review-level verification while preserving the existing gate
outputs and stop behavior.

In `@plugins/beagle-core/skills/verification-budget/SKILL.md`:
- Line 9: Update the verification-budget references to use the defined risk-tier
name IRREVERSIBLE instead of the undefined “tier 1,” including the downstream
skill import example, while preserving the existing evidence-gate behavior.

In
`@plugins/beagle-core/skills/verify-llm-artifacts/references/verification-checklist.md`:
- Around line 7-16: Update the “Existence precondition (first check)” workflow
to require git cat-file -e against source_git_head whenever that revision is
provided, and perform all cited-symbol and usage checks against that revision.
Allow test -f only when no source revision is available, preserving the existing
missing-file adjudication and retry budget behavior.

In `@plugins/beagle-elixir/skills/elixir-performance-review/SKILL.md`:
- Line 57: Align the verification tie-break wording with the shared contract
across all listed sites: in
plugins/beagle-elixir/skills/elixir-performance-review/SKILL.md:57-57,
plugins/beagle-elixir/skills/elixir-security-review/SKILL.md:53-53,
plugins/beagle-elixir/skills/exunit-code-review/SKILL.md:70-70,
plugins/beagle-elixir/skills/phoenix-code-review/SKILL.md:65-65,
plugins/beagle-react/skills/react-router-code-review/SKILL.md:71-71,
plugins/beagle-react/skills/review-frontend/SKILL.md:89-89,
plugins/beagle-react/skills/review-remix-v2/SKILL.md:111-111,
plugins/beagle-react/skills/review-verification-protocol/SKILL.md:91-91,
plugins/beagle-react/skills/shadcn-code-review/SKILL.md:34-34, and
plugins/beagle-rust/skills/axum-code-review/SKILL.md:24-24, remove any option to
drop unresolved findings and require proceeding with them flagged or reported as
suspected/questions.

In `@plugins/beagle-elixir/skills/review-elixir/SKILL.md`:
- Line 20: Change beagle-core:review-verification-protocol so its Pre-Report
Verification Checklist runs once over the assembled finding list, not once per
finding, while preserving the existing REVERSIBLE verification-budget semantics.
In plugins/beagle-elixir/skills/review-elixir/SKILL.md lines 20, 71, and
118-123; plugins/beagle-go/skills/bubbletea-code-review/SKILL.md line 16;
plugins/beagle-go/skills/go-code-review/SKILL.md lines 31 and 154;
plugins/beagle-go/skills/go-testing-code-review/SKILL.md line 31;
plugins/beagle-rust/skills/review-rust/SKILL.md lines 20 and 152; and
plugins/beagle-rust/skills/rust-testing-code-review/SKILL.md lines 23 and 202,
update downstream wording only where needed to reference the core list-level
contract; otherwise no direct changes are required at those sites.

In `@plugins/beagle-ios/skills/watchos-code-review/SKILL.md`:
- Around line 51-53: The review-verification gates are incorrectly specified as
per-finding, conflicting with the once-per-review contract. Update the gate
instructions near the review entry protocol to run one pass over the assembled
finding list, with a single review-level stop condition, while retaining the
existing one-time protocol load and evidence-budget behavior.

In `@plugins/beagle-ios/skills/widgetkit-code-review/SKILL.md`:
- Around line 49-51: Update the review-verification instructions around the
three gates to apply them once to the assembled finding list rather than once
per finding. Remove the per-finding pass and budget language, while preserving
the once-at-review-entry protocol loading and the requirement to stop after all
invoked gate artifacts are recorded.

In `@plugins/beagle-react/skills/review-frontend/SKILL.md`:
- Line 92: Preserve the core four-pattern unused-reference check in both
frontend skills, including string-literal or dynamic references, rather than
replacing it with JSX-only wording. In
plugins/beagle-react/skills/review-frontend/SKILL.md at lines 92-92, retain
dynamic-reference coverage and add JSX-only references; in
plugins/beagle-react/skills/review-remix-v2/SKILL.md at lines 114-114, retain
dynamic-reference coverage and add JSX and Remix route-file conventions. Ensure
reports count each core pattern and say “no matches across the 4 enumerated
patterns” when applicable.

In `@plugins/beagle-rust/skills/ffi-code-review/SKILL.md`:
- Line 34: Make the Gate 4 verification requirement list-level and single-pass
rather than per-issue: update
plugins/beagle-rust/skills/ffi-code-review/SKILL.md at line 34 and
plugins/beagle-rust/skills/macros-code-review/SKILL.md at line 33 to remove any
remaining per-issue Gate 4 wording while preserving the one-pass
assembled-finding-list constraint.

---

Outside diff comments:
In `@plugins/beagle-ios/skills/watchos-code-review/SKILL.md`:
- Line 1: Update the watchOS and WidgetKit review protocols to perform
verification once per review, after assembling the complete finding list, rather
than once for each finding. Replace the per-finding gates in the watchOS and
WidgetKit skill instructions with a single review-level pass and preserve the
defined stop condition.

---

Minor comments:
In `@CHANGELOG.md`:
- Line 7: Update the changelog header around [Unreleased] to add a Keep a
Changelog version section for release 5.0.0, moving the release changes out of
the unreleased section while preserving the existing changelog entries and
format.

In `@plugins/beagle-analysis/skills/write-plan/references/plan-template.md`:
- Around line 9-11: Replace outdated qualified plugin:skill references with bare
skill names throughout the documentation. Update execution-contract references
in plugins/beagle-analysis/skills/write-plan/references/plan-template.md:9-11
and plugins/beagle-core/skills/subagent-prompt/SKILL.md:48; update
verification-budget in
plugins/beagle-analysis/skills/write-plan/references/planning-disciplines.md:146,
plugins/beagle-core/skills/verify-llm-artifacts/SKILL.md:11, and
plugins/beagle-core/skills/review-llm-artifacts/SKILL.md:295; update the
brainstorming, plan-writing, quick-plan, and review-plan references in
plugins/beagle-core/skills/subagent-prompt/SKILL.md:77,
plugins/beagle-core/skills/review-feedback-schema/SKILL.md:183, and
plugins/beagle-core/skills/review-plan/SKILL.md:65-77. Keep qualified names only
where explicitly required.

In `@plugins/beagle-core/skills/execution-contract/SKILL.md`:
- Around line 57-73: Add language identifiers to every fenced Markdown block in
plugins/beagle-core/skills/execution-contract/SKILL.md lines 57-73 and
plugins/beagle-core/skills/review-plan/SKILL.md lines 95-200: use text for
report and prompt templates, and the appropriate language identifier for each
code example. Update all lens prompt, report-template, suggested-edit, and
stop-and-report fences without changing their contents.

In
`@plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/abstraction.md`:
- Around line 230-239: Close the unclosed fenced code block in the “Unused
configuration options” example after the Settings class, adding the matching
Markdown fence so the document structure is valid.

In
`@plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/dead-code.md`:
- Line 141: Update the orphaned-tests directory-tree fenced code block in
dead-code.md to specify the text language by changing its untyped fence to a
text-labeled fence, while preserving the example content.

In `@plugins/beagle-core/skills/llm-artifacts-detection/SKILL.md`:
- Line 45: Add the text language identifier to the opening fences of both fenced
prompt blocks in the llm-artifacts-detection skill documentation, including the
block referenced near the secondary location, while preserving their contents
and closing fences.

In `@plugins/beagle-core/skills/review-plan/SKILL.md`:
- Around line 45-57: Correct the inconsistency in the extraction instructions by
updating the “six signals” wording to “five signals,” matching the five listed
lens-selection signals. Keep the existing signal list and pass-condition
behavior unchanged.

In `@plugins/beagle-core/skills/subagent-prompt/SKILL.md`:
- Line 36: Update the test-command examples in the skill guidance to avoid
unpinned npx execution: replace the npx vitest example with a project-local
invocation or npx --no-install, and specify an explicit version only if
downloading Vitest is intentional. Preserve the existing scoped, single-command
testing guidance.

In `@plugins/beagle-go/skills/go-code-review/SKILL.md`:
- Around line 21-22: Update the pre-report verification guidance in both
plugins/beagle-go/skills/go-code-review/SKILL.md:21-22 and
plugins/beagle-go/skills/go-testing-code-review/SKILL.md:21-22 to apply the full
evidence gate only when the verdict authorizes an irreversible action, not when
the recommended action is irreversible; use “verdict authorizes” consistently
while preserving the existing reversible-finding and one-pass budget rules.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 18d6f8be-1b35-4f1c-badd-ebd616ca3876

📥 Commits

Reviewing files that changed from the base of the PR and between aed6fce and 4f3e5e0.

📒 Files selected for processing (77)
  • .claude-plugin/marketplace.json
  • CHANGELOG.md
  • CLAUDE.md
  • plugins/beagle-analysis/skills/brainstorm-beagle/SKILL.md
  • plugins/beagle-analysis/skills/brainstorm-beagle/references/spec-reviewer.md
  • plugins/beagle-analysis/skills/brainstorm-beagle/references/spec-template.md
  • plugins/beagle-analysis/skills/quick-plan/SKILL.md
  • plugins/beagle-analysis/skills/quick-plan/references/fanout-brief.md
  • plugins/beagle-analysis/skills/resolve-beagle/SKILL.md
  • plugins/beagle-analysis/skills/write-plan/SKILL.md
  • plugins/beagle-analysis/skills/write-plan/references/plan-reviewer.md
  • plugins/beagle-analysis/skills/write-plan/references/plan-template.md
  • plugins/beagle-analysis/skills/write-plan/references/planning-disciplines.md
  • plugins/beagle-core/skills/execution-contract/SKILL.md
  • plugins/beagle-core/skills/fix-llm-artifacts/SKILL.md
  • plugins/beagle-core/skills/llm-artifacts-detection/SKILL.md
  • plugins/beagle-core/skills/llm-artifacts-detection/references/abstraction-criteria.md
  • plugins/beagle-core/skills/llm-artifacts-detection/references/dead-code-criteria.md
  • plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/abstraction.md
  • plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/dead-code.md
  • plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/style.md
  • plugins/beagle-core/skills/llm-artifacts-detection/references/examples/python/tests.md
  • plugins/beagle-core/skills/llm-artifacts-detection/references/style-criteria.md
  • plugins/beagle-core/skills/llm-artifacts-detection/references/tests-criteria.md
  • plugins/beagle-core/skills/review-feedback-schema/SKILL.md
  • plugins/beagle-core/skills/review-llm-artifacts/SKILL.md
  • plugins/beagle-core/skills/review-plan/SKILL.md
  • plugins/beagle-core/skills/review-skill/SKILL.md
  • plugins/beagle-core/skills/review-structure/SKILL.md
  • plugins/beagle-core/skills/review-verification-protocol/SKILL.md
  • plugins/beagle-core/skills/subagent-prompt/SKILL.md
  • plugins/beagle-core/skills/verification-budget/SKILL.md
  • plugins/beagle-core/skills/verify-llm-artifacts/SKILL.md
  • plugins/beagle-core/skills/verify-llm-artifacts/references/verification-checklist.md
  • plugins/beagle-elixir/skills/elixir-code-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-docs-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-performance-review/SKILL.md
  • plugins/beagle-elixir/skills/elixir-security-review/SKILL.md
  • plugins/beagle-elixir/skills/exunit-code-review/SKILL.md
  • plugins/beagle-elixir/skills/liveview-code-review/SKILL.md
  • plugins/beagle-elixir/skills/phoenix-code-review/SKILL.md
  • plugins/beagle-elixir/skills/review-elixir/SKILL.md
  • plugins/beagle-elixir/skills/review-verification-protocol/SKILL.md
  • plugins/beagle-go/skills/bubbletea-code-review/SKILL.md
  • plugins/beagle-go/skills/go-code-review/SKILL.md
  • plugins/beagle-go/skills/go-testing-code-review/SKILL.md
  • plugins/beagle-go/skills/review-go/SKILL.md
  • plugins/beagle-go/skills/review-tui/SKILL.md
  • plugins/beagle-go/skills/review-verification-protocol/SKILL.md
  • plugins/beagle-ios/skills/app-intents-code-review/SKILL.md
  • plugins/beagle-ios/skills/cloudkit-code-review/SKILL.md
  • plugins/beagle-ios/skills/review-ios/SKILL.md
  • plugins/beagle-ios/skills/review-verification-protocol/SKILL.md
  • plugins/beagle-ios/skills/swift-code-review/SKILL.md
  • plugins/beagle-ios/skills/swift-testing-code-review/SKILL.md
  • plugins/beagle-ios/skills/watchos-code-review/SKILL.md
  • plugins/beagle-ios/skills/widgetkit-code-review/SKILL.md
  • plugins/beagle-python/skills/fastapi-code-review/SKILL.md
  • plugins/beagle-python/skills/python-code-review/SKILL.md
  • plugins/beagle-python/skills/review-python/SKILL.md
  • plugins/beagle-python/skills/review-verification-protocol/SKILL.md
  • plugins/beagle-python/skills/sqlalchemy-code-review/SKILL.md
  • plugins/beagle-react/skills/react-router-code-review/SKILL.md
  • plugins/beagle-react/skills/review-frontend/SKILL.md
  • plugins/beagle-react/skills/review-remix-v2/SKILL.md
  • plugins/beagle-react/skills/review-verification-protocol/SKILL.md
  • plugins/beagle-react/skills/shadcn-code-review/SKILL.md
  • plugins/beagle-rust/skills/axum-code-review/SKILL.md
  • plugins/beagle-rust/skills/ffi-code-review/SKILL.md
  • plugins/beagle-rust/skills/macros-code-review/SKILL.md
  • plugins/beagle-rust/skills/review-rust/SKILL.md
  • plugins/beagle-rust/skills/review-verification-protocol/SKILL.md
  • plugins/beagle-rust/skills/rust-code-review/SKILL.md
  • plugins/beagle-rust/skills/rust-testing-code-review/SKILL.md
  • plugins/beagle-rust/skills/serde-code-review/SKILL.md
  • plugins/beagle-rust/skills/sqlx-code-review/SKILL.md
  • plugins/beagle-rust/skills/tokio-async-code-review/SKILL.md

Comment on lines +81 to +92
Run the structural check instead — a scripted integrity test, not an echo:

```bash
python3 - <<'PY'
import json
r = json.load(open('.beagle/llm-artifacts-review.json'))
f = r['findings']
if not isinstance(f, list) or not f:
raise SystemExit("No findings to lock; aborting.")
ids = [x.get('id') for x in f]
if any(not isinstance(i, int) for i in ids):
raise SystemExit("All finding ids must be integers; aborting.")
if len(set(ids)) != len(ids):
raise SystemExit("Duplicate finding ids detected; aborting.")
print("| id | category | file:line | description |")
print("|----|----------|-----------|-------------|")
for x in f:
desc = (x.get('description') or '').replace('|', '\\|')[:80]
print(f"| {x['id']} | {x.get('category')} | {x.get('file')}:{x.get('line')} | {desc} |")
print("Locked ids: {" + ", ".join(str(i) for i in sorted(set(ids))) + "}")
PY
jq -e '.findings
| (length > 0)
and (map(.id) | all(type == "number"))
and ((map(.id) | unique | length) == length)' \
.beagle/llm-artifacts-review.json \
|| echo "ABORT: findings[] is empty, has non-integer ids, or has duplicate ids."
```

Adjudicate and fix only the ids above. If your sense of what to fix differs from this table, the table wins.
Non-zero exit is an **abort**, not a warning — duplicate or non-integer ids break the 1:1 mapping the verification overlay depends on.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🔴 Critical | ⚡ Quick win

Make the findings integrity check fail closed.

jq ... || echo swallows the failure because echo succeeds, so malformed findings continue despite Line 92 saying this is an abort. Additionally, type == "number" accepts decimals and the check does not enforce contiguous 1..N IDs or summary-count invariants required by the upstream contract.

Use an explicit if ! jq ...; then exit 1; fi and validate integer, contiguous IDs plus summary totals.

🧰 Tools
🪛 SkillSpector (2.3.11)

[warning] 212: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 217: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[error] 36: [P6] Direct Prompt Extraction: Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Remediation: Remove any instructions that reveal, print, or output system prompts or internal rules. System instructions should never be exposed to end users.

(System Prompt Leakage (P6))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/fix-llm-artifacts/SKILL.md` around lines 81 - 92,
Update the findings integrity check in the documented jq command to fail closed:
wrap it in an explicit if ! jq condition and exit 1 on validation failure
instead of using || echo. Validate that findings is non-empty, IDs are integers
forming a contiguous 1..N sequence with no duplicates, and enforce the upstream
summary-count invariants alongside the existing type checks.

Comment on lines +9 to +26
**What to look for:** functions, types, and variables with no references anywhere in the codebase.

```python
# TODO: implement caching <-- Incomplete feature
def get_user(id):
return db.query(User).get(id)
| Sub-pattern | Signal |
|---|---|
| Unused function | Defined, exported or not, with zero call sites |
| Unused type | Class/struct/interface/enum never constructed or referenced in a signature |
| Unused module-level binding | Constant or global assigned and never read |
| Unused local | Assigned inside a function, then never used before return |
| Unreachable code | Statements after an unconditional return, throw, panic, or exit |

# FIXME: this breaks with unicode <-- Known bug
def parse_name(name):
return name.split()[0]
**How to find:**

# HACK: temporary workaround for issue #123 <-- Tech debt
result = data.replace("\x00", "")
1. "Find usages" / go-to-references in an editor or language server.
2. The language's own dead-code tooling — an unused-symbol linter, an unused-import check, or the compiler's own dead-code warnings where the language has them.
3. Direct search for the symbol name across the repo.
4. Unused-import detection, which is usually the cheapest true positive in this category.

# XXX: this needs to be refactored <-- Acknowledged mess
def complex_function():
# 200 lines of spaghetti
pass
**Before flagging:** a symbol reachable only through reflection, dynamic dispatch by name, serialization, DI registration, or a framework's string-keyed routing is **not** dead. Search for the name as a string literal, not just as an identifier.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Dead-code detection must preserve framework-invoked contracts. Both the reusable criteria and the detection prompt can classify live callbacks or lifecycle hooks as dead when they have no ordinary call sites.

  • plugins/beagle-core/skills/llm-artifacts-detection/references/dead-code-criteria.md#L9-L26: add framework callbacks, lifecycle hooks, and protocol/interface members to the non-dead exceptions and search guidance.
  • plugins/beagle-core/skills/llm-artifacts-detection/SKILL.md#L73-L79: apply the same framework-invocation check before emitting an unused-code finding.
📍 Affects 2 files
  • plugins/beagle-core/skills/llm-artifacts-detection/references/dead-code-criteria.md#L9-L26 (this comment)
  • plugins/beagle-core/skills/llm-artifacts-detection/SKILL.md#L73-L79
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@plugins/beagle-core/skills/llm-artifacts-detection/references/dead-code-criteria.md`
around lines 9 - 26, Update the dead-code criteria in
plugins/beagle-core/skills/llm-artifacts-detection/references/dead-code-criteria.md,
covering the unused-symbol patterns and “Before flagging” guidance, to exempt
framework callbacks, lifecycle hooks, and protocol/interface members; include
checks for framework registration, dynamic dispatch, and string-based invocation
alongside ordinary references. Update the unused-code detection guidance in
plugins/beagle-core/skills/llm-artifacts-detection/SKILL.md at lines 73-79 to
perform the same framework-invocation check before emitting findings.

Comment on lines +150 to +152
Reporting a finding is `beagle-core:verification-budget` tier REVERSIBLE. This is an enumerated check list run **once per review**, not a gate applied per finding: record the outcome of each item across the finding list and proceed.

**Budget:** max **1** pass. Stop when each of the six items below has a recorded outcome. Tie-break: ship an unresolved item's finding as a question, or drop it — do not open another pass.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not drop unresolved findings in the verification tie-break.

The canonical budget requires “proceed and flag.” Replace “or drop it” with a deterministic status such as INCONCLUSIVE and preserve the finding in the output, otherwise a failed verification pass can silently lose review coverage.

🧰 Tools
🪛 SkillSpector (2.3.11)

[error] 189: [RA1] Self-Modification: Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Remediation: Prevent the skill from modifying its own code, SKILL.md, or configuration files. Treat skill files as read-only at runtime.

(Rogue Agent (RA1))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/review-feedback-schema/SKILL.md` around lines 150
- 152, Update the verification-budget guidance in the review feedback schema so
unresolved items are never dropped: replace the “or drop it” tie-break with a
deterministic status such as INCONCLUSIVE, and require the unresolved finding to
remain in the output while preserving the one-pass budget.

Comment on lines +257 to +269
1. **Apply fixes now** — edit the plan file to address issues
2. **Save & fix later** — open a new session to apply fixes
3. **Proceed anyway** — execute the plan despite issues (not recommended with Critical open)

Which option?
```

## Rules

- Satisfy Hard gates 1–2 before Step 3; Hard gate 3 before Step 4; Hard gate 4 before the Step 5 options prompt
- Load skills BEFORE running the review lenses (Hard gate 2)
- Run all 5 review lenses — in parallel via subagents when the agent supports them, otherwise sequentially
- Reference Task:Step for each issue
- Provide copyable suggested edits for Critical/Major issues
- Save review before prompting user (Hard gate 4)
- Never auto-execute plan; require user choice
- Number issues sequentially (1, 2, 3...)
- Reference issues by Task:Step; number them sequentially (1, 2, 3…).
- Provide copyable suggested edits for Critical and Major issues.
- Never edit the plan and never auto-execute it — the user chooses.
- A skipped lens is a recorded outcome, not a gap. Do not run a lens "just in case."

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Remove the option that contradicts the non-editing contract.

This skill states that it never edits the plan, but “Apply fixes now — edit the plan file” instructs the user to do exactly that. Replace it with a handoff to a separate editing session, or explicitly scope the option outside this skill.

🧰 Tools
🪛 SkillSpector (2.3.11)

[warning] 268: [EA2] Autonomous Decision Making: Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Remediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.

(Excessive Agency (EA2))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/review-plan/SKILL.md` around lines 257 - 269,
Update the choice list in the review-plan skill to remove the “Apply fixes now”
option that permits editing the plan; replace it with a handoff to a separate
editing session or explicitly state that editing occurs outside this skill.
Preserve the existing “Save & fix later” and “Proceed anyway” behavior, and keep
the non-editing contract consistent throughout.

Comment on lines +25 to +34
Apply **once per finding** before it may appear in the review. If a gate fails, **omit** the finding, **downgrade** to Informational (per [Severity Calibration](#severity-calibration)), or **rephrase** as a questiondo not ship soft accusations.

| Step | What you do | Pass condition (objective) |
|------|----------------|----------------------------|
| **1. Anchor** | Read the full enclosing symbol or module, not only the diff hunk. | You can state **file path** and **line range** (or symbol name + file) you are judging. |
| **2. Evidence** | For this findings type, run the checks in [Verification by Issue Type](#verification-by-issue-type). | Each required check has an **artifact**: pasted tool output, **file:line** citation, or explicit **"none"** / **"N matches"** after a repo search—not a claim you "looked." |
| **2. Evidence** | For this finding's type, run the checks in [Verification by Issue Type](#verification-by-issue-type). | Each required check has an **artifact**: pasted tool output, **file:line** citation, or a **"N matches"** count naming the patterns searched — not a claim you "looked." |
| **3. Severity** | Assign severity using [Severity Calibration](#severity-calibration). | Label matches the table; requests for net-new code that did not exist in scope are **Informational** only. |
| **4. Format** | Draft the finding for the report. | Matches `[FILE:LINE] ISSUE_TITLE`; Informational items do not add to the actionable count. |

Style-only or preference items must fail gate 2 or map to **Do NOT Flag At All**—they do not get a severity.
**Loop budget:** max **1** pass per finding. Stop when all four gate outputs are recorded for that finding. Tie-break: drop or downgrade the finding and proceed — never re-run the gates hoping for a cleaner answer.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Run the gates once per review, not once per finding.

“Once per finding” contradicts the PR objective of consolidated verification and the later instruction at Line 135 to perform exactly one pass over the assembled finding list. This wording reintroduces repeated verification and breaks the shared bounded-review contract. Change the gate scope to one pass over the complete finding list.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/review-verification-protocol/SKILL.md` around
lines 25 - 34, The gate procedure in the review-verification protocol currently
requires a pass once per finding; update the scope to perform exactly one pass
over the complete assembled finding list, consistent with the later single-pass
instruction. Adjust the opening directive and loop-budget wording to describe
shared review-level verification while preserving the existing gate outputs and
stop behavior.

Comment thread plugins/beagle-elixir/skills/review-elixir/SKILL.md Outdated
Comment on lines +51 to +53
Load `beagle-core:review-verification-protocol` plus the [Swift / iOS delta](../review-verification-protocol/SKILL.md) **once, at review entry** — not once per finding. Reporting a finding is `beagle-core:verification-budget` tier REVERSIBLE: cite the evidence you already have and move on. Only a verdict that authorizes an irreversible action (deleting code, rewriting a file) earns that protocol's full evidence gate.

The three gates below are per-finding and cheap. Apply them in order. Budget: max **1** pass per finding; stop when each gate has a recorded artifact; tie-break: drop the finding or downgrade it to an open question and proceed — never re-run the gates hoping for a cleaner answer.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

[plugins/beagle-ios/skills/watchos-code-review/SKILL.md:51-53] Apply the gates once per review, not once per finding

The text first requires one review-level protocol load, then explicitly makes the three gates per-finding. That preserves the old verification behavior and contradicts the bounded once-per-review contract.

Change the gates to one pass over the assembled finding list, with a single review-level stop condition.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-ios/skills/watchos-code-review/SKILL.md` around lines 51 - 53,
The review-verification gates are incorrectly specified as per-finding,
conflicting with the once-per-review contract. Update the gate instructions near
the review entry protocol to run one pass over the assembled finding list, with
a single review-level stop condition, while retaining the existing one-time
protocol load and evidence-budget behavior.

Comment on lines +49 to +51
Load `beagle-core:review-verification-protocol` plus the [Swift / iOS delta](../review-verification-protocol/SKILL.md) **once, at review entry** — not once per finding. Reporting a finding is `beagle-core:verification-budget` tier REVERSIBLE: cite the evidence you already have and move on. Only a verdict that authorizes an irreversible action (deleting code, rewriting a file) earns that protocol's full evidence gate.

The three gates below are per-finding and cheap. Apply them in order. Budget: max **1** pass per finding; stop when each gate has a recorded artifact; tie-break: drop the finding or downgrade it to an open question and proceed — never re-run the gates hoping for a cleaner answer.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

[plugins/beagle-ios/skills/widgetkit-code-review/SKILL.md:49-51] Remove the per-finding verification loop

These lines contradict the PR’s once-per-review verification contract by requiring a separate pass for every finding. Apply the three gates once to the assembled finding list and stop when all invoked gate artifacts are recorded.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-ios/skills/widgetkit-code-review/SKILL.md` around lines 49 -
51, Update the review-verification instructions around the three gates to apply
them once to the assembled finding list rather than once per finding. Remove the
per-finding pass and budget language, while preserving the once-at-review-entry
protocol loading and the requirement to stop after all invoked gate artifacts
are recorded.


1. Re-read the actual code (not just diff context)
2. For "unused" claims - did you search all references?
2. For "unused" claims - did you run the core protocol's four enumerated reference patterns (direct reference, re-export/barrel entry, string-literal or JSX-only reference, framework-invoked contract) and report the count for each? Report "no matches across the 4 enumerated patterns", never "unused anywhere"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not replace the core dynamic-reference check with JSX-only wording.

Both frontend skills omit reflection, decorators, selectors, registries, and configuration references from the core unused-reference verification. Preserve the core four-pattern definition, then add JSX and Remix route-file conventions as frontend-specific extensions:

  • plugins/beagle-react/skills/review-frontend/SKILL.md#L92-L92: retain “string-literal or dynamic reference” and add JSX-only references.
  • plugins/beagle-react/skills/review-remix-v2/SKILL.md#L114-L114: retain dynamic references and add JSX plus Remix route-file conventions.
📍 Affects 2 files
  • plugins/beagle-react/skills/review-frontend/SKILL.md#L92-L92 (this comment)
  • plugins/beagle-react/skills/review-remix-v2/SKILL.md#L114-L114
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-react/skills/review-frontend/SKILL.md` at line 92, Preserve
the core four-pattern unused-reference check in both frontend skills, including
string-literal or dynamic references, rather than replacing it with JSX-only
wording. In plugins/beagle-react/skills/review-frontend/SKILL.md at lines 92-92,
retain dynamic-reference coverage and add JSX-only references; in
plugins/beagle-react/skills/review-remix-v2/SKILL.md at lines 114-114, retain
dynamic-reference coverage and add JSX and Remix route-file conventions. Ensure
reports count each core pattern and say “no matches across the 4 enumerated
patterns” when applicable.

Comment thread plugins/beagle-rust/skills/ffi-code-review/SKILL.md Outdated

@coderabbitai coderabbitai 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
plugins/beagle-core/skills/verification-budget/SKILL.md (1)

17-20: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not let REVERSIBLE bypass data-loss and staleness safeguards.

The Git-checkout criterion is unsafe for dirty worktrees: a mutation can overwrite pre-existing uncommitted changes that checkout cannot recover. Likewise, downstream stages may apply a stale “reversible” patch to the wrong code because only IRREVERSIBLE actions re-read their targets. Classify worktree mutations conservatively, or require a pre-mutation snapshot and immediate target re-read for every mutation.

Also applies to: 48-54

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/beagle-core/skills/verification-budget/SKILL.md` around lines 17 -
20, Update the REVERSIBLE classification and its safeguards in the
verification-budget guidance so worktree mutations cannot bypass dirty-worktree
data-loss protection or stale-target checks. Treat mutations conservatively, or
require a pre-mutation snapshot and immediate re-read of the target before every
mutation; apply the same requirements to the related guidance at the referenced
section.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@plugins/beagle-core/skills/verification-budget/SKILL.md`:
- Around line 17-20: Update the REVERSIBLE classification and its safeguards in
the verification-budget guidance so worktree mutations cannot bypass
dirty-worktree data-loss protection or stale-target checks. Treat mutations
conservatively, or require a pre-mutation snapshot and immediate re-read of the
target before every mutation; apply the same requirements to the related
guidance at the referenced section.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 433d93ff-5cdc-4aac-9852-c75c13ce3f94

📥 Commits

Reviewing files that changed from the base of the PR and between 4f3e5e0 and 57c69f7.

📒 Files selected for processing (6)
  • .entire/settings.json
  • .gitignore
  • plugins/beagle-analysis/skills/write-plan/SKILL.md
  • plugins/beagle-analysis/skills/write-plan/references/plan-reviewer.md
  • plugins/beagle-analysis/skills/write-plan/references/planning-disciplines.md
  • plugins/beagle-core/skills/verification-budget/SKILL.md
💤 Files with no reviewable changes (1)
  • .entire/settings.json
🚧 Files skipped from review as they are similar to previous changes (2)
  • plugins/beagle-analysis/skills/write-plan/references/plan-reviewer.md
  • plugins/beagle-analysis/skills/write-plan/references/planning-disciplines.md

BREAKING CHANGE: the six language-specific review-verification-protocol
skills are renamed to <language>-verification-protocol. The beagle-core
skill keeps the review-verification-protocol name.

The Phase 4 refactor split one duplicated protocol into a language-neutral
core plus six thin per-language deltas, but left all seven sharing the name
review-verification-protocol. Plugin-scoped installs disambiguate by plugin,
so this was invisible there. Flat installs -- ~/.agents/skills/<name>/ and
~/.codex/skills/<name>/, which the skills CLI and Codex both use -- key
solely on skill name, so six of the seven were silently dropped and every
language-specific false-positive pattern became unreachable. Before the
refactor each plugin shipped a self-contained copy, so this was a
regression the refactor introduced.

Renames: python-, go-, rust-, elixir-, react-, ios-verification-protocol.
Each delta's frontmatter name and description now identify it as that
language's delta extending the shared core. All 40+ intra-plugin relative
links retargeted; every beagle-core:review-verification-protocol reference
left intact, since those genuinely mean the core. Plugin READMEs and the
root SKILLS.md catalog updated.

No review criteria or verification content changed -- this is a rename plus
reference update. Verified: every skill name in the marketplace is now
globally unique, every frontmatter name matches its directory, and no
relative markdown link is broken.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Entire-Checkpoint: 999ca68cca76
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking-change Breaking changes requiring user migration enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant