CodeNomad/packages/ui/tests/browser
Pascal André c82dd8fbf6
Some checks are pending
Publish help / build (push) Waiting to run
Publish help / deploy (push) Blocked by required conditions
fix(notifications): show Windows system notifications and keep their permission (#1109)
## Summary

System notifications on Windows: everything about them in one PR.

1. **Windows data profiles never showed system notifications**
(`fix(windows): show system notifications from every data profile`).
Tauri runs each data profile, such as **dev**, under its own
AppUserModelID (`…client.scope.s<hash>`), and its notifications carry
that ID; Windows shows a desktop app's notifications only under an ID it
knows, and the installer's Start menu shortcut carries the stable ID
alone. Windows recorded every notification (100 on the affected machine)
and displayed none. Every launch now registers the running ID under
`HKCU\Software\Classes\AppUserModelId\<identifier>` (`DisplayName`
CodeNomad, `IconUri` the bundled web app icon
`resources\server\public\pwa-192x192.png`, which the packaged-resource
smoke check requires; `windows_notification_identity.rs`). Electron
always uses the stable ID.
2. **The permission was lost at every restart on Windows.** The
notification plugin's page script reports *denied* there until the page
requests permission, though Windows never asks, so Settings asked again
after each restart. The check now asks the native plugin command, which
answers granted on desktop: granted once, kept.
3. **Notifications were held back whenever the window was visible**
(`fix(notifications): hold system notifications back only while
focused`). With **Notify when the app is focused** off (the default), an
open window stays visible behind other applications or on another
screen, so nothing was sent unless CodeNomad was minimized. Delivery is
now skipped only while the window is visible and focused
(`document.hasFocus()`). The setting's subtitle and the Settings help
say *focused* in all ten languages; `dev-docs/SETTINGS.md` records the
rule.

Out of scope by decision: several CodeNomad windows open on the same
project may each send the event's notification (as they already do when
the setting is on), and focus inside a browser preview counts as leaving
the page.

## Validation

- Affected machine: no profile notification showed before; after
registering its ID as above, a notification sent under it showed in the
notification centre under CodeNomad.
- `cargo test --bins -- windows_notification_identity` (writes the key,
reads back both values).
- `tests/browser/system-notification-focus.test.ts`: real routed
notification from a visible page; nothing while focused, one once focus
is lost, one while focused with the setting on; red on the previous
visibility check.
- `npm run typecheck --workspace @codenomad/ui`, `npm run test:help`.
2026-10-23 04:03:26 +02:00
..
fixtures fix(notifications): show Windows system notifications and keep their permission (#1109) 2026-10-23 04:03:26 +02:00
alert-dialog.test.ts fix(ui): keep the filled confirm button and show the focus ring from the start (#952) 2026-10-14 15:30:05 +02:00
appearance.test.ts feat(ui): assign backgrounds by surface role and harmonize menus (#914) 2026-10-12 11:12:37 +02:00
auth-recovery.test.ts feat(remote-control): add Remote Control over OpenTunnel alongside direct access (#668) 2026-10-09 12:43:25 +02:00
automation-forms.test.ts feat(automation): complete safe native window interactions (#1018) 2026-10-19 08:48:14 +02:00
automation-input.test.ts feat(automation): complete safe native window interactions (#1018) 2026-10-19 08:48:14 +02:00
automation-preview.test.ts refactor(automation): unify native browser previews on the shared page engine (#1020) 2026-10-19 09:27:58 +02:00
automation-session.ts feat(automation): complete safe native window interactions (#1018) 2026-10-19 08:48:14 +02:00
browser-emulation-native.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
browser-frame-native.test.ts fix(mobile): responsive conversation controls and proportional prompt sizing (#813) 2026-10-01 01:04:25 +02:00
compaction-notification.test.ts fix(notifications): show one notification per session compaction (#1096) 2026-10-22 15:34:44 +02:00
compaction-responsiveness.test.ts fix: reduce compaction and cross-session responsiveness stalls 2026-10-02 00:40:45 +02:00
composer-alternate-send.test.ts feat(composer): queue or send now from the More actions menu, Alt+Enter by default (#1054) 2026-10-21 01:05:23 +02:00
composer-draft-safety.test.ts fix(composer): preserve undo history for shortcut newline edits 2026-10-13 22:24:05 +02:00
composer-picker-enter.test.ts feat(composer): queue or send now from the More actions menu, Alt+Enter by default (#1054) 2026-10-21 01:05:23 +02:00
composer-resume-typing.test.ts fix(composer): resume typing from the conversation focused after a send (#1032) 2026-10-20 12:03:51 +02:00
desktop-updates.test.ts fix(updates): route the Preferences button and menu from Preferences through the desktop updater (#960) 2026-10-14 22:11:33 +02:00
device-upload-lifecycle.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
device-upload.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
directory-browser.test.ts test(browser): follow shortcut-free labels and persist Git settings 2026-10-14 01:54:59 +02:00
drawer-accessibility.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
drawer-width.test.ts feat(shell): fixed panel toggles and back/forward session navigation (#936) 2026-10-13 11:21:35 +02:00
event-subscriber-isolation.test.ts fix: reduce compaction and cross-session responsiveness stalls 2026-10-02 00:40:45 +02:00
file-search-retry.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
fixture-cache.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
fixture-cache.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
fixture-diagnostic-boundary.test.ts fix: clear deleted task membership and fence test network lifecycle 2026-10-02 02:07:33 +02:00
fixture-diagnostic-boundary.ts fix: clear deleted task membership and fence test network lifecycle 2026-10-02 02:07:33 +02:00
fixture-shutdown.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
fixture-shutdown.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
full-source-copy.test.ts fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker (#1086) 2026-10-22 05:32:43 +02:00
git-changes-scale.test.ts fix(files): keep the Changes stage icon after the row's overflow menu opens (#1021) 2026-10-19 08:24:15 +02:00
git-history.test.ts fix(transcript): keep stream events from re-rendering unchanged messages (#1017) 2026-10-19 07:45:32 +02:00
git-init.test.ts feat(files): initialize Git from the Files panel for plain folders (#933) 2026-10-13 03:11:00 +02:00
header-fixture-diagnostics.test.ts test(ui): retain bounded header fixture bootstrap diagnostics 2026-10-02 04:29:25 +02:00
header-fixture-diagnostics.ts test(ui): retain bounded header fixture bootstrap diagnostics 2026-10-02 04:29:25 +02:00
header-windows.test.ts fix(hotkeys): name each action's shortcut in its tooltip and make Ctrl+K really clear the composer (#1057) 2026-10-21 01:34:54 +02:00
help-command.test.ts feat(desktop): localize native menus and open About in Settings → Info (#963) 2026-10-15 00:42:23 +02:00
hidden-forms.test.ts fix(opencode): align current contracts and fence native message settlement (#728) 2026-09-20 13:48:53 +02:00
history-navigation.test.ts fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker (#1086) 2026-10-22 05:32:43 +02:00
history.test.ts feat(history): name the conversation and worktree of workspace search results (#993) 2026-10-17 16:02:16 +02:00
hotkeys-settings.test.ts feat(settings): compact Settings, unified notification routing and autosaving Missions preferences (#1014) 2026-10-19 01:23:35 +02:00
http-admission-responsiveness.test.ts test(browser): accept the readable OS name in server system info (#998) 2026-10-18 02:23:51 +02:00
icon-button-press.test.ts test(ui): isolate the icon-button fixture cache (#953) 2026-10-15 00:40:04 +02:00
icon-toggle-active.test.ts fix(ui): make the shared active toggle state clearly visible (#937) 2026-10-13 11:42:21 +02:00
interruption-dock.test.ts fix(recovery): reconcile removed worktrees without hiding live interruptions (#1076) 2026-10-21 14:34:17 +02:00
interruption-selection.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
macos-titlebar.test.ts feat(desktop): give macOS windows native traffic lights and one menu bar (#1105) 2026-10-23 02:18:04 +02:00
markdown-latest-request.test.ts fix(preferences): restore the correct project context after startup (#1022) 2026-10-19 14:23:22 +02:00
mcp-motion.test.ts fix(status): keep connected MCP indicators static at rest (#806) 2026-09-30 14:03:19 +02:00
message-scroll.test.ts refactor(chat): render the transcript header as Virtua's first row (#992) 2026-10-17 16:58:26 +02:00
mission-actions.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-briefing.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-cleanup.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-control-feedback.test.ts chore(opencode): retire adaptations for runtimes and events OpenCode V2 no longer produces (#1034) 2026-10-20 19:19:47 +02:00
mission-control.test.ts feat(settings): compact Settings, unified notification routing and autosaving Missions preferences (#1014) 2026-10-19 01:23:35 +02:00
mission-create-refusals.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-create-submit.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-cross-navigation.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-current-passage.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-defaults-models.test.ts feat(missions): add a "Compare two models" Mission template (#1026) 2026-10-20 13:55:12 +02:00
mission-editor-lifetime.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-editor-profiles.test.ts feat(settings): compact Settings, unified notification routing and autosaving Missions preferences (#1014) 2026-10-19 01:23:35 +02:00
mission-lifecycle-navigation.test.ts chore(opencode): retire adaptations for runtimes and events OpenCode V2 no longer produces (#1034) 2026-10-20 19:19:47 +02:00
mission-lifecycle-revision.test.ts chore(opencode): retire adaptations for runtimes and events OpenCode V2 no longer produces (#1034) 2026-10-20 19:19:47 +02:00
mission-list-item.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-native-family.test.ts chore(opencode): retire adaptations for runtimes and events OpenCode V2 no longer produces (#1034) 2026-10-20 19:19:47 +02:00
mission-navigation.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-panel-geometry.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-panel-host.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-panel-layout.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-passage-history.test.ts feat(missions): add a "Compare two models" Mission template (#1026) 2026-10-20 13:55:12 +02:00
mission-primitives.test.ts fix(transcript): reveal display-truncated text in place instead of a copy-only suffix (#1000) 2026-10-18 05:01:03 +02:00
mission-reader-transcript.test.ts refactor(chat): finish transcript scroll migrations and fix known scroll follow-ups (#980) 2026-10-17 10:05:05 +02:00
mission-recovery.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-recurrence-predispatch.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-recurrence-retry-order.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-recurrence-start-intent.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-recurrence.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-report-delivery.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-result-reader.test.ts feat(missions): add a "Compare two models" Mission template (#1026) 2026-10-20 13:55:12 +02:00
mission-row-refetch.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-settings-brief.test.ts fix(preferences): restore the correct project context after startup (#1022) 2026-10-19 14:23:22 +02:00
mission-task-reader.test.ts feat(missions): coordinator hand-offs, task interrupts and native decision evidence (#1013) 2026-10-19 00:34:27 +02:00
mission-view-capture.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
mission-visibility.test.ts chore(opencode): retire adaptations for runtimes and events OpenCode V2 no longer produces (#1034) 2026-10-20 19:19:47 +02:00
mobile-interruption.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
model-favorites-mode.test.ts fix(models): persist favorites mode independently of the active model (#787) 2026-09-26 05:23:07 +02:00
native-mission-integration.qualification.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
new-instance-launcher.test.ts fix(projects): keep the new-tab launcher project-only (#1039) 2026-10-20 18:44:36 +02:00
notification-icon-badge.test.ts fix(notifications): preserve native badge update order 2026-10-07 16:20:57 +02:00
opencode-setup.test.ts fix(opencode): explain why OpenCode 2 cannot be installed beside an older command (#1093) 2026-10-22 13:49:20 +02:00
other-profiles.test.ts fix(desktop): separate the update feed from the local data profile (#891) 2026-10-09 18:55:14 +02:00
panel-extensions.test.ts test(browser): align extension and Git fixtures with current contracts 2026-10-14 01:48:20 +02:00
part-durations.test.ts fix(transcript): keep stream events from re-rendering unchanged messages (#1017) 2026-10-19 07:45:32 +02:00
permission-fallback-diff.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
permission-feedback.test.ts fix(ui): preserve permission rejection feedback during refresh (#701) 2026-09-18 01:24:12 +02:00
permission-receipts.test.ts refactor(chat): render the transcript header as Virtua's first row (#992) 2026-10-17 16:58:26 +02:00
plugin-controls.test.ts feat(plugins): native package check and update (6/8) (#794) 2026-10-15 02:54:19 +02:00
plugin-packages.test.ts feat(plugins): native package check and update (6/8) (#794) 2026-10-15 02:54:19 +02:00
preferences-startup-state.test.ts fix(settings): adopt a live window for Preferences startup state and spin the Stats refresh (#1050) 2026-10-20 23:34:52 +02:00
preferences-startup.test.ts fix(preferences): restore the correct project context after startup (#1022) 2026-10-19 14:23:22 +02:00
preferences-window.test.ts fix(ui): avoid workspace hydration in Preferences (#705) 2026-09-18 01:50:47 +02:00
project-git-lifecycle.test.ts test(browser): align extension and Git fixtures with current contracts 2026-10-14 01:48:20 +02:00
project-tab-close.test.ts fix(workspaces): closing a project tab closes the project in CodeNomad (#970) 2026-10-15 15:14:29 +02:00
project-tab-restore.test.ts fix(restore): resume saved tabs after mandatory OpenCode setup (#923) 2026-10-12 18:49:07 +02:00
provider-accounts.test.ts feat(settings): compact Settings, unified notification routing and autosaving Missions preferences (#1014) 2026-10-19 01:23:35 +02:00
provider-usage.test.ts chore(opencode): retire adaptations for runtimes and events OpenCode V2 no longer produces (#1034) 2026-10-20 19:19:47 +02:00
reasoning-collapse.test.ts fix(ui): expose close actions in existing preview and utility toolbars (#803) 2026-09-30 10:46:56 +02:00
remote-access-settings.test.ts feat(ui): put Remote Control first and collapse direct access (#888) 2026-10-09 16:16:39 +02:00
remote-control-settings.test.ts fix(remote-control): resume after restart and keep paired devices visible (#921) 2026-10-12 17:17:53 +02:00
remote-server-pairing.test.ts feat(remote-servers): pair a desktop window through a Remote Control link (#928) 2026-10-13 02:20:37 +02:00
render-cost.test.ts fix(timeline): space every marker evenly (#1062) 2026-10-21 03:28:29 +02:00
reveal-truncated-text.test.ts fix(transcript): reveal display-truncated text in place instead of a copy-only suffix (#1000) 2026-10-18 05:01:03 +02:00
search-highlight-assertions.ts perf(search): paint transcript matches with owned CSS highlights (#854) 2026-10-06 01:12:30 +02:00
search-highlight-harness.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
search-highlight-report.mjs perf(search): paint transcript matches with owned CSS highlights (#854) 2026-10-06 01:12:30 +02:00
search-highlight.test.ts perf(search): paint transcript matches with owned CSS highlights (#854) 2026-10-06 01:12:30 +02:00
server-info.test.ts fix(diagnostics): include OpenCode versions and the server's OS release (#979) 2026-10-15 23:21:11 +02:00
service-usage.test.ts fix(stats): restore cached totals and refresh only while visible (#1041) 2026-10-20 19:49:45 +02:00
session-aside-harness.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
session-aside-harness.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
session-aside.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
session-browser-history.test.ts fix(browser): share cookies and site storage across session tabs (#898) 2026-10-09 18:53:50 +02:00
session-child-activity.test.ts fix(sessions): show idle subsessions on collapsed parent chevrons (#1010) 2026-10-18 21:35:28 +02:00
session-delete.test.ts fix(ui): preserve portaled menu actions above floating panels (#956) 2026-10-14 16:41:05 +02:00
session-fork.test.ts fix(restore): keep the selected transcript read ahead of startup traffic (#910) 2026-10-11 19:47:55 +02:00
session-interrupt.test.ts fix(shortcuts): restore double-Escape dismissal of the home overlay 2026-10-13 22:40:26 +02:00
session-rendering.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
session-search.test.ts fix(sessions): shorten the session filter-bar checkbox labels (#930) 2026-10-13 01:32:31 +02:00
shell-navigation.test.ts feat(settings): add a customizable keyboard shortcut manager 2026-10-13 21:25:39 +02:00
sidecar-sandbox.test.ts fix(sidecars): keep SideCar frames same-origin so proxied requests authenticate (#994) 2026-10-17 21:01:38 +02:00
skills.test.ts fix(composer): order @ mentions as files, agents, then skills (#989) 2026-10-17 12:42:48 +02:00
status-panel.test.ts test(status): find the Tokens trigger when its summary is shown (#1048) 2026-10-20 22:19:53 +02:00
status-tokens.test.ts fix(tokens): hide message usage in presets and keep compact summaries visible (#1037) 2026-10-20 18:43:20 +02:00
streaming-outline.test.ts fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker (#1086) 2026-10-22 05:32:43 +02:00
system-messages.test.ts fix(chat): show why a run failed in the transcript (#927) 2026-10-13 01:46:54 +02:00
system-notification-focus.test.ts fix(notifications): show Windows system notifications and keep their permission (#1109) 2026-10-23 04:03:26 +02:00
tab-chrome.test.ts feat(ui): compact new-instance launcher and browser-style new-tab button (#911) 2026-10-11 19:28:09 +02:00
task-copy.test.ts feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
timeline-sync-session.ts fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker (#1086) 2026-10-22 05:32:43 +02:00
timeline-sync.qualification.ts fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker (#1086) 2026-10-22 05:32:43 +02:00
timeline-sync.test.ts fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker (#1086) 2026-10-22 05:32:43 +02:00
timeline-tool-filters.test.ts fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker (#1086) 2026-10-22 05:32:43 +02:00
tool-images.test.ts feat(transcript): native Code Mode presentation (1/8) (#789) 2026-10-02 13:08:14 +02:00
transcript-presets.test.ts feat(transcript): add a Nothing preset and a preset menu in Message content (#1043) 2026-10-20 19:56:05 +02:00
usage-metrics.test.ts fix(transcript): name the agent and model in message headers like the composer (#1095) 2026-10-22 14:04:06 +02:00
view-menu-electron.test.ts feat(timeline): follow Message content tool visibility (#1049) 2026-10-20 23:11:08 +02:00
view-menu.test.ts feat(timeline): follow Message content tool visibility (#1049) 2026-10-20 23:11:08 +02:00
websearch-settings.test.ts feat(settings): compact Settings, unified notification routing and autosaving Missions preferences (#1014) 2026-10-19 01:23:35 +02:00
websearch.test.ts feat(websearch): native results and provider consent (2/8) (#790) 2026-10-02 13:17:22 +02:00
workspace-file-refresh.test.ts fix(files): refresh Workspace with scoped, rate-limited invalidations (#1030) 2026-10-20 00:17:40 +02:00
worktrees.test.ts fix(worktrees): unblock existing-worktree selection on large repositories (#740) 2026-09-21 17:33:11 +02:00