mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-05 19:28:25 +00:00
Two gaps found reviewing this branch against what divine.video actually publishes, plus the desktop half of the poll-builder change. Collaboration acceptances (kind 34238) were looked up by a coordinate we predicted — `34238:<collaborator>:<video coordinate>`. divine-mobile does key them that way, but divine-web signs its acceptance with `['d', crypto.randomUUID()]` (divine-web/src/hooks/useApproveCollab.ts:24), so no coordinate a reader can construct will ever name it. The lookup now filters on `kinds:[34238] + authors + #a:[video coord]`, which is the same filter divine-web itself uses (src/hooks/useVideoCollaboratorStatus.ts) and matches both publishers. Kind 34238 joins the `a`-tag engagement filter every rendered addressable note already opens, so the relay side costs no extra REQ, and the credit's check mark now reads LocalCache instead of opening a subscription per credit — strictly fewer REQs than before. Captions that resolve after the first frame never reached the player. A `text-track` naming a kind-39307 coordinate rebuilds the MediaItem with the same videoUri once that event arrives, and the warm-pool fast path reads the unchanged mediaId as "already loaded". A MediaController doesn't carry the item's localConfiguration across the service IPC, so the subtitles can't be read back off it to compare; GetVideoController remembers the fingerprint it last pushed instead, and re-applies at the current position only when it was the one that loaded the item — a warm player carrying another mount's item is left alone rather than rebuffered. desktopApp's voteOnPoll still called PollResponseEvent.build with a Set. It now dispatches on pollType() the way Account.pollRespond does, so a single-choice vote writes one response tag rather than leaving the recorded answer to iteration order. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JLEq2G6U29mKV8cfSTamZ9