Skip to content

0.1.236

Choose a tag to compare

@github-actions github-actions released this 18 Aug 22:28
· 2420 commits to main since this release
bcd4c14
fix: bound realtime follow-up hot paths (#3094)

* fix: bound realtime follow-up hot paths

Follow-ups from the realtime memory/CPU sweep, each verified against current
main rather than carried over from the earlier stale-base branch.

- session-replay: both upload paths now time out. A hung request never settled,
  so `state.flushing` stayed set, every later flush early-returned while rrweb
  events kept queueing, and the queue grew until the session ended.
- poll: bound the extension-marker scan by its watermark instead of reading
  every marker row ever written and filtering in memory. The table keeps one row
  per session that has ever mutated an extension, so the read grew with lifetime
  users rather than with pending work.
- Content: `autoSync` only decides refetch cadence, but keying on it split one
  document's sync status across two cache entries and two independent poll
  loops (toolbar at 2s, sync bar at 30s, same action). Collapse the key, and
  replace NotionSyncBar's bare ["action"] invalidation — which refetched every
  mounted query app-wide on each sync tick — with the targeted helper the file
  already documents.
- real-time-sync skill: the documented cadence (2s until SSE connects, then 15s)
  never matched the code. It is 2s only during an active agent run, 60s
  otherwise, and no faster than 10s in a hidden tab.

The poll-handler guard asserting the screen-refresh scan did not run matched on
SQL text that the bounded extension-marker query now shares, so it is
re-anchored on the key argument and still asserts the same thing.

* fix: address review feedback on realtime follow-ups

- session-replay: fall back to AbortController + setTimeout when
  AbortSignal.timeout is unavailable, and clear the timer once the request
  settles. Previously those engines issued uploads with no signal at all, so the
  hang this fix targets was still reachable there.
- Content: read the per-document auto-sync toggle inside useDocumentSyncStatus
  instead of taking it per mount. `autoSync` is sent to the action and changes
  server behavior, so with one shared query key two observers could disagree and
  one component's query function could suppress or enable another's auto-sync.
  Every observer now resolves the same stored value, which is what the sync bar,
  toolbar and conflict banner already intended to share.