Skip to content

submit marks existing draft PRs ready for review without --open, firing review requests #481

Description

@greatnessinabox

Environment

  • gh 2.96.0 (2026-07-02), gh-stack v0.0.4, git 2.46.1, macOS 26.6

Summary

gh stack submit --auto marked two already-open draft PRs as ready for review, which fired review requests to five CODEOWNERS. I did not pass --open.

The help text is explicit that this should not happen:

New PRs are created as drafts by default. Use --open to mark them as ready for review.

Repro

gh stack submit --auto        # creates PR A and PR B as drafts
gh pr view A --json isDraft   # => true, as documented
# ... make no change to the branches ...
gh stack submit --auto        # second run, still no --open
gh pr view A --json isDraft   # => false

Second run's output, which gives no indication it changed draft state:

Checking stack state...
Pushing to origin...
PR #A for branch-a is up to date
PR #B for branch-b is up to date
✓ Stack updated on GitHub with 2 PRs
✓ Pushed and synced 2 branches

The PR timeline confirms it:

<t>  ready_for_review   by=<me>
<t>  review_requested   by=<me>   x5

Those timestamps match the second submit to the second. I made no other change in between, and did not touch the web UI.

Why it matters

Marking a PR ready is not a local operation. It notifies every CODEOWNER, and on a repo with required reviewers it moves the PR into other people's queues. Doing it on an update pass, from a flag whose documented meaning is "use auto-generated titles without prompting", is surprising in a way that cannot be undone: gh pr ready --undo restores draft state but the notifications have already gone out.

It also makes submit unusable as an idempotent "sync my stack" command, which is what its output implies it is when everything is already up to date.

Expected

submit should only change draft state when --open is passed. If the current behaviour is deliberate for update passes, the help text should say so, and the output should name the change instead of printing is up to date.

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