shipper 0.3.0-rc.2

Reliable, resumable `cargo publish` for Rust workspaces. Install with `cargo install shipper --locked`.
Documentation
# CLAUDE.md

This file provides agent-specific guidance for working in crate `shipper`.

## Role

`shipper` is the **install face** of the product, not the engine.

- Binary: `src/bin/shipper.rs` — 3 lines, forwards to `shipper_cli::run()`.
- Library: `src/lib.rs` — curated re-export of `shipper-core`'s public
  surface for drivers that prefer the product name.
- Engine: lives in `shipper-core`.
- CLI: lives in `shipper-cli`.

```text
shipper (this crate)       install target + curated re-export
  -> shipper-cli           clap parsing, subcommand dispatch, output
       -> shipper-core     engine (plan, preflight, publish, resume, …)
```

Behavior changes belong in `shipper-core` (or `shipper-cli` for
CLI-surface changes). This crate's surface should move rarely — it
exists to be a stable "install me" handle.

## Curated re-exports

`src/lib.rs` re-exports: `config`, `engine`, `plan`, `state`, `store`,
`types`. These are the modules a programmatic driver would reach for.

Engine internals (`auth`, `cargo`, `encryption`, `git`, `lock`,
`registry`, `retry`, `runtime`, `webhook`, `cargo_failure`) are
intentionally not re-exported. Reach for them through `shipper-core`
directly if you're embedding.

## Useful commands

```bash
cargo check -p shipper
cargo test -p shipper
cargo test -p shipper --all-features
cargo fmt -p shipper
cargo clippy -p shipper --all-targets --all-features -- -D warnings

# Build + sanity-check the installable binary
cargo build -p shipper --release
./target/release/shipper --help
```

## Context

- Keep changes small. Most real work should happen in `shipper-core`
  or `shipper-cli`, not here.
- Preserve public API compatibility on the curated re-exports. If a
  driver imports `shipper::engine::run_publish`, that path must keep
  working.
- Don't add CLI dependencies (`clap`, `indicatif`, shell completions)
  — those belong in `shipper-cli`.
- Don't add new engine modules here — those belong in `shipper-core`.
- If tests in `tests/` reach beyond the curated façade, update them
  to import from `shipper_core::X` instead (and note it in the PR).

For full workspace guidance, see [../../CLAUDE.md](H:\Code\Rust\shipper\CLAUDE.md).