# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [0.5.4](https://github.com/moq-dev/moq/compare/kio-v0.5.3...kio-v0.5.4) - 2026-08-05
### Added
- *(kio)* add Fan, a waker for a whole WaiterList ([#2604](https://github.com/moq-dev/moq/pull/2604))
## [0.5.3](https://github.com/moq-dev/moq/compare/kio-v0.5.2...kio-v0.5.3) - 2026-08-03
### Added
- *(kio)* add WaiterCell and Queue ([#2560](https://github.com/moq-dev/moq/pull/2560))
### Other
- *(kio)* rename WaiterCell to Park ([#2583](https://github.com/moq-dev/moq/pull/2583))
## [0.5.2](https://github.com/moq-dev/moq/compare/kio-v0.5.1...kio-v0.5.2) - 2026-07-29
### Other
- *(kio,net)* model-check the concurrent handoffs with loom ([#2543](https://github.com/moq-dev/moq/pull/2543))
## [0.5.1](https://github.com/moq-dev/moq/compare/kio-v0.5.0...kio-v0.5.1) - 2026-07-27
### Added
- *(kio)* add a poll-native Deadline and adopt it in moq-net ([#2536](https://github.com/moq-dev/moq/pull/2536))
### Other
- *(net)* replace the global LRU cache pool with per-track write-time eviction ([#2526](https://github.com/moq-dev/moq/pull/2526))
## [0.5.0](https://github.com/moq-dev/moq/compare/kio-v0.4.4...kio-v0.5.0) - 2026-07-22
### Added
- *(net)* route by cumulative cost on lite-06 announcements ([#2424](https://github.com/moq-dev/moq/pull/2424))
### Other
- Merge branch 'main' into dev
- *(kio)* [**breaking**] rename Future to Pollable, return Closed from the async API ([#2343](https://github.com/moq-dev/moq/pull/2343))
- *(net)* [**breaking**] caller-driven sessions via a (Session, Driver) pair ([#2302](https://github.com/moq-dev/moq/pull/2302))
- *(kio)* [**breaking**] delete Consumer write access, add role-less Shared for reverse queues ([#2074](https://github.com/moq-dev/moq/pull/2074))
- Merge branch 'main' into dev
- Merge branch 'main' into dev
## [0.4.4](https://github.com/moq-dev/moq/compare/kio-v0.4.3...kio-v0.4.4) - 2026-07-15
### Fixed
- *(moq-gst)* reconnect the moqsink publisher instead of dying on transport death ([#2240](https://github.com/moq-dev/moq/pull/2240))
## [0.4.3](https://github.com/moq-dev/moq/compare/kio-v0.4.2...kio-v0.4.3) - 2026-07-05
### Other
- [codex] backport moq-wasm to main ([#2086](https://github.com/moq-dev/moq/pull/2086))
## [0.4.2](https://github.com/moq-dev/moq/compare/kio-v0.4.1...kio-v0.4.2) - 2026-07-04
### Other
- [codex] Backport kio tokio sleep wrapper ([#2055](https://github.com/moq-dev/moq/pull/2055))
## [0.4.1](https://github.com/moq-dev/moq/compare/kio-v0.4.0...kio-v0.4.1) - 2026-06-30
### Added
- *(moq-net)* add OriginProducer::dynamic + infallible OriginConsumer::request_broadcast ([#1913](https://github.com/moq-dev/moq/pull/1913))
## [0.4.0](https://github.com/moq-dev/moq/compare/kio-v0.3.0...kio-v0.4.0) - 2026-06-16
### Fixed
- *(kio)* split waiters by condition so writes don't churn closed/consumer waiters ([#1739](https://github.com/moq-dev/moq/pull/1739))
- *(moq-net)* release cached state when a producer is aborted or dropped ([#1715](https://github.com/moq-dev/moq/pull/1715))
### Other
- rework Producer::poll/wait to a read-only predicate that returns a Mut ([#1735](https://github.com/moq-dev/moq/pull/1735))
### Fixed
- Split the internal waiter list into separate value / closed / consumer lists,
so an event only wakes the waiters that care about it. Previously every value
modification (the hot path) also woke parked `closed()` and `used`/`unused`
waiters, which re-registered and ping-ponged. No public API change.
### Changed
- Reworked `Producer::poll` / `Producer::wait`. They previously handed the
closure a `Mut` and auto-notified consumers whenever it touched the value via
`DerefMut`. Since a no-op like `Vec::pop` on an empty queue still trips
`DerefMut`, a pending poll would wake the polling task's own waiter and spin
into an infinite loop. They now take a read-only predicate over a `Ref` and,
on `Poll::Ready`, hand back a `Mut` with the lock still held so the caller
mutates atomically without the footgun. `Weak::poll_write` / `Weak::wait` had
no users and are removed.
## [0.3.0] - 2026-05-29
### Other
- Renamed from `conducer` to `kio`. The API is unchanged; only the crate name differs.