Repository postures
A repository posture is the operating picture produced by the effective transport and
pullRequests policy values. shipper status and shipper_status report the same posture names
used here, so an operator or agent can move directly from repository status to the relevant
behavior.
The three postures
Section titled “The three postures”Posture and policy tuple (transport / pullRequests) | Packaging and merge destination | Review acquisition and delivery | Unavailable capabilities and Shipper’s substitute | Displayed workflow stages |
|---|---|---|---|---|
GitHub-backed (origin / github) | Packages the implemented change as a GitHub pull request and merges that PR into the target branch on GitHub. | Acquires the review from the GitHub PR; Shipper keeps every review round internally. | All transport and PR capabilities are enabled; held review rounds and local issue state remain authoritative for Shipper workflow state. | PR Open |
Remote git without pull requests (origin / none) | Pins a LocalChangeRecord, merges by advancing the target branch, and publishes the advanced target branch to origin. | Acquires the review from the pinned local three-dot diff and retains the round locally. | PR creation, inspection, and checks are unavailable; packaged-change recovery remains available from the pinned record. The local change record, locally held review round, and local target-branch advance substitute for PR workflow artifacts. | Change Packaged |
Fully local (none / none) | Pins a LocalChangeRecord and merges by advancing the local target branch, with no publication. | Acquires the review from the pinned local three-dot diff and retains the round locally. | Fetch, push, PR creation, inspection and checks are unavailable; packaged-change recovery remains local. The local record, held review round, and target-branch advance are the substitutes. | Change Packaged |
The two values in the first column derive the posture name. GitHub side effects occur only when
the capability that governs them is enabled: transport: "origin" permits remote git transport and
pullRequests: "github" permits the PR workflow. In every posture Shipper keeps review rounds
internally as held rounds.
baseIntegration is an independent synchronization choice within every posture. It selects rebase
or merge when Shipper brings a feature branch up to date; it is not a third posture axis and does
not turn these three operating pictures into six. mirrorMode is also independent: it selects
whether authoritative local issue state is projected to GitHub wherever the transport policy
permits that projection.
Stage names
Section titled “Stage names”Pull-request-disabled repositories use a local display name for the packaged review state. The retired raw label remains readable only as a compatibility alias; it is not a separate stage.
| Stored stage | Pull requests enabled | Pull requests disabled |
|---|---|---|
shipper:pr-open | PR Open | Change Packaged |
shipper:pr-reviewed | PR Open (legacy alias) | Change Packaged (legacy alias) |
Implementation creates the package and enters shipper:pr-open; shipper pr review reviews it.
Fully local boundaries
Section titled “Fully local boundaries”Fully local operation is single-operator by construction. Issue state, locally held reviews, issue locks, and workflow history have no shared transport, so concurrent operators can create divergent authority without a common source of truth. A shared repository requires a remote-backed posture.
Issue mirroring is not a transport substitute. mirrorMode: "mirror-on" is invalid with
transport: "none". shipper settings set ... --repo rejects that candidate and prints the
conflicting effective values. If someone hand-edits an invalid committed settings file,
policy-consuming commands such as shipper status report the conflict. Restore a real origin and
select origin transport before enabling mirroring, or keep the repository store-only.
“Fully local” refers narrowly to git hosting and GitHub workflow dependencies. Shipper sign-in and periodic license revalidation still require network access, and the cached license grace period is temporary. This posture does not claim air-gapped support.