Files
LlamaCasty/HANDOFF.md
T

4.6 KiB

HANDOFF — Session State

Branch

task26-webcam-menu-gate @ ef710c5 — TASK 26 committed (not pushed). Working tree now carries TASK 27, NOT yet committed (commit on your word). Parent chain: task25-backgrounds @ 7dd140a (pushed), still unmerged to main.

Shipped: TASK 27 — YouTube Chat layer gate + legacy label heal

Creator follow-up to TASK 26: "do the same thing with the YouTube chat layer" + make the Layers-row label match the (+) picklist.

  1. Gate: CanAddYouTubeChat = StagedScene != null && !Scenes.Any(s => s.Elements.OfType<Source>().Any(e => e.Type == SourceType.ChatBox)) — one chat layer per layout; the (+) item greys out while any scene carries one. Raised in the StagedScene setter + OnElementsChanged; AddSource refuses a second as defense in depth. XAML IsEnabled + tooltip "One chat layer at a time — it's already in your stream".
  2. Label heal: layers added by commit 65641d8 were named "Chat"; LoadLayout heals exactly that un-renamed default to "YouTube Chat" so the Layers row matches the picklist. Creator renames untouched; idempotent.
  3. Test (Good Dog Rule — ONE): ChatLayerGateTests.LegacyChatName_Heals_And_CanAddYouTubeChat_Gates_On_The_Existing_Layer — real window + temp DB with a legacy "Chat" ChatBox row in Starting: healed on load, persisted on save, greyed cross-scene + in-scene, re-enabled after RemoveSourceCommand.
  4. Suite: 225 total, 224 pass — only failure is the known pre-existing AudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback. Build 0 warnings.
  5. Docs same commit: ai.md (chat rule + heal next to the webcam gate), TASKS.md TASK 3 row 28, this file.

Shipped: TASK 26 — webcam (+) menu gates on the app-wide identity

CanAddWebcamToStagedScene → CanAddWebcam = StagedScene != null && _webcam == null (MainViewModel.cs:308), raised at StagedScene setter / ReacquireWebcam / OnElementsChanged / _webcam create / last-config removal; XAML binding renamed, tooltip verbatim. ONE integration test WebcamMenuGateTests.CanAddWebcam_Gates_On_The_AppWide_Webcam_Identity. Committed ef710c5 with ai.md/TASKS row 27/HANDOFF docs.

⚠️ 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 these branches.
  • Real-MainWindow tests MUST set LayoutPathOverride (ai.md) — DB pollution wiped real data once.
  • Source.Type setter derives IsBackground (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.
  • Dead code flagged, not touched: ShowWebcamCommand / CanShowWebcamInStagedScene are wired in the VM but bound nowhere — audit item, separate branch if wanted.

Next steps

  1. Commit TASK 27 (code + docs, one commit), push both branches.
  2. Creator visual pass on Windows: add YouTube Chat to any scene → (+) item greys everywhere; legacy "Chat"-named row (if present) shows as "YouTube Chat"; remove → re-enables.
  3. Merge task25-backgrounds + task26-webcam-menu-gate + this branch to main per Good Dog Rule (one integration test each ✓); relaunch app once so the real %APPDATA% DB self-heals (backgrounds + chat label).

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.