github / github/gh-stack

A failed link call leaves the target stack's membership partially mutated

Aperta
#374 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
bug topic: cli - link
Lingua principale
Go
Stelle
1.5k
Fork
70
Merge medio
1g 8h
PR unite (30g)
7

Descrizione

## Summary

When `gh stack link` fails partway through (see #373 for one way to trigger this), the stack's membership on GitHub is left altered rather than restored — PRs that were part of the stack before the failed call are silently dropped from it, with no rollback and no mention of this in the command's error output.

## Repro

1. Build a stack `main <- a <- b <- c <- d <- e` via `gh stack link`. Confirm via `gh api repos/{owner}/{repo}/stacks/{id}` that all 5 PRs are listed under `pull_requests`.
2. Merge `a` and `b`. Close `c` without merging.
3. Run `gh stack link a b c d e --base main` to fix `d`'s base (see #373) — it fails while trying to create a duplicate PR for `a`.
4. Re-check the stack's membership: `gh api repos/{owner}/{repo}/stacks/{id} --jq '.pull_requests[].number'`.

## Actual

Before step 3, the stack listed all 5 PRs. After the failed `link` call in step 3, the stack's `pull_requests` field lists **only** the merged PRs (`a`, `b`) — `c`, `d`, and `e` are gone from the stack entirely, even though `d` and `e` were never touched by the failed create attempt (only the lookup step "found" them, per #373's output).

This is also visible in the GitHub UI: PRs that previously showed a "Part of a stack" banner no longer show it at all.

I did not attempt to trigger this deliberately — it was an unwanted side effect discovered while working around #373 and #372.

## Expected

Either:
- The whole `link` operation should be atomic: a failure partway through (e.g. an individual PR-creation error) should not leave the stack's membership altered from before the call, or
- If partial application is intentional/unavoidable, the command should clearly report which stack-membership changes actually took effect before it errored out, so the caller can reconcile the difference instead of discovering it later via the API or UI.

## Environment

`gh-stack` version 0.0.8, installed via `gh extension install github/gh-stack`.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start with the gh stack link command and reproduce the failure using the steps in this issue, then inspect the calls affecting repos/{owner}/{repo}/stacks/{id} membership. Trace how a failed PR-creation attempt handles earlier and later membership changes. Done means a failed link either preserves the original pull_requests membership or clearly reports every partial change, with verification against the API.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
github, go
Ambito
api, cli
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.