70 lines
4.3 KiB
Markdown
70 lines
4.3 KiB
Markdown
# 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). |