chore(docs): reconcile to WPF-only after WinUI 3 was abandoned

- Fix TeamsISO.Windows.slnf — drop the dangling
  src/TeamsISO.App.WinUI/TeamsISO.App.WinUI.csproj entry whose project
  doesn't exist in the .sln (broke the build on main).
- Archive the abandoned WinUI 3 artifacts under docs/archive/:
  * 2026-05-12-winui3-migration.md (the nine-phase migration plan)
  * TeamsISO.App.WinUI.Probe/ (the bootstrap diagnostic console)
  * work-log-2026-05-12-winui3.md (the overnight session log)
- README — drop the "in-flight WinUI 3 replatform" status block;
  state that the v2 redesign landed in WPF and link the shape brief.
  Keyboard shortcuts table picks up Ctrl+K, Ctrl+T, and the digit
  hotkeys that already shipped.
- CHANGELOG — replace the WinUI-3-flavoured "Ground-up GUI redesign"
  block with a v2 Studio Terminal entry that names Task 39 + Task 40
  as landed. De-dupe the May 2026 batch: the second "Quick-join Teams
  meeting from URL", "IN-CALL bar surfaces Teams meeting state", and
  "Auto-launch Teams + auto-hide windows" bullets were verbatim repeats
  of earlier entries; kept the first occurrence.
- NEXT_STEPS.md — rewrite to reflect that Task 39 (participants table
  v2) and Task 40 (Ctrl+K palette) both shipped; v1.0 cut is now
  gated only on MSI signing + real-meeting smoke pass.
- DESIGN.md — small WPF-isms: WinUI 3 composition layer →
  WPF's; Segoe Fluent Icons phrased without the "WinUI 3's
  bundled" qualifier; migration boundary rephrased to "rewrites
  MainWindow.xaml + Themes/*" instead of "everything in Views/".
- .gitignore — ignore the .claude/ session metadata dir so it doesn't
  show up as untracked on every dev checkout.

Build + tests verified before commit: 0 errors, 0 warnings; 160 tests
pass (56 App + 104 Engine, filter Category!=ndi&requires!=ndi).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Zac Gaetano 2026-05-15 19:16:20 -04:00
parent 5a43c9cb6a
commit 37390026b3
10 changed files with 126 additions and 149 deletions

3
.gitignore vendored
View file

@ -28,3 +28,6 @@ publish/
# OS
.DS_Store
Thumbs.db
# Local Claude session metadata
.claude/

View file

@ -6,55 +6,46 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added — Ground-up GUI redesign (started 2026-05-12)
### Added — v2 "Studio Terminal" GUI (2026-05-13)
After greenlighting a from-the-scratch redesign and an explicit WinUI 3
replatform target, the May 2026 batch is followed by a major
restructuring of the host UI. Highlights:
The May 2026 ground-up redesign — explicit anti-reference to "the v1
GUI screamed AI made it" — landed on the WPF host
(`src/TeamsISO.App/`). The shape brief lives at
`docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`. An earlier WinUI
3 replatform was scoped on 2026-05-12 and abandoned in favour of doing
the redesign in WPF (activation blockers + redundant work given the
shared view-model surface). The abandoned migration plan + bootstrap
probe are archived under `docs/archive/`.
- **PRODUCT.md** + **DESIGN.md**: impeccable context for the redesign.
Solo broadcast operator at 1:50am is the canonical persona; "vibe-coded
GUI" is the explicit anti-reference. Tokens cover dark + light palettes
with context-aware accent split (cyan surface fill stays bright in
both modes; cyan-as-text darkens to #0E7C82 on light for AA contrast).
- **WinUI 3 host scaffold** as `src/TeamsISO.App.WinUI/` coexisting with
the existing WPF host. WindowsAppSDK 1.6 LTS, unpackaged mode, win-x64
pinned RID, custom Bootstrap-aware `Program.Main`, post-build runtimeconfig
patch to drop the .NET-SDK-implicit `Microsoft.WindowsDesktop.App`
framework reference (WinUI 3 doesn't use it).
- **Redesigned MainWindow**: 64px rail with brand mark + nav +
engine-status puck; 44px custom title bar absorbing live pills
(session timer · REC count · disk free) + theme toggle; section header
with single Primary CTA + Secondary actions; participants list
(ItemsRepeater stub pending DataGrid migration) at 64px row height
with cyan-left-border active-speaker treatment; conditional slim
in-call control bar; 32px status bar.
- **ThemeManager service** holds the user theme preference
(System / Dark / Light), resolves via UISettings.GetColorValue when
System, broadcasts changes so the AppWindow title-bar buttons stay
in sync with the visual tree.
- **Settings drawer** that slides in from the right (220ms ease-out-quart)
with five tabs (Appearance / Routing / Display / Control / Advanced).
Appearance tab includes the theme tri-state picker + an accent palette
peek. Replaces the WPF host's 380px permanent settings panel.
- **Help / About / Onboarding** as ContentDialog-based surfaces. Help
is the keyboard shortcut cheat sheet; About has Wild Dragon mark +
version + quick-access folder shortcuts; Onboarding is three numbered
steps for first launch (Install NDI Runtime / Enable Teams NDI / Pick
transcoder topology) with "Don't show again" defaulted on.
- **Interactive HTML preview** at `docs/preview/redesigned-mainwindow.html`
faithful single-file render of the WinUI 3 XAML with theme toggle and
drawer interaction, so stakeholders can see the redesign before the
WinUI 3 build is feature-complete.
- **Migration plan** at `docs/superpowers/plans/2026-05-12-winui3-migration.md`
with nine phases (scaffold / shell / activation / VM wiring / DataGrid
/ secondary windows / hardening / tests / retire-WPF) and a risk
register flagging fallback paths.
The WPF host (`src/TeamsISO.App/`) is unchanged and remains the shipping
build until the WinUI 3 build passes a real-meeting smoke test. The
view-model layer is unchanged so the WinUI 3 host will reuse it via
ProjectReference once view-model wiring lands (Phase 4 of the plan).
both modes; cyan-as-text darkens to `#0E7C82` on light for AA contrast).
- **Theme system** (`Themes/Theme.Dark.xaml`, `Theme.Light.xaml`,
`WildDragonTheme.xaml`) + `Services/ThemeManager.cs` singleton that
swaps the merged dictionary at runtime, reads
`HKCU\…\AppsUseLightTheme` for System mode, subscribes to
`SystemEvents.UserPreferenceChanged`, persists via
`UIPreferences.Theme`. `Ctrl+T` toggles dark ↔ light.
- **v2 main window shell**: default system title bar; 32px header (Wild
Dragon mark + wordmark left, ⌘K / theme / settings icons right); 40px
transport strip (`● 02:14:32 PART 4 · LIVE 2 CTRL :9755`); body with
alert banner + update banner + action toolbar + participants
DataGrid; conditional `IN CALL` meeting bar at bottom; slide-over
settings drawer (420px from right) with OUTPUT / NETWORK / APP tabs.
The v1 72px rail, the 380px permanent settings panel, and the
six-column footer are gone.
- **Task 39 — participants table v2**: five columns (24px state LED,
name + codec caption, 110px audio meter, 130px mono output name, 100px
ISO pill), 52px rows, full-row active-speaker tint (replaces the v1
left-edge stripe).
- **Task 40 — Ctrl+K command palette**: `Views/CommandPaletteWindow.xaml`
+ `ViewModels/CommandPaletteViewModel.cs`. Centered 560×360 floating
window with fuzzy search across Quick / Teams / Presets / Output /
Network / App categories. ↑/↓ navigates, Enter invokes, Esc closes.
- **Interactive HTML preview** at `docs/preview/redesigned-mainwindow.html`
for stakeholders to see the v2 shell.
### Added — May 2026 feature batch
@ -252,14 +243,6 @@ For operators who want to launch TeamsISO and never look at the Teams UI:
- **Recording badge in footer shows elapsed duration** alongside the count
(`REC 3 · 12:45`). Separate timer from the session timer because
recording can start AFTER the meeting begins.
- **Quick-join Teams meeting from URL** in the IN-CALL bar — paste a
`teams.microsoft.com/l/meetup-join/...` or `msteams:/l/meetup-join/...`
link, click Join, Teams launches into the meeting in one shot.
- **IN-CALL bar surfaces Teams meeting state**`IN CALL · <meeting title>`
/ `READY` / empty. UIA probe at 1Hz for the Leave button, meeting title
extracted from Teams' window title with brand suffix stripped.
- **Auto-launch Teams + auto-hide windows** preferences for the headless
"I only see TeamsISO" workflow.
- **MUTED / CAM OFF pills** in the IN-CALL bar — UIA detects whether the
local user is muted or has their camera off, surfaces as coral pills.
Operator with auto-hide knows the local state without restoring Teams.

View file

@ -219,9 +219,10 @@ the same job with less visual noise.
**Single icon system, one stroke width, one optical size.** The previous GUI
inlined ~12 bespoke `<Path Data="...">` icons with stroke widths varying
between 1.2 and 1.6. The redesign uses **WinUI 3's bundled Segoe Fluent Icons
font** as the baseline, with a custom subset added only where a broadcast
concept isn't covered (e.g. NDI signal lock, ISO routing state).
between 1.2 and 1.6. The redesign uses **Segoe Fluent Icons font** (shipped
with Windows 11; falls back to Segoe MDL2 Assets on Windows 10) as the
baseline, with a custom subset added only where a broadcast concept isn't
covered (e.g. NDI signal lock, ISO routing state).
Sizes: 16 (inline), 20 (button), 24 (rail / hero).
Stroke: inherited from font; no hand-stroked paths.
@ -233,8 +234,8 @@ Stroke: inherited from font; no hand-stroked paths.
- Durations: 120ms for affordance feedback, 200ms for panel transitions,
280ms hero (rarely used).
- No bounce. No elastic. No spring overshoots.
- **Never animate** layout properties. Animate `Translation` and `Opacity`
(WinUI 3's composition layer handles these GPU-cheaply).
- **Never animate** layout properties. Animate `RenderTransform` and
`Opacity` (WPF's composition layer handles these GPU-cheaply).
## Component decisions
@ -329,7 +330,7 @@ no side-stripe borders, no glassmorphism). It does have:
## Migration boundary
The view-model surface in `src/TeamsISO.App/ViewModels/` is the contract.
The redesign rewrites everything in `Views/` (WinUI 3) but leaves view-model
The redesign rewrites `MainWindow.xaml` and `Themes/*` but leaves view-model
properties and commands untouched. Any place where the redesign needs a new
piece of view-model state, the contract widens via additive properties —
existing bindings keep working until the new view stops needing the old shape.

View file

@ -1,89 +1,81 @@
# Where we left off — v2 "Studio Terminal" shell landed (2026-05-13 night)
# Where we left off — v2 "Studio Terminal" shell complete (2026-05-15)
## What's done (uncommitted on local main)
## What's done on main
**v2 redesign shape:** Approved brief at `docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`. Aesthetic register is "broadcast-engineering instrument" — Linear's keyboard-first density × Avid console legibility. Goes hard against the "screams AI" failure mode.
**v2 shape locked.** Approved brief at
`docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`. Aesthetic
register: "broadcast-engineering instrument" — Linear's keyboard-first
density × Avid console legibility. Goes hard against the "screams AI"
failure mode.
**PRODUCT.md + DESIGN.md** updated to reflect WPF as the host (WinUI 3 lines removed), v2 IA decisions absorbed, recording references softened, theme implementation rewritten for WPF DynamicResource swap.
**WinUI 3 replatform: abandoned.** The early-May scoping concluded that
the redesign is purely view-layer (XAML + theme tokens + view-models);
doing it in WPF is strictly less work than fighting WinUI 3 activation +
DataGrid replacement. The migration plan + bootstrap probe are archived
under `docs/archive/` for the record.
**Theme system split:**
- `src/TeamsISO.App/Themes/Theme.Dark.xaml` — color brushes only, dark variant
- `src/TeamsISO.App/Themes/Theme.Light.xaml` — color brushes only, light variant
- `src/TeamsISO.App/Themes/WildDragonTheme.xaml` — styles + control templates (no color brushes anymore; uses `DynamicResource` for every brush ref)
- `src/TeamsISO.App/Services/ThemeManager.cs` — singleton that swaps the merged dictionary at runtime, reads `HKCU\...\AppsUseLightTheme` for System mode, subscribes to `SystemEvents.UserPreferenceChanged`, persists via `UIPreferences.Theme`.
- `App.xaml` merges Theme.Dark.xaml + WildDragonTheme.xaml by default; `App.xaml.cs.OnStartup` calls `ThemeManager.Current.Apply()` before MainWindow shows.
- `UIPreferences.Prefs` record gets a new `Theme = "System"` field (forward-compatible — old json files still load).
- New brush key: `Wd.Accent.CyanText` (Dark `#97EDF0` / Light `#0E7C82`) for cyan-as-text contrast on light canvas. The existing `Wd.Accent.Cyan` stays bright in both modes for fill use.
**Shell:**
- Default Windows title bar (no custom chromeless caption buttons).
- 32px header — Wild Dragon mark + "TeamsISO" wordmark left; three icon
buttons right (⌘K command palette, theme toggle, settings gear).
- 40px transport strip — single mono line:
`● 02:14:32 PART 4 · LIVE 2 CTRL :9755`. Cyan dot + timer only when
at least one ISO live.
- Body — alert banner + update banner + action toolbar + participants
DataGrid + (conditional) meeting bar at the bottom.
- Settings — slide-over drawer (420px from right) with OUTPUT / NETWORK /
APP tabs. Scrim click or Esc dismisses.
- v1 leftovers (72px rail, 380px permanent settings panel, six-column
footer) are gone.
**v2 main window shell:**
- Default Windows title bar (no more custom chromeless caption buttons — they looked generic and broke on DPI scaling).
- 32px header: Wild Dragon mark + "TeamsISO" wordmark left; three icon buttons right (⌘K command palette, theme toggle, settings gear). The mark is small (20px) as a quality cue — click opens About.
- 40px transport strip: mono-typed single line. `● 02:14:32 PART 4 · LIVE 2 CTRL :9755`. Cyan dot + timer only when at least one ISO live. CTRL cluster right-aligned in a Grid column.
- Body: alert banner + update banner + action toolbar (Enable / Refresh / Presets / Stop all + Teams launch/hide icons) + participants DataGrid.
- Conditional meeting bar at bottom — appears only when `IsTeamsInCall == true`, with Mute / Cam / Leave.
- 72px left rail: **gone**.
- 380px permanent settings panel: **gone**.
- Six-column footer: **gone**.
- Settings: slide-over drawer overlay (420px from right) triggered by the header gear; OUTPUT / NETWORK / APP tabs (DISPLAY renamed to APP); same bindings as v1. Scrim click dismisses; Esc dismisses.
**Theme system:**
- `Themes/Theme.Dark.xaml` + `Themes/Theme.Light.xaml` — color brushes
only.
- `Themes/WildDragonTheme.xaml` — styles + control templates (no color
brushes; every brush ref is `DynamicResource`).
- `Services/ThemeManager.cs` — swaps the merged dictionary at runtime;
reads `HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize\AppsUseLightTheme`
for System mode; subscribes to `SystemEvents.UserPreferenceChanged`;
persists via `UIPreferences.Theme`.
**Hotkeys preserved + new:**
- F1 help, Ctrl+R refresh, Ctrl+Shift+S panic stop, 19 / NumPad 19 toggle Nth participant — all preserved.
- **Ctrl+T toggle theme (NEW)** — cycles dark ↔ light. Hooked through `MainViewModel.ToggleThemeCommand``ThemeManager.Toggle()`.
- **Ctrl+K command palette (placeholder)** — currently opens the help dialog. Task 40 replaces this with a real fuzzy-search palette window.
**Task 39 — participants table v2 (LANDED).**
Five columns: 24px state LED, name + codec caption, 110px audio meter,
130px mono output name, 100px ISO pill. 52px rows. Full-row
active-speaker tint (replaces the v1 left-stripe).
**View-model additions (MainViewModel):**
- `ParticipantCount` and `LiveCount` — feed the transport strip's "PART N · LIVE N" readout. Updated on the 1Hz stats tick.
- `ToggleThemeCommand` — wraps `ThemeManager.Current.Toggle()`.
**Task 40 — Ctrl+K command palette (LANDED).**
`Views/CommandPaletteWindow.xaml` + `ViewModels/CommandPaletteViewModel.cs`
ship a centered 560×360 floating window with fuzzy search across Quick /
Teams / Presets / Output / Network / App categories. ↑/↓ navigates,
Enter invokes, Esc closes. The header ⌘K button and Ctrl+K (also Ctrl+P)
keyboard binding both open it.
**MainWindow code-behind cleanup:**
- Removed `OnMinimize`, `OnMaximizeRestore`, `OnClose`, `OnWindowStateChanged`, the maximize-icon swap logic (no more custom title bar).
- Added `OnCommandPaletteClick`, `OnSettingsScrimClick`, `OnPreviewKeyDown` (Esc to close drawer).
- `OnSettingsToggleClick` now toggles `SettingsDrawerOverlay.Visibility` (the slide-over) instead of toggling the v1 right-column width.
**Hotkeys:**
- `F1` — help / cheat sheet
- `Ctrl+K` (also `Ctrl+P`) — command palette
- `Ctrl+T` — toggle theme (dark ↔ light)
- `Ctrl+M` — drop marker into every active recording
- `Ctrl+R` — refresh NDI discovery
- `Ctrl+Shift+S` — panic-stop every ISO
- `1``9` / `NumPad 1``9` — toggle the Nth visible participant's ISO
## To build, push, and demo
## What's queued
Pre-1.0 cut is gated on:
1. Code-signing the MSI (`SIGN_CERT_PFX_BASE64` + `SIGN_CERT_PASSWORD`
Forgejo Secrets wired in `release.yml`).
2. A real-meeting smoke pass on a host with a live NDI runtime.
## Build + run
```powershell
cd "C:\Users\zacga\Documents\Claude\Projects\Teams ISO"
# Clear the corrupt local index from the earlier session
Remove-Item .git\index -Force -ErrorAction SilentlyContinue
git reset
# Build the WPF host
dotnet build src\TeamsISO.App\TeamsISO.App.csproj -c Release
# If the build is clean:
dotnet build TeamsISO.Windows.slnf -c Release
.\src\TeamsISO.App\bin\Release\net8.0-windows\TeamsISO.exe
```
In the running app, test:
1. **Theme toggle** — press `Ctrl+T`. Should swap dark ↔ light without restart. Header colors, surfaces, and text foregrounds all repaint.
2. **System theme follow** — open Windows Settings → Personalization → Colors → "Choose your mode" → flip between Dark and Light. TeamsISO should track the OS automatically (default preference is `System`).
3. **Settings drawer** — click the header gear icon. 420px drawer slides in from the right with OUTPUT / NETWORK / APP tabs. Esc or click-scrim dismisses.
4. **Transport strip** — should show the session timer when at least one ISO goes live, and the PART/LIVE counts always.
5. **Conditional meeting bar** — only appears when Teams is in a call.
The shipped helpers `build-and-test.ps1` and `commit-and-push.ps1`
wrap the build + test + push flow.
If anything regresses, the v1 shell is preserved in git history at `1d1ce6a` — easy rollback with `git reset --hard 1d1ce6a` then publish.
## Commit + push when ready
```powershell
git add -A src/TeamsISO.App/ docs/ PRODUCT.md DESIGN.md
git commit -m "feat(wpf): v2 'Studio Terminal' shell — theme system, header, transport strip, drawer
- Theme split: Theme.Dark.xaml + Theme.Light.xaml + ThemeManager
- New shell: 32px header (mark + wordmark + 3 icons), 40px transport strip,
conditional meeting bar, slide-over settings drawer
- Removed: 72px rail, 380px permanent settings panel, 6-column footer,
custom chromeless title bar buttons
- Ctrl+T toggles theme; follows Windows app-mode by default
- Shape doc at docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md"
git push origin HEAD
```
## What's still queued (tasks 39 + 40)
- **Task 39** — Participants table redesign. The DataGrid columns in the v2 shell are still v1-style (Name / Source / ISO toggle). v2 wants: 5 columns (state LED, name+codec, audio meter, output name mono, ISO pill), 52px rows, full-row active-speaker tint instead of left stripe, hard-edged 8px state LED.
- **Task 40** — Real Ctrl+K command palette window. Floating 560×360 dialog, fuzzy search across categories (Quick / Teams / Presets / Output / Network / App). Replaces the current placeholder that opens the help dialog.
Both are scoped commits and depend on the v2 shell being confirmed working first. After this lands and you've verified the theme swap + drawer + transport strip render correctly, ping me and we'll knock those out.
If something regresses, `1d1ce6a` is the rollback point for the WPF v1
shell (recording was axed at that commit), and `c271303` is the v2
shell-without-table-redesign rollback point.

View file

@ -44,22 +44,21 @@ Pre-1.0. The May 2026 batch is feature-complete; v1.0 cut is gated on
code-signing the MSI and a smoke pass against a real Teams meeting.
See `CHANGELOG.md` for the [Unreleased] entry.
A ground-up GUI redesign is in flight on `main` (see
`docs/superpowers/plans/2026-05-12-winui3-migration.md`). The WPF host
(`src/TeamsISO.App/`) remains the shipping build; a parallel WinUI 3 host
(`src/TeamsISO.App.WinUI/`) is scaffolded with the redesigned MainWindow,
theme system (dark + light), and secondary surfaces. Activation of the
unpackaged WinUI 3 .exe is the current blocker — diagnostics in the
migration plan's Phase 3.
The May 2026 ground-up redesign — the v2 "Studio Terminal" shell — has
landed on the WPF host (`src/TeamsISO.App/`). A WinUI 3 replatform was
explored in early May 2026 and abandoned (activation blockers + redundant
work given the redesign is purely XAML / view-layer); the brief lives at
`docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`, and the
abandoned migration plan + bootstrap probe are archived under
`docs/archive/`.
## Build
Requires .NET 8 SDK on Windows. The repo has two hosts:
Requires .NET 8 SDK on Windows. WPF is the only host:
- `src/TeamsISO.App` — WPF, `net8.0-windows`, current shipping build
- `src/TeamsISO.App.WinUI` — WinUI 3, `net8.0-windows10.0.19041.0`, in-flight
- `src/TeamsISO.App` — WPF, `net8.0-windows`, the shipping build
Both build together from the solution filter:
Build from the solution filter:
dotnet restore TeamsISO.Windows.slnf
dotnet build TeamsISO.Windows.slnf -c Release
@ -80,21 +79,21 @@ The shipped helper scripts in the repo root automate this:
- [Embedded Teams orchestration spec](docs/superpowers/specs/2026-05-08-embedded-teams-orchestration.md)
— Phase E roadmap.
- [Redesign brief](PRODUCT.md) + [design system](DESIGN.md) — token-level
spec for the in-flight WinUI 3 redesign.
- [WinUI 3 migration plan](docs/superpowers/plans/2026-05-12-winui3-migration.md)
— nine-phase plan covering scaffold through retiring the WPF host.
- [Interactive redesign preview](docs/preview/redesigned-mainwindow.html) —
open in any browser to see and toggle the redesigned MainWindow before
the WinUI 3 binary lands.
spec for the v2 "Studio Terminal" redesign.
- [v2 shape brief](docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md) —
approved aesthetic + IA for the May 2026 WPF rebuild.
## Keyboard shortcuts
| Key | Action |
| --- | --- |
| `F1` | Open help / cheat sheet |
| `Ctrl + K` | Open the command palette (also `Ctrl + P`) |
| `Ctrl + T` | Toggle theme (dark ↔ light) |
| `Ctrl + M` | Drop a timestamped marker into every active recording |
| `Ctrl + Shift + S` | Stop every running ISO (emergency) |
| `Ctrl + R` | Refresh NDI discovery (rebuild finder) |
| `1``9` / `NumPad 1``9` | Toggle the Nth visible participant's ISO |
## File locations

View file

@ -6,7 +6,6 @@
"src\\TeamsISO.Engine.NdiInterop\\TeamsISO.Engine.NdiInterop.csproj",
"src\\TeamsISO.Console\\TeamsISO.Console.csproj",
"src\\TeamsISO.App\\TeamsISO.App.csproj",
"src\\TeamsISO.App.WinUI\\TeamsISO.App.WinUI.csproj",
"src\\tests\\TeamsISO.Engine.Tests\\TeamsISO.Engine.Tests.csproj",
"src\\tests\\TeamsISO.Engine.IntegrationTests\\TeamsISO.Engine.IntegrationTests.csproj",
"src\\tests\\TeamsISO.App.Tests\\TeamsISO.App.Tests.csproj"