feat(pr)!: compose proposal without gating on remote state #5

Merged
claudiomaradonna merged 1 commit from feat/pr-compose-without-remote-gate into main 2026-05-14 18:16:53 +02:00

Previously, /pr aborted the compose pass when the branch had no
upstream, was missing on the remote, or was ahead of the remote tip,
forcing the user to invoke /push before they could even see the
proposed title and body. Previewing the PR copy required publishing
first, which inverted the natural order.

Compose now always returns the proposal as long as ..HEAD is
non-empty: remote-state findings become warnings and plan fields
(branch_on_remote, local_ahead) but no longer bail. The push gate is
deferred to the open pass — the orchestrator catches
branch_on_remote: false at the user checkpoint and instructs the user
to /push, and mode=open re-probes ls-remote and returns needs_push if
the branch has been deleted since compose.

The compose status enum shrinks to ready, refuse_main_master,
nothing_to_pr, needs_input, existing_pr. The existing-PR lookup is
skipped when the branch isn't on the remote.

BREAKING CHANGE: compose no longer emits needs_push or local_ahead.
Consumers must read branch_on_remote and local_ahead from the plan.

Previously, /pr aborted the compose pass when the branch had no upstream, was missing on the remote, or was ahead of the remote tip, forcing the user to invoke /push before they could even see the proposed title and body. Previewing the PR copy required publishing first, which inverted the natural order. Compose now always returns the proposal as long as <base>..HEAD is non-empty: remote-state findings become warnings and plan fields (branch_on_remote, local_ahead) but no longer bail. The push gate is deferred to the open pass — the orchestrator catches branch_on_remote: false at the user checkpoint and instructs the user to /push, and mode=open re-probes ls-remote and returns needs_push if the branch has been deleted since compose. The compose status enum shrinks to ready, refuse_main_master, nothing_to_pr, needs_input, existing_pr. The existing-PR lookup is skipped when the branch isn't on the remote. BREAKING CHANGE: compose no longer emits needs_push or local_ahead. Consumers must read branch_on_remote and local_ahead from the plan.
Previously, /pr aborted the compose pass when the branch had no
upstream, was missing on the remote, or was ahead of the remote tip,
forcing the user to invoke /push before they could even see the
proposed title and body. Previewing the PR copy required publishing
first, which inverted the natural order.

Compose now always returns the proposal as long as <base>..HEAD is
non-empty: remote-state findings become warnings and plan fields
(branch_on_remote, local_ahead) but no longer bail. The push gate is
deferred to the open pass — the orchestrator catches
branch_on_remote: false at the user checkpoint and instructs the user
to /push, and mode=open re-probes ls-remote and returns needs_push if
the branch has been deleted since compose.

The compose status enum shrinks to ready, refuse_main_master,
nothing_to_pr, needs_input, existing_pr. The existing-PR lookup is
skipped when the branch isn't on the remote.

BREAKING CHANGE: compose no longer emits needs_push or local_ahead.
Consumers must read branch_on_remote and local_ahead from the plan.
claudiomaradonna deleted branch feat/pr-compose-without-remote-gate 2026-05-14 18:16:55 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
claudiomaradonna/claude-plugin-conventional-commit!5
No description provided.