Skip to content

[Epic] Aura session storage and persistance #325

Description

@justintime4tea

AURA needs session storage. The official/supported backend to support that session storage, and how session storage will work, needs to be decided on. An ADR needs to be created which addresses the need for session storage and then a first iteration is needed which satisfies this ADR.

  • AURA today keeps every piece of cross-request state in one pod's RAM. Behind a
    load balancer with no session affinity, that state is invisible to the other pods.
  • Two subsystems break in a multi-pod deployment today: HITL conversational
    approvals
    and the A2A task registry. Both are explicitly flagged in code as
    "not durable / TBD resilient location".
  • The fix is a small set of AURA-owned storage traits. We can ship a specific implementation, such as one backed by Redis/Valkey, and the existing in-memory behavior stays as the default impl; anyone
    can write their own backend against the traits.
  • A shared store alone is not sufficient. Two mechanisms are needed together:
    1. a durable store (survives restart, readable by any pod), and
    2. an event bus (pub/sub) to wake the pod that owns a suspended request and to fan out streaming updates across pods. An implementation using Redis/Valkey would give us both from one connection but there may be other choices we'd like to entertain so this is open for the ADR to explore.

Phased rollout (Sub-issues)

Each phase is a self-contained issue/PR. Phase 1 is the prerequisite for everything else;
phases 2 and 3 are independent and can land in either order; phase 4 needs both.

  1. Traits + in-memory refactor (no behavior change). Introduce SessionStore,
    ApprovalStore, EventBus; move today's structures behind them; A2A already has
    TaskStore. Ship with backend = memory. This is a pure refactor — existing tests are
    the guard.
  2. Redis/Valkey backend — A2A task store. Smallest, highest-value cross-pod win
    (message:send + poll works across pods). No bus needed for the poll path.
  3. Redis/Valkey backend — HITL approvals (store + wake bus). Cross-pod conversational
    approvals via approval:{id} pub/sub. Fail-closed preserved.
  4. A2A streaming/cancel over the bus. Cross-pod message:stream / subscribe /
    cancel via the a2a:task:{id} (fan-out) and a2a:cancel:{id} (routed cancel) topics.
    Depends on the shared task store (phase 2) and the EventBus impl (phase 3).
  5. Helm/Valkey packaging + docs. Values, Secret wiring, /health, runbook.

Activity

  1. added a commit that references this issue on Jul 13, 2026
  2. changed the title [-]Session storage (cross-pod state)[/-] [+]HITL Session storage (durable+cross-pod state)[/+] on Jul 16, 2026
  3. changed the title [-]HITL Session storage (durable+cross-pod state)[/-] [+]HITL Session storage (durable + cross-pod state)[/+] on Jul 16, 2026
  4. changed the title [-]HITL Session storage (durable + cross-pod state)[/-] [+]HITL Session storage for approvals and A2A tasks (durable + cross-pod state) [/+] on Jul 16, 2026
  5. changed the title [-]HITL Session storage for approvals and A2A tasks (durable + cross-pod state) [/-] [+][Epic] Aura session storage and persistance[/+] on Jul 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions