zstd-complete 0.3.0

A pure Rust Zstandard compressor and decompressor with bounded streaming I/O
Documentation
# zstd-complete 0.3.0

## Workspace API compatibility

The public ReusableVec interface changes from mutable Vec access to slice access
with explicit fallible mutation. CapacityError reports admission or allocation
failure. Caller-backed storage cannot grow or reallocate; it uses a fixed
pointer/length/capacity representation rather than fabricated Vec ownership.

Static encoder mutation failures poison the context. Recreate the context before
reuse after such an error. Preflight input/output capacity refusal occurs before
mutation and permits subsequent valid encoding. Existing owned legacy compression
entry points retain their ordinary allocation-failure contract.

Ownership tags survive intermediate block/table transfers. Caller-backed table
pool exhaustion returns an error instead of allocating an owned fallback. Unsafe
writers use full-allocation pointers after capacity admission. The decoder retains
its Send contract; caller-backed FSE encoder state does not acquire a blanket Send
or Sync implementation.

These Rust API changes require a new pre-1.0 compatibility line. They do not change
the Zstandard wire format.

## Build and test contract

The minimum supported Rust version remains 1.87. The packaged library has passed a
locked offline check with Rust 1.87.0. Tests retain the reference zstd development
dependency and required ordinary fixtures with provenance and license notices.
External fuzz/artifact datasets are not shipped; tests requiring separately managed
inputs remain explicitly ignored or require their documented external prerequisites.