Skip to content

build(deps): bump tears from 0.9.3 to 0.10.2 - #493

Merged
akiomik merged 2 commits into
mainfrom
dependabot/cargo/tears-0.10.2
Jul 28, 2026
Merged

build(deps): bump tears from 0.9.3 to 0.10.2#493
akiomik merged 2 commits into
mainfrom
dependabot/cargo/tears-0.10.2

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 27, 2026

Copy link
Copy Markdown
Contributor

Bumps tears from 0.9.3 to 0.10.2.

Release notes

Sourced from tears's releases.

v0.10.2

Fixed

  • Short-interval Timer subscriptions no longer replay a catch-up burst of missed ticks after a delay: however many interval boundaries elapse while a tick goes untaken, exactly one tick becomes deliverable, and the cadence resumes on the timer's original phase (first anchor-phase boundary strictly after the late tick). The timer's anchor is fixed at its stream's first poll — read from the clock of the runtime that polls it — and the first tick arrives one full interval after that anchor (RFC 0009 §4.2)
  • The runtime's frame scheduler no longer replays missed frame deadlines at sub-margin frame rates (above roughly 200 FPS): after a stall, at most one frame fires immediately and the cadence resumes on the frame anchor's phase — the same non-catch-up rule Timer now follows. At 60 FPS and other common rates the behavior is unchanged, since tokio's Skip already suppressed the burst outside its lateness margin

Added

  • tears::testing::TestStore, a deterministic test harness that drives an Application's update transitions, immediately ready effects, and — through a store-owned paused time context — time-dependent command effects, synchronously and with no wall-clock waiting (RFC 0008; RFC 0009)
    • send applies one message through update; receive, receive_matching, and receive_quit assert the next deliverable effect output — under a canonical per-leaf delivery order that is the store's own contract, not a runtime ordering guarantee — and apply it; state, redraw_requested, and subscription_ids observe the application state, the per-step redraw directive (RFC 0002), and the declared subscription set — deduplicated first-occurrence-stable — without starting any source
    • Assertions are exhaustive: deliverable output never received or an effect stream never driven to completion fails the test at receive, finish, or drop; output remaining after an observed quit is legally discarded, mirroring the runtime's shutdown contract
    • RFC 0003 cancellation semantics apply to the store's pending output: same-id supersede, keep-in-flight discard and release, explicit cancel, and quit suppression
    • Application::Message's bounds stay exactly Send + 'static: the store carries its own bounds (Debug on the store, PartialEq only on receive) and requires Clone nowhere
    • advance(duration) drives the time-dependent command effects (Command::timeout, retry backoff) through the ordinary receive flow: it anchors every pending leaf before the clock moves — so Command::timeout deadlines count from a leaf's enqueue-time virtual now (a retry's backoff starts at the poll that observes the failed attempt) — then moves virtual time by exactly duration. Tests run on a plain #[test] (TestStore::new panics inside an entered Tokio runtime); I/O-dependent leaves are out of scope, and subscription sources are never executed

... (truncated)

Changelog

Sourced from tears's changelog.

[0.10.2] - 2026-07-26

Fixed

  • Short-interval Timer subscriptions no longer replay a catch-up burst of missed ticks after a delay: however many interval boundaries elapse while a tick goes untaken, exactly one tick becomes deliverable, and the cadence resumes on the timer's original phase (first anchor-phase boundary strictly after the late tick). The timer's anchor is fixed at its stream's first poll — read from the clock of the runtime that polls it — and the first tick arrives one full interval after that anchor (RFC 0009 §4.2)
  • The runtime's frame scheduler no longer replays missed frame deadlines at sub-margin frame rates (above roughly 200 FPS): after a stall, at most one frame fires immediately and the cadence resumes on the frame anchor's phase — the same non-catch-up rule Timer now follows. At 60 FPS and other common rates the behavior is unchanged, since tokio's Skip already suppressed the burst outside its lateness margin

Added

  • tears::testing::TestStore, a deterministic test harness that drives an Application's update transitions, immediately ready effects, and — through a store-owned paused time context — time-dependent command effects, synchronously and with no wall-clock waiting (RFC 0008; RFC 0009)
    • send applies one message through update; receive, receive_matching, and receive_quit assert the next deliverable effect output — under a canonical per-leaf delivery order that is the store's own contract, not a runtime ordering guarantee — and apply it; state, redraw_requested, and subscription_ids observe the application state, the per-step redraw directive (RFC 0002), and the declared subscription set — deduplicated first-occurrence-stable — without starting any source
    • Assertions are exhaustive: deliverable output never received or an effect stream never driven to completion fails the test at receive, finish, or drop; output remaining after an observed quit is legally discarded, mirroring the runtime's shutdown contract
    • RFC 0003 cancellation semantics apply to the store's pending output: same-id supersede, keep-in-flight discard and release, explicit cancel, and quit suppression
    • Application::Message's bounds stay exactly Send + 'static: the store carries its own bounds (Debug on the store, PartialEq only on receive) and requires Clone nowhere
    • advance(duration) drives the time-dependent command effects (Command::timeout, retry backoff) through the ordinary receive flow: it anchors every pending leaf before the clock moves — so Command::timeout deadlines count from a leaf's enqueue-time virtual now (a retry's backoff starts at the poll that observes the failed attempt) — then moves virtual time by exactly duration. Tests run on a plain #[test] (TestStore::new panics inside an entered Tokio runtime); I/O-dependent leaves are out of scope, and subscription

... (truncated)

Commits
  • daa8bd1 Merge pull request #264 from akiomik/chore-bump-version-to-0.10.2
  • 35d12c5 chore: bump version to 0.10.2
  • 7e5918d Merge pull request #263 from akiomik/docs/teststore-example-tests
  • 260fa17 docs(examples): add TestStore tests and a Testing guide
  • ac3e71b Merge pull request #262 from akiomik/refactor/rename-util-modules
  • db65934 refactor: rename util modules to concept names
  • 6fa1337 Merge pull request #261 from akiomik/chore-tidy-up-clippy-lints-in-cargo-toml
  • 0c38d91 chore: tidy up clippy lints in Cargo.toml
  • de6f999 Merge pull request #260 from akiomik/chore/allow-attributes
  • dd3a23f chore(lints): enable clippy allow_attributes, migrate allow to expect
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [tears](https://github.com/akiomik/tears) from 0.9.3 to 0.10.2.
- [Release notes](https://github.com/akiomik/tears/releases)
- [Changelog](https://github.com/akiomik/tears/blob/main/CHANGELOG.md)
- [Commits](akiomik/tears@v0.9.3...v0.10.2)

---
updated-dependencies:
- dependency-name: tears
  dependency-version: 0.10.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file rust Pull requests that update rust code labels Jul 27, 2026
tears 0.10 replaces SubscriptionSource::id() with a Key associated
type and key() method, removes SubscriptionId::of, makes
Command::effect private in favor of Command::quit(), replaces
Timer::try_new(u64) with Timer::new(NonZeroU64), and replaces
Runtime::try_new(flags, u32) with the infallible
Runtime::new(flags, FrameRate).
@akiomik
akiomik merged commit c199559 into main Jul 28, 2026
6 checks passed
@akiomik
akiomik deleted the dependabot/cargo/tears-0.10.2 branch July 28, 2026 02:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant