Repository navigation
feat(pr-pipeline): let a trusted author's gate-path PR clear on a passed security review - #10708
Conversation
…sed security review A pull request a person on the trusted-actor list opened now clears a `gate` floor path that only that person's own commits touched, on a head pr-verify passed, once the security review binds to the head with no open finding, as an `enforcement` path clears. Lanes App and bot pull requests, a lane's fix commit on a gate path, unreadable commits or lists, and every `trust` path still wait for a person. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…for-trusted-author # Conflicts: # docs/conventions/pr-pipeline/README.md # plugins/source-control/skills/babysit-prs/scripts/babysit_risk.py # plugins/source-control/skills/babysit-prs/scripts/tests/test_merge_holds_sync.py
…-hold-clears-for-trusted-author
…-hold-clears-for-trusted-author
Codex Review SummaryThis 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. |
|
claude-review reviewed Incremental review of 83c4d86..6ce56e9. The change moves Checked
Finding (advisory): two comments still describe the old class split
No inline comment is attached, because neither location is on a changed line. |
|
claude-security-review reviewed No security issues found in the incremental change since 83c4d86. The change only tightens holds. It reclassifies five hold-applying pr-merge scripts from What I checked:
I did not run the test suites. critical-findings: 0 |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-hold-clears-for-trusted-author
The author lift clears the whole `gate` floor class on a trusted author's own pull request after a clean security review. Agents commit as the trusted owner, so a pull request widening a lane token's scope through resolve-config (effect-grants.json, lane-rules.json, activity-rules.json, the broker's signer code) could merge with no person. Reclassify .github/actions/resolve-config/** from `gate` to `trust`: both classes hold for a person, and every other reader (HIGH_FLOOR, merge-holds.mjs HOLD_PATH_FLOOR, hold-paths, hold_patterns) treats them alike, so only the lift changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…for-trusted-author # Conflicts: # plugins/source-control/skills/babysit-prs/scripts/tests/test_babysit_risk.py
…mments Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-hold-clears-for-trusted-author
Lane-Activity: pr-unblock/resolve-conflicts
…for-trusted-author # Conflicts: # plugins/source-control/skills/babysit-prs/scripts/tests/test_babysit_risk.py
…s-for-trusted-author' into fix/gate-hold-clears-for-trusted-author
|
Unattended merge: risk HIGH at head |
docs/conventions/pr-pipeline.yaml sets the activity effect values and lane slots the token broker reads, so it scopes lane tokens as resolve-config does: classify it trust, so a trusted author's own pull request no longer clears it on a security review alone. Bring the HOLD_PATH_CLASSES comment in merge-holds.mjs in line with the trust class of resolve-config. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-hold-clears-for-trusted-author
… lift An agent signs commits as the trusted owner, so an owner-signed pull request could widen the author lift or drop a floor row on a clean security review, and the next pull request would take the wider lift. Classify the code that computes the lift and the hold tables trust: babysit_risk.py, babysit_review_evidence.py, babysit_merge_policy.py, babysit_merge.py, merge-holds.mjs and scripts/sync-hold-floor.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-hold-clears-for-trusted-author
Lane-Activity: pr-unblock/resolve-conflicts
️✅ There are no secrets present in this pull request anymore.If these secrets were true positive and are still valid, we highly recommend you to revoke them. 🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request. |
…author lift enable-auto-merge.mjs, superseded.mjs, clear-escalations.mjs, gate-check.mjs and head-ref-map.mjs apply and enforce the holds. Agents commit as the trusted owner, so a gate-class lift on them would let an owner-signed PR weaken a hold on a clean security review, and the weakened script would judge every later PR. They move to trust, as merge-holds.mjs did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Post-merge mutation testingKilled 0, survived 0, timeout 0, no coverage 0, invalid 0, not run 7.
The run's summary has the full report. |
No related issue: owner direction 2026-10-27 that hold-floor PRs auto-merge unless HIGH/CRITICAL
Summary
A
gate-class hold-floor path now clears on a passed security review, the way anenforcementpath does, but only when all of these hold:User, never the lanes App or any other bot);gatepaths it changes were touched only by that person's own commits;trust-class paths, paths a configured denied-path glob also matches, and lanes App pull requests stay person-held. A lane's fix commit on a gate path, or commits that cannot be read, keep the hold too, so a lane changing its own powers is still merged by a person.Fix
babysit_risk.py: addsAUTHOR_REVIEW_FLOOR(thegateglobs) andRiskInput.author_reviewed. A path in that set that notrustor configured glob matches ratesreview-path:instead ofhigh-path:, so a clean security review bound to the head clears it. Any value other than a frozenset of strings lifts nothing.babysit_merge_policy.py:author_reviewed_pathscomputes that set from the PR author, the trusted-actor list's people andforeign_paths, and returns nothing when pr-verify did not pass or the author is not a listed person.assesspasses the trusted people through.babysit_merge.py:score_unattendedcomputes the set only on a complete file listing, withverifiedmeaning the verifier reader ran.docs/conventions/pr-pipeline/README.mdstates the new clear condition under the hold-floor classes; changelog fragments added.Verification
Run on head efb51b4, which merges main 9d2beb6 (#10681,
scripts/check-affected.shonly, clean merge) into 981f125 (itself a merge of main f714f1e). Each suite was also run on 981f125 first, with the same counts.uvx pytest plugins/source-control/skills/babysit-prs/scripts/tests/ -q: exit 0; 3369 passed, 5 skipped, 4109 subtests passed.python3 plugins/source-control/skills/babysit-prs/scripts/tests/test_merge_holds_sync.py: exit 0; 15 tests, OK.node --test .github/scripts/pr-merge/*.test.mjs: exit 0; 617 tests, 617 pass, 0 fail.scripts/validate-plugins.sh --only "source-control": exit 0; plugin contracts validated; 583 mod tests pass, 0 fail, across 8 test files; all plugin manifests and the catalog validated.scripts/check-affected.sh --tests) on efb51b4: pass, 14 passed, 2 skipped.Left out: no live babysit run against a real trusted-author gate-path PR; the unit tests cover the policy and risk paths.
Related
N/A
🤖 Generated with Claude Code