# 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)