pulith-fetch 0.2.0

HTTP downloading with streaming verification and atomic placement
Documentation
# pulith-fetch

Transfer execution primitives for Pulith.

## Role

`pulith-fetch` turns fetch plans into bytes and receipts.

It should own:

- transfer execution
- local-vs-remote fetch execution
- multi-source execution strategies
- fetch receipts

It should not own:

- source planning semantics
- storage policy
- install policy

## Main APIs

- `Fetcher`
- `MultiSourceFetcher`
- `FetchReceipt`
- `FetchSource`
- `FetchOptions`
- `ReqwestClient`

## Basic Usage

```rust
use pulith_fetch::{Fetcher, MultiSourceFetcher, ReqwestClient};

let fetcher = Fetcher::new(ReqwestClient::new()?, "workspace")?;
let _multi = MultiSourceFetcher::new(std::sync::Arc::new(fetcher));
# Ok::<(), pulith_fetch::Error>(())
```

## How To Use It

Pair `pulith-fetch` with:

- `pulith-source` for planned candidates
- `pulith-store` for durable registration
- `pulith-install` for workflow handoff

Fetch should stay explicit: the caller chooses strategy, destination, and later workflow steps.

See `docs/design/fetch.md`.