Skip to content

shipper block

Usage: shipper block [options] <blockers…>

Record that an issue is blocked by other issues/PRs

ArgumentRequiredDescriptionChoices
yestarget Shipper issue ID, gh:, or GitHub URL-
<blockers…>yesone or more blocker Shipper IDs, gh:s, or GitHub URLs-
LongShortValueDefaultDescriptionChoices
—reason--optional free-text reason-

Record that S#42 is blocked by S#17.

Terminal window
shipper block S#42 S#17

Record multiple external GitHub blockers with an explanatory reason.

Terminal window
shipper block S#42 gh:17 gh:29 --reason "Waiting for both dependencies."
CodeWhen
0The local store records blocked state and blockers, then GitHub label/comment mirrors are repaired.
1Validation, issue lookup, blocker lookup, store update, label mutation, or comment creation fails.
  • At least one blocker reference is required.
  • Blocker references must be same-repository issues or pull requests expressed as S#<n>, gh:<n>, or GitHub URLs.
  • Bare numbers resolve as Shipper issues first; use gh:<n>, #<n>, or a GitHub URL for an external GitHub issue or PR.
  • Native dependencies created by grooming are stored as the same ordinary local Shipper blockers created by shipper block; both use local-ID-first semantics for bare references.
  • The target cannot block itself, and each blocker must exist and still be unresolved.
  • Blocked reasons and blocker sets are stored in the local workflow event log; the GitHub blocked comment is a projection that reconcile can repair.
  • When a managed blocker later closes as not planned, a dependent at Groomed, Designed, or Planned returns to New while remaining blocked with every blocker preserved. New dependents need no move, and PR Open, Rework, Ready, and failed dependents remain at their current stage. Legacy reviewed labels receive the same preservation as PR Open.
  • A return is durably deferred while the dependent has an active issue lock or unresolved closure hold, then applied at the next explicit issue synchronization or a reopen resolution.