Files
ytLlive/HANDOFF.md
T

52 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HANDOFF — session state
> Current operational state, read right after `TASKS.md`. Trust this file as the
> truth of what is in flight — do not re-derive from git/fs unless it points at
> a problem. Conventions: [`schema.md`](schema.md). Rewrite this file at session
> end, compaction, or any interruption.
## Session state (last updated: 2026-08-13)
- **Branch:** `main`. TASK 4 **ship step 5.5** is **committed and pushed** (`ac60a26`,
"TASK 4 ship step 5.5: social bar bug fixes + bar on the live output").
- **This session (follow-up):** the drag-snap from 5.5 failed in practice — it snapped
up but wouldn't come back down (jitter around the deadzone, per the user). **Superseded
by a click-toggle** (user decision, KISS): `MainWindow.SocialBar_MouseLeftButtonDown`
`MainViewModel.ToggleSocialBarPosition()` flips the bar top ⇄ bottom; the bar rides
`{Binding SocialBarTop}` alone; `SocialBarSnap` + its 2 tests removed. Build 0 warnings,
**153 tests passing** (155 2 snap units). **Uncommitted:** this click-toggle change +
its memory corrections (TASKS.md / ai.md / HANDOFF). Next action: commit + push.
- **Verified:** 0 warnings; 153/153 tests pass.
- **Landmines:**
- Never set a local `Canvas.SetTop` on the social bar — a local value permanently
overrides `{Binding SocialBarTop}` (the `ClearValue` lesson from 5.5).
- The pump reads the active scene on a background thread while the UI can still
edit it — a concurrent-mutation exception is contained (logged + `Failed` +
the pump stops), not a crash. The background thread + video pipeline is the
new reality since ship step 5.
- `StopAsync` must stop the encoder (closes stdin) **before** awaiting the pump
loop — closing stdin unblocks a write stuck on pipe backpressure; the reverse
order deadlocks.
- `FramePump.IsRunning` must be set true before the loop starts (a completed-task
delay can run the first iteration synchronously on the caller's thread).
- `StartAsync` never throws; the VM fires-and-forgets it. `Failed` while live
flips `StreamStatus.Error` (minimal — real health surfacing is ship step 6).
- The heal runs off the UI thread and applies via the dispatcher; a config swap
mid-heal (dialog Save) can orphan the healed values on the old entries — harmless
(best-effort, re-healed next load).
- Tests never instantiate `MainViewModel` directly except the round-clip
integration test (a real `MainWindow`), which never goes live — keep it that way.
- Sandbox can't reach outbound HTTPS — the subdomain-probe logic is verified via
stub-handler tests only, not against the real `mastodon.llamachile.tube`.
- **Next step:** commit + push the click-toggle follow-up. Then TASK 4 ship step 6 —
health stats: bind `FramePump.HealthUpdated` (bitrate/FPS/duration) into the bottom
bar. Nothing else queued — do not expand the task queue on your own. Optional, not
queued: rewriting the healed entry's `ProfileUrl` to
`https://mastodon.llamachile.tube/@gramps` (user must say the word).
- **Secret/DB/port facts live:** OAuth client id/secret in `Helpers/OAuthCredentials.cs`;
OAuth session token in `Helpers/TokenStore.cs` (DPAPI → `%APPDATA%\ytLlive\ytLlive.auth`);
layout DB `%APPDATA%\ytLlive\ytLlive.db` (schema v8; `SocialEntry.Software`
column is a column-presence migration like the others, no version bump); OAuth callback
`http://localhost:8765/oauth2/callback`; crash log `%APPDATA%\ytLlive\startup.log`.