What happens
Measured with performance.getEntriesByType('resource') on objectui @ 67dadd6 against the showcase (objectstack main @ a39b02a6b), signed in as the seeded admin:
| page | pair GET /data/sys_inbox_message?top=20 + GET /data/sys_notification_receipt?top=200 |
|---|
/_console/home, idle | every 2000 ms (24 pairs in 85 s; gaps 1999-2001 ms) |
| any app page, idle | every ~10 s (as INBOX_POLL_MS in packages/app-shell/src/hooks/sharedUserFeeds.ts says) |
So the home page issues one request per second just to keep the bell current, five times the declared cadence, and the receipt read carries top=200 each time. The SharedFeed dedupes consumers, so the 2 s cadence on home points at a second scheduler on that page (useHomeInbox / the todo card, or a useClientNotificationspollInterval) racing the shared feed rather than joining it.
Separately: the runtime loads RealtimeServicePlugin on a stock boot, but the bell does not subscribe to it — polling is the only transport.
Expected
- One cadence, owned by the shared feed, on every page (home included); the todo card and the bell read the same snapshot.
- Prefer the realtime channel for the bell when the server advertises it, with polling as the fallback; 10 s (30 s hidden) is fine as the fallback cadence.
Related noise found on the same run: the ⌘K palette fires the identical GET /api/v1/search?q=… three times per typed query, and the kanban issues its ?top=100&select=… fetch twice on mount.
Found during the objectstack pin-bump dogfood (objectstack#14295).
Generated by Claude Code
What happens
Measured with
performance.getEntriesByType('resource')on objectui @ 67dadd6 against the showcase (objectstackmain@ a39b02a6b), signed in as the seeded admin:GET /data/sys_inbox_message?top=20+GET /data/sys_notification_receipt?top=200/_console/home, idleINBOX_POLL_MSinpackages/app-shell/src/hooks/sharedUserFeeds.tssays)So the home page issues one request per second just to keep the bell current, five times the declared cadence, and the receipt read carries
top=200each time. TheSharedFeeddedupes consumers, so the 2 s cadence on home points at a second scheduler on that page (useHomeInbox/ the todo card, or auseClientNotificationspollInterval) racing the shared feed rather than joining it.Separately: the runtime loads
RealtimeServicePluginon a stock boot, but the bell does not subscribe to it — polling is the only transport.Expected
Related noise found on the same run: the ⌘K palette fires the identical
GET /api/v1/search?q=…three times per typed query, and the kanban issues its?top=100&select=…fetch twice on mount.Found during the objectstack pin-bump dogfood (objectstack#14295).
Generated by Claude Code