# 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.