teamsiso/NEXT_STEPS.md
2026-05-16 11:24:37 -04:00

5.9 KiB
Raw Blame History

Where we left off — cold-start launch fix shipped (2026-05-16 morning)

What just landed (verified on this machine)

Origin tip: 09e5b59 — fix: cold-start discovery + installer shortcuts + single-instance hardening.

The "I install, I click the shortcut, no participants" bug is fixed. Three independent changes in one commit because all three were chasing the same operator report:

  1. NdiDiscoveryService.RunAsync — immediate first poll + fast ramp. PeriodicTimer.WaitForNextTickAsync waits the full interval before its first tick, so for a 500ms discovery interval the operator stared at "no ndi sources yet" for half a second on every cold start. Now: poll once up front (picks up whatever the NDI runtime has already cached), then run a 200ms inner loop for ~3 seconds while mDNS replies trickle in, then settle to the operator-configured interval. Both loops share a try/finally so the NDI finder is always disposed.
  2. MainViewModel.IsDiscovering + new empty-state copy. New boolean property, true for 8s after engine start as long as no participants have arrived. MainWindow.xaml swaps the empty-state copy on this binding:
    • IsDiscovering=true → "scanning for ndi sources…" with a cyan dot
    • IsDiscovering=false → "no ndi sources visible — is teams in a meeting?" + Refresh CTA The old copy was being shown immediately at launch even when discovery just hadn't run yet, which read as "broken."
  3. Single-instance mutex moved from Local\ to Global\. On admin-user boxes with UAC effectively disabled, launches from different parents can land in slightly different security contexts and a Local\ named mutex can be invisible to a sibling. Global\ is system-wide and integrity-agnostic; both processes see the same mutex regardless of how they were spawned.
  4. installer/Package.wxs — Desktop shortcut component added. Now installs both C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Wild Dragon\TeamsISO.lnk AND C:\Users\Public\Desktop\TeamsISO.lnk. Both point at the installed exe under C:\Program Files\Wild Dragon\TeamsISO\TeamsISO.exe. (Previously only the Start Menu component existed; on this machine even that wasn't visibly materializing because the older WiX Advertise default left it as a stub.)

MSI: installer/bin/x64/Release/TeamsISO-Setup-0.9.0-rc5.msi (372 KB). Already installed on this machine. Force-reinstall over an existing copy needs REINSTALL=ALL REINSTALLMODE=amus flags on msiexec because the wxs Version is pinned to 1.0.0.0 and MajorUpgrade no-ops on same-version.

Verified launch paths (2026-05-16 11:22)

Tested by killing every TeamsISO process, then launching via each mechanism in turn and probing http://localhost:9755/participants after 4 seconds:

Mechanism Result
Start Menu shortcut (…\Wild Dragon\TeamsISO.lnk) OK — 2 participants
Public Desktop shortcut (C:\Users\Public\Desktop\TeamsISO.lnk) OK — 2 participants
Direct .exe double-click in Program Files OK — 2 participants

All three discover the Teams meeting's NDI sources (Active Speaker + Brendon Power in today's testing) within the cold-start grace window.

Open items

Pre-1.0 cut is gated on:

  1. Code-signing the MSI. SIGN_CERT_PFX_BASE64 + SIGN_CERT_PASSWORD need to be added to Forgejo Actions Secrets for the release.yml workflow to start producing signed MSIs. Without that, downstream users get the "Windows protected your PC" SmartScreen warning.
  2. Real-meeting smoke pass on a non-dev host with a live NDI runtime.

Other items still on the queue (from issue #1 polish-pass status):

  • Item 21TeamsLauncher fallback chain test coverage. Needs an IProcessLauncher seam refactor before the URI handler → AppX → process-exe order can be unit-pinned. Half-day of work; not blocking.

Where the layout sits

Shell: Default Windows title bar; 32px header (Wild Dragon mark + wordmark + ⌘K / theme / settings icons); 40px transport strip (● 02:14:32 PART 4 · LIVE 2 CTRL :9755); body = alert/update banners + action toolbar + participants DataGrid + conditional meeting bar.

Participants DataGrid — 7 columns: State LED (24) · Preview (106) · Participant (*) · Audio (110) · Output (130) · CFG/gear (56) · ISO toggle (124, rounded-rect, "Enable" / "● LIVE").

Theme: Themes/Theme.Dark.xaml + Themes/Theme.Light.xaml split from WildDragonTheme.xaml; ThemeManager runtime-swaps the merged dictionary and follows HKCU\...\Personalize\AppsUseLightTheme.

Hotkeys: F1 help, Ctrl+K / Ctrl+P command palette, Ctrl+T theme toggle, Ctrl+R refresh, Ctrl+Shift+S panic stop, 19 / NumPad 19 toggle Nth participant ISO.

Build, install, run cheatsheet

cd "C:\Users\zacga\Documents\Claude\Projects\Teams ISO"

# Build + test
dotnet build TeamsISO.sln -c Release            # 0 warnings / 0 errors
dotnet test TeamsISO.sln -c Release --no-build  # 246/246 passing

# Publish + MSI
$v = "0.9.0-rcN"
dotnet publish src/TeamsISO.App/TeamsISO.App.csproj `
  -c Release -r win-x64 --self-contained false `
  -o publish/TeamsISO /p:Version=$v
dotnet build installer/TeamsISO.Installer.wixproj -c Release /p:Version=$v

# Install (force overwrite same-version)
Start-Process msiexec.exe -Verb RunAs -Wait -ArgumentList `
  '/i', '"installer\bin\x64\Release\TeamsISO-Setup-' + $v + '.msi"', `
  '/qn', '/norestart', 'REINSTALL=ALL', 'REINSTALLMODE=amus'

# Launch (any of these)
Start-Process "C:\Program Files\Wild Dragon\TeamsISO\TeamsISO.exe"
Start-Process "C:\Users\Public\Desktop\TeamsISO.lnk"
Start-Process "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Wild Dragon\TeamsISO.lnk"

If anything regresses the v2 shell, the rollback point for the WPF v1 shell (recording axed) is 1d1ce6a; the v2-shell-without-table-redesign rollback point is c271303.