Skip to content

[bug] Required check names collapse checks and statuses that GitHub requires separately #17

@coygeek

Description

@coygeek

[bug] Required check names collapse checks and statuses that GitHub requires separately

Summary

DeployBot collapses status-check rollup entries by display name only. GitHub's required-status-check documentation says that if a check run and a commit status have the same name, and that name is selected as required, both the check and the status are required.

Because DeployBot stores only one latest state per name, one passing entry can hide another same-name required entry that is failed or still pending.

Evidence

Impact

DeployBot can mark a pull request ready when GitHub still requires another same-name check/status to pass. Depending on branch protection and ruleset configuration, this can cause late merge rejection, misleading queue comments, or an unsafe DeployBot decision if repository protection is not an exact mirror of DeployBot's .mergequeue.toml.

This is especially risky for repositories migrating from legacy commit statuses to GitHub Checks, where duplicate names are common during transition.

Proposed fix

  • Preserve the check/status identity when reducing rollup entries, or aggregate same-name required contexts fail-closed.
  • For a required name, evaluate all matching rollup entries:
    • any failed terminal entry => failed
    • else any pending/in-progress entry => pending
    • else all terminal passing entries => passed
  • Add a regression test where a check run named CI passes but a commit status named CI fails or remains pending, and assert DeployBot does not mark CI passed.

Verification

  • python3 -m pytest tests/test_cli.py -q
  • python3 -m pytest -q

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions