This is the third release candidate for MeetingBar 5.0.
RC3 focuses on reliability, meeting-opening behavior, status bar improvements, and expanded regression test coverage.
Changes since RC2
Calendar reliability
- Improved Google Calendar refresh, pagination, and error recovery.
- Improved OAuth lifecycle handling and provider switching.
- Improved EventKit permission recovery and unavailable calendar handling.
Meeting links
- Improved link detection and selection.
- Fixed additional Outlook SafeLinks and Zoom link edge cases.
- Improved meeting-opening behavior and fallback handling.
Interface
- Improved status bar title layout, including stacked titles.
- Fixed blank status bar and fullscreen notification issues.
- Improved preferences and release notes presentation.
Quality and stability
- Significantly expanded automated regression tests.
- Improved CI coverage and validation.
- Fixed resource leaks and updated translations.
PR's
- Translations update from Hosted Weblate by @weblate in #947
- Translations update from Hosted Weblate by @weblate in #949
- Fix icon size in status bar and update Discord icon by @mavi3 in #952
- ci: bump the github-actions group across 1 directory with 3 updates by @dependabot[bot] in #948
- Give EventKit occurrences their own ids so dedup stops eating them by @jamtur01 in #946
- Translations update from Hosted Weblate by @weblate in #954
- Fix Google Meet PWA launching by @EhsanAzish80 in #966
- Fix blank status bar item when the no-icon sentinel is hidden by @WGlegola in #955
- Treat all-day event range as exclusive at endDate by @YuriNachos in #968
- Detect Microsoft Teams personal meeting links on teams.live.com by @YuriNachos in #960
- fix: unwrap Google Calendar redirect links so Zoom passcodes survive by @danshort in #964
- fix: capture full ZoomGov password in meeting link detection by @YuriNachos in #962
- Strip HTML notes without leaking mach ports by @jamtur01 in #953
- fix(calendar): prefer resolved attendee copy when deduping cross-calendar events by @jfeldstein in #980
- Don't let a YouTube link in the notes beat the real meeting link by @jamtur01 in #945
- Fix Google Calendar events silently not refreshing by @seahindeniz in #974
- Pin Slather coverage tooling by @leits in #986
- Add regression coverage for Google refresh recovery by @leits in #985
- Reposition fullscreen alert when displays change by @guidobouman in #941
- Do not resurrect closed fullscreen alerts by @leits in #988
- Fix missing/broken Japanese translations for meeting-dismissal and access-denied strings by @nashirox in #971
- ci: bump the github-actions group across 1 directory with 6 updates by @dependabot[bot] in #987
- Fix write-only calendar permission diagnostics by @leits in #990
- Handle AppleScript save failures without losing editor state by @leits in #992
- Open Preferences when the running app is reopened by @leits in #991
- Report missing EventKit read permission instead of an empty calendar by @leits in #989
- Read every Google calendar and event result page by @leits in #993
- Fix next-meeting selection skipping the soonest event by @leits in #997
- Keep dismissed meeting UI and notifications in sync by @leits in #998
- Move delivered-notification cleanup out of status bar rendering by @leits in #996
- Make next-meeting selection inputs explicit by @leits in #994
- Centralize notification settings and dismissal updates by @leits in #995
- Remove duplicate PR workflow runs and cancelled-report noise by @leits in #999
- Fix Outlook SafeLinks cleanup and mixed redirect nesting by @leits in #1000
- Fix Google Meet account selection for Gmail plus-addresses by @leits in #1002
- Add Tuple app link support by @leits with @Copilot in #1001
- Fix misleading browser error when Tuple is unavailable by @leits in #1011
- Resolve Clari Copilot Meet wrappers on current detector by @leits in #1005
- Resolve Clari Copilot links to their Google Meet meetings by @jeremyfriedel in #972
- Run event-start scripts for events without meeting links by @leits in #1007
- Refresh v5 translations on current master by @leits in #1008
- Translations update from Hosted Weblate by @weblate in #970
- Fix stacked status bar title rendering and preserve native button behavior by @leits in #1004
- Fix stacked status bar title rendering with a SwiftUI hosting view by @TrevorSayre in #982
- Delete only the selected browser when names collide by @bluejay-creators in #1012
- Translations update from Hosted Weblate by @weblate in #1013
- ci: bump the github-actions group with 4 updates by @dependabot[bot] in #1010
- Test stacked status bar layout and resizing after #1004 by @leits in #1014
- docs: add shared project context for coding agents and testing guide by @leits in #1015
- docs: move change history to GitHub Releases and improve PR template by @leits in #1016
- Simplify in-app What's New and link to full GitHub release notes by @leits in #1017
- ci: include SwiftPM test coverage in Codecov by @leits in #1021
- fix: avoid dropping Google calendars on quota HTTP 403 by @leits in #1020
- test: add Google Calendar HTTP contract coverage by @leits in #1018
- test: phase A calendar provider contracts and failure handling by @leits in #1022
- fix: keep delayed Auto Join links current; harden calendar and notification tests by @leits in #1019
- test: phase C product flows and migration regressions by @leits in #1023
- test: phase E actionable coverage, diagnostics safety and performance baselines by @leits in #1024
- test: meeting opening end-to-end contracts and native fallback by @leits in #1027
- fix: provider lifecycle concurrency and stale EventKit calendar safeguards by @leits in #1026
- Translations update from Hosted Weblate by @weblate in #1025
- Fix xcconfig loading and validate Google OAuth build settings by @leits in #1039
- ci: bump the github-actions group with 3 updates by @dependabot[bot] in #1035
- fix: memory leaks in menu rebuilds and fullscreen alerts by @atas in #1040
- Translations update from Hosted Weblate by @weblate in #1034
New Contributors
- @mavi3 made their first contribution in #952
- @EhsanAzish80 made their first contribution in #966
- @YuriNachos made their first contribution in #968
- @danshort made their first contribution in #964
- @jfeldstein made their first contribution in #980
- @seahindeniz made their first contribution in #974
- @nashirox made their first contribution in #971
- @leits with @Copilot made their first contribution in #1001
- @jeremyfriedel made their first contribution in #972
- @TrevorSayre made their first contribution in #982
- @bluejay-creators made their first contribution in #1012
- @atas made their first contribution in #1040
Full Changelog: v5.0.0-rc2...v5.0.0-rc3