4.1 KiB
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. 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 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 isgit 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.SetTopset a local value that permanently overrides{Binding SocialBarTop}; the release-time snap could never win. Fixed withSocialBarSnap.Decide(direction-snap during drag, ±6px deadzone) +bar.ClearValue(Canvas.TopProperty)on release. - Bug 2 — Mastodon showed the generic honeycomb:
@gramps@llamachile.tubehadSoftware = 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 settableSocialEntry.FediverseSoftwarethat raisesLogoData. - Compositor bar:
Services/Compositor/SocialBarRenderer.cs(new, WPF RenderTargetBitmap → straight-alpha strip),SceneCompositorblits it above the flash,FramePumpgains a re-read-each-framesocialBar:seam,MainViewModelowns the strip frame.
- Bug 1 — drag didn't snap:
-
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+ the pump stops), not a crash. The background thread + video pipeline is the new reality since ship step 5. StopAsyncmust stop the encoder (closes stdin) before awaiting the pump loop — closing stdin unblocks a write stuck on pipe backpressure; the reverse order deadlocks.FramePump.IsRunningmust be set true before the loop starts (a completed-task delay can run the first iteration synchronously on the caller's thread).StartAsyncnever throws; the VM fires-and-forgets it.Failedwhile live flipsStreamStatus.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
MainViewModeldirectly except the round-clip integration test (a realMainWindow), 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.
- The pump reads the active scene on a background thread while the UI can still
edit it — a concurrent-mutation exception is contained (logged +
-
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. Optional, not queued: rewriting the healed entry'sProfileUrltohttps://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 inHelpers/TokenStore.cs(DPAPI →%APPDATA%\ytLlive\ytLlive.auth); layout DB%APPDATA%\ytLlive\ytLlive.db(schema v8;SocialEntry.Softwarecolumn is a column-presence migration like the others, no version bump); OAuth callbackhttp://localhost:8765/oauth2/callback; crash log%APPDATA%\ytLlive\startup.log.