From fd5198df9f6b46ef932060d25bae28779f3602cb Mon Sep 17 00:00:00 2001 From: gramps Date: Thu, 17 Sep 2026 20:16:49 -0700 Subject: [PATCH] =?UTF-8?q?docs(handoff):=20session-end=20refresh=20?= =?UTF-8?q?=E2=80=94=20HEAD=2075723ac,=20attainability=20refinement,=20tre?= =?UTF-8?q?e=20clean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HANDOFF.md | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/HANDOFF.md b/HANDOFF.md index 84a44f7..49259ef 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,12 +1,22 @@ -# HANDOFF — 2026-09-17 (webcam app-default gate slice; committed locally — no push) +# HANDOFF — 2026-09-17 (webcam attainability refinement committed locally at `75723ac` — no push) ## Branch / Commit State -`main` HEAD = **`1e4017d` webcam startup resource lifecycle** (local). The gate slice lands -on top as a NEW commit (stays commit-local until greenlight). Below: `94a934f` (reader-ladder), -`64a5a6d` (slice-18 C4 cache), slice-17, slice-16, slice-15, `c01206f`, `b22d08e` (signed -audio-sync, pushed). No push after this commit either — still awaiting the device take + user -greenlight. +`main` HEAD = **`75723ac` fix(webcam): offer the Web Cam row only when a camera is attainable +(live lock), not merely selected** (local). Below it: + +- `9d00955` feat(webcam): app-default gate slice — per-scene offer, Add places default directly, + identity survives removal +- `1e4017d` feat(webcam): resource lifecycle startup slice — poll-on-start, single-cam lock, + persistent Layers alert +- `94a934f` reader-output-subtype ladder + WinRT per-call wrap rule +- `64a5a6d` slice-18 C4 blit-on-change composite cache +- `b37b8a3` slice-17 overlap GPU readbacks with monotonic publish gate + +**No push yet** — still awaiting the device take + user greenlight. Working tree clean. + +> Correcting the previous handoff, which still listed HEAD as `1e4017d`: the gate slice +> (`9d00955`) and its attainability refinement (`75723ac`) are both committed now. ## ⚠️ Branding (2026-09-14, creator-corrected): product = **llamacasty**, internals = ytLive @@ -14,7 +24,7 @@ Product is **llamacasty**; repo path, csproj `AssemblyName`/`RootNamespace`, DB/ (`%APPDATA%\ytLlive\...`), most code names are legacy **ytLive/ytLlive**. User-facing text: "llamacasty" / UI labels use the catalog names ("Web Cam", "YouTube Chat", "Countdown Timer"…). -## ✅ Committed — webcam app-default gate slice (creator-visible goal: Web Cam offered when switching to Live) +## ✅ Committed — webcam app-default gate + attainability (`9d00955`, `75723ac`) **Background:** the DB truth (`%APPDATA%\ytLlive\ytLlive.db`; NOT `layout.db`, a 0-byte legacy file) put the single `WebcamSceneConfig` in **Chat**, so the old TASK 26 app-wide rule grayed @@ -26,7 +36,7 @@ the availability layer. TASK 26's app-wide gate is **superseded** by creator dir - **Per-scene gate:** `CanAddWebcam` = `StagedScene is { WebcamConfig: null } && IsWebcamAttainable`. A scene already hosting the webcam stays gray (one webcam per stream); another scene holding it does NOT gray the row elsewhere. -- **Attainable = a live lock, not a saved identity** (creator refinement): `IsWebcamAttainable` = +- **Attainable = a live lock, not a saved identity** (`75723ac` refinement): `IsWebcamAttainable` = `_webcam != null && CameraManager.IsRunning(_webcam.DeviceId)`. An identity whose camera is unplugged / can't start leaves the row greyed (tooltip "No webcam is currently available…"), and it un-greys the moment a session is running (startup lock, first frame, picker + acquire). @@ -132,4 +142,4 @@ on this build. The webcam gate slice answers the creator's "go" ask — switchin must now offer Web Cam in the layer stack (Chat holding the camera no longer blocks it). The red Layers alert remains the new expected behavior to eyeball on the take: browser holds the camera → fresh launch → alert (unless Chat's config grabbed it) that clears after a Retry once the browser -closes. \ No newline at end of file +closes.