Show vpn conflict dialog on smart location#8661
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Improves UX during Smart Location connection by handling VPN conflict failures with a dedicated dialog that allows the user to retry the connection while skipping the conflict check.
Changes:
- Detect
VpnConflictFailurein Smart Location’sstartVPNfailure path and showAppDialog.vpnConflictDialog. - Implement “Connect Anyway” retry logic via
startVPN(skipConflictCheck: true, force: true)and surface retry failures via snackbar + logging.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
atavism
added a commit
that referenced
this pull request
Apr 22, 2026
* deps: update radiance to fix outbound removal breaking config refresh (#8639) Picks up radiance PR #405 which fixes removeOutbounds failing when extra outbounds (non-smart Pro locations) aren't in the URL test group. This was causing every config refresh IPC to return 500, preventing SetURLOverrides and CheckOutbounds from running — resulting in ~50% of bandit probe callbacks never firing. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * Smart location country fix (#8638) * Do not reset a smart location. * code review updates * Fix website split-tunneling reliability and CI validation (#8640) * Add split tunneling e2e test * Fix split tunneling website smoke assertion * Fix split tunneling smoke navigation * code review updates * code review updates * code review updates * code review updates * code review updates * Macos system extension updates #2 (#8637) * if system extension is in uninstall state do not block new installtion. * update macos system extension test * do not cache dart_tool * Set the default status as unknown. * code review updates * Filter system apps from Windows split tunneling (#8641) * Add split tunneling e2e test * Fix split tunneling website smoke assertion * Fix split tunneling smoke navigation * code review updates * code review updates * code review updates * Filter Windows system apps in split tunneling list * code review updates * code review updates * Update system apps filter * code review updates * deps: update radiance + lantern-box to fix ~20% callback failure (#8642) Picks up: - radiance PR #406 → lantern-box PR #231: clear URL test history when SetURLOverrides is called so outbounds are re-tested with new callback URLs - radiance PR #405: best-effort URL test group removal (already in previous update, carried forward) - lantern-box v0.0.61: includes CA cert install + history fix Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: update radiance + lantern-box for callback-all-outbounds (#8644) - radiance: removes URL test filtering, all outbounds tested (PR #407) - lantern-box v0.0.62: 6-worker URL test pool + client delay reporting (PR #232) Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Hide system apps without dropping user apps on Windows (#8643) * code review updates * code review updates * code review updates * chore: update radiance for async IPC outbound handlers (#8645) Picks up getlantern/radiance#410: IPC outbound update/add/remove handlers return 202 immediately and process asynchronously, fixing the EOF errors on every config refresh. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: update radiance for split tunnel persistence fix (#8646) Picks up getlantern/radiance#411: fixes split tunnel filters silently not persisting due to dangling slice pointers in initRuleMap. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: upload and notify for nightlies even when some platforms fail (#8649) The upload-s3 and upload-release-artifacts jobs required ALL platform builds to succeed or be skipped. When a matrix entry failed (e.g., Linux arm64), the entire build-linux job reported as 'failure', which caused both upload jobs to skip entirely — even though macOS, Android, iOS, and Linux amd64 all succeeded. Simplify the condition: run uploads if at least one platform build succeeded. The upload steps already handle missing artifacts gracefully (upload_if_exists checks for file existence). This ensures the Slack notification goes out with download links for whatever platforms did build successfully. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Stabilize nightly smoke checks and platform release publishing (#8651) * Stabilize nightly smoke checks and platform release publishing * code review updates * code review updates * chore: bump radiance to latest main (lantern-box v0.0.65) (#8654) Picks up: - Reflex active-probe resistance: silence-timeout + masquerade fallback (getlantern/lantern-box#237 via radiance#413) - TLS 1.3 minimum enforcement for Reflex (getlantern/lantern-box#236) - radiance split-tunnel filter persistence fix (#411) No Flutter / client-side behavior changes required — the Reflex hardening is server-side. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: add arch to releases (#8652) * feat: add arch to releases * Update linux/packaging/usr/lib/systemd/system/lanternd.service Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: remove committed lanternd.service file Agent-Logs-Url: https://github.com/getlantern/lantern/sessions/15085485-3c6a-4e1e-93ea-6e9bf0623d09 Co-authored-by: reflog <109876+reflog@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: reflog <109876+reflog@users.noreply.github.com> * ran go mod tidy * Improve Windows app discovery for shortcut wrappers (#8653) * code review updates * Improve Windows app discovery for shortcut wrappers * code review updates * code review updates * code review updates * The radiance-to-device limit is flow fix. (#8659) * only use permalinks (#8658) Co-authored-by: atavism <paul@getlantern.org> * Add auth E2E tests and wire Linux/Windows CI (#8607) * auth flow test updates * auth flow test updates * auth flow test updates * code review updates * code review updates * code review updates * code review updates * deps: update sing-box-minimal to v1.12.21-lantern (#8660) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * Show vpn conflict dialog on smart location (#8661) * Show vpn conflict dialog on smart location * code review updates * chore: bump radiance and lantern-box to latest (#8664) - radiance: f1c425231e41 → 4241e6c5a9c6 (main HEAD) - lantern-box: v0.0.65 → v0.0.67 Ran go mod tidy. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Windows installer cleanup, improve app discovery and icon loading (#8666) * code review updates * Add comment * code review updates * remove sentry (#8665) * Save last server location (#8655) * save server location * update radiance. * Forbid AutoConnect if connect fails. * update radiance * code review updates * update radiance * code review updates (#8675) * deps: restore sing-box-minimal v1.12.21-lantern (#8678) PR #8655 ("Save last server location") accidentally downgraded sing-box-minimal from v1.12.21-lantern back to v1.12.19-lantern in go.mod during review churn. v1.12.21-lantern contains commit 9c79c311 ("fix: make initial remote rule-set fetch non-fatal"), which turns the Android bootstrap deadlock ("no available network interface" during initial rule-set fetch) from a fatal libbox startup error into a WARN + retry-after-start. Without it, nightly builds from main fail to connect on any smart-routing country (Macao, Bulgaria, etc.). Confirmed by comparing Freshdesk #172722 (broken, rule_set_remote.go:235, v1.12.19-lantern) with #172795 (working, rule_set_remote.go:113, v1.12.21-lantern). Same user, same device, same 9.0.25 version, same smart-routing-bg-common-direct fetch failure — only the sing-box-minimal version differs. The v9.0.25-beta-android tag was cut before #8655 merged, which is why Alexander's beta works while the nightly doesn't. `go mod tidy` also dropped stale go.sum entries for superseded radiance and lantern-box pseudo-versions and removed the unused getsentry/sentry-go indirect (left behind after #8665). * Makefile: fix empty common.Version on Windows CI (missing app version 400) (#8677) * Makefile: use env-provided APP_VERSION so Windows CI populates version ldflag common.Version in radiance was being linked as an empty string on Windows CI builds. The `-X .../common.Version=$(APP_VERSION_PUBSPEC)` ldflag depended on `$(shell grep ... | sed ...)` or a PowerShell fallback, and the Windows path was producing an empty value. With common.Version empty, backend.NewRequestWithHeaders sets X-Lantern-App-Version to "", and lantern-cloud's /v1/config-new handler rejects the request with 400 "missing app version" — no config is returned, so the client falls back to the embedded server list with no bandit tracks. Observed on Freshdesk #172794 (Windows 9.0.26 nightly, radiance 400s on every retry). Use the APP_VERSION already exported to GITHUB_ENV by build-windows.yml's "Read app version from pubspec.yaml" step, and compute APP_VERSION_PUBSPEC with Make built-ins ($(firstword $(subst +, ,...))) so no shell tools are required. Drops the Windows_NT branch; local dev on Mac/Linux still uses the grep/sed fallback (APP_VERSION ?=). * Makefile: restore Windows local-dev fallback for APP_VERSION The previous commit removed the Windows_NT branch under the assumption that APP_VERSION would always come from the environment. That's true on CI (build-windows.yml exports it to GITHUB_ENV), but local Windows developers running `make windows-release` directly don't set the env var, and the grep/sed fallback runs under cmd.exe where Unix-style quoting fails silently. Add back the Windows PowerShell branch, but only as the fallback when APP_VERSION isn't in the environment (`?=` on both branches). CI keeps working via the env override; local Mac/Linux uses grep/sed; local Windows uses PowerShell Select-String. The `+`-splitting stays in Make built-ins so it works no matter which branch produced APP_VERSION. * Makefile: fail the build when APP_VERSION_PUBSPEC ends up empty Adds a parse-time guard so an unresolvable version fails loudly rather than producing a binary with empty common.Version — which is what caused this whole bug in the first place. Addresses Copilot review feedback on PR #8677. $ APP_VERSION="" make Makefile:36: *** APP_VERSION_PUBSPEC is empty; export APP_VERSION ... * Roll in #8676: PowerShell quoting + Windows service startup log Incorporates the non-overlapping pieces of @atavism's PR #8676 so we can close it in favor of this PR: - Swap the Windows APP_VERSION fallback's PowerShell invocation to outer-single / inner-double quoting. The previous outer-double / inner-single form gets mangled when Make expands $$ and cmd.exe passes the resulting string to powershell, even in the local-dev fallback path. - Same fix for GO_VERSION's PowerShell shell-out further down in the Makefile (separate variable, same root cause). - Log the Windows service startup (name, version, mode) so it's visible when triaging issues. Matches the log line from #8676. * Fix data cap issue (#8668) * Report an Issue screen fixes (#8670) * updates to report issue screen * updates to report issue screen * rename report issue * rename report issue * code review updates * ffi: add missing base64 import for app icon encoding * code review updates * code review updates * code review updates * code review updates * code review updates * code review updates * code review updates * code review updates --------- Co-authored-by: Myles Horton <afisk@getlantern.org> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: jigar-f <132374182+jigar-f@users.noreply.github.com> Co-authored-by: Ilya Yakelzon <reflog@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: reflog <109876+reflog@users.noreply.github.com> Co-authored-by: Jay <110402935+jay-418@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request improves the user experience when a VPN conflict occurs during server selection. Instead of simply showing an error, the app now displays a dialog allowing the user to resolve the conflict and retry the connection.
Enhanced VPN conflict handling:
startVPNcall withinserver_selection.dartto detectVpnConflictFailureand present avpnConflictDialog. The dialog gives the user an option to "Connect Anyway," which retries the VPN connection with the conflict check skipped. Errors on retry are logged and shown to the user as a snackbar.