Skip to content

bradygaster/squad: Branch protection blocking merges + CI gap analysis #97

@diberry

Description

@diberry

Scope: This issue is specific to bradygaster/squad (Brady's repo). It covers branch protection rulesets blocking merges and what CI checks should replace branch protection on this specific repo. For the broader Squad product question of workflow defaults, minutes budgets, and upgrade safety across all customer repos, see #98.

Problem

Brady and Tamir are stuck merging PRs to dev on bradygaster/squad because of branch protection rulesets.

Current ruleset on bradygaster/squad

Active ruleset: "Copilot review for default branch"

  • Applies to: ~DEFAULT_BRANCH (which is dev)
  • Rules: deletion, non_fast_forward, copilot_code_review
  • Bypass actors: none (nobody can bypass)
  • Enforcement: active

Disabled ruleset: "main" (not blocking anything)

Impact

The copilot_code_review rule means every PR targeting dev requires Copilot to review and have no unresolved comments before merging. If Brady or Tamir want to merge their own code quickly, they are blocked by the Copilot review gate.

Options for Brady (repo owner)

Option What changes Copilot still reviews? Can merge without waiting?
Add bypass actors Brady + Tamir can merge even if Copilot hasn't approved Yes (comments still appear) Yes
Change to evaluate mode Ruleset runs but doesn't block merges Yes (advisory only) Yes
Disable ruleset No Copilot review on dev No Yes
Keep as-is Nothing changes Yes (hard gate) No

Recommendation

Add bypass actors (Brady + Tamir) -- this keeps Copilot review as a quality signal while letting trusted maintainers merge when needed. External contributors (like PRs from forks) still go through the full Copilot gate.

Settings path: Settings > Rules > Rulesets > "Copilot review for default branch" > Bypass list

Related

This also affects our fork-first pipeline -- when we publish PRs to upstream, the Copilot review gate on dev means Brady can't merge even clean PRs without Copilot approval. Our pipeline already fixes Copilot issues before publishing, so the gate is redundant for our PRs.


CI Check Approaches -- Comparison

Approach Best for Brady can toggle?
Repo variables (vars.SQUAD_*) Global on/off for entire check categories (ESLint, audit, coverage) Yes -- Settings UI, no code changes
PR labels (skip-lint, skip-tests) Per-PR overrides when a contributor has a legitimate reason to skip Yes -- Add/remove label on any PR
Branch protection rulesets Hard gates that nobody can bypass (or bypass-list for trusted maintainers) Yes -- Settings UI, but personal repos can't add bypass actors
Required status checks Blocking merge until specific CI jobs pass Yes -- Settings UI, pairs with repo variables for which jobs run
CODEOWNERS + review rules Requiring specific people to approve changes to critical paths (!) Requires GitHub Teams or paid plan for enforcement
Workflow if conditions Conditional logic within a workflow (path filters, changed-file checks) No -- Requires editing .yml files

Recommended combination

  1. Repo variables for global toggles (Brady flips a switch, no PRs needed)
  2. PR labels for per-PR exceptions (visible in PR history, auditable)
  3. Advisory mode first -- new checks warn but don't block until proven stable
  4. No branch protection -- all value delivered through CI checks instead

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions