Shortcuts audit: never bind keys the browser or OS intercepts; ergonomic, conventional choices #159

Closed
opened 2026-09-26 09:35:27 +00:00 by kayg · 13 comments
Owner

Owner 2026-09-26: the Files 'New' tooltip shows ⇧⌘N, which Chrome and Safari take for a new incognito/private window, so it never reaches the app. Rule (add to DESIGN §34): a shortcut must be (1) not intercepted by any major browser (Chrome, Safari, Firefox, Edge on macOS/Windows/Linux) or the OS, (2) conventional and familiar, (3) ergonomic.

  • Inventory every shortcut in the app (one registry: find it; if shortcuts are scattered, move them into one registry module so tooltips, the ? help sheet and handlers read the same table: reuse gate).
  • Check each against a reserved list kept in code with sources: e.g. ⌘/Ctrl + N, ⇧N, T, ⇧T, W, ⇧W, Q, L, R, ⇧R, D, ⇧D, P, ⇧P, O, H, M, J, ⇧J, Y, ⇧B, ⇧Del, Tab, 1-9, [ ], ⌥←/→, F5, F6, F11, F12, ⌘⌥I, ⌘, (Safari settings), Space/Arrow scrolling where no editor has focus, etc. A unit test fails if any binding hits the list.
  • Prefer conventions the owner will know: single keys when focus is not in a text field (Gmail/Linear/GitHub style): N or C = new/compose, / = search, ? = shortcuts help, ⌘K/Ctrl+K = palette, J/K = next/prev, E = edit, ⌘Enter = send, Esc = close, G then X = go to mode, ⌘I = inspector (already decided, verify not intercepted in the context it runs), ⌘⇧C copy link: verify (Chrome devtools inspect uses ⌘⇧C!). Replace every conflicting binding.
  • Platform display: ⌘ on macOS, Ctrl elsewhere, in every tooltip and the help sheet from the registry.
  • Single-key shortcuts never fire while typing in inputs, the editor, or with IME composition.
  • Report a before/after table in the job report.
Owner 2026-09-26: the Files 'New' tooltip shows ⇧⌘N, which Chrome and Safari take for a new incognito/private window, so it never reaches the app. Rule (add to DESIGN §34): a shortcut must be (1) not intercepted by any major browser (Chrome, Safari, Firefox, Edge on macOS/Windows/Linux) or the OS, (2) conventional and familiar, (3) ergonomic. - Inventory every shortcut in the app (one registry: find it; if shortcuts are scattered, move them into one registry module so tooltips, the ? help sheet and handlers read the same table: reuse gate). - Check each against a reserved list kept in code with sources: e.g. ⌘/Ctrl + N, ⇧N, T, ⇧T, W, ⇧W, Q, L, R, ⇧R, D, ⇧D, P, ⇧P, O, H, M, J, ⇧J, Y, ⇧B, ⇧Del, Tab, 1-9, [ ], ⌥←/→, F5, F6, F11, F12, ⌘⌥I, ⌘, (Safari settings), Space/Arrow scrolling where no editor has focus, etc. A unit test fails if any binding hits the list. - Prefer conventions the owner will know: single keys when focus is not in a text field (Gmail/Linear/GitHub style): N or C = new/compose, / = search, ? = shortcuts help, ⌘K/Ctrl+K = palette, J/K = next/prev, E = edit, ⌘Enter = send, Esc = close, G then X = go to mode, ⌘I = inspector (already decided, verify not intercepted in the context it runs), ⌘⇧C copy link: verify (Chrome devtools inspect uses ⌘⇧C!). Replace every conflicting binding. - Platform display: ⌘ on macOS, Ctrl elsewhere, in every tooltip and the help sheet from the registry. - Single-key shortcuts never fire while typing in inputs, the editor, or with IME composition. - Report a before/after table in the job report.
Author
Owner

Started shortcuts audit on branch job/shortcuts. Base SHA: c2a81aeab9. Working tree was clean at start.

Started shortcuts audit on branch job/shortcuts. Base SHA: c2a81aeab9fd6090cb4eba448af5835c4877e7de. Working tree was clean at start.
Author
Owner

Finding: the shared registry already exists at apps/web/src/lib/shortcuts/registry.ts, but FilesBrowser still binds New folder and Copy link directly in onKeyDown and repeats those keys in menu/toolbar hints. New uses Mod+Shift+N; Google documents that as Incognito on Chrome macOS and Ctrl+Shift+N on Chrome Windows/Linux, and Apple documents Shift+Command+N as Safari Private Browsing: https://support.google.com/chrome/answer/95464?hl=en-EU https://support.apple.com/guide/mac-help/browse-the-web-mchlgtd_web01/mac. Copy link uses Mod+Shift+C; Chrome/Edge DevTools reserve Command+Shift+C on macOS: https://learn.microsoft.com/en-us/microsoft-edge/devtools/shortcuts/ https://developer.chrome.com/docs/devtools/inspect-mode.

Finding: the shared registry already exists at apps/web/src/lib/shortcuts/registry.ts, but FilesBrowser still binds New folder and Copy link directly in onKeyDown and repeats those keys in menu/toolbar hints. New uses Mod+Shift+N; Google documents that as Incognito on Chrome macOS and Ctrl+Shift+N on Chrome Windows/Linux, and Apple documents Shift+Command+N as Safari Private Browsing: https://support.google.com/chrome/answer/95464?hl=en-EU https://support.apple.com/guide/mac-help/browse-the-web-mchlgtd_web01/mac. Copy link uses Mod+Shift+C; Chrome/Edge DevTools reserve Command+Shift+C on macOS: https://learn.microsoft.com/en-us/microsoft-edge/devtools/shortcuts/ https://developer.chrome.com/docs/devtools/inspect-mode.
Author
Owner

Finding: several registry bindings are also intercepted in page-level focus contexts. The app uses Cmd/Ctrl+F for scoped search, Cmd+I for the inspector, Cmd/Ctrl+K for search, Cmd+1–5 for modes, and Cmd/Ctrl+Shift+K for commands. Chrome documents F, K, and 1–9 for Find, address-bar search, and tab switching; Firefox documents Cmd+I as Page Info; Edge documents Ctrl+Shift+K as Duplicate tab. Sources: https://support.google.com/chrome/answer/157179?hl=en-HK https://support.mozilla.org/en-US/kb/firefox-page-info-window?redirectlocale=en-US&redirectslug=firefox-page-info-window-redirect-1 https://support.microsoft.com/en-us/edge/keyboard-shortcuts-in-microsoft-edge. The mode key hints in TabBar and the layout handler are also separate from the registry.

Finding: several registry bindings are also intercepted in page-level focus contexts. The app uses Cmd/Ctrl+F for scoped search, Cmd+I for the inspector, Cmd/Ctrl+K for search, Cmd+1–5 for modes, and Cmd/Ctrl+Shift+K for commands. Chrome documents F, K, and 1–9 for Find, address-bar search, and tab switching; Firefox documents Cmd+I as Page Info; Edge documents Ctrl+Shift+K as Duplicate tab. Sources: https://support.google.com/chrome/answer/157179?hl=en-HK https://support.mozilla.org/en-US/kb/firefox-page-info-window?redirectlocale=en-US&redirectslug=firefox-page-info-window-redirect-1 https://support.microsoft.com/en-us/edge/keyboard-shortcuts-in-microsoft-edge. The mode key hints in TabBar and the layout handler are also separate from the registry.
Author
Owner

Finding: a Shift+Mod+digit replacement would still take macOS screenshot keys (Shift+Command+3/4, and 5 for the screenshot UI). The reserved-key regression test caught the first proposal. Mode switching now uses Mod+Alt+the mode number; the matcher will use the physical digit key so Option does not turn the displayed digit into a different glyph. Source: https://support.apple.com/guide/mac-help/keyboard-shortcuts-mchlgtd_kbd01/mac

Finding: a Shift+Mod+digit replacement would still take macOS screenshot keys (Shift+Command+3/4, and 5 for the screenshot UI). The reserved-key regression test caught the first proposal. Mode switching now uses Mod+Alt+the mode number; the matcher will use the physical digit key so Option does not turn the displayed digit into a different glyph. Source: https://support.apple.com/guide/mac-help/keyboard-shortcuts-mchlgtd_kbd01/mac
Author
Owner

The current reserved-key regression test skips every scope: 'editor' entry. I expanded it locally to include editor scope; the test then failed with 14 matches: format.italic (Mod+I, Firefox Page Info), format.link (Ctrl+K, Chrome/Firefox/Edge search), format.blockquote (Cmd+Shift+B, Chrome bookmarks bar), format.codeBlock (Cmd+Option+C, Chrome/Firefox inspector), and edit.redo (Mod+Y, Chrome/Safari/Edge history). I am checking the editor-owned key handling and will encode the scope rule explicitly so the test covers every app-surface binding without treating standard editor commands as page shortcuts.

The current reserved-key regression test skips every `scope: 'editor'` entry. I expanded it locally to include editor scope; the test then failed with 14 matches: `format.italic` (`Mod+I`, Firefox Page Info), `format.link` (`Ctrl+K`, Chrome/Firefox/Edge search), `format.blockquote` (`Cmd+Shift+B`, Chrome bookmarks bar), `format.codeBlock` (`Cmd+Option+C`, Chrome/Firefox inspector), and `edit.redo` (`Mod+Y`, Chrome/Safari/Edge history). I am checking the editor-owned key handling and will encode the scope rule explicitly so the test covers every app-surface binding without treating standard editor commands as page shortcuts.
Author
Owner

The sourced audit found three app-surface conflicts absent from the checkpoint's reserved table: Chrome uses ⌘⌥N for Split View and ⌘⌥↑/↓ to focus browser chrome; Edge uses ⇧⌘E on macOS and Ctrl+Shift+E on Windows/Linux for sidebar search. The updated regression run fails on files.newFolder, photos.zoomIn, photos.zoomOut, and app.inspector for these exact matches. I will replace them with a Files-local C, plain +/- photo zoom, and Mod+Shift+. for the inspector, then keep these source entries in the reserved list.

The sourced audit found three app-surface conflicts absent from the checkpoint's reserved table: Chrome uses `⌘⌥N` for Split View and `⌘⌥↑/↓` to focus browser chrome; Edge uses `⇧⌘E` on macOS and `Ctrl+Shift+E` on Windows/Linux for sidebar search. The updated regression run fails on `files.newFolder`, `photos.zoomIn`, `photos.zoomOut`, and `app.inspector` for these exact matches. I will replace them with a Files-local `C`, plain `+`/`-` photo zoom, and `Mod+Shift+.` for the inspector, then keep these source entries in the reserved list.
Author
Owner

Inventory finding: FilesBrowser.svelte and RecentView.svelte handle Mod+ArrowDown/Up directly, InboxPanel.svelte handles Delete/Mod+Backspace directly, and ConfigGroup.svelte submits on Mod+S. None of those bindings was in the shared registry. Chrome lists Mod+S as “Save the current page” in its keyboard table (https://support.google.com/chrome/answer/157179?hl=en). I added a failing registry coverage test. I will move these actions into the registry and change config save to Mod+Enter so the browser Save command remains available.

Inventory finding: `FilesBrowser.svelte` and `RecentView.svelte` handle Mod+ArrowDown/Up directly, `InboxPanel.svelte` handles Delete/Mod+Backspace directly, and `ConfigGroup.svelte` submits on Mod+S. None of those bindings was in the shared registry. Chrome lists Mod+S as “Save the current page” in its keyboard table (https://support.google.com/chrome/answer/157179?hl=en). I added a failing registry coverage test. I will move these actions into the registry and change config save to Mod+Enter so the browser Save command remains available.
Author
Owner

Gate finding: bun run check reported two Svelte type errors in the Calendar overflow array because the conditional app.inspector shortcut widened to string, while MenuNode.shortcut requires a registry ID. I added as const to that entry. The rerun finished with svelte-check found 0 errors and 0 warnings.

Gate finding: `bun run check` reported two Svelte type errors in the Calendar overflow array because the conditional `app.inspector` shortcut widened to `string`, while `MenuNode.shortcut` requires a registry ID. I added `as const` to that entry. The rerun finished with `svelte-check found 0 errors and 0 warnings`.
Author
Owner

Calendar grid merge finding: the incoming page used Cmd/Ctrl +/− for grid zoom. Chrome, Safari, Firefox and Edge reserve those chords for browser page zoom (official sources are now listed beside the combos in apps/web/src/lib/shortcuts/registry.test.ts).

I changed the grid to use +/− only while focus is inside the Calendar grid. The action reads registry entries, the focused region exposes aria-keyshortcuts, and DESIGN §39 records the choice. Day/Week arrow navigation is also scoped to the focused grid region.

The shortcut registry suite passes: 1 file, 6 tests.

Calendar grid merge finding: the incoming page used Cmd/Ctrl +/− for grid zoom. Chrome, Safari, Firefox and Edge reserve those chords for browser page zoom (official sources are now listed beside the combos in `apps/web/src/lib/shortcuts/registry.test.ts`). I changed the grid to use `+`/`−` only while focus is inside the Calendar grid. The action reads registry entries, the focused region exposes `aria-keyshortcuts`, and DESIGN §39 records the choice. Day/Week arrow navigation is also scoped to the focused grid region. The shortcut registry suite passes: 1 file, 6 tests.
Author
Owner

Post-merge adversarial round is in progress on a local server. The harness has reported these non-SLOW findings so far; they affect server/API files outside this shortcuts job:

  • tests/adversarial/attack.py: 12 of 24 concurrent POST /api/v1/notes/tasks requests timed out at the probe's 60-second request timeout. The single-request baseline was 5/5 successful, p50 5.808s.
  • tests/adversarial/attack.py: in the 24-request Journal PATCH race using one If-Match value, 16 requests timed out at the probe's 30-second timeout; one returned 200 and seven returned 412. The expected result is one 200 and 23 conflicts.
  • tests/adversarial/attack.py: one Photos fixture byte-upload request for burst-047.jpg timed out while the surrounding fixture uploads returned success.
  • tests/adversarial/attack2.py: after creating a live Files share and opting the recipient's Photos library into the shared root, the timeline returned 200 with no days for the full 12-second visibility window.
  • tests/adversarial/attack2.py: with 64 SSE streams open, 20 mkdir requests took 8.6s, above the probe's 5s bound.

The other findings so far are explicitly marked SLOW and are being treated as shared-host load per the owner rule. I am completing this one round and will include its final result with the gate report.

Post-merge adversarial round is in progress on a local server. The harness has reported these non-SLOW findings so far; they affect server/API files outside this shortcuts job: - `tests/adversarial/attack.py`: 12 of 24 concurrent `POST /api/v1/notes/tasks` requests timed out at the probe's 60-second request timeout. The single-request baseline was 5/5 successful, p50 5.808s. - `tests/adversarial/attack.py`: in the 24-request Journal `PATCH` race using one `If-Match` value, 16 requests timed out at the probe's 30-second timeout; one returned 200 and seven returned 412. The expected result is one 200 and 23 conflicts. - `tests/adversarial/attack.py`: one Photos fixture byte-upload request for `burst-047.jpg` timed out while the surrounding fixture uploads returned success. - `tests/adversarial/attack2.py`: after creating a live Files share and opting the recipient's Photos library into the shared root, the timeline returned 200 with no days for the full 12-second visibility window. - `tests/adversarial/attack2.py`: with 64 SSE streams open, 20 mkdir requests took 8.6s, above the probe's 5s bound. The other findings so far are explicitly marked SLOW and are being treated as shared-host load per the owner rule. I am completing this one round and will include its final result with the gate report.
Author
Owner

Additional non-SLOW finding from tests/adversarial/attack2.py: while the async purge probe removed another user's Home containing 20,000 small files, an unrelated user's file upload returned successfully but took 19.58s; the probe's bound is under 2s. This is cross-user write latency during purge. It is outside the owned shortcut files and should receive server-side follow-up.

Additional non-SLOW finding from `tests/adversarial/attack2.py`: while the async purge probe removed another user's Home containing 20,000 small files, an unrelated user's file upload returned successfully but took 19.58s; the probe's bound is under 2s. This is cross-user write latency during purge. It is outside the owned shortcut files and should receive server-side follow-up.
Author
Owner

Completed: keyboard shortcut audit and registry wiring

Branch: job/shortcuts
Head: 1b1f70fe390555a26e6840a0c4c4d75975fc2072 (Merge dev into shortcuts and keep calendar keys registry-owned)

The shortcut registry now drives app bindings, hints, and the keyboard help sheet. I routed the remaining Files, Recent, Notifications, Admin settings, and Calendar handlers through it; added sourced reserved-key checks and IME guards; and documented the rules in DESIGN §34/§39. The merge from dev is included as required.

Area Before After
Search ⌘K ⌘/
Scoped find ⌘F ⌘⇧F
Commands ⌘⇧K ⌘⇧;
Files New ⇧⌘N (browser private-window shortcut) C in Files
Admin config save ⌘S / Ctrl+S ⌘Enter / Ctrl+Enter
Calendar navigation page-level Left/Right J/K; arrows remain owned by the focused date strip or grid
Calendar grid zoom browser-reserved ⌘+ / Ctrl+ + +/− while focus is inside the grid
Shortcut implementation bindings and hints split across handlers registry entries drive handlers, hints, help, and accessibility attributes

Changed job files (30):

  • apps/web/src/lib/shortcuts/{registry.ts,match.ts,registry.test.ts} and apps/web/src/lib/components/KeyboardShortcutsSheet.svelte
  • apps/web/src/lib/components/{TagEditor.svelte,search-dialog.svelte}; apps/web/src/routes/+layout.svelte; apps/web/src/lib/composer/Composer.svelte
  • Files: apps/web/src/lib/files/{FilesBrowser.svelte,RecentView.svelte,ShareDialog.svelte,TrashView.svelte,UploadToast.svelte}
  • apps/web/src/lib/notifications/InboxPanel.svelte; apps/web/src/lib/photos/{PhotoTimeline.svelte,PhotoViewer.svelte,PhotosView.svelte}; apps/web/src/lib/search/SearchPreview.svelte
  • apps/web/src/routes/calendar/[view]/[date]/+page.svelte; apps/web/src/routes/settings/admin/ConfigGroup.svelte; docs/DESIGN.md
  • UI: packages/ui/src/components/{Inspector.svelte,TabBar.svelte,calendar/CalendarTools.svelte,calendar/GridColumn.svelte,calendar/TimeGrid.svelte,menu/Menu.svelte,menu/MenuItem.svelte,menu/types.ts,viewer/QuickLook.svelte}

Gates

All gates ran after the dev merge. Exact success output:

$ cargo fmt --check
(no output; exit 0)

$ cargo clippy --all-targets -- -D warnings
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 49m 56s

$ cargo test
test result: ok. 49 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 99.93s
test result: ok. 476 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.79s
test result: ok. 87 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 117.45s
test result: ok. 89 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 145.69s
test result: ok. 42 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.92s
test result: ok. 38 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 9.35s
test result: ok. 39 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 24.72s
test result: ok. 37 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.34s

$ bun run check
svelte-check found 0 errors and 0 warnings

$ bun run test
 Test Files  54 passed (54)
      Tests  423 passed (423)
   Start at  18:15:12
   Duration  97.31s (transform 76%, import 10%, environment 9%, tests 4%)

The full workspace cargo test exited 0. It also reported ignored model-asset, benchmark, and manual tests. Vitest printed its existing Window's scrollTo() not-implemented notices, but exited 0 with all 423 tests passing. Cargo gates used OPENSSL_NO_VENDOR=1 and the host OpenSSL 3.5.7 because the vendored OpenSSL 3.6.3 build stalled under shared-host load.

Adversarial round and known gaps

The one post-merge adversarial round completed with exit 0; the server stayed alive and the restart probe reported 0 findings. SLOW-only results were treated as shared-host load. These non-SLOW findings are outside the shortcut files and were recorded in the earlier issue comments for server follow-up:

  • 12/24 concurrent task POSTs timed out at 60 s; the single-request baseline was 5/5, p50 5.808 s.
  • In a 24-request Journal If-Match race, 16 requests timed out at 30 s; observed responses were one 200 and seven 412, rather than one 200 and 23 conflicts.
  • One Photos fixture upload (burst-047.jpg) timed out.
  • A live Files share with recipient Photos opt-in did not show a photo in the recipient timeline during the 12 s window (HTTP 200, empty days).
  • With 64 SSE streams open, 20 mkdir requests took 8.6 s against a 5 s probe bound.
  • During purge of another user's Home with 20,000 small files, an unrelated user's upload took 19.58 s against a 2 s bound.

Decisions not specified by DESIGN

  • Use C for Files New because Mod+Shift+N opens a private browser window.
  • Use Mod+Enter to save Admin configuration because Mod+S is browser Save Page.
  • Use +/− for Calendar grid zoom only while the grid has focus; keep page navigation on J/K and arrow keys scoped to their focused controls.

Browser references used by the reserved-key list: Chrome, Safari, Firefox, Edge.

## Completed: keyboard shortcut audit and registry wiring Branch: `job/shortcuts` Head: `1b1f70fe390555a26e6840a0c4c4d75975fc2072` (`Merge dev into shortcuts and keep calendar keys registry-owned`) The shortcut registry now drives app bindings, hints, and the keyboard help sheet. I routed the remaining Files, Recent, Notifications, Admin settings, and Calendar handlers through it; added sourced reserved-key checks and IME guards; and documented the rules in DESIGN §34/§39. The merge from `dev` is included as required. | Area | Before | After | |---|---|---| | Search | `⌘K` | `⌘/` | | Scoped find | `⌘F` | `⌘⇧F` | | Commands | `⌘⇧K` | `⌘⇧;` | | Files New | `⇧⌘N` (browser private-window shortcut) | `C` in Files | | Admin config save | `⌘S` / `Ctrl+S` | `⌘Enter` / `Ctrl+Enter` | | Calendar navigation | page-level Left/Right | `J`/`K`; arrows remain owned by the focused date strip or grid | | Calendar grid zoom | browser-reserved `⌘+` / `Ctrl+ +` | `+`/`−` while focus is inside the grid | | Shortcut implementation | bindings and hints split across handlers | registry entries drive handlers, hints, help, and accessibility attributes | Changed job files (30): - `apps/web/src/lib/shortcuts/{registry.ts,match.ts,registry.test.ts}` and `apps/web/src/lib/components/KeyboardShortcutsSheet.svelte` - `apps/web/src/lib/components/{TagEditor.svelte,search-dialog.svelte}`; `apps/web/src/routes/+layout.svelte`; `apps/web/src/lib/composer/Composer.svelte` - Files: `apps/web/src/lib/files/{FilesBrowser.svelte,RecentView.svelte,ShareDialog.svelte,TrashView.svelte,UploadToast.svelte}` - `apps/web/src/lib/notifications/InboxPanel.svelte`; `apps/web/src/lib/photos/{PhotoTimeline.svelte,PhotoViewer.svelte,PhotosView.svelte}`; `apps/web/src/lib/search/SearchPreview.svelte` - `apps/web/src/routes/calendar/[view]/[date]/+page.svelte`; `apps/web/src/routes/settings/admin/ConfigGroup.svelte`; `docs/DESIGN.md` - UI: `packages/ui/src/components/{Inspector.svelte,TabBar.svelte,calendar/CalendarTools.svelte,calendar/GridColumn.svelte,calendar/TimeGrid.svelte,menu/Menu.svelte,menu/MenuItem.svelte,menu/types.ts,viewer/QuickLook.svelte}` ### Gates All gates ran after the `dev` merge. Exact success output: ```text $ cargo fmt --check (no output; exit 0) $ cargo clippy --all-targets -- -D warnings Finished `dev` profile [unoptimized + debuginfo] target(s) in 49m 56s $ cargo test test result: ok. 49 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 99.93s test result: ok. 476 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.79s test result: ok. 87 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 117.45s test result: ok. 89 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 145.69s test result: ok. 42 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.92s test result: ok. 38 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 9.35s test result: ok. 39 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 24.72s test result: ok. 37 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.34s $ bun run check svelte-check found 0 errors and 0 warnings $ bun run test Test Files 54 passed (54) Tests 423 passed (423) Start at 18:15:12 Duration 97.31s (transform 76%, import 10%, environment 9%, tests 4%) ``` The full workspace `cargo test` exited 0. It also reported ignored model-asset, benchmark, and manual tests. Vitest printed its existing `Window's scrollTo()` not-implemented notices, but exited 0 with all 423 tests passing. Cargo gates used `OPENSSL_NO_VENDOR=1` and the host OpenSSL 3.5.7 because the vendored OpenSSL 3.6.3 build stalled under shared-host load. ### Adversarial round and known gaps The one post-merge adversarial round completed with exit 0; the server stayed alive and the restart probe reported `0 findings`. SLOW-only results were treated as shared-host load. These non-SLOW findings are outside the shortcut files and were recorded in the earlier issue comments for server follow-up: - 12/24 concurrent task POSTs timed out at 60 s; the single-request baseline was 5/5, p50 5.808 s. - In a 24-request Journal `If-Match` race, 16 requests timed out at 30 s; observed responses were one 200 and seven 412, rather than one 200 and 23 conflicts. - One Photos fixture upload (`burst-047.jpg`) timed out. - A live Files share with recipient Photos opt-in did not show a photo in the recipient timeline during the 12 s window (HTTP 200, empty days). - With 64 SSE streams open, 20 mkdir requests took 8.6 s against a 5 s probe bound. - During purge of another user's Home with 20,000 small files, an unrelated user's upload took 19.58 s against a 2 s bound. ### Decisions not specified by DESIGN - Use `C` for Files New because `Mod+Shift+N` opens a private browser window. - Use `Mod+Enter` to save Admin configuration because `Mod+S` is browser Save Page. - Use `+`/`−` for Calendar grid zoom only while the grid has focus; keep page navigation on `J`/`K` and arrow keys scoped to their focused controls. Browser references used by the reserved-key list: [Chrome](https://support.google.com/chrome/answer/96810?hl=en-ch), [Safari](https://support.apple.com/guide/mac-help/browse-the-web-mchlgtd_web01/mac), [Firefox](https://support.mozilla.org/kb/Textzoom), [Edge](https://support.microsoft.com/en-us/edge/keyboard-shortcuts-in-microsoft-edge).
kayg referenced this issue from a commit 2026-09-26 17:40:12 +00:00
Author
Owner

Merged into dev at f25afd89 (layout import conflict with WebMCP resolved by Claude; svelte-check 0 errors, 432 web tests pass). Deploy status on #203. Keys chosen where DESIGN was silent: Files New = C, Admin config save = Mod+Enter, Calendar J/K and +/−.

Merged into dev at f25afd89 (layout import conflict with WebMCP resolved by Claude; svelte-check 0 errors, 432 web tests pass). Deploy status on #203. Keys chosen where DESIGN was silent: Files New = C, Admin config save = Mod+Enter, Calendar J/K and +/−.
kayg closed this issue 2026-09-26 17:40:20 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#159
No description provided.