Skip to content

fix(desktop): generic monthly-limit popup copy for menu-bar trigger#7533

Merged
mdmohsin7 merged 3 commits into
mainfrom
rex/neo-popup-copy-fix
Jun 1, 2026
Merged

fix(desktop): generic monthly-limit popup copy for menu-bar trigger#7533
mdmohsin7 merged 3 commits into
mainfrom
rex/neo-popup-copy-fix

Conversation

@mdmohsin7
Copy link
Copy Markdown
Member

Summary

  • Menu-bar Screen Capture / Audio Recording toggles in OmiApp.swift:1033, 1070 post showUsageLimitPopup with reason: "trial_expired". That string fell through to the default branch of UsageLimitPopupView.body_text and returned the same copy as the transcription-cap case: "Upgrade to make sure your new recordings aren't lost."
  • That phrasing reads as a data-loss threat. For users tripping the stale desktop_isPaywalled flag (now self-healed at launch by desktop: clear sticky paywalled flag on launch for paid-plan users (follow-up to #7514) #7517) while also at their Neo chat cap, listening was never actually paywalled server-side — but the copy made them believe their recordings were at risk.
  • Switches the default branch to plan-agnostic copy: "Upgrade to keep using Omi without restrictions." The explicit "transcription" case is unchanged (real transcription-cap → recordings copy is accurate).

Why now

Surfaced while investigating the same Neo grandfathered cohort #7517 fixed at launch. Several users on legacy Unlimited / Neo plans were seeing the recordings-loss copy on the menu-bar toggle path while their backend state correctly reported trial_expired=false and chat_quota_allowed=true. After #7517 self-heals the stale flag on next launch, this popup should no longer fire for them in normal flow — but the copy bug also affects any legitimate "trial_expired" paywall (basic trial expired with no BYOK), where the same data-loss framing is inaccurate.

Test plan

  • Build via Codemagic (no local Swift toolchain on this CI host)
  • Manual: menu-bar Screen Capture toggle while isPaywalled=true → popup body reads "Upgrade to keep using Omi without restrictions."
  • Manual: hit transcription cap → popup body still reads "…new recordings aren't lost."
  • Manual: hit chat cap → popup body still reads "…keep chatting with Omi without restrictions."

🤖 Generated with Claude Code

mdmohsin7 and others added 3 commits May 28, 2026 21:18
The menu-bar Screen Capture / Audio Recording toggles in OmiApp.swift
post showUsageLimitPopup with reason "trial_expired", which fell to
the default branch in UsageLimitPopupView and returned the same copy
as the transcription-cap case: "Upgrade to make sure your new
recordings aren't lost."

That phrasing reads as a data-loss threat. For users tripping a stale
desktop_isPaywalled flag (now self-healed at launch by #7517) while
also at their Neo chat cap, listening was never actually paywalled
server-side; the wording made them think their recordings were at
risk when only the chat cap was hit.

Switch the default branch to plan-agnostic copy: "Upgrade to keep
using Omi without restrictions." The transcription-specific case is
unchanged (real transcription cap → recordings copy is accurate).
@mdmohsin7 mdmohsin7 marked this pull request as ready for review June 1, 2026 10:45
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Jun 1, 2026

Greptile Summary

Fixes misleading "recordings aren't lost" copy shown on the monthly-limit popup when the menu-bar Screen Capture or Audio Recording toggle triggers it with reason: "trial_expired". The default branch in UsageLimitPopupView.body_text now returns plan-agnostic copy ("Upgrade to keep using Omi without restrictions.") instead of the recording-loss framing that was only appropriate for the "transcription" case.

  • UsageLimitPopupView.swift: default branch copy updated; the "transcription" case (real cap → recordings copy) and "chat"/"floating_bar" case are both unchanged.
  • CHANGELOG.json: Two entries added to unreleased — one for this fix and one for a conversation-title-save fix that has no corresponding code change in this diff.

Confidence Score: 4/5

Safe to merge — the Swift change is a one-line copy update in a switch default branch with no logic impact.

The Swift change is minimal and correct: the transcription and chat/floating_bar cases are untouched, and the new default copy is accurate for trial_expired and any future unknown reason. The unrelated changelog entry has no corresponding code change in this diff.

desktop/CHANGELOG.json — contains an entry for a conversation-title fix that is not reflected in any changed code in this PR.

Important Files Changed

Filename Overview
desktop/Desktop/Sources/UsageLimitPopupView.swift Default branch copy changed from recording-loss framing to generic restriction copy; logic and structure unchanged
desktop/CHANGELOG.json Two entries added to "unreleased"; one matches this PR, the other ("Fixed editing a conversation title not saving") has no corresponding code change in the diff

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[showUsageLimitPopup called] --> B{reason}
    B -- transcription --> C["Recordings copy"]
    B -- chat / floating_bar --> D["Chatting copy"]
    B -- trial_expired or other --> E["Generic copy (fixed)"]
    E:::changed
    classDef changed fill:#d4edda,stroke:#28a745
Loading

Comments Outside Diff (1)

  1. desktop/Desktop/Sources/UsageLimitPopupView.swift, line 127-135 (link)

    P2 Preview only exercises the "transcription" case

    The #Preview still uses reason: "transcription", so the new default-branch copy ("keep using Omi without restrictions") can't be visually verified in Xcode's canvas without manually editing the preview. Adding a second preview instance with reason: "trial_expired" would make it easy to catch copy regressions on the newly-fixed path in future changes.

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Reviews (1): Last reviewed commit: "Merge branch 'main' into rex/neo-popup-c..." | Re-trigger Greptile

Comment thread desktop/CHANGELOG.json
Comment on lines +3 to +4
"Fixed editing a conversation title not saving",
"Fixed misleading \"recordings aren't lost\" copy on the monthly-limit popup when the menu-bar Screen Capture or Audio Recording toggle was the trigger"
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.

P2 Unrelated changelog entry bundled into this PR

"Fixed editing a conversation title not saving" has no corresponding code change anywhere in this diff — the only Swift file touched is UsageLimitPopupView.swift. If this fix lives in a separate commit or branch, it would be more accurate to land it there so the changelog entry stays paired with the actual change. As-is, the release notes will attribute a fix to this PR that users can't trace back to a specific diff.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@mdmohsin7 mdmohsin7 merged commit 500658d into main Jun 1, 2026
3 checks passed
@mdmohsin7 mdmohsin7 deleted the rex/neo-popup-copy-fix branch June 1, 2026 10:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant