Follow-up hardening on the RuntimeFallbackBadge viewport-gating work: - AgentsView.tsx: registerAgentCardRef now returns a cached, stable callback per key (agentCardRefCallbacksRef) instead of a fresh closure each render. A fresh closure reads as unmount+remount to React; in environments without IntersectionObserver the mount path calls setVisibleAgentCardKeys -> re-render -> another fresh closure -> an infinite re-render loop (including jsdom). The cached entry is evicted on true unmount (el === null) so the Map cannot grow unbounded across created/deleted agents. - ActiveAgentsPanel.tsx: document the viewport-gated badge polling with an FNXC comment (behavior unchanged). - useRuntimeFallbackStatus.ts: guard __resetRuntimeFallbackToastDedupeStoreForTests to a no-op outside the test build (import.meta.env.MODE !== "test") so the test-only dedupe reset can never affect production code paths. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.3 KiB
6.3 KiB