Remove mirrored item delay state so profile cache invalidation cannot leave reused rows blank until remount. Read current node history when the shared cache is empty and preserve snapshot identity for React subscriptions.
Notify every mounted occurrence sharing a delay key and scope cleanup to its registered listener. Cover pending results, profile reset, and either occurrence unmounting without restoring direct unfenced updates.
Clear cached delays and fence old measurements when the active profile changes. Refresh proxy history on page entry without forcing automatic measurements or expanding groups.
* fix(proxy): show a profile-defined GLOBAL in rule mode when it is the only group
Rule mode renders only proxyView.groups, and the backend always moves
GLOBAL out of that list. A profile whose only group is GLOBAL, or that
has no proxy-groups, therefore showed the "no proxy info" empty state.
Fall back to GLOBAL in that case, as v2.5.2 did before #7542.
Fixes#8223
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* docs(changelog): note the rule-mode GLOBAL fix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* chore: drop the regression test and append the changelog entry
Per review: the test was only needed to confirm the fix locally, and new
changelog entries go at the end of their list.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: toBerlinWay <toBerlinWay@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Route frontend and tray node selections through the same backend flow for
selection, persistence, state refresh, and connection cleanup. Read the
group's previous selection before switching and preserve the original
rule of closing only connections whose chains contain that selection.
Run optional cleanup in the background and keep its failures separate
from successful selection. Remove redundant frontend effects and unused
IPC commands, and refresh the proxy view for every successful switch.
Refs: 32095daf90
Refs: bea0dde074
delete_profile already forces a Core update with the planned profiles when
the current or last profile is removed, and restores state on rejection,
so the frontend enhance_profiles call repeated the same reload.
Assign Copilot once per eligible Renovate PR when current-head lint or
type checks fail. Reuse repository guidance and COPILOT_GITHUB_TOKEN.
Analyze minor dependency version sets separately, deduplicate dispatches,
and publish adoption suggestions without changing code or merge state.
Quote plain hex short-id values before YAML parsing, since a value like 1234e123 becomes a float that cannot be restored. Keep the rewrite only when nothing else changes, and let the editor save check a quoted copy.
- Drop tauri-plugin-process: no frontend or Rust consumer; exit and
restart already go through the exit_app/restart_app commands backed
by AppHandle::exit/restart. Remove the registration and the unused
process:allow-exit capability.
- Replace the glob dev dependency with Node's built-in fs.globSync in
prebuild's service permission step (Node baseline is 26.13.0).
- Remove unused direct Cargo declarations: bitflags and regex (source
and workspace entries), and src-tauri's criterion dev-dependency;
clash-verge-draft keeps criterion for its bench.
- Narrow sysinfo to the network/system features actually consumed.
- Use futures::StreamExt for DelayQueue in the timer and drop the
tokio-stream direct declaration (still transitively present via
clash-verge-service-ipc).
Refresh the tray menu, icon, and tooltip after service operations so restored TUN capability is reflected without changing the saved TUN setting.
Ref: e60285b4ae