github / github/gh-stack

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

Abierto
#374 0 comentarios 0 reacciones 0 asignados Ver en GitHub
bug topic: cli - link
Lenguaje dominante
Go
Estrellas
1.5k
Forks
70
Merge medio
1 d 8 h
PR fusionados (30 d)
7

Descripción

## 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`.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
github, go
Área
api, cli
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
48/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.