COMI UI repair · 2026-09-16

This page records the source-grounded UI repair shipped from COMI commit 349ff121d7a6283e2aecd317b37ff60eda79a20a.

Root causes and fixes

  • The served static build was stale relative to the source tree. A fresh Vite build now serves the repaired source from the existing nginx root /home/loca/dev/comi/dist.
  • The shell’s flex min-size chain could let editor content push the viewport and sibling controls out of usable bounds. The app root, main content, split panes, and docks now use bounded min-size and overflow behavior.
  • Editor pane activation did not synchronize cursor and selection metadata, and context menus resolved the globally active pane instead of their originating pane. Pane activation and menu actions now stay local to the interacted editor.
  • Tabs and Pages actions had invisible or small mouse-only controls. Tabs now have keyboard navigation, a labeled New file button, visible focus states, and larger close/save targets; Pages rows reserve action space and expose focusable actions.
  • Command, context, slash, and inline-edit overlays now retain focus during pointer selection, clamp to available viewport space, scroll internally, and dismiss predictably with Escape. Emoji suggestions are clickable.
  • Settings focus restoration now runs when the conditionally mounted drawer closes. Status-bar popups retain focus, close predictably, scroll within the viewport, and wrap on narrow widths.

Verification

  • npm run lint passed.
  • npm test passed: 7 files, 40 tests.
  • npm run build passed with TypeScript and Vite production output.
  • The served /, /editor, and /pages/missing routes returned HTTP 200 through the existing SPA fallback.
  • Every asset referenced by the served entry HTML returned HTTP 200, and the served entry HTML matched the local build byte-for-byte.
  • nginx remained active and the existing COMI vhost was not changed.

Headless browser DOM, screenshot, and interaction replay evidence is not claimed for this publication because the managed browser relay extension was unavailable during the repair session. Persistence keys, file APIs, route behavior, and app identity were preserved; no user data reset was performed.

D-118 gap-fill verification · 2026-09-18

Observed on served build https://comi.loca.zone/ with dist entry SHA256 prefix f122a4d7 (local /home/loca/dev/comi/dist/index.html matches served bytes).

  • D-111 slash-menu and settings Escape evidence preserved without rerun: evidence/2026-09-18-d111-journeys-901c9052.
  • D-118 gap-fill journeys on the same served build: evidence/2026-09-18-d118-comi-gapfill-final-e2887824/gapfill_result.json reports success=true, journey1.pass=true, journey2.pass=true, console_errors=[].
  • Interaction proof uses native CDP on the page target with real keyboard char events for editor typing; slash menu opens via fresh-line insertText("/") per D-111; overlays exercised at 1366×900 and 390×844 with bounds/focus/Escape one-layer checks for command palette, context menu, slash menu, and inline edit; settings drawer opens via real click and closes via Escape/toggle; edit/save/reload preserves localStorage key magic-editor-storage version 3 with marker COMI_D118_MARKER_e2887824.
  • Wiki publication command: bash /home/loca/dev/wikis/build.sh comi (publisher lock + Quartz build gate).