Skip to content

Phase C: catalog SSE invalidation feed + browser subscription/resync #121

Description

@brylie

Implements workspace-sharding.md §4's SSE contract, building on Phase A's
catalog_outbox table (schema exists, has status states pending_content →
content_durable → publishable → published, but no consumer yet) and
Phase B's real shard split.

  • SSE endpoint draining publishable catalog_outbox rows, scoped to an
    authorized Workspace + set of Spaces (never revealing an
    inaccessible title/hierarchy/existence signal).
  • Opaque Last-Event-ID cursor handling; catalog-resync on scope change,
    cursor gap, or ambiguous replay coverage.
  • Browser client subscribes and treats each event as a hint to refetch
    authoritative catalog state, never mutating its cache from the event
    payload directly.

Not in scope: lazy load/unload (Phase D), capacity benchmark (Phase E).

Done when: a Space-scoped SSE subscriber never receives an event revealing
inaccessible state, a missed event causes a revision-aware resync (not a
stale UI), and the sidebar updates live off SSE instead of only off direct
Yjs Awareness/doc observation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions