diff --git a/HANDOFF.md b/HANDOFF.md index 17bb906..20d4b28 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,78 +1,46 @@ -# HANDOFF — 2026-10-10 (strip tile artwork + on-air tile unit; uncommitted) +# HANDOFF — 2026-10-14 (clean tree; all units committed AND pushed) ## At a glance -- **Branch** main (no feature branch). Pushed through `5685c5d`; 19 commits local, **not pushed** - (push at the creator's call). -- Scene-order unit committed `06f88f4`; desktop-lock committed `63bf844`. The **strip tile - artwork unit below is uncommitted**. +- **Branch** main, tracking `origin/main`. **HEAD = `origin/main` = `931ab46`** — 0 ahead, 0 behind. + Everything below is pushed; nothing is local-only. +- Working tree is **clean** (the stray `Assets/llamacasty-text-nobg-2.png~` backup was deleted 2026-10-14). -## Branch -- main (no feature branch). Pushed through `5685c5d` (TRAX toggle); everything after is local, - **not pushed** (push at the creator's call). - -## New work unit (this handoff) — VERIFIED, ready to commit -Strip tile artwork + on-air indicator (creator ruling 2026-10-10). Three sub-parts: - -1. **Per-scene CRT tile art** — each canonical scene's top-bar tile is its OWN image stored in the - internal DB (`Scene.ThumbnailAssetId`, additive migration, seeded at heal from the creator's five - Downloads JPGs via `SceneThumbnailSeedPaths`). The preview pane keeps rendering the scene's original - background — never the tile. `Save()` Asset prune now keeps `Scene.ThumbnailAssetId` rows - (this was a real bug: the first save would have deleted the seeded tiles). -2. **On-air image** — one shared image (`Gemini_Generated_Image_4zajyl4zajyl4zaj.jpg`) that REPLACES the - staged scene's tile ("the on-air screen jumps around the top bar as the creator swaps scenes"). - Stored as an Asset BLOB tracked by the `OnAirImageAssetId` Setting (`EnsureOnAirImage`, same contract - as the alert clip; prune keep-set extended). Seed path override: `MainViewModel.OnAirSeedPath`. - `RefreshSnapshotsAsync`: staged scene → on-air art; unstaged → own thumbnail or background art; - staged Live without on-air art → green placeholder (unchanged invariant: minis never render captures). -3. **Preview + labels polish** — removed the 6px `#22c55e` rectangle in `BackdropLayer` - (`Controls/PreviewPane.xaml`) — the ONLY live signal is the outer `PreviewGlow` red border - (`MainViewModel.Streaming.cs`, transparent otherwise); the redundant rect was only visible when a - scene had no background ("green outline around the preview screen" the creator saw). Scene-tile - labels doubled: `Controls/SceneThumbnailStrip.xaml` FontSize 10 → 20. - -- Files: `Models/Scene.cs`, `Services/LayoutStore.{Migrations,Load,Save,Settings}.cs`, - `ViewModels/MainViewModel.Background.cs`, `Controls/PreviewPane.xaml` (rect removed), - `Controls/SceneThumbnailStrip.xaml` (label), `ytLive.Tests/SceneThumbnailTests.cs` (4 tests). -- Full suite **427 passed / 0 failed / 0 warnings** (one run flaked on the known - `RealMouseDrag_…PersistsTheReorder` env test — needs an idle desktop — and passed on re-run; - nothing in this unit touches layer reorder). Existing 3 tile tests stub seed paths + `OnAirSeedPath` - so the suite is hermetic; the new 4th test covers the on-air swap + persistence. -- **To commit later (this unit only):** the files above. Then the working tree is back to just the - creator's pinned-chat unit (NOT mine to commit). - -## Desktop-lock unit (COMMITTED 63bf844) -- `ShowActivated = !FullscreenGameRunningNow` + `FullScreenDetectorOverride` seam + `DesktopLockTests`. - Creator still to verify in-game (launch while an exclusive-fullscreen game owns the foreground). - -## Scene-order unit (COMMITTED 06f88f4) -- `ReorderScenesToCanonical()` + `SceneOrderTests`. The creator's DB (Chat SortOrder 2, BRB 3) heals to - canonical F1-F5 order at load; next save re-stamps SortOrder. - -## Dirty files — current reality (2026-10-10) -- **NOT mine — do NOT commit:** the creator's in-flight "pinned chat" unit (`Models/YouTube.cs`, - `ViewModels/MainViewModel.Chat.cs`, untracked `Helpers/RelayCommandGeneric.cs`, and **its hunks in - `Controls/LeftPanel.xaml`**), plus the creator's untracked `Assets/llamacasty*` art. -- ⚠️ Pre-commit: `scripts/verify.sh` runs `scripts/scope-check.sh` against ALL working-tree changes — - the not-mine pinned-chat + art files WILL flag. Pass them as declared-known. +## Recent units (all committed + pushed) +- `931ab46` — pinned chat: `ChatMessage.IsPinned`, `MainViewModel.PinnedChatMessage` + + Pin/Clear commands (`Helpers/RelayCommandGeneric.cs`), LeftPanel pinned banner via `NotNullToVis`. + Plus brand wordmark assets. (This was previously mislabeled in the old handoff as "not mine — do NOT commit"; it is committed.) +- `8e1d6f4` — strip tile artwork + on-air indicator (per-scene `Scene.ThumbnailAssetId`, shared + `OnAirImageAssetId`, PreviewPane green rect removed, tile labels FontSize 20, Asset-pruner keep-set + fix). 427 pass, 0 warnings. +- `06f88f4` — scene strip renders in canonical F1–F5 order (`ReorderScenesToCanonical`). +- `63bf844` — desktop lock: `ShowActivated = !FullscreenGameRunningNow` + `FullScreenDetectorOverride`. ## Next step -- Commit this unit (files listed above; gate already green at 427/427, 0 warnings). Then the creator - launches the app on the real DB: the five CRT tiles seed from `C:\Users\gramp\Downloads\Gemini_…`, - the staged scene's tile shows the on-air image, the preview shows the scene's real background with no - green frame, and the tile labels are legible (FontSize 20). Push is still at the creator's call. +- **Webcam cadence work** (creator-queued 2026-10-05; see TASKS.md → "Webcam cadence → resolution"). + **ACTUAL NEXT UNIT: per-element composite timing + a scene dump at pump start.** Measurement only — + no fix until it names which of the 6 elements eats ~140ms. Needs a creator recording/session to read. + The compositor manages **6.8 composites/s at ~141ms** and the file is **88.7% duplicate frames** — that + is the judder; the camera itself delivers 30.0/s clean. + +## Also still open (operational) +- **Vertical-format regression (STALE, not fixed):** 1080p60-vertical selection no longer shrinks the + capture border in the preview. Mechanism mapped in `Controls/PreviewPane.xaml:319-322` (crop Rectangle + bound to `OutputRectX/Y/W/H` + `IsOutputCropped`, driven by `MainViewModel.Streaming.cs` + `ApplyStreamQuality`; `DimRects` in `MainViewModel.cs:91-94`). Root cause unknown — paused. +- ⛔ Sudo password rotation pending (user; then update both password lines in `CREDENTIALS.md`). +- TASK 56 secret scan before `gramps/LlamaCasty` goes public. +- TASK 55 disk hygiene queued (`startup.log` uncapped). ## Tests -- Full suite **427 passed / 0 failed / 0 skipped / 0 warnings** (2026-10-10). Known env flakes: +- Full suite **427 passed / 0 failed / 0 skipped / 0 warnings** (as of `8e1d6f4`). Known env flakes: `Mix_HonorsProviderGains…` (fails while system audio plays), `RealMouseDrag…` (needs an idle desktop), `Round_Clip_Corner…` (grab/geometry under active mouse). The verify gate whitelists only the latter two — `RealMouseDrag…` failing mid-session needs one re-run when the desktop idles. +- Pre-commit gate: `./scripts/verify.sh "" "" ...` (clean build + full suite + scope check). -## Also still open -- **Vertical-format regression (STALE, not fixed):** 1080p60 vertical selection no longer shrinks the - capture border in the preview. Mechanism mapped (see prior summary): the crop Rectangle - `Controls/PreviewPane.xaml:319-322` bound to `OutputRectX/Y/W/H` + `IsOutputCropped`, driven by - `MainViewModel.Streaming.cs` `ApplyStreamQuality` from `SelectedQuality` (binding + ctor only, - `new("Vertical 1080p60", 60, 8.0, 1080, 1920)`), `DimRects` in `MainViewModel.cs:91-94`. Root cause - unknown — paused. -- ⛔ Sudo password rotation pending (user; then update both password lines in `CREDENTIALS.md`). -- TASK 56 secret scan before `gramps/LlamaCasty` goes public. TASK 55 disk hygiene queued. \ No newline at end of file +## Secrets / paths (do not re-hunt) +- Layout DB: `%APPDATA%\ytLlive\ytLlive.db` (SQLite, full-rewrite per save). Auth: `%APPDATA%\ytLlive\ytLlive.auth` + (DPAPI). Startup log: `%APPDATA%\ytLlive\startup.log`. +- LAN credentials: `CREDENTIALS.md` (gitignored). Google Cloud OAuth project number `198374416003`, + owned by `llamachile.shop@gmail.com` — verify at + `https://console.cloud.google.com/apis/credentials?project=198374416003`.