Skip to content

EPIC: live realtime updates across the OS, not refresh-on-remount #2094

Description

@jaylfc

Raised by Jay 2026-07-21: after an external agent redeemed an invite and joined a project, the Projects app kept showing the old membership until the app was closed and reopened. The same day, newly approved members rendered in a detached group until a remount (see the members-view issue).

The ask

taOS should reflect state changes live, OS wide, not per app on remount. A desktop where you have to close and reopen a window to see what happened is not a desktop, and it directly undermines the agent story: agents act continuously, so the surfaces that watch them have to update continuously.

What already exists

There is SSE infrastructure (projectsApi.events is referenced in the Projects app), so this is not greenfield. The gap is that it is not consistently subscribed to, and several surfaces fetch once on mount instead.

Surfaces that need it, roughly in order of how obviously wrong they are today

  1. Project members: joins, approvals, removals, role changes.
  2. Board and tasks: claim, release, close, comment. Fleet lanes change these constantly and the board is stale within seconds of opening it.
  3. Agents app: registry additions, status changes, revocations.
  4. Notifications and Decisions: these are the surfaces where staleness is most harmful, since the entire point is a timely prompt.
  5. Invites: pending list, expiry countdown, redemption.

Design notes

  • Prefer one shared event stream with typed events over a stream per app, or the browser will hold a dozen connections. There is already a unified event bus concept in Unified inter-agent / system event + notification broadcast bus (trace + permissions backbone) #611.
  • Events should carry enough to patch local state, not just say "something changed" and trigger a refetch storm.
  • Reconnect with backoff, and refetch once on reconnect so a dropped stream cannot leave a surface permanently stale. A silently dead stream that still looks live is worse than polling.
  • Multi-user: events must be scoped per user and per project, never broadcast across tenants.

Why now

Two separate staleness bugs surfaced in one day of ordinary use, and one of them (members rendering in a detached group) made Jay suspect an access-control problem that did not exist. Stale UI in a permissions surface costs trust, not just convenience.

Related: #611 (unified event and notification bus), #2089 (members view grouping on add), #896 (universal control plane with live queue).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions