Files
LlamaCasty/HANDOFF.md
T

4.3 KiB

HANDOFF — 2026-09-22 (TASK 39 shipped+pushed; TASK 40 App Settings round plan SAVED in 4d9188a, uncommitted here)

Branch / Commit State

main HEAD = 4d9188a — docs(plan): TASK 40 App Settings round — saved plan. Pushed state at 197ee81. Working tree DIRTY — ONE docs work unit:

?? HANDOFF.md          (this rewrite)

Build impact: none — docs only.

What's in flight — TASK 40: App Settings round (plan saved 2026-09-22)

Creator (this session) scoped three asks and answered four decision questions. Full plan: TASKS/task-40-app-settings-round.md (created + committed in 4d9188a). Four units, one Good Dog test + one scope-checked commit each:

  • Unit A — App Settings "Active Web Camera" (ask 1): new section under "Default Location for Recordings" — Change… opens a sub-menu of a fresh webcam enumeration incl. vcams (adopt+base-lock if _webcam == null, else existing SwapWebcamIdentityAsync); Tune… opens a CameraConfigDialog of the device's VideoDeviceController MediaDeviceControls (Auto + Min/Max/Step sliders, live-only, no persistence). Tech risk to verify at impl: whether MediaDeviceControl writes work under SharedReadOnly (ladder: probe capture → running source's controller → read-only + note; spin-guard = research before a 3rd guess).
  • Unit B — gear (ask 2): move from BottomBar lower-left to TopBar right of the wordmark, gap ≈ 3 letters; left-click = App Settings, right-click = Bug/Feature/About.
  • Unit C (ask 3): persist default output resolution (currently resets every launch), surface default scene transition + duration (persisted but editable NOWHERE), Confirm-before-End toggle.
  • Unit D — accent/theme (ask 3, split out as its own unit): 69 hardcoded accent sites across 15 files → consolidate into a Themes/Controls.xaml accent brush (DynamicResource) + picker + App.AccentColor Settings key; Source.ChatMemberColor stays per-source.

⚠️ Open action items / landmines

  • The app may still be RUNNING (a ytLive instance locked bin\…\ytLive.dll earlier today) — in-place dotnet build fails with MSB3021/MSB3027 until it's closed. Workaround that worked: build with -p:OutDir=C:\Users\gramp\AppData\Local\Temp\ytLive-buildNN\ -p:UseAppHost=false and run vstest against the temp dll. Close the app before Unit-A final verification.
  • Unit A SharedReadOnly control-write risk is the one genuinely uncertain technical point — do NOT hand-wave it; run the mitigation ladder and (if needed) the spin-guard research.
  • subscriberCount rounded to 3 sig figs by Google (YPP numbers are coarse). Carried.
  • Slice 2 (YPP Analytics) needs Google re-consent (yt-analytics.readonly) — do NOT merge with any TASK 40 unit.
  • LayerReorderPersistenceTests.RealMouseDrag flaked once pre-TASK-38 (fullscreen game); unrelated.
  • Polar product d105dfa1… still $99/yr — must become one-time before launch (carried, TASKS/task-10-monetization.md). MARCOM.md/MONETIZATION.md gitignored — never commit.

Next step

The user has a new task spec waiting — take it, then execute TASK 40 units A → B → C → D per the saved plan (each: declared file list → code → Good Dog test → ./scripts/scope-check.sh → commit with docs in the SAME commit → push only on the user's say-so). HANDOFF rewrite is due when this docs work unit commits.

Critical working rules (unchanged, still binding)

  • Good Dog = ONE integration test per change.
  • Scope lock: declare the file list before editing; ./scripts/scope-check.sh before commit.
  • WSL builds use the Windows dotnet host (/mnt/c/Program Files/dotnet/dotnet.exe, quoted paths).
  • ai.md + code in the SAME commit; HANDOFF rewritten at session end.

Where the machine facts live

  • %APPDATA%\ytLive\ytLive.db = real layout DB (layout.db is a 0-byte legacy file); schema user_version = 10. sqlite3 at /root/android-sdk/platform-tools/sqlite3.
  • ffmpeg/ffprobe: /mnt/c/Program Files/Krita (x64)/bin/ with Windows paths.
  • ai.md §Screen backdrop capture = authoritative backdrop doc (incl. TASK 38); §Monetization awareness = monetization roadmap (TASK 39 state, YPP thresholds).
  • Business/marcom: MONETIZATION.md + MARCOM.md (gitignored).