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