gh stack submit falsely reports stack recreation when no replacement stack is persisted
まだ誰も着手していません。
評価
調査の方向性
gh stack submit フローから始め、stack とオープンな PR に対するキャッシュされていない gh api チェックを使って報告された状態を再現します。リモート永続化とローカルの .git/gh-stack 更新を通じて stack の再作成を追跡します。完了条件は、失敗時にゼロ以外を返し、置き換え後の stack と想定される PR の所属が検証された後にのみ成功が出力されることです。
索引モデルが issue の本文から書いたものです。
説明
Summary
gh stack submit reports that a modified stack was successfully recreated on GitHub, but no replacement stack exists afterward.
Branches and PR bases are pushed successfully. Open PRs become unstacked, local metadata retains the old closed stack ID, and the command still exits with success output.
Environment
gh version 2.97.0gh stack version 0.1.0- macOS 26.6
- Repository has GitHub Stacks enabled
Setup
Existing remote stack:
- One merged bottom PR
- Multiple open PRs
- One closed PR in the middle
Locally:
- Check out remote stack.
- Run
gh stack modify. - Drop the closed middle PR.
- Resolve cascading rebase conflicts.
- Run
gh stack submit.
Actual output
Found the stack on GitHub — updating it to match your local stack
Merged PRs have left the stack on GitHub, so it wasn't updated — your unmerged PRs were pushed and re-based onto the trunk
✓ Stack recreated on GitHub to match local state
✓ Pushed and synced 47 branches
Actual remote state
The branches were pushed, but no replacement stack was created.
Repeated uncached API checks showed:
gh api -H 'Cache-Control: no-cache' \
repos/OWNER/REPO/pulls/OPEN_PR \
--jq '.stack'
Result:
null
Listing repository stacks showed only the old closed stacks:
gh api -H 'Cache-Control: no-cache' \
'repos/OWNER/REPO/stacks?per_page=100'
The old stack remained closed with only its merged PR. No new stack number appeared.
This was checked three times over 12 seconds. Direct PR membership and the stack list remained unchanged.
Local .git/gh-stack still referenced the old closed stack number and ID.
Expected behavior
One of:
- A replacement remote stack is persisted and local metadata is updated to its new number and ID.
- Stack creation failure is reported with a non-zero exit code.
The command must not print:
✓ Stack recreated on GitHub to match local state
unless the remote stack exists and its PR membership has been verified.
Impact
- User believes stack recreation succeeded.
- GitHub UI contains no open stack.
- Every open PR has
stack: null. - Local metadata points to a closed historical stack.
- Subsequent
checkout,sync, andmodifyoperations begin from inconsistent state.
Suggested safeguard
After creating or recreating the stack:
- Read the returned stack ID and number.
- Query the stack or one member PR.
- Verify expected membership.
- Only then persist local metadata and print success.
If verification fails, retain recovery state and return an error.
- 主要言語
- Go
- スター
- 1.5k
- フォーク
- 73
- 平均マージ
- 1日 8時間
- マージ済み PR(30日)
- 7
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- 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
github/gh-stack の issue をすべて見る
似ている issue
-
area/dev-productivity area/disaster-recovery area/ipcei kind/enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
難易度 1/5 1時間未満 初心者へのやさしさ 85/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
kind/bug status/0-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
🤔 refinement needed
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
equinor/radix-operator#1979 ·