TASK 4 ship step 5.5: social bar bug fixes + bar on the live output — direction-snap drag (SocialBarSnap.Decide + ClearValue, local Canvas.Top was overriding the binding), fediverse nodeinfo subdomain probing + load-time heal (settable FediverseSoftware), SocialBarRenderer strip blitted above the flash via a re-read FramePump socialBar seam — 155 tests passing, 0 warnings

This commit is contained in:
2026-08-13 09:29:58 -07:00
parent e72ba71165
commit ac60a26d82
16 changed files with 666 additions and 52 deletions
+32 -14
View File
@@ -7,18 +7,29 @@
## Session state (last updated: 2026-08-13)
- **Branch:** `main`. TASK 4 ship step 5 (the live frame pipeline) is **shipped
and committed** — the `FramePump` frame producer
(`Services/Encoder/FramePump.cs`), `ScreenCaptureManager.GetLatestFrame(key)`,
the `MainViewModel` resolver/option-builders/pump lifecycle wiring, `FramePumpTests`
(7) + the `GetLatestFrame` test (1), and the memory updates (TASKS.md, ai.md,
Services/index.md — the previous session left `Services/index.md` stale and
HANDOFF unrewritten; both were fixed before the commit). Build **0 warnings**,
**147 tests passing**. A Windows patch reboot killed the prior session right
after the work was verified but before the commit.
- **Finished this session:** ship step 5 (re-verified: 0 warnings, 147/147 pass),
the `Services/index.md` FramePump row + de-stale'd encoder rows, and this
HANDOFF rewrite.
- **Branch:** `main`. TASK 4 **ship step 5.5 is implemented, tested, and staged for
commit** — the social bar bug-fix branch (drag snap + fediverse heal + the bar on
the live output). Uncommitted: the feature work, tests (+8 → 155), and the memory
updates in TASKS.md / ai.md / Services/index.md / this file. Next action is
`git add` + commit + push (feature + its memory docs in ONE commit, per the
working rules).
- **Finished this session:** both reported bugs diagnosed to root cause and fixed;
compositor rendering of the social bar added per user approval.
- **Bug 1 — drag didn't snap:** `Canvas.SetTop` set a local value that permanently
overrides `{Binding SocialBarTop}`; the release-time snap could never win. Fixed
with `SocialBarSnap.Decide` (direction-snap during drag, ±6px deadzone) +
`bar.ClearValue(Canvas.TopProperty)` on release.
- **Bug 2 — Mastodon showed the generic honeycomb:** `@gramps@llamachile.tube`
had `Software = NULL` (nodeinfo only ever asked of the landing-page domain).
Fixed via subdomain probing (`mastodon.``social.` → … candidates, ~15s
budget), a load-time heal (`MainViewModel.HealFediverseSoftwareAsync`), and a
settable `SocialEntry.FediverseSoftware` that raises `LogoData`.
- **Compositor bar:** `Services/Compositor/SocialBarRenderer.cs` (new, WPF
RenderTargetBitmap → straight-alpha strip), `SceneCompositor` blits it above
the flash, `FramePump` gains a re-read-each-frame `socialBar:` seam,
`MainViewModel` owns the strip frame.
- **Verified:** Windows-host build **0 warnings**; **155/155 tests passing**
(147 baseline + 8 new). Full commit contents pending.
- **Landmines:**
- 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` +
@@ -31,11 +42,18 @@
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.
- **Next step:** TASK 4 ship step 6 — health stats: bind `FramePump.HealthUpdated`
- Sandbox can't reach outbound HTTPSthe subdomain-probe logic is verified via
stub-handler tests only, not against the real `mastodon.llamachile.tube`.
- **Next step:** commit + push ship step 5.5 (one commit incl. memory docs). 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.
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`);