# HANDOFF — 2026-09-06 ## Branch / Commit State **`main` HEAD = `e002847`** — web transparency fix (take-21): feed full canvas to compositor. ``` e002847 fix(web): feed full canvas to compositor — transparent margins reveal layers beneath (take-21) 70db344 perf(camera): MJPEG negotiation before frame reader — camera drives at its best rate 0f059ec docs: HANDOFF — #12 landed (element rasters), MJPEG next, web transparency spin-guarded 6d11e8b perf(compositor): reuse per-element rasters in-place — take-16 GC-churn fix 87509bc (origin/main) docs: restructure TASKS.md into a catalog — one file per task in TASKS/ ``` **Pushed to origin: `87509bc`.** 4 unpushed commits after it. **`today-slices` branch @ `ce87490`** — preserves 17-commit chain. Fallback recovery. ## Resolved this session - **Audio regression (TASK 26):** Non-event — external headset volume control was at minimum, not a code bug. - **Webcam black square / web overlay transparency:** FIXED at `e002847`. Root cause: `bccdb48` introduced alpha cropping; the CROP was fed to the compositor, which `UniformToFill`-zoomed the opaque content to cover the entire element rect. Fix: feed the FULL `1920×1080` canvas to the compositor; transparent margins reveal layers beneath; the alpha crop (`outPixels`) is used only for the preview `WriteableBitmap`. `0f441d8` (take-19) had the right insight but introduced `CanvasRing` alongside the fix — the ring reuse caused additional breakage. Take-21 keeps the single `CanvasScratch` buffer (no ring), feeds full canvas, Epoch increments per frame. ## MyMistakes.md update needed The spin-guard entry for the web overlay needs updating with the take-21 resolution. See that file. ## Landmines - testhost shares startup.log with app — filter by time when triaging - Stale testhost/exe locks DLL: `taskkill /F /IM testhost.exe /IM ytLive.exe` first - Do NOT run full-suite vstest (WASAPI hang); flow = clean build + per-class + scope-check - Kill app before build: `/mnt/c/Windows/System32/taskkill.exe /F /IM ytLive.exe` - ffmpeg month-end pinned; `Startup.log` "Recording saved:" shows real final path