5.9 KiB
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:
NdiDiscoveryService.RunAsync— immediate first poll + fast ramp.PeriodicTimer.WaitForNextTickAsyncwaits 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.MainViewModel.IsDiscovering+ new empty-state copy. New boolean property, true for 8s after engine start as long as no participants have arrived.MainWindow.xamlswaps the empty-state copy on this binding:IsDiscovering=true→ "scanning for ndi sources…" with a cyan dotIsDiscovering=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."
- Single-instance mutex moved from
Local\toGlobal\. On admin-user boxes with UAC effectively disabled, launches from different parents can land in slightly different security contexts and aLocal\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. installer/Package.wxs— Desktop shortcut component added. Now installs bothC:\ProgramData\Microsoft\Windows\Start Menu\Programs\Wild Dragon\TeamsISO.lnkANDC:\Users\Public\Desktop\TeamsISO.lnk. Both point at the installed exe underC:\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 WiXAdvertisedefault 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:
- Code-signing the MSI.
SIGN_CERT_PFX_BASE64+SIGN_CERT_PASSWORDneed 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. - 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 21 —
TeamsLauncherfallback chain test coverage. Needs anIProcessLauncherseam 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, 1–9 / NumPad 1–9 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.