feat(desktop): show toast with release notes link when app updates to a new version - #2454

Closed
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309
Closed

feat(desktop): show toast with release notes link when app updates to a new version#2454
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309

Conversation

@shoaib050326

@shoaib050326shoaib050326 commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

When the desktop app is updated to a new version, a toast now appears on the
next launch announcing the new version with a button linking to the GitHub
release notes.

This addresses the lack of in-app feedback after an update — users previously
had no indication that something changed or where to find release notes.

Changes

  • Added shouldShowNewVersionToast, acknowledgeCurrentVersion,
    readLastAcknowledgedVersion, and getNewVersionReleaseNotesUrl to
    desktopUpdate.logic.ts — pure functions that compare the running version
    against a localStorage-persisted acknowledged version.
  • Created NewVersionToastCoordinator.tsx — a coordinator component that
    subscribes to useDesktopUpdateState() and triggers the toast when the
    version changes.
  • Mounted the coordinator in __root.tsx inside the ToastProvider.

Behavior

ScenarioResult
First launch (no prior version stored)No toast; current version persisted
Version matches acknowledged versionNo toast
Version differs from acknowledged versionToast: "Updated to vX.Y.Z" + "View release notes" button
Click "View release notes"Opens https://github.com/pingdotgg/t3code/releases/tag/vX.Y.Z
Browser mode (no desktop bridge)No-op (update state is null)
Updates disabledNo-op

Risk

Low. All new code is client-side only, uses localStorage for persistence
(gracefully handles unavailable storage), and follows the exact coordinator
pattern used by SlowRpcAckToastCoordinator. The toast is informational only
— no blocking, no side effects.

Rollback

Revert the four touched files.

Closes#2309


Note

Low Risk
Low risk: adds an informational client-side toast driven by desktop update state and localStorage, with guarded access/fallbacks and no server-side or auth changes.

Overview
Shows an “Updated to vX.Y.Z” persistent toast after the desktop app launches on a new version, with an action to open GitHub release notes (via desktopBridge.openExternal when available, otherwise window.open).

Introduces desktopUpdate.logic helpers to track the last acknowledged version in localStorage and decide when the toast should appear, adds coverage for this logic, and mounts the new NewVersionToastCoordinator in the authenticated root route.

Reviewed by Cursor Bugbot for commit 84b0444. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Show a toast with release notes link when the desktop app updates to a new version

  • Adds NewVersionToastCoordinator, a client-side component mounted in the authenticated root that watches desktop update state and shows a persistent success toast when a new version is detected.
  • The toast includes an action button that opens the GitHub release notes URL for the new version via desktopBridge.openExternal or window.open.
  • Adds utilities in desktopUpdate.logic.ts to construct the release notes URL, check whether the toast should be shown, and persist the acknowledged version to localStorage to prevent repeat toasts.
  • The toast only appears when updates are enabled, a current version exists, and the version differs from the last acknowledged version stored in localStorage.

Macroscope summarized 84b0444.

… a new version
When the desktop app restarts with a new version, a toast now appears
announcing the version with a link to GitHub release notes.
- Add shouldShowNewVersionToast / acknowledgeCurrentVersion logic with
localStorage-based version tracking.
- Add NewVersionToastCoordinator component following the existing
coordinator pattern.
- Mount coordinator in __root.tsx alongside other toast coordinators.
- Add 9 tests covering first-launch, version-match, and version-change
scenarios.
Closespingdotgg#2309
@coderabbitai

coderabbitaiBot commented May 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6b95ff67-98fa-45a2-9f2f-bf46672e4bc2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 2, 2026

@cursorcursorBot left a comment

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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6cca87f. Configure here.

Comment threadapps/web/src/components/desktopUpdate.logic.ts
@macroscopeapp

macroscopeappBot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (toast notifications on app updates) with a new globally-mounted component and localStorage-based state tracking. New features with user-facing behavior warrant human review even when well-scoped.

You can customize Macroscope's approvability policy. Learn more.

… side effect)
Move first-launch version seeding from the predicate to the coordinator
component, restoring command-query separation.
@juliusmarmingeChatGPT Codex Connector

Copy link
Copy Markdown
Member

The release-notes experience is covered by the newer trusted #2520, so this older toast implementation is redundant.

This was closed as part of a large repo-wide maintenance sweep. If you think it's still relevant, please reopen.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Provide Release notes via Toast when new version is released in Desktop App

2 participants

@shoaib050326@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(desktop): show toast with release notes link when app updates to a new version - #2454

Closed
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309
Closed

feat(desktop): show toast with release notes link when app updates to a new version#2454
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309

Conversation

@shoaib050326

@shoaib050326shoaib050326 commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

When the desktop app is updated to a new version, a toast now appears on the
next launch announcing the new version with a button linking to the GitHub
release notes.

This addresses the lack of in-app feedback after an update — users previously
had no indication that something changed or where to find release notes.

Changes

  • Added shouldShowNewVersionToast, acknowledgeCurrentVersion,
    readLastAcknowledgedVersion, and getNewVersionReleaseNotesUrl to
    desktopUpdate.logic.ts — pure functions that compare the running version
    against a localStorage-persisted acknowledged version.
  • Created NewVersionToastCoordinator.tsx — a coordinator component that
    subscribes to useDesktopUpdateState() and triggers the toast when the
    version changes.
  • Mounted the coordinator in __root.tsx inside the ToastProvider.

Behavior

ScenarioResult
First launch (no prior version stored)No toast; current version persisted
Version matches acknowledged versionNo toast
Version differs from acknowledged versionToast: "Updated to vX.Y.Z" + "View release notes" button
Click "View release notes"Opens https://github.com/pingdotgg/t3code/releases/tag/vX.Y.Z
Browser mode (no desktop bridge)No-op (update state is null)
Updates disabledNo-op

Risk

Low. All new code is client-side only, uses localStorage for persistence
(gracefully handles unavailable storage), and follows the exact coordinator
pattern used by SlowRpcAckToastCoordinator. The toast is informational only
— no blocking, no side effects.

Rollback

Revert the four touched files.

Closes#2309


Note

Low Risk
Low risk: adds an informational client-side toast driven by desktop update state and localStorage, with guarded access/fallbacks and no server-side or auth changes.

Overview
Shows an “Updated to vX.Y.Z” persistent toast after the desktop app launches on a new version, with an action to open GitHub release notes (via desktopBridge.openExternal when available, otherwise window.open).

Introduces desktopUpdate.logic helpers to track the last acknowledged version in localStorage and decide when the toast should appear, adds coverage for this logic, and mounts the new NewVersionToastCoordinator in the authenticated root route.

Reviewed by Cursor Bugbot for commit 84b0444. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Show a toast with release notes link when the desktop app updates to a new version

  • Adds NewVersionToastCoordinator, a client-side component mounted in the authenticated root that watches desktop update state and shows a persistent success toast when a new version is detected.
  • The toast includes an action button that opens the GitHub release notes URL for the new version via desktopBridge.openExternal or window.open.
  • Adds utilities in desktopUpdate.logic.ts to construct the release notes URL, check whether the toast should be shown, and persist the acknowledged version to localStorage to prevent repeat toasts.
  • The toast only appears when updates are enabled, a current version exists, and the version differs from the last acknowledged version stored in localStorage.

Macroscope summarized 84b0444.

… a new version
When the desktop app restarts with a new version, a toast now appears
announcing the version with a link to GitHub release notes.
- Add shouldShowNewVersionToast / acknowledgeCurrentVersion logic with
localStorage-based version tracking.
- Add NewVersionToastCoordinator component following the existing
coordinator pattern.
- Mount coordinator in __root.tsx alongside other toast coordinators.
- Add 9 tests covering first-launch, version-match, and version-change
scenarios.
Closespingdotgg#2309
@coderabbitai

coderabbitaiBot commented May 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6b95ff67-98fa-45a2-9f2f-bf46672e4bc2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 2, 2026

@cursorcursorBot left a comment

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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6cca87f. Configure here.

Comment threadapps/web/src/components/desktopUpdate.logic.ts
@macroscopeapp

macroscopeappBot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (toast notifications on app updates) with a new globally-mounted component and localStorage-based state tracking. New features with user-facing behavior warrant human review even when well-scoped.

You can customize Macroscope's approvability policy. Learn more.

… side effect)
Move first-launch version seeding from the predicate to the coordinator
component, restoring command-query separation.
@juliusmarmingeChatGPT Codex Connector

Copy link
Copy Markdown
Member

The release-notes experience is covered by the newer trusted #2520, so this older toast implementation is redundant.

This was closed as part of a large repo-wide maintenance sweep. If you think it's still relevant, please reopen.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Provide Release notes via Toast when new version is released in Desktop App

2 participants

@shoaib050326@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(desktop): show toast with release notes link when app updates to a new version - #2454

Closed
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309
Closed

feat(desktop): show toast with release notes link when app updates to a new version#2454
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309

Conversation

@shoaib050326

@shoaib050326shoaib050326 commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

When the desktop app is updated to a new version, a toast now appears on the
next launch announcing the new version with a button linking to the GitHub
release notes.

This addresses the lack of in-app feedback after an update — users previously
had no indication that something changed or where to find release notes.

Changes

  • Added shouldShowNewVersionToast, acknowledgeCurrentVersion,
    readLastAcknowledgedVersion, and getNewVersionReleaseNotesUrl to
    desktopUpdate.logic.ts — pure functions that compare the running version
    against a localStorage-persisted acknowledged version.
  • Created NewVersionToastCoordinator.tsx — a coordinator component that
    subscribes to useDesktopUpdateState() and triggers the toast when the
    version changes.
  • Mounted the coordinator in __root.tsx inside the ToastProvider.

Behavior

ScenarioResult
First launch (no prior version stored)No toast; current version persisted
Version matches acknowledged versionNo toast
Version differs from acknowledged versionToast: "Updated to vX.Y.Z" + "View release notes" button
Click "View release notes"Opens https://github.com/pingdotgg/t3code/releases/tag/vX.Y.Z
Browser mode (no desktop bridge)No-op (update state is null)
Updates disabledNo-op

Risk

Low. All new code is client-side only, uses localStorage for persistence
(gracefully handles unavailable storage), and follows the exact coordinator
pattern used by SlowRpcAckToastCoordinator. The toast is informational only
— no blocking, no side effects.

Rollback

Revert the four touched files.

Closes#2309


Note

Low Risk
Low risk: adds an informational client-side toast driven by desktop update state and localStorage, with guarded access/fallbacks and no server-side or auth changes.

Overview
Shows an “Updated to vX.Y.Z” persistent toast after the desktop app launches on a new version, with an action to open GitHub release notes (via desktopBridge.openExternal when available, otherwise window.open).

Introduces desktopUpdate.logic helpers to track the last acknowledged version in localStorage and decide when the toast should appear, adds coverage for this logic, and mounts the new NewVersionToastCoordinator in the authenticated root route.

Reviewed by Cursor Bugbot for commit 84b0444. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Show a toast with release notes link when the desktop app updates to a new version

  • Adds NewVersionToastCoordinator, a client-side component mounted in the authenticated root that watches desktop update state and shows a persistent success toast when a new version is detected.
  • The toast includes an action button that opens the GitHub release notes URL for the new version via desktopBridge.openExternal or window.open.
  • Adds utilities in desktopUpdate.logic.ts to construct the release notes URL, check whether the toast should be shown, and persist the acknowledged version to localStorage to prevent repeat toasts.
  • The toast only appears when updates are enabled, a current version exists, and the version differs from the last acknowledged version stored in localStorage.

Macroscope summarized 84b0444.

… a new version
When the desktop app restarts with a new version, a toast now appears
announcing the version with a link to GitHub release notes.
- Add shouldShowNewVersionToast / acknowledgeCurrentVersion logic with
localStorage-based version tracking.
- Add NewVersionToastCoordinator component following the existing
coordinator pattern.
- Mount coordinator in __root.tsx alongside other toast coordinators.
- Add 9 tests covering first-launch, version-match, and version-change
scenarios.
Closespingdotgg#2309
@coderabbitai

coderabbitaiBot commented May 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6b95ff67-98fa-45a2-9f2f-bf46672e4bc2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 2, 2026

@cursorcursorBot left a comment

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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6cca87f. Configure here.

Comment threadapps/web/src/components/desktopUpdate.logic.ts
@macroscopeapp

macroscopeappBot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (toast notifications on app updates) with a new globally-mounted component and localStorage-based state tracking. New features with user-facing behavior warrant human review even when well-scoped.

You can customize Macroscope's approvability policy. Learn more.

… side effect)
Move first-launch version seeding from the predicate to the coordinator
component, restoring command-query separation.
@juliusmarmingeChatGPT Codex Connector

Copy link
Copy Markdown
Member

The release-notes experience is covered by the newer trusted #2520, so this older toast implementation is redundant.

This was closed as part of a large repo-wide maintenance sweep. If you think it's still relevant, please reopen.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Provide Release notes via Toast when new version is released in Desktop App

2 participants

@shoaib050326@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(desktop): show toast with release notes link when app updates to a new version - #2454

Closed
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309
Closed

feat(desktop): show toast with release notes link when app updates to a new version#2454
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309

Conversation

@shoaib050326

@shoaib050326shoaib050326 commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

When the desktop app is updated to a new version, a toast now appears on the
next launch announcing the new version with a button linking to the GitHub
release notes.

This addresses the lack of in-app feedback after an update — users previously
had no indication that something changed or where to find release notes.

Changes

  • Added shouldShowNewVersionToast, acknowledgeCurrentVersion,
    readLastAcknowledgedVersion, and getNewVersionReleaseNotesUrl to
    desktopUpdate.logic.ts — pure functions that compare the running version
    against a localStorage-persisted acknowledged version.
  • Created NewVersionToastCoordinator.tsx — a coordinator component that
    subscribes to useDesktopUpdateState() and triggers the toast when the
    version changes.
  • Mounted the coordinator in __root.tsx inside the ToastProvider.

Behavior

ScenarioResult
First launch (no prior version stored)No toast; current version persisted
Version matches acknowledged versionNo toast
Version differs from acknowledged versionToast: "Updated to vX.Y.Z" + "View release notes" button
Click "View release notes"Opens https://github.com/pingdotgg/t3code/releases/tag/vX.Y.Z
Browser mode (no desktop bridge)No-op (update state is null)
Updates disabledNo-op

Risk

Low. All new code is client-side only, uses localStorage for persistence
(gracefully handles unavailable storage), and follows the exact coordinator
pattern used by SlowRpcAckToastCoordinator. The toast is informational only
— no blocking, no side effects.

Rollback

Revert the four touched files.

Closes#2309


Note

Low Risk
Low risk: adds an informational client-side toast driven by desktop update state and localStorage, with guarded access/fallbacks and no server-side or auth changes.

Overview
Shows an “Updated to vX.Y.Z” persistent toast after the desktop app launches on a new version, with an action to open GitHub release notes (via desktopBridge.openExternal when available, otherwise window.open).

Introduces desktopUpdate.logic helpers to track the last acknowledged version in localStorage and decide when the toast should appear, adds coverage for this logic, and mounts the new NewVersionToastCoordinator in the authenticated root route.

Reviewed by Cursor Bugbot for commit 84b0444. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Show a toast with release notes link when the desktop app updates to a new version

  • Adds NewVersionToastCoordinator, a client-side component mounted in the authenticated root that watches desktop update state and shows a persistent success toast when a new version is detected.
  • The toast includes an action button that opens the GitHub release notes URL for the new version via desktopBridge.openExternal or window.open.
  • Adds utilities in desktopUpdate.logic.ts to construct the release notes URL, check whether the toast should be shown, and persist the acknowledged version to localStorage to prevent repeat toasts.
  • The toast only appears when updates are enabled, a current version exists, and the version differs from the last acknowledged version stored in localStorage.

Macroscope summarized 84b0444.

… a new version
When the desktop app restarts with a new version, a toast now appears
announcing the version with a link to GitHub release notes.
- Add shouldShowNewVersionToast / acknowledgeCurrentVersion logic with
localStorage-based version tracking.
- Add NewVersionToastCoordinator component following the existing
coordinator pattern.
- Mount coordinator in __root.tsx alongside other toast coordinators.
- Add 9 tests covering first-launch, version-match, and version-change
scenarios.
Closespingdotgg#2309
@coderabbitai

coderabbitaiBot commented May 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6b95ff67-98fa-45a2-9f2f-bf46672e4bc2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 2, 2026

@cursorcursorBot left a comment

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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6cca87f. Configure here.

Comment threadapps/web/src/components/desktopUpdate.logic.ts
@macroscopeapp

macroscopeappBot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (toast notifications on app updates) with a new globally-mounted component and localStorage-based state tracking. New features with user-facing behavior warrant human review even when well-scoped.

You can customize Macroscope's approvability policy. Learn more.

… side effect)
Move first-launch version seeding from the predicate to the coordinator
component, restoring command-query separation.
@juliusmarmingeChatGPT Codex Connector

Copy link
Copy Markdown
Member

The release-notes experience is covered by the newer trusted #2520, so this older toast implementation is redundant.

This was closed as part of a large repo-wide maintenance sweep. If you think it's still relevant, please reopen.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Provide Release notes via Toast when new version is released in Desktop App

2 participants

@shoaib050326@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(desktop): show toast with release notes link when app updates to a new version - #2454

Closed
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309
Closed

feat(desktop): show toast with release notes link when app updates to a new version#2454
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309

Conversation

@shoaib050326

@shoaib050326shoaib050326 commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

When the desktop app is updated to a new version, a toast now appears on the
next launch announcing the new version with a button linking to the GitHub
release notes.

This addresses the lack of in-app feedback after an update — users previously
had no indication that something changed or where to find release notes.

Changes

  • Added shouldShowNewVersionToast, acknowledgeCurrentVersion,
    readLastAcknowledgedVersion, and getNewVersionReleaseNotesUrl to
    desktopUpdate.logic.ts — pure functions that compare the running version
    against a localStorage-persisted acknowledged version.
  • Created NewVersionToastCoordinator.tsx — a coordinator component that
    subscribes to useDesktopUpdateState() and triggers the toast when the
    version changes.
  • Mounted the coordinator in __root.tsx inside the ToastProvider.

Behavior

ScenarioResult
First launch (no prior version stored)No toast; current version persisted
Version matches acknowledged versionNo toast
Version differs from acknowledged versionToast: "Updated to vX.Y.Z" + "View release notes" button
Click "View release notes"Opens https://github.com/pingdotgg/t3code/releases/tag/vX.Y.Z
Browser mode (no desktop bridge)No-op (update state is null)
Updates disabledNo-op

Risk

Low. All new code is client-side only, uses localStorage for persistence
(gracefully handles unavailable storage), and follows the exact coordinator
pattern used by SlowRpcAckToastCoordinator. The toast is informational only
— no blocking, no side effects.

Rollback

Revert the four touched files.

Closes#2309


Note

Low Risk
Low risk: adds an informational client-side toast driven by desktop update state and localStorage, with guarded access/fallbacks and no server-side or auth changes.

Overview
Shows an “Updated to vX.Y.Z” persistent toast after the desktop app launches on a new version, with an action to open GitHub release notes (via desktopBridge.openExternal when available, otherwise window.open).

Introduces desktopUpdate.logic helpers to track the last acknowledged version in localStorage and decide when the toast should appear, adds coverage for this logic, and mounts the new NewVersionToastCoordinator in the authenticated root route.

Reviewed by Cursor Bugbot for commit 84b0444. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Show a toast with release notes link when the desktop app updates to a new version

  • Adds NewVersionToastCoordinator, a client-side component mounted in the authenticated root that watches desktop update state and shows a persistent success toast when a new version is detected.
  • The toast includes an action button that opens the GitHub release notes URL for the new version via desktopBridge.openExternal or window.open.
  • Adds utilities in desktopUpdate.logic.ts to construct the release notes URL, check whether the toast should be shown, and persist the acknowledged version to localStorage to prevent repeat toasts.
  • The toast only appears when updates are enabled, a current version exists, and the version differs from the last acknowledged version stored in localStorage.

Macroscope summarized 84b0444.

… a new version
When the desktop app restarts with a new version, a toast now appears
announcing the version with a link to GitHub release notes.
- Add shouldShowNewVersionToast / acknowledgeCurrentVersion logic with
localStorage-based version tracking.
- Add NewVersionToastCoordinator component following the existing
coordinator pattern.
- Mount coordinator in __root.tsx alongside other toast coordinators.
- Add 9 tests covering first-launch, version-match, and version-change
scenarios.
Closespingdotgg#2309
@coderabbitai

coderabbitaiBot commented May 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6b95ff67-98fa-45a2-9f2f-bf46672e4bc2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 2, 2026

@cursorcursorBot left a comment

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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6cca87f. Configure here.

Comment threadapps/web/src/components/desktopUpdate.logic.ts
@macroscopeapp

macroscopeappBot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (toast notifications on app updates) with a new globally-mounted component and localStorage-based state tracking. New features with user-facing behavior warrant human review even when well-scoped.

You can customize Macroscope's approvability policy. Learn more.

… side effect)
Move first-launch version seeding from the predicate to the coordinator
component, restoring command-query separation.
@juliusmarmingeChatGPT Codex Connector

Copy link
Copy Markdown
Member

The release-notes experience is covered by the newer trusted #2520, so this older toast implementation is redundant.

This was closed as part of a large repo-wide maintenance sweep. If you think it's still relevant, please reopen.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Provide Release notes via Toast when new version is released in Desktop App

2 participants

@shoaib050326@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(desktop): show toast with release notes link when app updates to a new version - #2454

Closed
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309
Closed

feat(desktop): show toast with release notes link when app updates to a new version#2454
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309

Conversation

@shoaib050326

@shoaib050326shoaib050326 commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

When the desktop app is updated to a new version, a toast now appears on the
next launch announcing the new version with a button linking to the GitHub
release notes.

This addresses the lack of in-app feedback after an update — users previously
had no indication that something changed or where to find release notes.

Changes

  • Added shouldShowNewVersionToast, acknowledgeCurrentVersion,
    readLastAcknowledgedVersion, and getNewVersionReleaseNotesUrl to
    desktopUpdate.logic.ts — pure functions that compare the running version
    against a localStorage-persisted acknowledged version.
  • Created NewVersionToastCoordinator.tsx — a coordinator component that
    subscribes to useDesktopUpdateState() and triggers the toast when the
    version changes.
  • Mounted the coordinator in __root.tsx inside the ToastProvider.

Behavior

ScenarioResult
First launch (no prior version stored)No toast; current version persisted
Version matches acknowledged versionNo toast
Version differs from acknowledged versionToast: "Updated to vX.Y.Z" + "View release notes" button
Click "View release notes"Opens https://github.com/pingdotgg/t3code/releases/tag/vX.Y.Z
Browser mode (no desktop bridge)No-op (update state is null)
Updates disabledNo-op

Risk

Low. All new code is client-side only, uses localStorage for persistence
(gracefully handles unavailable storage), and follows the exact coordinator
pattern used by SlowRpcAckToastCoordinator. The toast is informational only
— no blocking, no side effects.

Rollback

Revert the four touched files.

Closes#2309


Note

Low Risk
Low risk: adds an informational client-side toast driven by desktop update state and localStorage, with guarded access/fallbacks and no server-side or auth changes.

Overview
Shows an “Updated to vX.Y.Z” persistent toast after the desktop app launches on a new version, with an action to open GitHub release notes (via desktopBridge.openExternal when available, otherwise window.open).

Introduces desktopUpdate.logic helpers to track the last acknowledged version in localStorage and decide when the toast should appear, adds coverage for this logic, and mounts the new NewVersionToastCoordinator in the authenticated root route.

Reviewed by Cursor Bugbot for commit 84b0444. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Show a toast with release notes link when the desktop app updates to a new version

  • Adds NewVersionToastCoordinator, a client-side component mounted in the authenticated root that watches desktop update state and shows a persistent success toast when a new version is detected.
  • The toast includes an action button that opens the GitHub release notes URL for the new version via desktopBridge.openExternal or window.open.
  • Adds utilities in desktopUpdate.logic.ts to construct the release notes URL, check whether the toast should be shown, and persist the acknowledged version to localStorage to prevent repeat toasts.
  • The toast only appears when updates are enabled, a current version exists, and the version differs from the last acknowledged version stored in localStorage.

Macroscope summarized 84b0444.

… a new version
When the desktop app restarts with a new version, a toast now appears
announcing the version with a link to GitHub release notes.
- Add shouldShowNewVersionToast / acknowledgeCurrentVersion logic with
localStorage-based version tracking.
- Add NewVersionToastCoordinator component following the existing
coordinator pattern.
- Mount coordinator in __root.tsx alongside other toast coordinators.
- Add 9 tests covering first-launch, version-match, and version-change
scenarios.
Closespingdotgg#2309
@coderabbitai

coderabbitaiBot commented May 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6b95ff67-98fa-45a2-9f2f-bf46672e4bc2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 2, 2026

@cursorcursorBot left a comment

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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6cca87f. Configure here.

Comment threadapps/web/src/components/desktopUpdate.logic.ts
@macroscopeapp

macroscopeappBot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (toast notifications on app updates) with a new globally-mounted component and localStorage-based state tracking. New features with user-facing behavior warrant human review even when well-scoped.

You can customize Macroscope's approvability policy. Learn more.

… side effect)
Move first-launch version seeding from the predicate to the coordinator
component, restoring command-query separation.
@juliusmarmingeChatGPT Codex Connector

Copy link
Copy Markdown
Member

The release-notes experience is covered by the newer trusted #2520, so this older toast implementation is redundant.

This was closed as part of a large repo-wide maintenance sweep. If you think it's still relevant, please reopen.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Provide Release notes via Toast when new version is released in Desktop App

2 participants

@shoaib050326@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(desktop): show toast with release notes link when app updates to a new version - #2454

Closed
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309
Closed

feat(desktop): show toast with release notes link when app updates to a new version#2454
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309

Conversation

@shoaib050326

@shoaib050326shoaib050326 commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

When the desktop app is updated to a new version, a toast now appears on the
next launch announcing the new version with a button linking to the GitHub
release notes.

This addresses the lack of in-app feedback after an update — users previously
had no indication that something changed or where to find release notes.

Changes

  • Added shouldShowNewVersionToast, acknowledgeCurrentVersion,
    readLastAcknowledgedVersion, and getNewVersionReleaseNotesUrl to
    desktopUpdate.logic.ts — pure functions that compare the running version
    against a localStorage-persisted acknowledged version.
  • Created NewVersionToastCoordinator.tsx — a coordinator component that
    subscribes to useDesktopUpdateState() and triggers the toast when the
    version changes.
  • Mounted the coordinator in __root.tsx inside the ToastProvider.

Behavior

ScenarioResult
First launch (no prior version stored)No toast; current version persisted
Version matches acknowledged versionNo toast
Version differs from acknowledged versionToast: "Updated to vX.Y.Z" + "View release notes" button
Click "View release notes"Opens https://github.com/pingdotgg/t3code/releases/tag/vX.Y.Z
Browser mode (no desktop bridge)No-op (update state is null)
Updates disabledNo-op

Risk

Low. All new code is client-side only, uses localStorage for persistence
(gracefully handles unavailable storage), and follows the exact coordinator
pattern used by SlowRpcAckToastCoordinator. The toast is informational only
— no blocking, no side effects.

Rollback

Revert the four touched files.

Closes#2309


Note

Low Risk
Low risk: adds an informational client-side toast driven by desktop update state and localStorage, with guarded access/fallbacks and no server-side or auth changes.

Overview
Shows an “Updated to vX.Y.Z” persistent toast after the desktop app launches on a new version, with an action to open GitHub release notes (via desktopBridge.openExternal when available, otherwise window.open).

Introduces desktopUpdate.logic helpers to track the last acknowledged version in localStorage and decide when the toast should appear, adds coverage for this logic, and mounts the new NewVersionToastCoordinator in the authenticated root route.

Reviewed by Cursor Bugbot for commit 84b0444. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Show a toast with release notes link when the desktop app updates to a new version

  • Adds NewVersionToastCoordinator, a client-side component mounted in the authenticated root that watches desktop update state and shows a persistent success toast when a new version is detected.
  • The toast includes an action button that opens the GitHub release notes URL for the new version via desktopBridge.openExternal or window.open.
  • Adds utilities in desktopUpdate.logic.ts to construct the release notes URL, check whether the toast should be shown, and persist the acknowledged version to localStorage to prevent repeat toasts.
  • The toast only appears when updates are enabled, a current version exists, and the version differs from the last acknowledged version stored in localStorage.

Macroscope summarized 84b0444.

… a new version
When the desktop app restarts with a new version, a toast now appears
announcing the version with a link to GitHub release notes.
- Add shouldShowNewVersionToast / acknowledgeCurrentVersion logic with
localStorage-based version tracking.
- Add NewVersionToastCoordinator component following the existing
coordinator pattern.
- Mount coordinator in __root.tsx alongside other toast coordinators.
- Add 9 tests covering first-launch, version-match, and version-change
scenarios.
Closespingdotgg#2309
@coderabbitai

coderabbitaiBot commented May 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6b95ff67-98fa-45a2-9f2f-bf46672e4bc2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 2, 2026

@cursorcursorBot left a comment

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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6cca87f. Configure here.

Comment threadapps/web/src/components/desktopUpdate.logic.ts
@macroscopeapp

macroscopeappBot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (toast notifications on app updates) with a new globally-mounted component and localStorage-based state tracking. New features with user-facing behavior warrant human review even when well-scoped.

You can customize Macroscope's approvability policy. Learn more.

… side effect)
Move first-launch version seeding from the predicate to the coordinator
component, restoring command-query separation.
@juliusmarmingeChatGPT Codex Connector

Copy link
Copy Markdown
Member

The release-notes experience is covered by the newer trusted #2520, so this older toast implementation is redundant.

This was closed as part of a large repo-wide maintenance sweep. If you think it's still relevant, please reopen.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Provide Release notes via Toast when new version is released in Desktop App

2 participants

@shoaib050326@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(desktop): show toast with release notes link when app updates to a new version - #2454

Closed
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309
Closed

feat(desktop): show toast with release notes link when app updates to a new version#2454
shoaib050326 wants to merge 2 commits into
pingdotgg:mainfrom
shoaib050326:feat/release-notes-toast-2309

Conversation

@shoaib050326

@shoaib050326shoaib050326 commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

When the desktop app is updated to a new version, a toast now appears on the
next launch announcing the new version with a button linking to the GitHub
release notes.

This addresses the lack of in-app feedback after an update — users previously
had no indication that something changed or where to find release notes.

Changes

  • Added shouldShowNewVersionToast, acknowledgeCurrentVersion,
    readLastAcknowledgedVersion, and getNewVersionReleaseNotesUrl to
    desktopUpdate.logic.ts — pure functions that compare the running version
    against a localStorage-persisted acknowledged version.
  • Created NewVersionToastCoordinator.tsx — a coordinator component that
    subscribes to useDesktopUpdateState() and triggers the toast when the
    version changes.
  • Mounted the coordinator in __root.tsx inside the ToastProvider.

Behavior

ScenarioResult
First launch (no prior version stored)No toast; current version persisted
Version matches acknowledged versionNo toast
Version differs from acknowledged versionToast: "Updated to vX.Y.Z" + "View release notes" button
Click "View release notes"Opens https://github.com/pingdotgg/t3code/releases/tag/vX.Y.Z
Browser mode (no desktop bridge)No-op (update state is null)
Updates disabledNo-op

Risk

Low. All new code is client-side only, uses localStorage for persistence
(gracefully handles unavailable storage), and follows the exact coordinator
pattern used by SlowRpcAckToastCoordinator. The toast is informational only
— no blocking, no side effects.

Rollback

Revert the four touched files.

Closes#2309


Note

Low Risk
Low risk: adds an informational client-side toast driven by desktop update state and localStorage, with guarded access/fallbacks and no server-side or auth changes.

Overview
Shows an “Updated to vX.Y.Z” persistent toast after the desktop app launches on a new version, with an action to open GitHub release notes (via desktopBridge.openExternal when available, otherwise window.open).

Introduces desktopUpdate.logic helpers to track the last acknowledged version in localStorage and decide when the toast should appear, adds coverage for this logic, and mounts the new NewVersionToastCoordinator in the authenticated root route.

Reviewed by Cursor Bugbot for commit 84b0444. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Show a toast with release notes link when the desktop app updates to a new version

  • Adds NewVersionToastCoordinator, a client-side component mounted in the authenticated root that watches desktop update state and shows a persistent success toast when a new version is detected.
  • The toast includes an action button that opens the GitHub release notes URL for the new version via desktopBridge.openExternal or window.open.
  • Adds utilities in desktopUpdate.logic.ts to construct the release notes URL, check whether the toast should be shown, and persist the acknowledged version to localStorage to prevent repeat toasts.
  • The toast only appears when updates are enabled, a current version exists, and the version differs from the last acknowledged version stored in localStorage.

Macroscope summarized 84b0444.

… a new version
When the desktop app restarts with a new version, a toast now appears
announcing the version with a link to GitHub release notes.
- Add shouldShowNewVersionToast / acknowledgeCurrentVersion logic with
localStorage-based version tracking.
- Add NewVersionToastCoordinator component following the existing
coordinator pattern.
- Mount coordinator in __root.tsx alongside other toast coordinators.
- Add 9 tests covering first-launch, version-match, and version-change
scenarios.
Closespingdotgg#2309
@coderabbitai

coderabbitaiBot commented May 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6b95ff67-98fa-45a2-9f2f-bf46672e4bc2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 2, 2026

@cursorcursorBot left a comment

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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6cca87f. Configure here.

Comment threadapps/web/src/components/desktopUpdate.logic.ts
@macroscopeapp

macroscopeappBot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (toast notifications on app updates) with a new globally-mounted component and localStorage-based state tracking. New features with user-facing behavior warrant human review even when well-scoped.

You can customize Macroscope's approvability policy. Learn more.

… side effect)
Move first-launch version seeding from the predicate to the coordinator
component, restoring command-query separation.
@juliusmarmingeChatGPT Codex Connector

Copy link
Copy Markdown
Member

The release-notes experience is covered by the newer trusted #2520, so this older toast implementation is redundant.

This was closed as part of a large repo-wide maintenance sweep. If you think it's still relevant, please reopen.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Provide Release notes via Toast when new version is released in Desktop App

2 participants

@shoaib050326@juliusmarminge