Documentation
# 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.