Skip to content

[freeze] no_std WakeSource bridge — on-device live-tail subscriptions #302

Description

@joeldsouzax

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

  • a no_std WakeSource impl drives Subscription under a no_std executor in a test
  • documented as optional / executor-dependent

From the #279 no_std design conversation (2026-07-06).

Metadata

Metadata

Assignees

No one assigned

    Labels

    api-freezePre-1.0 API-freeze hardening (breaking-to-change-later)area: storenexus-store crate (codec/envelope/repo/subscription)

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions