# pack-io v1.0.1 — patch release
**Released:** 2026-06-05
**Status:** stable patch — strictly bug-fix, no behavioural change.
---
## Summary
v1.0.0 shipped with a `cargo test` failure under the default feature
set: `tests/integration_scenarios.rs` used `#[derive(Serialize)]` and
`#[pack_io(version = N)]` but its `[[test]]` entry in `Cargo.toml` did
not declare `required-features = ["schema"]`. Running the published
crate's test suite without `--features schema` (the default
invocation) failed to compile.
v1.0.1 fixes that test, sweeps every other test and example for the
same class of mistake, and widens CI so a missing `required-features`
entry cannot reach a future release. Documentation has been refreshed
and the doctest count has nearly tripled. The wire format, the public
API surface, and the compiled output of the v1.0.0 default build are
all unchanged.
## What changed
### Fixed
- **Feature-gating sweep on every test and example.** Multiple files
under `tests/` and `examples/` used `std::collections`, `std::io`,
`proptest`, `println!`, the derive macros, or
`#[pack_io(version = N)]` attributes without a matching
`required-features` entry. Every target now declares the correct
gate — `["std"]`, `["derive", "std"]`, or `["schema", "std"]` as
appropriate. `cargo {check,test,clippy}` now succeeds under every
feature combination on every supported platform.
- **No-std lib-test compile fix.** The inline
`#[cfg(test)] mod tests` in `src/lib.rs` referenced `String` via the
std prelude. It now imports `alloc::string::String` explicitly so
the lib-test target compiles under `cargo test --no-default-features`.
### Documentation
- **Stale roadmap reference removed.** The module doc on
`src/traits.rs` said "the `derive` macro (lands in `0.4`)" — written
when the macro was unreleased. The derive feature has shipped since
v0.4.0; the doc now describes the current state.
- **Doc examples added** on every public method of `Encoder`,
`Decoder`, `IoEncoder`, and `IoDecoder` that previously had only a
description. Each example is a runnable doctest, exercised on every
CI run on every supported platform and toolchain. Doctest count
went from 20 to 44.
### Hardened
- **CI runs three feature configurations per matrix cell.** The
previous gate ran a single `cargo {test,clippy} --all-features`
invocation, which compiled everything successfully and never
noticed feature-gating mistakes (because every feature was on).
The new gate runs:
- `cargo {test,clippy} --all-targets -- -D warnings` (default features)
- `cargo {test,clippy} --all-targets --all-features -- -D warnings`
- `cargo {test,clippy} --all-targets --no-default-features -- -D warnings`
on Linux / macOS / Windows × stable / 1.85. A future
feature-gating mistake will surface on the very first push, not
after a release.
### Unchanged
- Wire format (every `1.x` decoder reads any `1.x`-or-earlier encoding).
- Public API surface (no new symbols, no removed symbols, no signature
changes).
- Derive macro output.
- MSRV (`1.85`).
- Performance numbers (`docs/PERFORMANCE_BASELINE.md`).
## Upgrading
Drop-in. No code changes are required on the consumer side.
```toml
[dependencies]
pack-io = "1.0.1"
```
Or, since SemVer compatibility is preserved, leave your existing
`pack-io = "1"` constraint as-is and `cargo update` will pull v1.0.1
the next time it runs.
## Why a patch and not a yank
The fixed bug only affected users who ran `cargo test` on the pack-io
source tree itself under default features. It did **not** affect:
- Downstream consumers depending on `pack-io = "1"` — their own
`cargo test` compiles their own code against pack-io, not pack-io's
integration tests.
- Anyone with `schema` or `derive` features on.
- The library code itself, which was untouched.
A yank would be heavy-handed for a test-target compilation issue that
never affected anybody's production build. A clean v1.0.1 patch is
the right tool.
## Stability promise
The post-1.0 stability contract from `docs/release/v1.0.0.md` carries
forward unchanged: SemVer for the public API and the wire format,
explicit deprecation passes before any breaking change, MSRV
advancement only on minor or major bumps.
---
**No follow-up work is deferred from this release.** The CI gate that
catches this class of mistake is now in place and runs on every push.