Files
tines/CHANGELOG.md
T

2.9 KiB

Changelog

All notable changes to the tines crates. Versions follow Semantic Versioning; 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.