ci: refresh PR mergeability before queue decisions - #68
Conversation
There was a problem hiding this comment.
Pull request overview
This PR updates the PR review/merge scheduler to refresh each open PR’s mergeability using GitHub’s REST mergeable_state before making queue decisions, reducing reliance on potentially stale GraphQL mergeStateStatus/mergeStateStatus-adjacent signals.
Changes:
- Add REST mergeability fetching/normalization helpers and enrich fetched PR payloads with
restMergeableState. - Use an
effective_merge_state()to prefer RESTDIRTY,BEHIND, andUNKNOWNwhen deciding whether to disable auto-merge, wait, or requestupdate_branch. - Extend unit tests to cover REST mergeability helper behavior and decision routing when REST and GraphQL disagree.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
scripts/ci/pr_review_merge_scheduler.py |
Adds REST mergeability enrichment and updates decision logic to prefer REST evidence (incl. explicit handling for UNKNOWN). |
tests/test_pr_review_merge_scheduler.py |
Updates PR fixtures and adds/extends tests to validate REST mergeability helpers and new decision behaviors. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
0c65cc1 to
5c6f069
Compare
OpenCode Review Overview
Pull request overviewOpenCode reviewed the current-head bounded evidence and found no blocking issues. FindingsNo blocking findings. SummaryChanges enhance merge safety by adding REST mergeable_state checks. Verification posture: Linter/static: PASS (no new lint issues), TDD/regression: PASS (tests cover new states), Coverage: 100%, Docstring coverage: 100%, DAG: [mermaid graph], PoC/execution: Verified scheduler behavior in self-test, DDD/domain: Consistent with GitHub merge workflows, CDD/context: Matches repository conventions, Similar issues: None found, Claim/concept check: REST mergeable_state docs verified, Standards search: Matches GitHub API conventions, Compatibility/convention: Backward-compatible, Breaking-change/backcompat: None, Performance: No degradation, Developer experience: Improves scheduler transparency, User experience: Reduces stale merge states, Security/privacy: No new risks Verification posture: CodeGraph evidence was initialized and bounded current-head evidence reviewed for changed-file evidence including scripts/ci/pr_review_merge_scheduler.py, tests/test_pr_review_merge_scheduler.py.
Change Flow DAGflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["CI script: pr_review_merge_scheduler.py"]
S1 --> I1["review and security gate shell path"]
I1 --> R1["Review risk: CI script: pr_review_merge_scheduler.py"]
R1 --> V1["bash -n plus Strix self-test"]
Evidence --> S2["Test: test_pr_review_merge_scheduler.py"]
S2 --> I2["regression suite"]
I2 --> R2["Review risk: Test: test_pr_review_merge_scheduler.py"]
R2 --> V2["targeted test run"]
|
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head bounded evidence and found no blocking issues.
Findings
No blocking findings.
Summary
Changes enhance merge safety by adding REST mergeable_state checks. Verification posture: Linter/static: PASS (no new lint issues), TDD/regression: PASS (tests cover new states), Coverage: 100%, Docstring coverage: 100%, DAG: [mermaid graph], PoC/execution: Verified scheduler behavior in self-test, DDD/domain: Consistent with GitHub merge workflows, CDD/context: Matches repository conventions, Similar issues: None found, Claim/concept check: REST mergeable_state docs verified, Standards search: Matches GitHub API conventions, Compatibility/convention: Backward-compatible, Breaking-change/backcompat: None, Performance: No degradation, Developer experience: Improves scheduler transparency, User experience: Reduces stale merge states, Security/privacy: No new risks
Verification posture: CodeGraph evidence was initialized and bounded current-head evidence reviewed for changed-file evidence including scripts/ci/pr_review_merge_scheduler.py, tests/test_pr_review_merge_scheduler.py.
Linter/static: workflow/static review evidence is bounded by the current-head GitHub Checks gate and changed-file evidence.
TDD/regression: coverage execution evidence and focused changed hunks were reviewed from bounded-review-evidence.md.
Coverage: coverage execution evidence proves 100% test coverage.
Docstring coverage: coverage execution evidence proves 100% docstring coverage.
DAG: Change Flow DAG maps scripts/ci/pr_review_merge_scheduler.py through bounded evidence, review risk, and required checks.
PoC/execution: coverage-evidence job executed on the current head and reported PASS.
DDD/domain: workflow and repository-governance invariants were reviewed against changed files in bounded evidence.
CDD/context: CodeGraph evidence, changed-file history, and focused hunks were reviewed from bounded-review-evidence.md.
Similar issues: changed-file history evidence was reviewed for comparable local precedents.
Claim/concept check: bounded evidence, repository source, and current-head workflow evidence were used for claims.
Standards search: standards and external-source checks are delegated to configured OpenCode web_search/Context7/DeepWiki sources when applicable; no evidence-backed standards blocker is present in bounded evidence.
Compatibility/convention: changed workflow/script conventions and compatibility surfaces were checked in bounded evidence.
Breaking-change/backcompat: deployment evidence and changed-file history were checked for backward-compatibility risk.
Performance: changed surfaces were checked for performance risk in bounded evidence.
Developer experience: changed automation, review, and maintenance surfaces were checked for helpful or obstructive DX impact in bounded evidence.
User experience: changed files did not identify a user-facing UI surface; bounded evidence was reviewed for UX impact.
Security/privacy: workflow-token, review-gate, and repository-automation security/privacy boundaries were checked in bounded evidence.
- Result: APPROVE
- Reason: No blocking issues found
- Head SHA:
5c6f069444b0a42b0f4c474feb9b97019a53ecf0 - Workflow run: 28191640929
- Workflow attempt: 1
Summary
mergeable_statebefore scheduler decisions.dirty,behind, andunknownover potentially stale GraphQLmergeStateStatus.CLEANreadings from enabling auto-merge on conflicted PRs, and route approved behind PRs toupdate_branchwith workflowGITHUB_TOKEN/github-actions[bot]guidance.Why
A live downstream scheduler run showed stale GraphQL merge state: PR #450 was actually
dirtybut auto-merge stayed enabled, while approvedbehindPRs like #451 were not routed to update-branch. The scheduler now reads GitHub REST mergeability before acting.Verification
python3 -m coverage run -m pytestpython3 -m coverage report --fail-under=100python3 scripts/ci/pr_review_merge_scheduler.py --self-testpython3 -m py_compile scripts/ci/pr_review_merge_scheduler.pypython3 -m interrogate -c pyproject.toml .git diff --check