Exclude Fleet Toolchain Packages From Grouped Dependabot Bumps - #1062
Conversation
catalog/snippets/configs/dependabot.yml grouped every package in an ecosystem into one catch-all PR (patterns: ["*"]), with no exclusion for the fleet's own lint/format toolchain packages. A formatter or linter version bump can change its own output or rule set and start flagging previously-compliant code the bump never touched, so bundling it into the catch-all group means one tool's self-bump can block an arbitrary number of unrelated, otherwise- mergeable dependency bumps together, indefinitely, with no obvious signal why. Confirmed live on ptr727/PhotoCleaner#81-84: a 13-update nuget-deps group bump included csharpier 1.2.6 -> 1.3.0, whose new raw-string-literal formatting flagged pre-existing, untouched code and left mergeStateStatus BLOCKED on all 13 updates together. Add exclude-patterns to the nuget-deps and pypi-deps groups for the fleet- standard toolchain package names (csharpier/husky/dotnet-outdated-tool; ruff/pyright/mypy), so each falls out of the group into its own individual, independently diagnosable PR instead. Investigated per #1055.
PR Summary by QodoIsolate Toolchain Updates From Grouped Dependabot Bumps
AI Description
Diagram
High-Level Assessment
Files changed (1) |
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan provides up to 10 included reviews per hour; 3 remain after this review. 📝 WalkthroughWalkthroughDependabot configuration now documents and applies exclusions for formatter, linter, and tooling packages in grouped NuGet and UV/PyPI updates targeting ChangesDependabot exclusions
Estimated code review effort: 1 (Trivial) | ~2 minutes Merge Risk:⚪ Minimal · up to The change separates specified toolchain updates from grouped dependency bumps without introducing an actionable merge-blocking risk; it is merge-ready after normal checks and review. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Full details: Docstring CoverageExplanation No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (1 skipped: 1 unsupported.) ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Code Review by Qodo
1. Lowercase from in title |
| # Security (CVE) PRs always target the default branch regardless of target-branch. | ||
| # Keep only the ecosystems the repo actually ships. | ||
| # | ||
| # Each group's exclude-patterns keeps the fleet's own lint/format toolchain packages out of the catch-all bump. |
There was a problem hiding this comment.
1. Lowercase from in title 📜 Skill insight✧ Quality
The PR title uses From as an uppercase short bind word. Per the title-style rule, from must be lowercase when it appears in the middle of a title.
Agent Prompt
## Issue description
The PR title `Exclude Fleet Toolchain Packages From Grouped Dependabot Bumps` uses `From` with uppercase initial capitalization.
## Issue Context
The title-style compliance rule requires short bind words, including `from`, to remain lowercase when they are not the first or last word.
## Fix Focus Areas
- catalog/snippets/configs/dependabot.yml[13-13]
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
| - "*" | ||
| exclude-patterns: | ||
| - "csharpier" | ||
| - "husky" |
There was a problem hiding this comment.
2. Husky.net remains grouped 🐞 Bug≡ Correctness
The new exclusion uses husky, but the fleet's .NET tool is the NuGet package Husky.Net; Dependabot matches exclusions against dependency names. As a result, Husky.Net updates continue to be bundled with all other NuGet updates instead of receiving an isolated PR, leaving the stated hostage/debbugability problem unresolved for that tool.
Agent Prompt
## Issue description
The NuGet group excludes `husky`, but the dependency used by the fleet is `Husky.Net`, so Dependabot will not remove it from the catch-all group.
## Issue Context
Dependabot group `exclude-patterns` must match the dependency name. The canonical .NET codestyle documentation refers to Husky.Net, and the repository's Husky snippet invokes it as `dotnet husky`, which is only the CLI command name.
## Fix Focus Areas
- catalog/snippets/configs/dependabot.yml[31-31]
- catalog/snippets/configs/dependabot.yml[45-45]
Replace `husky` with `Husky.Net` in both NuGet group exclusions, preserving the existing Python exclusions.
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
Qodo flagged the 4-line rationale comment added in #1062 as an elaborative prose block, against the fleet's "one line is the default, a second line is earned only by a constraint the code cannot otherwise carry" comment rule (found on the #1063 promotion PR, whose diff doesn't allow a direct fix, hence this separate feature PR). Trims it to the two sentences that carry the non-obvious why, dropping the lines that restated what the code already shows. ## Verification - `scripts/prose_lint.py catalog/snippets/configs/dependabot.yml` — clean. - `scripts/repo_gate.py` — clean. - YAML syntax check — valid. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Clarified Dependabot configuration comments about toolchain exclusions and version updates. * Documented how tool version changes may affect existing code and grouped updates. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Promotes #1062 (Exclude Fleet Toolchain Packages From Grouped Dependabot Bumps) from develop to main. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Documentation** - Documented why selected toolchain packages are excluded from grouped dependency updates. - Updated dependency update settings for the `main` and `develop` branches to keep CSharpier, Husky, dotnet-outdated-tool, Ruff, Pyright, and Mypy updates separate. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
catalog/snippets/configs/dependabot.yml's reference config grouped every package in anecosystem into one catch-all PR (
patterns: ["*"]), with no exclusion for the fleet's ownlint/format toolchain packages. A formatter or linter version bump can change its own output
or rule set and start flagging previously-compliant code the bump never touched, so bundling it
into the catch-all group means one tool's self-bump can block an arbitrary number of unrelated,
otherwise-mergeable dependency bumps together, indefinitely, with no obvious signal why.
Evidence
Investigated live via
ptr727/ProjectTemplate#1055("Dependabot PRs stuck BLOCKED despiteauto-merge enabled and all checks green"). That issue's premise doesn't hold — every affected
PR checked has a real, currently-failing required check, so
mergeStateStatus: BLOCKEDisGitHub behaving correctly. One of the confirmed root causes is this hub template gap:
ptr727/PhotoCleaner#81-#84: a 13-updatenuget-depsgroup bump includedcsharpier1.2.6 -> 1.3.0. The new csharpier version reformats raw string literals differently, so
dotnet csharpier check .now flags pre-existing, previously-compliant code(
PhotoCleaner/Database.cs) that the bump never touched — holding the other 12 unrelated,harmless updates in the same PR hostage.
Full findings (this repo and two others) posted as a comment on #1055.
Change
Add
exclude-patternsto thenuget-depsandpypi-depsgroups, naming the fleet-standardtoolchain package names per
.agents/skills/dotnet-codestyle/SKILL.mdand.agents/skills/python-codestyle/SKILL.md:nuget-deps:csharpier,husky,dotnet-outdated-toolpypi-deps:ruff,pyright,mypyEach excluded package falls out of the catch-all group and gets its own individual PR instead,
diagnosable and mergeable (or holdable) on its own.
actions-depsis left unchanged — the third repo in #1055's report (ESPHome-Config) hit adifferent, already-tracked cause (
docs/eol-lf-rollout.md), not a grouping/hostage problem.Verification
python3 -c "import yaml; yaml.safe_load(open('catalog/snippets/configs/dependabot.yml'))"— valid YAML.scripts/prose_lint.pyandscripts/repo_gate.py— both clean.🤖 Generated with Claude Code
Summary by CodeRabbit