Stack view shows "not ready" / "unable to merge as a stack" on approved mergeable PRs (stale stack UI cache)
還沒有人認領這個 Issue。
評估
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 新手友好度
- 45/100
- Issue 類型
- 缺陷
- 描述清晰度
- 基本清楚
- 活躍度
- 活躍
- 技術堆疊
- github
- 領域
- frontend
研究方向
未指定任何儲存庫檔案或測試。首先在 GitHub 原生的 stack 檢視中重現 13 層 stack,並將其顯示的就緒狀態與報告中列出的 REST 和 GraphQL 欄位進行比較;完成標準是 UI 反映已核准且可合併的 PR,並啟用 "Merge stack (13)"。
由索引模型根據 Issue 內容生成。
描述
Summary
The GitHub stack view (native stack feature, not CLI) shows "not ready" on some PRs in a 13-level stack, and displays "unable to merge as a stack" globally, even though every PR in the stack reports mergeable=MERGEABLE, mergeStateStatus=CLEAN (or UNSTABLE), reviewDecision=APPROVED, and all status checks passing via both REST and GraphQL APIs.
Stack structure (anonymized)
base-branch
└── feat/base → PR #1 (base: base-branch) ← trunk base
└── feat/layer-2 → PR #2 (base: feat/base)
└── feat/layer-3 → PR #3 (base: feat/layer-2)
└── feat/layer-4 → PR #4 (base: feat/layer-3)
└── feat/layer-5 → PR #5 (base: feat/layer-4)
└── feat/layer-6 → PR #6 (base: feat/layer-5)
└── feat/layer-7 → PR #7 (base: feat/layer-6)
└── feat/layer-8 → PR #8 (base: feat/layer-7)
└── feat/layer-9 → PR #9 (base: feat/layer-8)
└── feat/layer-A → PR #10 (base: feat/layer-9)
└── feat/layer-B → PR #11 (base: feat/layer-A)
└── feat/layer-C → PR #12 (base: feat/layer-B)
└── feat/layer-D → PR #13 (base: feat/layer-C)
13 PRs in total. The bottom PR targets base-branch; each subsequent PR targets its predecessor's branch. All PRs are open, non-draft, created via gh stack submit.
Environment
gh2.97.0gh-stackv0.1.0- Repository: private, no branch protection, no repository rulesets, no merge queue, no CODEOWNERS.
- "Dismiss stale pull request approvals when new commits are pushed": disabled.
Observed behavior
In the GitHub stack UI (native stack view)
- Bottom 7 PRs (#1–#7): show "Ready"
- PR #8: shows "Not ready" (no tooltip / reason shown)
- PR #9: shows "Blocked downstack"
- PR #10: shows "Not ready" (no tooltip / reason shown)
- PRs #11–#13: show "Blocked downstack"
- At the top: global message "Unable to merge as a stack"
Via the API (both REST and GraphQL, confirmed multiple times over several minutes)
Every PR in the stack (including #8 and #10) consistently reports:
| Field | Value |
|---|---|
mergeable |
MERGEABLE |
mergeStateStatus |
CLEAN (or UNSTABLE — only non-required checks pending like CodeRabbit) |
reviewDecision |
APPROVED (multiple approvals from different reviewers) |
statusCheckRollup.state |
SUCCESS |
isDraft |
false |
requested_reviewers |
[] (no pending reviewer requests) |
| No branch protection | (none exists on any branch in the stack) |
| No repository rulesets | (none exist) |
GraphQL query used:
{
repository(owner: "O", name: "R") {
pullRequest(number: N) {
mergeable
mergeStateStatus
reviewDecision
isDraft
statusCheckRollup { state }
}
}
}
Context about the "not ready" PRs (#8 and #10)
- Both are history-import PRs — they contain 500+ commits each (preserved full history of the imported repositories), adding ~48k lines across 180+ files.
- The remaining PRs are smaller (single-digit to low-double-digit commits).
- All PRs (including #8 and #10) were created via the same
gh stack submitflow, all with the same review/check configuration. - The status checks on #8 and #10 all show green/success. Only CodeRabbit (not required) shows as not completed.
Attempted workaround: close + reopen the "not ready" PRs
We closed and reopened PR #8 (the first "not ready" PR in the stack) to force a full server-side recompute:
gh pr close 8 && gh pr reopen 8
Result:
- The individual PR returned to
mergeable=MERGEABLE, reviewDecision=APPROVEDcorrectly. - The stack view took ~30 seconds to reload, but the state did not change: PR #8 remained "not ready", PR #9 remained "blocked downstack", and the global message stayed "unable to merge as a stack".
Close+reopen did not invalidate the stack view's cached state. The stack view appears to maintain its own independent cache that is not invalidated by PR state changes.
Expected behavior
Given that:
- All PRs are mergeable (no conflicts,
MERGEABLE). - All PRs are approved (
APPROVED). - All required status checks pass (
SUCCESS). - No branch protection, rulesets, CODEOWNERS, or merge queue block merging.
- Close+reopen did not help.
GitHub's native stack view should reflect the actual PR state and show all 13 PRs as "Ready", with the "Merge stack (13)" option enabled and functional. A stale cached state rendering the stack unmergeable is a blocking UX bug.
Related
- #323 — "Can't merge a stacked PR with no clear reason (all PRs show mergeable)". Same class of bug: stack UI state differs from API state. In our case the stack never shows as mergeable at all (no attempt to merge fails — the UI never allows the attempt). We confirm the
MERGEABLE/CLEAN/APPROVEDsymptom. Our close+reopen attempt did not resolve it, suggesting a different cache invalidation path.
- 主要語言
- Go
- 星號
- 1.6k
- 分支
- 78
- PR 合併指標
- 30 天內沒有已合併 PR
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
github/gh-stack 的其他 Issue
-
難度 2/5 1-3 小時 新手友好度 85/100
-
難度 1/5 1 小時以內 新手友好度 92/100
-
feature request topic: cli - general
難度 2/5 1-3 小時 新手友好度 68/100
-
feature request topic: auto-merge
難度 2/5 1-3 小時 新手友好度 68/100
-
bug topic: docs
難度 1/5 1 小時以內 新手友好度 68/100
相似的 Issue
-
agent-butler-finding bug
難度 1/5 1 小時以內 新手友好度 94/100
jordansmall/spindrift#4367 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 68/100
維護者通常 1 天內回覆
-
kind/engineering pulumi/pulumi-terraform Task Workflow Failure
難度 2/5 1-3 小時 新手友好度 68/100
pulumi/pulumi-terraform#1215 ·
維護者通常 1 天內回覆
-
documentation
難度 2/5 1-3 小時 新手友好度 88/100
githubnext/gh-aw-workshop#4132 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
JuliusBrussee/caveman#1177 · 1 則留言 ·
維護者通常 1 天內回覆