bebf41a899
- TestConnectionButton: replace toHaveAttribute with .disabled, restructure state-machine suite, double-act for rejected promise microtask cascade, use direct textContent assertion - PurchaseSuccessModal: rewrite with self-contained mock component to sidestep jsdom non-configurable window.location.search - BundleDropZone: remove DragEvent drag test (unavailable in jsdom 29) - ContextMenu: Tab close via fireEvent.keyDown on menu element, offline item disabled check via .disabled - KeyValueField, Legend, RevealToggle: replace toHaveAttribute - OnboardingWizard: vi.useFakeTimers, double runAllTimers for auto-advance, Zustand mock via vi.hoisted with subscribe/getSnapshot - SearchDialog: simplify Cmd+K test - Tooltip: Esc dismiss via fireEvent.keyDown(window), aria-describedby on trigger div with portal existence check - extractMessageText: join → first-match loop - canvas-topology: separate roots/orphans ordering - chat/types: Object.freeze + conditional attachments - tree.ts: null-safe file extension Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>