Skip to content

Commit 9a6ada6

Browse files
committed
Commit all
1 parent d95d1b3 commit 9a6ada6

2 files changed

Lines changed: 180 additions & 79 deletions

File tree

docs/architecture/compliance/UI-USECASE-MATRIX.md

Lines changed: 139 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,51 @@ Every user-facing use case should map to a complete chain:
88

99
This matrix shows current-state UI presence and identifies omissions where the chain is not fully RelayCommand-backed yet.
1010

11-
## Legend
12-
13-
- `UI Tags`: UIs where the use case currently appears (`Phone`, `Tablet`, `Desktop`, `TUI`) plus projected parity target (`Blazor`).
14-
- `Complete`: row has an explicit RelayCommand path to a handler and a concrete ViewModel state mutation.
15-
- `Gap`: use case exists, but there is no exposed RelayCommand chain yet.
11+
## Legend
12+
13+
- `UI Tags`: UIs where the use case currently appears (`Phone`, `Tablet`, `Desktop`, `TUI`) plus projected parity target (`Blazor`).
14+
- `Complete`: row has an explicit RelayCommand path to a handler and a concrete ViewModel state mutation.
15+
- `Gap`: use case exists, but there is no exposed RelayCommand chain yet.
16+
17+
## Coverage Summary
18+
19+
- Refreshed against live swagger at `http://PAYTON-DESKTOP:7147/swagger/v1/swagger.json` on `2026-03-03`.
20+
- `38` UI.Core handler types currently exist across `10` endpoint domains.
21+
- `35 / 138` distinct HTTP operations currently have at least one UI.Core handler path.
22+
- This matrix currently records `28` complete RelayCommand use cases and `9` active omission rows.
23+
- Session-log list/detail use cases share one swagger `GET /mcpserver/sessionlog` operation, so use-case totals and distinct HTTP-operation totals do not match one-to-one.
24+
25+
## Endpoint-Domain Coverage Snapshot
26+
27+
| Domain | Live HTTP Ops | UI.Core-Covered HTTP Ops | Notes |
28+
| --- | --- | --- | --- |
29+
| `health` | `1` | `1` | Covered via `CheckHealthQueryHandler`. |
30+
| `auth` | `5` | `1` | Only `GET /auth/config` is UI.Core-backed today. |
31+
| `context` | `4` | `4` | Fully handler-covered in UI.Core. |
32+
| `repo` | `3` | `3` | Fully handler-covered in UI.Core. |
33+
| `sessionlog` | `3` | `1` | Read-only `GET /mcpserver/sessionlog` is covered; append/dialog POST flows are not. |
34+
| `templates` | `8` | `6` | `resolve` and ad-hoc `/templates/test` remain uncovered. |
35+
| `todo` | `13` | `9` | Move + queued prompt operations remain uncovered. |
36+
| `tunnel` | `7` | `6` | Direct provider-status query remains uncovered. |
37+
| `workspace` | `11` | `4` | Create/delete/status/start/stop/global-prompt operations remain uncovered. |
38+
| `requirements` | `20` | `0` | No UI.Core handler coverage yet. |
39+
| `tools` | `12` | `0` | No UI.Core handler coverage yet. |
40+
| `gh` | `13` | `0` | No UI.Core handler coverage yet. |
41+
| `voice` | `9` | `0` | No UI.Core handler coverage yet. |
42+
| `agents` | `14` | `0` | No UI.Core handler coverage yet. |
43+
| `agent-pool` | `15` | `0` | No UI.Core handler coverage yet. |
44+
| `events` | `1` | `0` | No UI.Core handler coverage yet. |
1645

1746
## Blazor Surface Inventory Status
1847

1948
- Blazor is a required parity target, but there is no Blazor host implementation in this workspace yet.
2049
- Endpoint/use-case inventory for Blazor is therefore tracked as expected parity with the same UI.Core RelayCommand surfaces listed below.
21-
- Migration status for Blazor wiring remains in plan phase `M5` (`P3.11`, `P4.8`, `M5.2`).
50+
- Migration status for Blazor wiring remains in plan phase `M5` (`P3.11`, `P4.8`, `M5.2`), and parity is still blocked by the open workspace/global-prompt/health omission rows listed below.
2251

2352
| Endpoint Group | Expected UI.Core RelayCommand Surface for Blazor | Current Blazor Status |
2453
| --- | --- | --- |
2554
| TODO | `TodoListViewModel.RefreshCommand`, `TodoDetailViewModel.*Command` | Not yet wired in RequestTracker |
26-
| Workspace | `WorkspaceListViewModel.RefreshCommand`, `WorkspaceDetailViewModel.GetWorkspaceCommand`, `WorkspacePolicyViewModel.SaveCommand`, `HealthSnapshotsViewModel.InitializeWorkspaceCommand` | Not yet wired in RequestTracker |
55+
| Workspace | `WorkspaceListViewModel.RefreshCommand`, `WorkspaceDetailViewModel.GetWorkspaceCommand`, `WorkspacePolicyViewModel.SaveCommand`, `HealthSnapshotsViewModel.InitializeWorkspaceCommand` | Not yet wired in RequestTracker; parity is still blocked by missing shared create/delete/status/start/stop/global-prompt/workspace-health flows |
2756
| SessionLog | `SessionLogListViewModel.RefreshCommand`, `SessionLogDetailViewModel.LoadCommand` | Not yet wired in RequestTracker |
2857
| Health | `HealthSnapshotsViewModel.CheckHealthCommand` | Not yet wired in RequestTracker |
2958
| Templates | `TemplateListViewModel.RefreshCommand`, `TemplateDetailViewModel.Load/Save/Delete/TestCommand` | Not yet wired in RequestTracker |
@@ -62,9 +91,19 @@ This matrix shows current-state UI presence and identifies omissions where the c
6291
| Templates | Delete template (`DELETE /mcpserver/templates/{id}`) | `[TUI]` | `TemplateDetailViewModel.DeleteCommand` | `DeleteTemplateCommandHandler` | `Detail = null`, `StatusMessage`, `ErrorMessage` |
6392
| Templates | Test template (`POST /mcpserver/templates/{id}/test`) | `[TUI]` | `TemplateDetailViewModel.TestCommand` | `TestTemplateQueryHandler` | `TestOutput`, `StatusMessage`, `ErrorMessage` |
6493

65-
## Omissions (Use Case Exists, RelayCommand Chain Missing)
66-
67-
No open omissions in this matrix after GAP-020 closure. Workspace init, tunnel lifecycle, and template detail operations are now RelayCommand-backed in UI.Core.
94+
## Omissions (Use Case Exists, RelayCommand Chain Missing)
95+
96+
| Endpoint Group | User Use Case | UI Tags | Current Host Command / Mutation | Missing Shared RelayCommand Chain |
97+
| --- | --- | --- | --- | --- |
98+
| Workspace | Create workspace (`POST /mcpserver/workspace`) | `[Tablet, Desktop]` | `WorkspaceViewModel.NewWorkspaceCommand` seeds an app-local draft that is later persisted by `SaveEditorCommand` | No shared `CreateWorkspaceCommandHandler` or reusable UI.Core create-workspace ViewModel/RelayCommand |
99+
| Workspace | Save workspace editor (`PUT /mcpserver/workspace/{key}` full editor fields) | `[Tablet, Desktop]` | `WorkspaceViewModel.SaveEditorCommand` mutates app-local editor fields and list selection | No shared UI.Core save-workspace RelayCommand for the Desktop/Android editor path; `UpdateWorkspacePolicyCommandHandler` only covers the TUI policy subset |
100+
| Workspace | Delete workspace (`DELETE /mcpserver/workspace/{key}`) | `[Tablet, Desktop]` | `WorkspaceViewModel.DeleteSelectedCommand` mutates app-local selection and list state | No `DeleteWorkspaceCommandHandler` or reusable UI.Core delete-workspace ViewModel/RelayCommand |
101+
| Workspace | Get workspace status (`GET /mcpserver/workspace/{key}/status`) | `[Tablet, Desktop]` | `WorkspaceViewModel.GetSelectedStatusCommand` updates `ProcessStatusText` and indicator state | No `GetWorkspaceStatusQueryHandler` or shared UI.Core status ViewModel/RelayCommand |
102+
| Health | Check selected workspace health (`GET /health` against selected workspace base URL) | `[Tablet, Desktop]` | `WorkspaceViewModel.CheckSelectedWorkspaceHealthCommand` mutates `ProcessStatusText` and `HealthIndicator*` properties | No shared UI.Core workspace-health probe query/command or health-specific ViewModel mutation path |
103+
| Workspace | Start workspace (`POST /mcpserver/workspace/{key}/start`) | `[Tablet, Desktop]` | `WorkspaceViewModel.StartSelectedWorkspaceCommand` mutates app-local process-status fields | No `StartWorkspaceCommandHandler` or shared UI.Core lifecycle command |
104+
| Workspace | Stop workspace (`POST /mcpserver/workspace/{key}/stop`) | `[Tablet, Desktop]` | `WorkspaceViewModel.StopSelectedWorkspaceCommand` mutates app-local process-status fields | No `StopWorkspaceCommandHandler` or shared UI.Core lifecycle command |
105+
| Workspace | Load global prompt (`GET /mcpserver/workspace/prompt`) | `[Desktop]` | `WorkspaceViewModel.LoadGlobalPromptCommand` hydrates `GlobalPromptText` in the app-local VM | No `GetWorkspacePromptQueryHandler` or shared UI.Core prompt ViewModel |
106+
| Workspace | Save / reset global prompt (`PUT /mcpserver/workspace/prompt`) | `[Desktop]` | `WorkspaceViewModel.SaveGlobalPromptCommand` and `ResetGlobalPromptCommand` mutate `GlobalPromptText` app-locally | No `UpdateWorkspacePromptCommandHandler` or shared UI.Core prompt ViewModel / RelayCommand chain |
68107

69108
---
70109

@@ -157,11 +196,40 @@ No open omissions in this matrix after GAP-020 closure. Workspace init, tunnel l
157196
- `TUI`: Dedicated health tab with explicit check action and raw payload view.
158197
- `Phone/Tablet/Desktop`: Show health indicators in shell status, but no direct health-snapshot command surface.
159198

160-
- `List templates` (`GET /mcpserver/templates`)
161-
- `TUI`: Filter + table workflow with template management context.
162-
- `Phone/Tablet/Desktop`: Use case not surfaced in current shells.
163-
164-
### GAP-020 use cases (closed, now RelayCommand-backed)
199+
- `List templates` (`GET /mcpserver/templates`)
200+
- `TUI`: Filter + table workflow with template management context.
201+
- `Phone/Tablet/Desktop`: Use case not surfaced in current shells.
202+
203+
### Open-omission use cases
204+
205+
- `Create workspace` (`POST /mcpserver/workspace`)
206+
- `Tablet/Desktop`: Draft-first editor flow still starts from the app-local `WorkspaceViewModel`; no shared UI.Core create-workspace surface exists yet.
207+
208+
- `Save workspace editor` (`PUT /mcpserver/workspace/{key}` full editor fields)
209+
- `Tablet/Desktop`: Save commits the broader workspace editor model from the app-local VM; UI.Core only covers the narrower TUI policy-save path today.
210+
211+
- `Delete workspace` (`DELETE /mcpserver/workspace/{key}`)
212+
- `Tablet/Desktop`: Delete is still an app-local list/detail mutation path with no shared UI.Core delete command surface.
213+
214+
- `Get workspace status` (`GET /mcpserver/workspace/{key}/status`)
215+
- `Tablet/Desktop`: Status polling is still app-local and writes directly into process-status text/indicator state.
216+
217+
- `Check selected workspace health` (`GET /health` against selected workspace base URL)
218+
- `Tablet/Desktop`: Health probe remains app-local and separate from the shared `HealthSnapshotsViewModel.CheckHealthCommand` path used by TUI.
219+
220+
- `Start workspace` (`POST /mcpserver/workspace/{key}/start`)
221+
- `Tablet/Desktop`: Lifecycle start remains app-local and is not reusable by Director or a future Blazor host.
222+
223+
- `Stop workspace` (`POST /mcpserver/workspace/{key}/stop`)
224+
- `Tablet/Desktop`: Lifecycle stop remains app-local and is not reusable by Director or a future Blazor host.
225+
226+
- `Load global prompt` (`GET /mcpserver/workspace/prompt`)
227+
- `Desktop`: Global prompt hydration exists only in the desktop workspace surface; Android/Director/Blazor have no shared UI.Core prompt surface to adopt.
228+
229+
- `Save / reset global prompt` (`PUT /mcpserver/workspace/prompt`)
230+
- `Desktop`: Save and reset remain app-local prompt-editor workflows, so parity cannot yet converge on a shared command chain.
231+
232+
### GAP-020 use cases (closed, now RelayCommand-backed)
165233

166234
- `Init workspace` (`POST /mcpserver/workspace/{key}/init`) — `CLOSED`
167235
- `Tablet/Desktop`: Toolbar `Init` command in workspace view.
@@ -250,23 +318,45 @@ flowchart LR
250318
Desktop([Desktop])
251319
TUI([TUI])
252320
253-
W1(("List workspaces<br/>[Tablet, Desktop, TUI]"))
254-
W2(("Get workspace detail<br/>[Tablet, Desktop, TUI]"))
255-
W3(("Save workspace policy<br/>[TUI]"))
256-
W4(("Init workspace<br/>[Tablet, Desktop, TUI]"))
257-
258-
Tablet --> W1
259-
Tablet --> W2
260-
Tablet --> W4
261-
262-
Desktop --> W1
263-
Desktop --> W2
264-
Desktop --> W4
265-
266-
TUI --> W1
267-
TUI --> W2
268-
TUI --> W3
269-
TUI --> W4
321+
W1(("List workspaces<br/>[Tablet, Desktop, TUI]"))
322+
W2(("Get workspace detail<br/>[Tablet, Desktop, TUI]"))
323+
W3(("Save workspace policy<br/>[TUI]"))
324+
W4(("Init workspace<br/>[Tablet, Desktop, TUI]"))
325+
W5(("Create workspace<br/>[Tablet, Desktop] (Gap)"))
326+
W6(("Save workspace editor<br/>[Tablet, Desktop] (Gap)"))
327+
W7(("Delete workspace<br/>[Tablet, Desktop] (Gap)"))
328+
W8(("Get workspace status<br/>[Tablet, Desktop] (Gap)"))
329+
W9(("Start workspace<br/>[Tablet, Desktop] (Gap)"))
330+
W10(("Stop workspace<br/>[Tablet, Desktop] (Gap)"))
331+
W11(("Load global prompt<br/>[Desktop] (Gap)"))
332+
W12(("Save / reset global prompt<br/>[Desktop] (Gap)"))
333+
334+
Tablet --> W1
335+
Tablet --> W2
336+
Tablet --> W4
337+
Tablet --> W5
338+
Tablet --> W6
339+
Tablet --> W7
340+
Tablet --> W8
341+
Tablet --> W9
342+
Tablet --> W10
343+
344+
Desktop --> W1
345+
Desktop --> W2
346+
Desktop --> W4
347+
Desktop --> W5
348+
Desktop --> W6
349+
Desktop --> W7
350+
Desktop --> W8
351+
Desktop --> W9
352+
Desktop --> W10
353+
Desktop --> W11
354+
Desktop --> W12
355+
356+
TUI --> W1
357+
TUI --> W2
358+
TUI --> W3
359+
TUI --> W4
270360
```
271361

272362
### SessionLog Endpoints
@@ -293,13 +383,16 @@ flowchart LR
293383
flowchart LR
294384
Phone([Phone])
295385
Tablet([Tablet])
296-
Desktop([Desktop])
297-
TUI([TUI])
298-
299-
H1(("Check health snapshot<br/>[TUI]"))
300-
301-
TUI --> H1
302-
```
386+
Desktop([Desktop])
387+
TUI([TUI])
388+
389+
H1(("Check health snapshot<br/>[TUI]"))
390+
H2(("Check selected workspace health<br/>[Tablet, Desktop] (Gap)"))
391+
392+
TUI --> H1
393+
Tablet --> H2
394+
Desktop --> H2
395+
```
303396

304397
### Template Endpoints
305398

@@ -351,9 +444,11 @@ flowchart LR
351444

352445
## Source Inventory Used
353446

354-
- `lib/McpServer/src/McpServer.UI.Core/ViewModels/*`
355-
- `lib/McpServer/src/McpServer.UI.Core/Handlers/*`
356-
- `src/McpServerManager.Desktop/Views/*`
357-
- `src/McpServerManager.Android/Views/*`
358-
- `lib/McpServer/src/McpServer.Director/Screens/*`
447+
- `lib/McpServer/src/McpServer.UI.Core/ViewModels/*`
448+
- `lib/McpServer/src/McpServer.UI.Core/Handlers/*`
449+
- `src/McpServerManager.Core/ViewModels/TodoListViewModel.cs`
450+
- `src/McpServerManager.Core/ViewModels/WorkspaceViewModel.cs`
451+
- `src/McpServerManager.Desktop/Views/*`
452+
- `src/McpServerManager.Android/Views/*`
453+
- `lib/McpServer/src/McpServer.Director/Screens/*`
359454
- `Blazor host: not present in this workspace; inventory tracked as projected parity surface`

0 commit comments

Comments
 (0)