Repository navigation
Description
Before submitting
- I searched existing issues. The open watcher issue [Bug]: watch_pull_request misses merge-queue ejection and leaves the thread watching #20523 concerns missed wakeups; this report concerns the PR detail UI. The earlier queue-badge report Show pull requests as Queued when they enter GitHub's merge queue #12499 is closed as completed.
- I included enough detail to reproduce or investigate the problem.
Area
apps/web
Summary
The PR detail view can say All checks passed without indicating that GitHub's separate merge-queue checks are still running. The unqualified green summary makes the PR appear finished even while its queue entry is AWAITING_CHECKS.
Steps to reproduce
- Use a GitHub repository whose protected base branch requires the merge queue.
- Let every check on the PR head commit pass.
- Enqueue the PR. While required merge-group workflows are running, open its T3 PR detail view and checks popover.
- Compare the UI with GitHub's
mergeQueueEntry.stateand workflow runs forevent=merge_group, which have a different commit SHA from the PR head.
Expected behavior
Distinguish passing PR-head checks from the pending merge-queue stage. Show queue membership and pending or failed merge-group checks, or explicitly label the existing summary as PR-head checks and make the separate queue state visible. The exact presentation is a maintainer decision.
Actual behavior
In the live incident, the user reported that T3 showed only All checks have passed, with no queue indication. A contemporaneous GitHub read showed the PR open, queue position 1, state AWAITING_CHECKS, and both Application CI and another required workflow still in_progress on the temporary merge-group commit. Every PR-head check was already green.
The PR then merged while we were inspecting it. Native computer control of T3's detail view confirmed the same unqualified All checks passed summary and the popover listing the head-check population. The view correctly changed to Merged after completion.
Evidence limits: screenshots were captured after the merge, not during AWAITING_CHECKS. The pre-merge UI observation is the user's report; the pre-merge GitHub queue/workflow state was directly queried. This report does not claim a new controlled UI reproduction or that a screenshot captured a pending queue. Private screenshots are not uploaded because they contain unrelated project and thread details.
Source evidence
Public source inspected at 94231a0f716bef1478a325a05518f25f38e8cc22 corroborates the missing distinction:
- PR detail query reads lifecycle, mergeability,
autoMergeRequest, andcommits(last: 1).statusCheckRollup. It does not requestisInMergeQueue,mergeQueueEntry, or the merge-group commit's checks.autoMergeRequestis not queue membership. - Detail checks summary derives state from
detail.checksor the shared summary. Its display passes those checks to the same popover. - Checks popover renders the check-state label and supplied list without distinguishing head checks from queue checks.
- The same GraphQL file has separate merge-action queries for
isMergeQueueEnabledaround lines 553 and 566. Supporting queue-aware merge actions does not make queue status available in the detail read above.
This is a focused source inspection, not proof that the installed build exactly matches that upstream commit. No app code was modified.
Impact
Major degradation or frequent failure
Users cannot tell from the PR view why an apparently green PR is still waiting, or that merge-group validation may still fail. It also obscures the separate watcher problem described in #20523.
Version or commit
Installed build revision not established. Public source inspection pinned above; this is not asserted to be the installed revision.
Environment
T3 Code PR detail and checks popover with a GitHub repository using a protected merge queue. Identifying environment and project details omitted.
Logs or stack traces
Sanitized directly observed pre-merge host state:
{
"pullRequestState": "OPEN",
"allPrHeadChecksPassing": true,
"queue": { "position": 1, "state": "AWAITING_CHECKS" },
"requiredMergeGroupWorkflows": ["in_progress", "in_progress"],
"mergeGroupCommitDiffersFromPrHead": true
}Workaround
Inspect queue membership and merge-group workflow runs directly on GitHub. A green PR-head check summary alone does not mean the queue has finished. No branch-protection change or automatic requeue is proposed.
Reported on the user's behalf by GPT 6.1 Sol through the Codex harness in T3 Code. Process IDs, repository/project identifiers, private URLs, paths, PR numbers and thread identifiers from the affected project are omitted.
Activity
derek-eliza commentedon Oct 30, 2026
Additional evidence from T3 Code Desktop
0.1.6-nightly.20261030.3904, connected to its local server.What happened: The user reports that the PR monitoring UI does not indicate merge-queue membership, making an enqueued PR look idle with auto-merge off.
Live evidence: A read-only GitHub GraphQL query returned:
{ "state": "OPEN", "isInMergeQueue": true, "autoMergeEnabled": false, "mergeQueueEntry": { "position": 5, "state": "AWAITING_CHECKS" } }autoMergeEnabledabove meansautoMergeRequest != null. This demonstrates that queue membership cannot be inferred from the auto-merge flag.Source diagnosis: At installed commit
36dac688a17c6de1c6398e62d01546fb787c185b:pullRequestReads.graphqlrequestsautoMergeRequest, but neitherisInMergeQueuenormergeQueueEntry.gitHubPullRequestJson.tsmaps a nullautoMergeRequesttoautoMergeEnabled: false.pullRequestDetail.logic.tshas no queued primary-control state.Reproduction: Link a PR from a repository requiring GitHub’s merge queue, enqueue it, and compare T3’s displayed status with GitHub while the queue awaits checks.
Evidence limits: GitHub queue state was directly verified. The UI symptom is user-reported; no screenshot or independent UI reproduction was captured. Private repository and thread details are omitted.
Workaround: Check queue membership directly on GitHub. No local changes were applied.
Related: #12499 describes the earlier queued-status gap.
Prepared by GPT-6.1 Sol through the Codex harness in T3 Code.
juliusmarminge commentedon Nov 12, 2026
I tried to reproduce this on the current build and could not.
Commit 2ed6f10 (origin/main). Could not run the reporter's steps in the app: they need a GitHub repository whose base branch requires a merge queue. pingdotgg/t3code main has none (branch rules: deletion, required_status_checks, pull_request; repository.mergeQueue(branch:main) is null), and the GitHub account here belongs to no organisation that could create one. Instead I confirmed from the source that the PR detail query (packages/source-control-github/src/server/pullRequestReads.graphql) requests autoMergeRequest and commits(last:1).statusCheckRollup but not isInMergeQueue or mergeQueueEntry. gitHubPullRequestJson.ts maps autoMergeRequest:null to autoMergeEnabled:false, and nothing in contracts or apps/web/src/components/pullRequest models a queue state. I added a decoder test to gitHubPullRequestJson.test.ts ('tells a pull request waiting in the merge queue apart from one that is not queued'). It feeds GitHub's JSON for a PR with passing head checks, autoMergeRequest:null, isInMergeQueue:true and mergeQueueEntry {AWAITING_CHECKS, 1}. On main it fails because the decoded detail equals the one for an unqueued PR. Every earlier attempt to fix this (#12916, #15800, #28884, #29960, #30945) was closed unmerged, so #12499 being closed as completed did not fix it on main.
Closing as not planned. If it still happens for you, reply with the exact steps and the version you are on and it will be looked at again.