Step 22 - hardening pass

1 min czytania

Run a hardening pass over the whiteboard. Work through this checklist and fix what fails:

Accessibility:

  • Toolbar and all icon buttons: aria-labels, visible focus states, full keyboard operability; the canvas itself gets an aria-label describing the board.
  • Dialogs trap focus and close on Escape; the minimap is keyboard-navigable; color choices meet WCAG AA against their grounds; run an AXE pass over library, canvas chrome, and dialogs.
  • prefers-reduced-motion: verify focus-glide, confetti, laser trails, reaction floats and presentation transitions all degrade to instant/still.

Performance:

  • Confirm the single rAF-coalesced render effect is the only repaint path; no stray per-event draws.
  • Verify caches: note font-fit cache (capped 2000), decoded image cache, presence throttle 55 ms + 4 s heartbeat, draft downsampling at 200 points, self-terminating cursor animation loop on idle boards.
  • Load-test with a 500-element board: pan/zoom must stay smooth; if not, profile the painters first.

Robustness:

  • Rejected-write rollback paths all show a toast; killing the network mid-session recovers on reconnect.
  • Opening a deleted/nonexistent board shows a friendly "board not found" screen, not an infinite loader.
  • Undo concurrency guard: verify with two windows per prompt 07.
  • Emulator rule tests: guest write blocked under editLocked, presence/vote uid spoofing rejected, comment moderation matrix.

Tests:

vitest specs exist and pass for every pure module - geometry/hit-testing, note fit, eraser clipping, distribute/arrange, connection routing, undo inverse round-trip, and all AI layout kinds.

Finish with a short ARCHITECTURE.md: the collection layout, the flat-element + one-doc-per-element decision, paint bands, the optimistic write model, and the AI structure-not-coordinates rule - the five things a future contributor must not accidentally undo.

Dyskusja

Komentarze: 0

Brak komentarzy. Rozpocznij dyskusję.