0.1.236
·
2420 commits
to main
since this release
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.