# Changelog

## [2.3.0] - 2026-03-11 — Pipeline v4

### Added
- **`ChecksumCodec`** — CRC32 integrity: append on encode, verify+strip on decode, Error on mismatch
- **`RateLimitCodec`** — Token bucket algorithm (burst-tolerant, refills over time)
- **`TagCodec`** — Attach channel ID for mux routing, drop wrong-channel frames on decode
- **`Pipeline::chain()`** — Compose two pipelines into one
- **`Pipeline::describe()`** — Human-readable dump (`dedup → compress → encrypt`)
- Error propagation tested — corrupt checksum → `PipelineResult.errors`
- 474 total tests (+13 new)

## [2.2.0] - 2026-03-11 — Pipeline v3

### Added
- **`PipelineResult`** — returns frames + collected errors + consumed count
- **`StageMetric`** — per-stage frames_in/frames_out/consumed/errors observability
- **`ReassemblyCodec`** — reassemble chunked frames (counterpart to SlicerCodec)
- **`ConditionalCodec`** — wrap any codec with runtime enable/disable toggle
- **`Pipeline::signal(key)`** — preset: dedup→compress→encrypt
- **`Pipeline::media(mtu)`** — preset: compress→slicer
- **`Pipeline::metrics()`** — per-stage counter snapshot
- Slicer↔Reassembly roundtrip verified
- 461 total tests (+12 new)

## [2.1.0] - 2026-03-11 — Pipeline v2

### Added
- **`CodecOutput::Many`** — codecs can fan-out (1 frame → N frames)
- **`EncryptCodec`** — XOR cipher encrypt/decrypt adapter
- **`FilterCodec`** — drop frames by type (`FilterCodec::drop_control()`)
- **`Codec::reset()`** — clear internal state on reconnect
- **`Pipeline::encode_all/decode_all`** — batch frame processing
- **`SlicerCodec`** rewritten — real MTU chunking via `Many`
- Full roundtrip test — Compress→Encrypt→encode→decode→verify
- 449 total tests (+11 new)

## [2.0.0] - 2026-03-11 — Pipeline Architecture 🏗️

### Added
- **[NEW] `pipeline.rs`** — `Frame`, `CodecResult`, `Codec` trait, `Pipeline` builder
- **6 codec adapters** — `PassthroughCodec`, `DedupCodec`, `CompressCodec`, `PacerCodec`, `SlicerCodec`, `StatsCodec`
- 15 pipeline tests (438 total)

## [1.6.0] - 2026-03-11

### Added
- **`AesFrameCipher`** — XOR-rotate frame cipher with configurable key and round tracking (encrypt, decrypt, rounds, reset)
- **`LossInjector`** — deterministic packet loss simulation for testing (should_deliver, total_dropped, reset)
- **`StreamCheckpoint`** — serializable stream state snapshot as 32 bytes (capture, to_bytes, from_bytes)
- 10 new tests (333 total)

## [1.5.0] - 2026-03-11

### Added
- **`ContentDedup`** — hash-based frame deduplication (check, dedup_count, reset)
- **`StreamHealthTracker`** — latency/throughput/loss tracking
- **`FrameThrottler`** — FPS-based frame throttling
- 10 new tests (323 total)

## [1.4.0] - 2026-03-11

### Added
- **`SessionRecorder`** — frame recording with timestamps
- **`PriorityScheduler`** — priority-based frame scheduling
- **`BandwidthLimiter`** — token bucket rate limiter
- 10 new tests (313 total)

## [1.3.0] - 2026-03-11

### Added
- **`QualityDecision`** / **`QualityPolicy`** — adaptive quality
- **`FrameLayerCompositor`** — multi-source compositing
- **`ReorderBuffer`** — out-of-order frame reordering
- 12 new tests (303 total)

## [1.2.0] - 2026-03-11

### Added
- **`HapticPayload`** / **`haptic_frame()`** — haptic vibration
- **`batch_frames/unbatch_frames`** — frame coalescing
- **`StreamDigest`** / **`ChannelAuth`** — integrity + auth
- 14 new tests (291 total)

## [1.1.0] - 2026-03-11

### Added
- **`FrameType::Error`** / **`ErrorPayload`** — error frames
- **`encrypt_frame/decrypt_frame`** — XOR envelope
- **`FrameRouter`** — content-based dispatch
- 13 new tests (277 total)

## [1.0.0] - 2026-03-11 🎉

### Added
- Core streaming: pipeline, protocol, splitter, congestion, stats, ACK, codec, flow control, version negotiation
- 9 new tests (264 total)
