Skip to content

feat(engine): close blacklisted contributors' PRs ahead of merit (#1425) - #1431

Closed
JSONbored wants to merge 1 commit into
claude/blacklist-labelfrom
claude/blacklist-disposition-pr
Closed

feat(engine): close blacklisted contributors' PRs ahead of merit (#1425)#1431
JSONbored wants to merge 1 commit into
claude/blacklist-labelfrom
claude/blacklist-disposition-pr

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

The engine disposition for the anti-abuse contributor blacklist (#1425). A PR from a blacklisted
login
short-circuits the agent maintenance planner to a deterministic label + close, ahead of all
merit / CI / gate / AI analysis — with a sanitized close comment and no AI call.

Stacked on #1430 (the blacklistLabel config layer) — review/merge that first.

Behavior

  • Short-circuits and wins over the normal gate. Before any CI/merit/AI step, a blacklist match
    produces [label, close] and returns — the PR is never merit-reviewed or auto-merged.
  • Configurable label. Uses the resolved blacklistLabel (default slop); works regardless of the
    label a repo sets — nothing hard-coded.
  • No AI call. The AI review is skipped for a blacklisted author (the close is deterministic).
  • Public-safe. The maintainer's reason is run through the existing public-safe sanitizer, so a
    private term can never leak into the PR thread.
  • Respects existing controls. Honors the autonomy dial and agentPaused / agentDryRun exactly
    like every other agent action; closeKind: "blacklist" is exempt from AI refutation (like the
    linked-issue hard rule). The owner and automation bots are never auto-closed.

Scope

  • Narrow, in wantedPaths; no site/ / CNAME / lovable; no changelog edit.
  • Per-repo list resolved now; the shared/global union primitive (mergeContributorBlacklists) is in place for when the global table lands.
  • No secrets / wallets / hotkeys / trust scores / private values; logins are public data only.

Validation

  • npm run typecheck
  • npm run test:coverage — full suite green; 100% of changed lines and branches covered.
  • Planner unit tests (short-circuit precedence, owner/bot exemption, autonomy, label config, sanitization) + an end-to-end queue test proving labeled + closed + no AI call + no merge for a banned author.

Safety

  • Close comment goes through sanitizePublicComment; a forbidden term in the reason is asserted absent.
  • No new auth/CORS surface; deterministic path, no model call.

Advances #1425.

A PR from a blacklisted login short-circuits the agent disposition to a
deterministic label (`blacklistLabel`, default "slop") + close, ahead of all
merit/CI/gate/AI analysis, with a sanitized close comment and no AI call. The
close wins over the normal gate disposition (`closeKind: "blacklist"", exempt
from AI refutation like the linked-issue hard rule). Honors the autonomy dial and
agentPaused/agentDryRun; the owner and automation bots are never auto-closed.

The per-repo list is resolved today; the shared/global list unions in once its
table lands.

Advances #1425.
@dosubot dosubot Bot added the size:M label Jun 26, 2026
@JSONbored
JSONbored deleted the branch claude/blacklist-label June 26, 2026 07:49
@JSONbored JSONbored closed this Jun 26, 2026
@codecov

codecov Bot commented Jun 26, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.40%. Comparing base (eb90475) to head (83099b9).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@                   Coverage Diff                   @@
##           claude/blacklist-label    #1431   +/-   ##
=======================================================
  Coverage                   95.39%   95.40%           
=======================================================
  Files                         193      193           
  Lines                       20932    20945   +13     
  Branches                     7566     7573    +7     
=======================================================
+ Hits                        19969    19982   +13     
  Misses                        383      383           
  Partials                      580      580           
Files with missing lines Coverage Δ
src/queue/processors.ts 88.31% <100.00%> (+0.02%) ⬆️
src/settings/agent-actions.ts 92.79% <100.00%> (+0.71%) ⬆️
src/settings/contributor-blacklist.ts 100.00% <100.00%> (ø)
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant