You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug]: PR panel shows an active merge button when GitHub reports the merge as BLOCKED #25583
I searched existing issues and did not find a duplicate.
I included enough detail to reproduce or investigate the problem.
Area
apps/web
Steps to reproduce
On a GitHub repository, add a ruleset on the default branch with "Require conversation resolution before merging" (required_review_thread_resolution: true) and no required approvals.
Open a pull request and let a review bot (CodeRabbit here) leave one inline comment.
Let every required check pass.
Open the pull request in the T3 Code PR panel.
Expected behavior
The panel shows that the merge is blocked and why, as github.com does: "Merging is blocked. A conversation must be resolved before this pull request can be merged." The merge button is disabled or names the blocker.
Actual behavior
The panel shows an active "Squash and merge" button and no sign of the block. github.com shows "All checks have passed" and "Merging is blocked" for the same pull request.
reviewDecision is empty because no review is required, so a hint keyed on it says nothing here. mergeStateStatus: BLOCKED with green checks and no required review points at another rule, such as unresolved conversations.
Another trigger for the same root cause, on nightly 0.1.4-nightly.20261028.3824 (macOS arm64, desktop app, local server, GitHub App credential):
A branch protection rule on the base branch requires 6 status checks, and none of them had reported on the head commit. The panel showed an active "Merge" button. Clicking it failed with: Pull request operation runAction failed: GitHub returned an error: 6 of 6 required status checks are expected. (reproduced twice).
From the source: resolvePullRequestPrimaryControl (apps/web/src/components/pullRequest/[pullRequestDetail.logic.ts](https://github.com/Users/fares/.t3/scratch/2026-10-29-read-triage-playbook-md-users-3824f1c3/apps/web/src/components/pullRequest/pullRequestDetail.logic.ts)) offers "Enable auto-merge" only when checksState is non-null and not "passing". checksState is rolled up from the reported contexts only, so required checks that are missing do not count. With no contexts the value is null, and with only non-required checks green it is "passing". Either way the panel falls through to "Merge". mergeStateStatus: BLOCKED is only used for canMergeNow, which controls whether auto-merge is offered, not for disabling Merge. The code is unchanged on main.
Expected: when mergeStateStatus is BLOCKED, show the blocker (e.g. "Waiting for N required checks") and offer auto-merge when the repo allows it, instead of an active Merge button.
Investigated with Claude Code (Claude Opus 5.5) via T3 Code triage.
Activity
fsioni commentedon Oct 29, 2026
Another trigger for the same root cause, on nightly
0.1.4-nightly.20261028.3824(macOS arm64, desktop app, local server, GitHub App credential):A branch protection rule on the base branch requires 6 status checks, and none of them had reported on the head commit. The panel showed an active "Merge" button. Clicking it failed with:
Pull request operation runAction failed: GitHub returned an error: 6 of 6 required status checks are expected.(reproduced twice).From the source:
resolvePullRequestPrimaryControl(apps/web/src/components/pullRequest/[pullRequestDetail.logic.ts](https://github.com/Users/fares/.t3/scratch/2026-10-29-read-triage-playbook-md-users-3824f1c3/apps/web/src/components/pullRequest/pullRequestDetail.logic.ts)) offers "Enable auto-merge" only whenchecksStateis non-null and not"passing".checksStateis rolled up from the reported contexts only, so required checks that are missing do not count. With no contexts the value isnull, and with only non-required checks green it is"passing". Either way the panel falls through to "Merge".mergeStateStatus: BLOCKEDis only used forcanMergeNow, which controls whether auto-merge is offered, not for disabling Merge. The code is unchanged onmain.Expected: when
mergeStateStatusisBLOCKED, show the blocker (e.g. "Waiting for N required checks") and offer auto-merge when the repo allows it, instead of an active Merge button.Investigated with Claude Code (Claude Opus 5.5) via T3 Code triage.