Skip to content

Adding notification for planning questionnaire#3028

Merged
azizmejri1 merged 6 commits intodyad-sh:mainfrom
azizmejri1:questionnaire-notification
Mar 19, 2026
Merged

Adding notification for planning questionnaire#3028
azizmejri1 merged 6 commits intodyad-sh:mainfrom
azizmejri1:questionnaire-notification

Conversation

@azizmejri1
Copy link
Copy Markdown
Collaborator

@azizmejri1 azizmejri1 commented Mar 17, 2026

closes #2808

@wwwillchen
Copy link
Copy Markdown
Collaborator

@BugBot run

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the user experience by adding a new native notification for planning questionnaires, ensuring users are promptly alerted when their input is needed, even when the application is in the background. It also refines existing notification-related text across the application to be more comprehensive and accurate, reflecting the broader range of events for which notifications are provided.

Highlights

  • New Feature: Questionnaire Notifications: Introduced native notifications to alert users when a planning questionnaire requires their input, specifically when the application is not in focus.
  • Improved Notification Wording: Updated various UI texts, banner messages, and test notification bodies to be more general and inclusive of different types of chat events and the new questionnaire notifications.
  • Updated Settings and Search Index: Modified the settings page description and the settings search index to accurately reflect the expanded scope of notifications, including both chat completion and questionnaire events.
Changelog
  • e2e-tests/notification_banner.spec.ts
    • Updated the expected text in the notification banner test to reflect the new general wording.
  • src/components/ChatCompletionNotificationSwitch.tsx
    • Changed the label for the chat completion notification switch to a more general 'Enable notifications'.
  • src/components/chat/NotificationBanner.tsx
    • Modified the message displayed in the notification banner to be more generic, referring to 'chat events'.
  • src/hooks/useEnableNotifications.ts
    • Updated the body text of the test notification to mention 'chat events' instead of just chat responses.
  • src/hooks/usePlanEvents.ts
    • Added new logic to trigger a native notification when a questionnaire needs user input, provided notifications are enabled and the window is not focused.
  • src/lib/settingsSearchIndex.ts
    • Updated the label for notification settings, revised the description to include questionnaire notifications, and expanded keywords for better searchability.
  • src/pages/settings.tsx
    • Modified the description text on the settings page for notifications to include alerts for questionnaires.
Activity
  • No human activity has been recorded on this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with πŸ‘ and πŸ‘Ž on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 17, 2026

Greptile Summary

This PR extends the existing chat-completion notification system to also fire a native OS notification when a planning questionnaire needs user input. It renames the enableChatCompletionNotifications setting to enableChatEventNotifications throughout the codebase, adds the questionnaire notification logic in usePlanEvents.ts, updates UI copy to reflect the broader scope, and correctly adds a migration step in migrateStoredSettings so existing users who had the old setting enabled are seamlessly upgraded.

Key changes:

  • usePlanEvents.ts: new onQuestionnaire handler fires a native notification ("A questionnaire needs your input") when the window is not focused and notifications are enabled.
  • src/lib/schemas.ts: enableChatCompletionNotifications deprecated in StoredUserSettingsSchema; migration in migrateStoredSettings correctly falls back to the old key via ??.
  • All call-sites (useStreamChat, useEnableNotifications, NotificationBanner, settings page, search index, E2E tests) updated consistently to use the new key name.
  • The E2E test snapshot and banner text assertions match the updated component copy ("Get notified about chat events.").

Issues found:

  • usePlanEvents.ts line 190 uses a non-null assertion (selectedAppIdRef.current!) when looking up the app for the notification title, which is inconsistent with how the same pattern is handled in useStreamChat.ts (no assertion). This is safe at runtime because of the app?.name ?? "Dyad" fallback, but worth aligning for consistency.

Confidence Score: 4/5

  • This PR is safe to merge; the setting rename is fully migrated and all consumers are updated consistently.
  • The changes are well-scoped and consistently applied across all files. The backwards-compatibility migration is correctly implemented. The one minor inconsistency (non-null assertion on selectedAppIdRef.current) is safe at runtime due to the null-coalescing fallback, and doesn't affect correctness.
  • src/hooks/usePlanEvents.ts β€” minor non-null assertion inconsistency at line 190.

Important Files Changed

Filename Overview
src/hooks/usePlanEvents.ts Adds questionnaire notification logic; safe overall but uses a non-null assertion on selectedAppIdRef.current that is inconsistent with the useStreamChat.ts pattern.
src/lib/schemas.ts Setting key renamed from enableChatCompletionNotifications to enableChatEventNotifications; migration correctly added in migrateStoredSettings using ?? to fall back to the old key.
src/hooks/useEnableNotifications.ts All references updated from enableChatCompletionNotifications to enableChatEventNotifications; test notification body updated to reflect the broader scope.
src/hooks/useStreamChat.ts Single setting key reference updated; notification logic itself is unchanged and correct.
src/components/chat/NotificationBanner.tsx Setting key and banner message updated consistently; the banner text matches the updated E2E test assertion.
e2e-tests/notification_banner.spec.ts Test fixtures and assertions updated to use the new enableChatEventNotifications key and updated banner text; snapshot updated to match.
src/components/ChatEventNotificationSwitch.tsx Renamed from ChatCompletionNotificationSwitch; HTML id and label text updated; no functional changes.
src/lib/settingsSearchIndex.ts Setting ID, label, description, and keywords updated to reflect the broader notification scope including questionnaires.
src/pages/settings.tsx Import and component usage updated to ChatEventNotificationSwitch; description text updated to mention questionnaire notifications.

Sequence Diagram

sequenceDiagram
    participant User
    participant PlanEventClient
    participant usePlanEvents
    participant QueryClient
    participant Notification API

    User->>PlanEventClient: Triggers plan questionnaire
    PlanEventClient->>usePlanEvents: onQuestionnaire(payload)
    usePlanEvents->>usePlanEvents: setPendingQuestionnaire(payload)
    usePlanEvents->>usePlanEvents: Check enableChatEventNotifications & Notification.permission & !document.hasFocus()
    alt Notifications enabled & window not focused
        usePlanEvents->>QueryClient: getQueryData(apps.detail(selectedAppId))
        QueryClient-->>usePlanEvents: app (or null)
        usePlanEvents->>Notification API: new Notification(app.name ?? "Dyad", { body: "A questionnaire needs your input" })
        Notification API-->>User: Native OS notification
    end

    Note over usePlanEvents: Chat completion path (useStreamChat.ts)
    PlanEventClient->>usePlanEvents: onEnd(response)
    usePlanEvents->>usePlanEvents: Check enableChatEventNotifications & Notification.permission & !document.hasFocus()
    alt Notifications enabled & window not focused & not cancelled
        usePlanEvents->>QueryClient: getQueryData(apps.detail(selectedAppId))
        QueryClient-->>usePlanEvents: app, chat summary
        usePlanEvents->>Notification API: new Notification(appName, { body: chatSummary })
        Notification API-->>User: Native OS notification
    end
Loading
Prompt To Fix All With AI
This is a comment left during a code review.
Path: src/hooks/usePlanEvents.ts
Line: 189-191

Comment:
**Non-null assertion on potentially-null `selectedAppIdRef.current`**

`selectedAppIdRef.current!` suppresses the null type but doesn't guard against a null value at runtime. If no app is selected, `queryKeys.apps.detail({ appId: null })` is invoked and `getQueryData` returns `undefined`, which is correctly handled by the `app?.name ?? "Dyad"` fallback β€” so there's no crash. However, the pattern is inconsistent with how the equivalent block in `useStreamChat.ts` (line 238) is written (it passes `selectedAppId` without a non-null assertion), and it silently assumes an app is always selected when a questionnaire fires.

Consider aligning with `useStreamChat.ts` and dropping the assertion, or adding an explicit early-return guard:

```suggestion
          const app = queryClient.getQueryData<App | null>(
            queryKeys.apps.detail({ appId: selectedAppIdRef.current }),
          );
```

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: "Merge branch 'main' ..."

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 7 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

βœ… Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

gemini-code-assist[bot]

This comment was marked as resolved.

@dyad-assistant
Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: βœ… YES - Ready to merge

Reviewed by 3 independent agents: Correctness Expert, Code Health Expert, UX Wizard.

Issues Summary

No HIGH or MEDIUM issues found.

🟒 Low Priority Notes (2 items)
  • Notification lacks app/chat context - src/hooks/usePlanEvents.ts:189 β€” The chat-completion notification in useStreamChat.ts includes the app name and chat title in the notification body, but the new questionnaire notification only says "A questionnaire needs your input" with no indication of which app or chat. Minor inconsistency.
  • Notification guard pattern duplicated - src/hooks/usePlanEvents.ts:181-192 β€” The notificationsEnabled && permission === "granted" && !document.hasFocus() guard + new Notification(...) block is the same pattern as in useStreamChat.ts. Only 2 instances, so extracting a helper is premature, but worth noting if a third notification type is added.
🚫 Dropped False Positives (1 item)
  • Duplicate notifications on IPC re-delivery β€” Dropped: Electron IPC does not replay events on reconnect. The questionnaire state map is keyed by chatId, making state updates idempotent. The theoretical risk of duplicate native notifications is extremely unlikely in this IPC layer.

Generated by Dyadbot multi-agent code review

@github-actions github-actions bot added the needs-human:review-issue ai agent flagged an issue that requires human review label Mar 17, 2026
@wwwillchen
Copy link
Copy Markdown
Collaborator

@BugBot run

chatgpt-codex-connector[bot]

This comment was marked as resolved.

greptile-apps[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@dyad-assistant
Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: β›” NO - Do NOT merge

Reviewed by 3 independent agents: Correctness Expert, Code Health Expert, UX Wizard.

Issues Summary

Severity File Issue
πŸ”΄ HIGH src/lib/schemas.ts:334 Renaming settings field breaks existing users' notification preferences
🟑 MEDIUM src/components/chat/NotificationBanner.tsx:25 Banner message "chat events" is vague developer jargon
🟒 Low Priority Notes (2 items)
  • Duplicated notification guard pattern - src/hooks/usePlanEvents.ts:181-192 and src/hooks/useStreamChat.ts:229-254 share the same check-and-notify pattern. Consider extracting a shared helper.
  • Questionnaire notification lacks context - src/hooks/usePlanEvents.ts:189 - Unlike chat completion notifications, the questionnaire notification doesn't include app name or chat context.
🚫 Dropped False Positives (3 items)
  • Stale closure captures settings in useStreamChat - Dropped: Pre-existing issue not introduced by this PR, just a field rename
  • Generic switch label "Enable notifications" - Dropped: Description text is directly below in settings page providing context
  • No deduplication/throttling of questionnaire notifications - Dropped: Questionnaire events are unlikely to fire rapidly in practice

Generated by Dyadbot multi-agent code review

dyad-assistant[bot]

This comment was marked as resolved.

cubic-dev-ai[bot]

This comment was marked as resolved.

- Add migration for renamed enableChatCompletionNotifications -> enableChatEventNotifications setting
- Improve banner message to be user-friendly: "Get notified when responses finish or input is needed."

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@wwwillchen
Copy link
Copy Markdown
Collaborator

@BugBot run

@azizmejri1
Copy link
Copy Markdown
Collaborator Author

πŸ€– Claude Code Review Summary

PR Confidence: 4/5

All review issues addressed; migration added and banner copy improved. Confidence is 4 instead of 5 because additional E2E testing of the migration path would be ideal.

Unresolved Threads

No unresolved threads

Resolved Threads

Issue Rationale Link
Missing migration for renamed enableChatCompletionNotifications setting (5 threads) Added deprecated field to StoredUserSettingsSchema and migration logic in migrateStoredSettings() to preserve existing users' notification preferences View
Banner message "chat events" is vague Changed to "Get notified when responses finish or input is needed." for clarity. Per Principle #6: Delightful, user-facing copy should be specific and meaningful. View
Centralize user-facing strings to constants file (2 threads) Resolved with explanation β€” per Principle #3: Intuitive But Power-User Friendly, premature abstraction for only 2 co-located strings. View
Rename enableChatCompletionNotifications to generic name (outdated) Already done in the PR β€” thread was marked outdated by GitHub. View
Product Principle Suggestions

No suggestions β€” principles were clear enough for all decisions in this review.


πŸ€– Generated by Claude Code

devin-ai-integration[bot]

This comment was marked as resolved.

greptile-apps[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@dyad-assistant
Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: β›” NO - Do NOT merge

Reviewed by 3 independent agents: Correctness Expert, Code Health Expert, UX Wizard.

Issues Summary

Severity File Issue
πŸ”΄ HIGH e2e-tests/notification_banner.spec.ts:24 E2E test asserts banner text that doesn't match the actual component
🟒 Low Priority Notes (3 items)
  • Duplicated notification guard pattern - src/hooks/usePlanEvents.ts:181 & src/hooks/useStreamChat.ts:229 β€” same check-permission-and-fire pattern in two places. Not blocking since it's only 2 instances.
  • Switch label is generic - src/components/ChatEventNotificationSwitch.tsx:24 β€” "Enable notifications" doesn't describe what notifications are sent. The description below provides context, so this is minor.
  • Notification body uses "questionnaire" jargon - src/hooks/usePlanEvents.ts:190 β€” end users may not know what a "questionnaire" is. Consider friendlier copy like "Dyad needs your input to continue."
🚫 Dropped False Positives (1 item)
  • Deprecated key not cleaned up after migration - Dropped: The schema intentionally uses .passthrough() for forward/backward compatibility. Keeping the old key is by design.

Generated by Dyadbot multi-agent code review

dyad-assistant[bot]

This comment was marked as resolved.

cubic-dev-ai[bot]

This comment was marked as resolved.

@wwwillchen
Copy link
Copy Markdown
Collaborator

@BugBot run

@dyad-assistant
Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: βœ… YES - Ready to merge

Reviewed by 3 independent agents: Correctness Expert, Code Health Expert, UX Wizard.

Issues Summary

Severity File Issue
🟑 MEDIUM src/components/chat/NotificationBanner.tsx:25 Banner message uses developer jargon "chat events"
🟒 Low Priority Notes (3 items)
  • Switch label is generic - src/components/ChatEventNotificationSwitch.tsx:24 - "Enable notifications" is vague; description below provides context though
  • Questionnaire notification not actionable - src/hooks/usePlanEvents.ts:189 - No onclick handler to focus window and navigate to the chat
  • Notification body lacks specificity - src/hooks/usePlanEvents.ts:190 - "A questionnaire needs your input" doesn't indicate which chat/project
🚫 Dropped False Positives (2 items)
  • Deprecated field persists through migration - Dropped: Follows existing pattern in codebase (e.g., selectedChatMode). The .passthrough() is intentional for forward/backward compatibility
  • Notification logic duplication - Dropped from MEDIUM to LOW: Only 2 instances with different access patterns (settingsRef.current vs settings). Not enough to warrant extraction yet

Generated by Dyadbot multi-agent code review

<SkippableBanner
icon={Bell}
message="Get notified when chat responses finish."
message="Get notified about chat events."
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟑 MEDIUM | microcopy

Banner message uses developer jargon

"Get notified about chat events" uses internal terminology ("chat events") that won't resonate with users. The previous message "Get notified when chat responses finish" was more concrete and user-friendly.

πŸ’‘ Suggestion: Use a message that describes the actual benefit, e.g.:

Suggested change
message="Get notified about chat events."
message="Get notified when responses finish or input is needed."

Copy link
Copy Markdown
Collaborator

@wwwillchen wwwillchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Left one comment to improve UX.

having trouble getting notifications to show up on mac locally (but i think it's unrelated to your changes)

Notification.permission === "granted" &&
!document.hasFocus()
) {
new Notification("Dyad", {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's use a more helpful notification title,

new Notification(appName, {

@wwwillchen
Copy link
Copy Markdown
Collaborator

@BugBot run

@dyad-assistant
Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: βœ… YES - Ready to merge

Reviewed by 3 independent agents: Correctness Expert, Code Health Expert, UX Wizard.

Issues Summary

No new HIGH or MEDIUM issues found. The previously flagged microcopy issue ("chat events" banner text) remains open from a prior review.

🟒 Low Priority Notes (3 items)
  • Non-null assertion on selectedAppIdRef.current! - src/hooks/usePlanEvents.ts:190 β€” The ! is unnecessary since the fallback app?.name ?? "Dyad" already handles null. All 3 agents flagged this independently.
  • Notification logic duplication - src/hooks/usePlanEvents.ts + src/hooks/useStreamChat.ts β€” The notification-firing pattern (check settings, check permission, check focus, create Notification) is similar across both files. Worth extracting if more notification types are added.
  • Generic switch label - src/components/ChatEventNotificationSwitch.tsx:24 β€” "Enable notifications" is less descriptive than other settings labels (e.g. "Auto-fix problems"). Consider "Enable chat notifications" for clarity.
🚫 Dropped False Positives (3 items)
  • Migration preserves deprecated field β€” Dropped: Follows the existing codebase pattern (e.g., selectedChatMode migration also doesn't strip deprecated fields). The passthrough schema handles this correctly.
  • Questionnaire notification less informative than chat completion β€” Dropped: "A questionnaire needs your input" is clear and actionable. Different event types naturally warrant different levels of detail.
  • No notification throttling/deduplication β€” Dropped: Questionnaire events are naturally rate-limited (one per user interaction). Unlikely to flood.

Generated by Dyadbot multi-agent code review

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ’‘ Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2867f49e05

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with πŸ‘.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +424 to +426
enableChatEventNotifications:
stored.enableChatEventNotifications ??
stored.enableChatCompletionNotifications,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the legacy notification key in sync on write

This migration only fixes the upgrade path. readSettings()/writeSettings() still preserve deprecated fields for backward compatibility (src/main/settings.ts), but the renderer now updates only enableChatEventNotifications, so after a user toggles notifications in this build the JSON can contain a stale enableChatCompletionNotifications. Reopening the same profile in an older Dyad release will then restore the wrong notification preference instead of the value the user last chose.

Useful? React with πŸ‘Β / πŸ‘Ž.

@wwwillchen
Copy link
Copy Markdown
Collaborator

@BugBot run

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ’‘ Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f47000726a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with πŸ‘.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +189 to +190
const app = queryClient.getQueryData<App | null>(
queryKeys.apps.detail({ appId: selectedAppIdRef.current! }),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Stop deriving questionnaire notifications from the selected app

If the user starts a plan in one app, switches to another app while the model is thinking, and the questionnaire arrives with Dyad unfocused, this lookup will title the native notification with whichever app is currently selected instead of the app that actually needs input. I checked src/ipc/types/plan.ts and src/pro/main/ipc/handlers/local_agent/tools/planning_questionnaire.ts: the plan:questionnaire event only carries chatId, so selectedAppIdRef.current is not a reliable way to identify the questionnaire's app. Please include appId in the event payload or resolve it from payload.chatId before showing the notification.

Useful? React with πŸ‘Β / πŸ‘Ž.

@dyad-assistant
Copy link
Copy Markdown
Contributor

πŸ” Dyadbot Code Review Summary

Verdict: βœ… YES - Ready to merge

Reviewed by 3 independent agents: Correctness Expert, Code Health Expert, UX Wizard.

Issues Summary

Severity File Issue
🟑 MEDIUM src/components/chat/NotificationBanner.tsx:25 "Chat events" is vague, user-unfriendly microcopy
🟒 Low Priority Notes (4 items)
  • Non-null assertion on selectedAppIdRef - src/hooks/usePlanEvents.ts:189 - Uses ! but fallback handles null safely; a proper guard would be cleaner
  • Duplicate notifications on repeated events - src/hooks/usePlanEvents.ts:181 - No deduplication if backend emits multiple questionnaire events for same chatId while window is unfocused
  • Switch label too generic - src/components/ChatEventNotificationSwitch.tsx:24 - "Enable notifications" doesn't specify what kind; "Enable chat notifications" would be clearer
  • Search index label too generic - src/lib/settingsSearchIndex.ts:138 - "Notifications" alone is ambiguous; "Chat Notifications" would differentiate better
🚫 Dropped False Positives (4 items)
  • Duplicated notification logic - Dropped: Already commented on by gemini-code-assist
  • No click handler on notification - Dropped: Existing chat completion notifications also lack click handlers; this is consistent with current pattern
  • Migration downgrade concern - Dropped: Downgrade compatibility is not a standard requirement; migration correctly handles the upgrade path
  • Migration undefined when both fields absent - Dropped: No functional impact; undefined and false are treated identically (=== true check)

Generated by Dyadbot multi-agent code review

<SkippableBanner
icon={Bell}
message="Get notified when chat responses finish."
message="Get notified about chat events."
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟑 MEDIUM | microcopy

"Chat events" is vague, user-unfriendly microcopy

"Get notified about chat events." uses developer jargon β€” users don't think in terms of "chat events." The previous copy ("Get notified when chat responses finish.") was more specific and action-oriented. Since the feature now covers two cases, the banner should communicate both clearly.

πŸ’‘ Suggestion:

Suggested change
message="Get notified about chat events."
message="Get notified when responses finish or input is needed."

@azizmejri1 azizmejri1 merged commit 66e37c3 into dyad-sh:main Mar 19, 2026
9 of 12 checks passed
@github-actions
Copy link
Copy Markdown
Contributor

🎭 Playwright Test Results

❌ Some tests failed

OS Passed Failed Flaky Skipped
🍎 macOS 398 1 2 124
πŸͺŸ Windows 399 4 3 124

Summary: 797 passed, 5 failed, 5 flaky, 248 skipped

Failed Tests

🍎 macOS

  • setup_flow.spec.ts > Setup Flow > node.js install flow
    • TimeoutError: locator.click: Timeout 30000ms exceeded.

πŸͺŸ Windows

  • concurrent_chat.spec.ts > concurrent chat
    • Error: expect(locator).toBeVisible() failed
  • github.spec.ts > create and sync to new repo
    • TimeoutError: page.waitForSelector: Timeout 5000ms exceeded.
  • github.spec.ts > create and sync to existing repo
    • Error: expect(locator).toMatchAriaSnapshot(expected) failed
  • setup_flow.spec.ts > Setup Flow > node.js install flow
    • TimeoutError: locator.dispatchEvent: Timeout 30000ms exceeded.

πŸ“‹ Re-run Failing Tests (macOS)

Copy and paste to re-run all failing spec files locally:

npm run e2e \
  e2e-tests/setup_flow.spec.ts

⚠️ Flaky Tests

🍎 macOS

  • setup_flow.spec.ts > Setup Flow > setup banner shows correct state when node.js is installed (passed after 1 retry)
  • visual_editing.spec.ts > swap image via URL (passed after 2 retries)

πŸͺŸ Windows

  • chat_tabs.spec.ts > right-click context menu: Close tabs to the right (passed after 2 retries)
  • github.spec.ts > github clear integration settings (passed after 2 retries)
  • setup_flow.spec.ts > Setup Flow > setup banner shows correct state when node.js is installed (passed after 1 retry)

πŸ“Š View full report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-human:review-issue ai agent flagged an issue that requires human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tip banner for push notifications

2 participants