Refactor VPN proxy routing logic
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user