- 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>