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