Refactor VPN proxy routing logic

This commit is contained in:
2026-07-08 09:39:24 +03:00
parent 288acbf0c8
commit 149bb999dc
28 changed files with 2260 additions and 278 deletions

View File

@@ -0,0 +1,82 @@
# Windows Client Service-Control UI System Evidence
## Acceptance Evidence
- Desktop Summary screenshot: `docs/goals/windows-client-service-control-ui-system/evidence/01-summary-desktop.png`
- Shows shared tabs, shared refresh button, and friendly preview error: `Desktop-команды недоступны`.
- Desktop ProxiFyre screenshot: `docs/goals/windows-client-service-control-ui-system/evidence/02-proxifyre-desktop.png`
- Shows ProxiFyre rendered through the shared service-control row pattern.
- Shows apply blocker: `ProxiFyre не установлен`.
- Shows `Обновить конфиг` disabled instead of green/ready.
- Desktop VPN / Proxy screenshot: `docs/goals/windows-client-service-control-ui-system/evidence/03-proxy-desktop.png`
- Shows route mode buttons through shared button variants.
- Shows apply blocker before route apply.
- Narrow ProxiFyre screenshot: `docs/goals/windows-client-service-control-ui-system/evidence/04-proxifyre-narrow.png`
- Shows service row and setup checklist reflow at 420px.
- Shows compact log dock title instead of long raw runtime error text.
Captured DOM state from Browser preview:
```json
{
"proxState": {
"disabledApply": true,
"blockerText": true,
"friendlyError": true,
"rawInvokeCurrent": false
},
"routeState": {
"externalButtonClass": "ui-button ui-button--primary ui-button--md",
"externalAriaPressed": "true"
},
"narrowState": {
"width": 420,
"hasHorizontalOverflow": false,
"setupStripOverflow": false
}
}
```
Native/elevated install/start/stop/uninstall service actions were not executed in this evidence pass. They are implemented through the existing handlers and shared callbacks, but real elevated service execution remains `implemented but unproven`.
## Verification
Build was run with bundled Node because system `npm` is not in PATH in this Codex shell.
```powershell
& 'C:\Users\PC\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin\node.exe' '.\node_modules\typescript\bin\tsc'
& 'C:\Users\PC\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin\node.exe' '.\node_modules\vite\bin\vite.js' build
```
Relevant output:
```text
vite v7.3.6 building client environment for production...
✓ 1800 modules transformed.
✓ built in 1.14s
```
Cutover check:
```powershell
rg -n 'transition:\s*all|className=.*(apply-button|service-button|ghost-button|add-tile|open-config-button)' apps\windows-client\src
```
Relevant output:
```text
no legacy className or transition: all matches
```
Notes:
- `pnpm run build` was attempted through the bundled runtime, but it began reinstalling `node_modules` because dependencies were originally installed by another package manager. The process was stopped; no package or lockfile changes were recorded by git.
- Browser preview was served from `http://127.0.0.1:5174/`.
## Review Notes
- Visual self-review found that active route mode lost its active styling after switching to shared `Button`; CSS was corrected with `.route-switch .ui-button--primary`.
- Visual self-review found setup chips still horizontally scrolled at 420px; narrow CSS was corrected to wrap `.setup-strip-items`.
- Residual product issue from the earlier audit remains: Summary still has `Состояние загружается` beside `Совпадает`. That state language was outside the implemented high-value slice and should be handled in a follow-up Summary view-model cleanup.
- POST plan review: aligned. Implementation stayed inside the approved ownership and contract boundaries: shared UI components are presentational, `App.tsx` still owns orchestration, and Tauri wrappers remain the command boundary.
- Correctness review: no blocker found. Real elevated service actions were not executed, so that lane remains `implemented but unproven`.
- Maintainability review: no blocker found. Old dominant `className` paths for apply/service/ghost/add/open buttons were displaced from `App.tsx`; stale legacy CSS selectors remain in `app.css` as non-dominant compatibility residue and should be removed in a follow-up CSS pruning pass if desired.