Skip to content

[Bug]: PR detail shows all checks passed without merge-queue state or checks #24991

Closed as not planned

Description

@derek-eliza

Before submitting

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

  1. Use a GitHub repository whose protected base branch requires the merge queue.
  2. Let every check on the PR head commit pass.
  3. Enqueue the PR. While required merge-group workflows are running, open its T3 PR detail view and checks popover.
  4. Compare the UI with GitHub's mergeQueueEntry.state and workflow runs for event=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, and commits(last: 1).statusCheckRollup. It does not request isInMergeQueue, mergeQueueEntry, or the merge-group commit's checks. autoMergeRequest is not queue membership.
  • Detail checks summary derives state from detail.checks or 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 isMergeQueueEnabled around 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

  1. derek-eliza commented on Oct 30, 2026

    @derek-eliza
    Author

    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"
      }
    }

    autoMergeEnabled above means autoMergeRequest != null. This demonstrates that queue membership cannot be inferred from the auto-merge flag.

    Source diagnosis: At installed commit 36dac688a17c6de1c6398e62d01546fb787c185b:

    • pullRequestReads.graphql requests autoMergeRequest, but neither isInMergeQueue nor mergeQueueEntry.
    • gitHubPullRequestJson.ts maps a null autoMergeRequest to autoMergeEnabled: false.
    • pullRequestDetail.logic.ts has 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.

  2. juliusmarminge commented on Nov 12, 2026

    @juliusmarminge
    Member

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions