4.3 KiB
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 existingSwapWebcamIdentityAsync); Tune… opens aCameraConfigDialogof the device'sVideoDeviceControllerMediaDeviceControls (Auto + Min/Max/Step sliders, live-only, no persistence). Tech risk to verify at impl: whether MediaDeviceControl writes work underSharedReadOnly(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.xamlaccent brush (DynamicResource) + picker +App.AccentColorSettings key;Source.ChatMemberColorstays per-source.
⚠️ Open action items / landmines
- The app may still be RUNNING (a
ytLiveinstance lockedbin\…\ytLive.dllearlier today) — in-placedotnet buildfails with MSB3021/MSB3027 until it's closed. Workaround that worked: build with-p:OutDir=C:\Users\gramp\AppData\Local\Temp\ytLive-buildNN\ -p:UseAppHost=falseand 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.
subscriberCountrounded 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.mdgitignored — 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.shbefore 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.dbis a 0-byte legacy file); schemauser_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).