4.1 KiB
4.1 KiB
HANDOFF — Session State
Branch
task26-webcam-menu-gate @ working tree — code + docs complete, NOT yet committed (commit on your word). Parent: task25-backgrounds @ 7dd140a, committed and pushed, clean.
Shipped: TASK 26 — webcam (+) menu gates on the app-wide identity
Creator's visual pass of TASK 25 came back green except one item: the (+) menu's Webcam row wasn't
greyed out when a webcam was already deployed in another scene. Root cause: CanAddWebcamToStagedScene
only checked the staged scene's config; the truth is the _webcam singleton.
- Renamed + regated:
CanAddWebcamToStagedScene→CanAddWebcam=StagedScene != null && _webcam == null(MainViewModel.cs:308). Raised at all five sites: StagedScene setter,ReacquireWebcam(layout load),OnElementsChanged,_webcamcreate (AddWebcamToStagedSceneAsync), last-config removal (RemoveElement). - XAML: the Webcam MenuItem's
IsEnabledbinding renamed to match; tooltip verbatim. - Test (Good Dog Rule — ONE):
WebcamMenuGateTests.CanAddWebcam_Gates_On_The_AppWide_Webcam_Identity— real window + temp DB seeded with aWebcamrow + one config in Starting; asserts greyed while Live is staged (the old gate's false positive), greyed while Starting staged, re-enabled afterRemoveSourceCommanddrops the last config, and zeroWebcamrows after save. - Suite: 224 total, 223 pass. The only failure is the known pre-existing
AudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback(unrelated). Build 0 warnings. - Docs same commit: ai.md (gate rule + rename; dropped the stale "empty-canvas right-click Show Webcam" claim — that XAML never shipped), TASKS.md TASK 3 row 27, this file.
- Dead code flagged, not touched:
ShowWebcamCommand/CanShowWebcamInStagedSceneare wired in the VM but bound nowhere — audit item, separate branch if wanted.
⚠️ Landmines
- User verdict (2026-08-23): "The AI wrote fucked up code after repeatedly and intentionally misunderstanding instructions." Extends the ai.md 2026-08-22 audit flag — trust nothing from those sessions without manual verification.
- Pre-existing test failure is ONE (
AudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback) — not caused by this branch. - Real-MainWindow tests MUST set
LayoutPathOverride(ai.md) — DB pollution wiped real data once. Source.Typesetter derivesIsBackground(Models/Source.cs:40) — any Type change must re-set IsBackground after.- vstest quirk: only one
--tests:param allowed; plain substrings work, alternation regexes silently match nothing. - Notification.Wpf gotchas (ai.md/TASKS.md): area routing by XAML
Name; unknown AreaName silently drops;NeverExpires()=TimeSpan.MaxValue;ToHex()=#AARRGGBB.
Next steps
- Commit this branch (code + docs, one commit), then merge/PR per Good Dog Rule (one integration test ✓).
- Creator visual pass on Windows: add a webcam to any scene → the (+) menu's Webcam row greys out everywhere; remove it → row re-enables.
- Then merge
task25-backgrounds→ main (still pending from last session), relaunch app once so the real%APPDATA%DB self-heals.
Build
taskkill.exe /F /IM ytLive.exe # if running
"/mnt/c/Program Files/dotnet/dotnet.exe" build "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.csproj"
"/mnt/c/Program Files/dotnet/dotnet.exe" vstest "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.Tests\bin\Debug\net8.0-windows10.0.19041.0\ytLive.Tests.dll"
Polar.sh resources
| Resource | ID |
|---|---|
| Org ID | c05fb364-b967-4f6c-adf2-8a144e46d085 |
| Product | d105dfa1-497e-423b-8cd4-e0ee2e3abbc0 |
| Price | 7c1b6f70-cf8c-46df-9bc8-6703f9fa64d0 |
| Benefit | 80f66bc1-d5a3-44a1-b9ea-1709ae508535 |
| Checkout URL | https://buy.polar.sh/polar_cl_ueMy8AyAClO0o0yo19IroZwKTbD587gzUsjEW3bFapw |
| Validate endpoint | POST https://api.polar.sh/v1/customer-portal/license-keys/validate |
| Key prefix | LCYT- |
v1 vision
A streaming tool so intuitive it needs no manual — go live or record in minutes, OBS-free.