Why
WakeSource is a pluggable trait; StreamNotifiers (tokio) is the server-side impl (Card A). A no_std device that wants on-device live-tail subscriptions needs a WakeSource built on a no_std async primitive. This is the "no_std bridge."
The primary no_std device model is append-and-sync (subscriptions live server-side, where tokio already runs), so this is only needed if a device genuinely runs on-device live-tail — and driving that also needs a no_std executor (embassy). It is additive (a new trait impl), so not a hard freeze gate; scheduled in pre-freeze to complete the no_std story end-to-end.
Depends on Card A (#300) (WakeSource trait standalone) and Card B (store no_std).
What
- A no_std+alloc
WakeSource impl using event-listener (v5 no_std mode) / futures::task::AtomicWaker / diatomic-waker, preserving the arm-before-confirm-rescan lost-wakeup discipline that StreamNotifiers implements.
- Verify the generic loop (
subscription_cursor.rs) compiles --no-default-features for a bare-metal target — measure, don't assert (rule 9); it reads as no_std (trait + futures combinators, no tokio) but must be compiled to confirm no std-only combinator snuck in.
Acceptance
From the #279 no_std design conversation (2026-07-06).
Why
WakeSourceis a pluggable trait;StreamNotifiers(tokio) is the server-side impl (Card A). A no_std device that wants on-device live-tail subscriptions needs aWakeSourcebuilt on a no_std async primitive. This is the "no_std bridge."The primary no_std device model is append-and-sync (subscriptions live server-side, where tokio already runs), so this is only needed if a device genuinely runs on-device live-tail — and driving that also needs a no_std executor (embassy). It is additive (a new trait impl), so not a hard freeze gate; scheduled in pre-freeze to complete the no_std story end-to-end.
Depends on Card A (#300) (WakeSource trait standalone) and Card B (store no_std).
What
WakeSourceimpl usingevent-listener(v5 no_std mode) /futures::task::AtomicWaker/diatomic-waker, preserving the arm-before-confirm-rescan lost-wakeup discipline thatStreamNotifiersimplements.subscription_cursor.rs) compiles--no-default-featuresfor a bare-metal target — measure, don't assert (rule 9); it reads as no_std (trait + futures combinators, no tokio) but must be compiled to confirm no std-only combinator snuck in.Acceptance
WakeSourceimpl drivesSubscriptionunder a no_std executor in a testFrom the #279 no_std design conversation (2026-07-06).