Repository navigation
ci: a Dependabot minor or patch update of the dependency files merges without a review (ADR-1126) - #953
Conversation
… without a review (ADR-1126) The resolver computes a risk tier from the change: Dependabot author and signed commits, only semver-minor or semver-patch update types, only uv.lock or pyproject.toml. Such a PR merges on green required checks; every other PR keeps the verdict gate of ADR-1121. Follows the change-based risk tiers of https://claude.dev/blog/solving-code-review-at-anthropic/. Co-Authored-By: Claude Fable 5.2 <[email protected]> Claude-Session: https://claude.ai/code/session_018kyZYsWnKSjpX4oNV19PCF
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5ec3aea53e
ℹ️ 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".
| signed = (detail.get("verification") or {}).get("verified") is True | ||
| author = (commit.get("author") or {}).get("login") | ||
| if author != "dependabot[bot]" or not signed: | ||
| return False |
There was a problem hiding this comment.
Authenticate the committer before bypassing review
A contributor who can push to an existing Dependabot branch can author a commit using Dependabot's public email, retain a patch/minor metadata line, and sign it with their own GitHub-registered key. GitHub's signature verification does not establish the author's consent (signature verification documentation), so this commit can have author.login == "dependabot[bot]" and verification.verified == true while its committer is human. The resolver accepts that combination and skips review for arbitrary changes to pyproject.toml or uv.lock, defeating the stated safeguard for human-modified Dependabot branches. Validate the authenticated committer/signing identity as Dependabot as well, and add a regression test with a verified, bot-attributed commit whose committer is human.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Confirmé et corrigé. L'auteur git n'est qu'un e-mail déclaré et verified atteste la clé du committeur. Le niveau bas risque exige maintenant aussi committer.login == "web-flow" : les commits de Dependabot sont committés et signés par GitHub, où l'auteur est le compte qui agit. Test de régression ajouté (commit attribué au bot, committeur humain vérifié : refusé). ADR-1126 mis à jour.
Generated by Claude Code
…itHub A git author is a declared e-mail and a verified signature vouches for the committer's key, so a contributor could sign a commit under Dependabot's name on a Dependabot branch. The tier now also requires committer web-flow. Co-Authored-By: Claude Fable 5.2 <[email protected]> Claude-Session: https://claude.ai/code/session_018kyZYsWnKSjpX4oNV19PCF
|
Claude finished @cdeust's task in 3m 30s —— View job Review of PR #953 (review 1 of 3)
Result: no Blockers, so the verdict is approve. The Codex P1 point is fixed: the I didn't run pytest, ruff or the craftsmanship gate because they need permission in this job. |
Review 1 of 3 (ADR-1119): PR #953, ADR-1126 low-risk tierI reviewed Blockers: none.
Not done here: pytest, ruff and the craftsmanship gate need permission in this job, so I did not run them. Notes, no action before merge
Verdict: approve |
… and no rename Review notes of #953: a second commit on the branch, a dependency named without its update type, and a file renamed to a dependency file each refuse the tier. Co-Authored-By: Claude Fable 5.2 <[email protected]> Claude-Session: https://claude.ai/code/session_018kyZYsWnKSjpX4oNV19PCF
|
Notes du review 1 traitées dans 6fad8f6, parce qu'elles touchent le contournement de review : (1) le niveau exige exactement un commit Dependabot, un second commit sur la branche le refuse ; (2) un fichier renommé compte sous ses deux noms ( 🤖 Generated with Claude Code Generated by Claude Code |
|
Claude finished @cdeust's task in 2m 31s —— View job Review 2 of 3 (ADR-1119): PR #953
Result: no Blockers, so the verdict is approve. The review lists three Notes that don't need action before merge:
I didn't run pytest, ruff or the craftsmanship gate because they need permission in this job. |
Review 2 of 3 (ADR-1119): PR #953, ADR-1126 low-risk tierReview 1 ( Blockers: none.
Not done here: pytest, ruff and the craftsmanship gate need permission in this job, so I did not run them. Notes, no action before merge
Verdict: approve |
Contexte
Les PR Dependabot ne peuvent jamais fusionner seules :
claude-review.ymlne les relit pas (acteurdependabot[bot], pas de secrets), donc aucunVerdict: approve, et le résolveur les retient (ADR-1121). Le 9 novembre, #931, #933, #934, #935 et #949 étaient vertes et retenues depuis deux jours.Changement (ADR-1126, amende ADR-1121)
Le résolveur calcule un niveau de risque à partir du changement, comme le décrit Anthropic (https://claude.dev/blog/solving-code-review-at-anthropic/). Une PR est à bas risque si tout ceci est vrai :
dependabot[bot], chaque commit dedependabot[bot]avec signature vérifiée par GitHub ;update-typedéclaré estsemver-minorousemver-patch;uv.lockoupyproject.tomlchangent.Une telle PR fusionne sans verdict, sur contrôles requis verts (
merge,CodeQL). Tout le reste garde le chemin relu : mise à jour majeure, fichier de workflow, Dockerfile, branche Dependabot poussée par quelqu'un d'autre. Les labelsholdetdo-not-mergeretiennent toujours.Effet attendu sur les PR ouvertes
Métrique
PR Dependabot mineures ou correctives fusionnées sans intervention : 0 aujourd'hui, toutes après. Garde-fou à suivre : reverts après ces fusions.
Tests
tests_py/scripts/test_ci_low_risk_tier.py(9 tests) : chaque condition seule refuse le niveau ; une PR à bas risque fusionne sans review ; toute autre est retenue.Cette PR modifie un workflow : elle attend la fusion du propriétaire.
Generated by Claude Code