shipper-cli 0.3.0-rc.2

CLI adapter for Shipper. Install with `cargo install shipper --locked`; this crate is for embedders who want the exact CLI surface programmatically.
Documentation
# Module: `crate::output::progress`

**Crate:** `shipper-cli`
**Single responsibility:** Per-crate publish progress UI — progress bars, status indicators, elapsed-time display.
**Was:** standalone crate `shipper-progress` (absorbed into `shipper-cli` during decrating Phase 5).

## Public-to-crate API

- `ProgressReporter` — the main reporter struct.
  - `::new(total_packages, quiet)` — construct with TTY autodetection.
  - `::silent(total_packages)` — non-TTY reporter used by tests.
  - `set_package(index, name, version)` — record the active package.
  - `finish_package()` — mark the current package complete.
  - `set_status(status)` — update the current status message.
  - `finish()` — finalize reporting.
- `is_tty()` — helper reporting whether stdout is a terminal.

## Layout

- `mod.rs` — production code: `ProgressReporter`, `is_tty()`.
- `tests.rs` — unit tests.
- `proptests.rs` — property-based tests (was `mod property_tests` + `mod proptests`).
- `bdd_tests.rs` — behavior-style tests (was `tests/progress_bdd.rs`).
- `snapshot_tests.rs``insta` snapshot tests (was `tests/snapshots.rs`).
- `snapshots/``insta` snapshot files.

## Invariants

- Detects TTY vs non-TTY output and degrades gracefully (no spinner spam in CI logs).
- Silent / quiet mode fully suppresses output.
- `total_packages()` is immutable after construction.
- `current_name()` always has the form `"name@version"` after `set_package`.