Files
tines/CHANGELOG.md
T

83 lines
2.9 KiB
Markdown

# Changelog
All notable changes to the tines crates. Versions follow
[Semantic Versioning](https://semver.org/); before 1.0, a minor bump may break
the API.
## 0.3.0 — 2026-10-18
### Breaking
- `Store` now requires `release(&mut self, id)` and
`is_released(&self, id) -> bool`. Implementations of `Store` — including test
doubles and future backends — must provide them.
### Added
- `Store::release` marks an observation as sent, so it is no longer offered for
exchange. `MemStore` tracks a per-entry `released` flag, and its
`for_each_addressed_id` skips released ids as an optimization (the exchange
predicate remains the load-bearing check). Releasing an id that is not stored
is a no-op.
## 0.2.1 — 2026-10-18
### Changed
- Package metadata only: `repository`, `documentation`, `readme`,
`keywords` and `categories`, shared through `[workspace.package]`. The
README now appears on crates.io.
- Each crate now ships the Apache-2.0 `LICENSE` text.
## 0.2.0 — 2026-10-18
Hardening from a full-codebase review. Wire-compatible with 0.1.0 except
where noted.
### Added
- `Exchange::on_send_error`: rolls back the last `next_frame` after a failed
send. `Node::poll` calls it, so a `Busy` or `Unreachable` frame is retried
instead of being lost.
- `Store::for_each_addressed_id`, with a default that visits every id.
`MemStore` overrides it, so custody no longer reads every broadcast
observation on each poll.
- `Bloom::fold`, and `Bloom::from_parts` now accepts any power-of-two length up
to `SUMMARY_BYTES`. Summaries are folded to fit the transport's MTU; a
0.1.0 node rejects a folded summary, so mixed-version links only sync when
the MTU allows a full 512-byte filter.
- `InFlight`, describing a fragment stream in progress.
### Changed
- **Breaking:** `Peer::in_flight` is now `Option<InFlight>` (was
`Option<(ObservationId, u8)>`).
- Custody (addressed) and broadcast sending alternate per peer, and addressed
candidates are taken in rotation.
- Bounce suppression lasts one contact, as the addressed-delivery spec says.
### Fixed
- A fragment stream could panic, or send corrupt fragments, when the
observation's age changed encoded length mid-stream or the tick went
backwards.
- Summaries larger than the MTU stopped all broadcast sync on narrow links.
- A full bounce table silently stopped recording, so one addressed message
was re-sent on every poll and starved broadcast.
- An addressed send interrupted another peer's fragment stream, which was
then never finished.
- An addressed message that couldn't fit the MTU blocked every other
addressed message for that peer.
- A duplicate addressed message was forwarded back to the carrier that sent
it.
### CI
- Tests, clippy and docs also run without the `alloc` feature; doc warnings
fail the build; `--locked` everywhere; toolchain pinned to 1.99.0; actions
pinned to commit SHAs.
## 0.1.0
Initial release: `tines-core` and `tines-sim`.