Repository navigation
feat(debates): surface claims over the video as they are said - #2442
Merged
jwalkingjew merged 2 commits intoSep 16, 2026
Conversation
Stacked on GEO-2909, which landed the half this depends on: knowing when each claim was said, and the card that asks for positions once the video has stopped. This is the contested half — claims appearing while the debate is still playing. Each claim is a line of white text on a soft scrim, in the same visual language as the subtitle, rising in the speaker's own corner and fading with its own window. Two at a time at most, capped to the width of the debater's name row so a line never runs past their position chip. Interaction is two small icons under the text, recessive until hovered: thumbs for a stance claim, chevrons for a factual one. Only claims the resolver placed confidently appear here. A line asserts "they are saying this now", and being wrong about that misquotes a real person, so anything looser stays in the panel and on the end card. Opacity is computed from the playhead rather than a CSS animation, so scrubbing into the middle of a claim finds the line at full strength rather than part-way through an animation that began when it mounted.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…so-they-can-be' into geo-2909-live-claims-during-playback
jwalkingjew
merged commit Sep 16, 2026
463feed
into
preston/geo-2909-time-align-debate-claims-to-the-video-so-they-can-be
1 check passed
Collaborator
Author
|
Folded back into #2439 so both halves can be worked on together — this branch merged into that one, which is why GitHub marked this as merged. Nothing has shipped to The during-playback layer now lives in #2439 alongside the timing resolver and the end-of-debate scorecard. Easy to split out again later: the commits are intact, and the removal that created this branch is a single revert away. |
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #2439 — review that one first; this targets its branch, so the diff here is only the during-playback layer.
Split out on its own because this is the part that risks being a distraction rather than an addition, and it should be judged on that alone. #2439 keeps the uncontested half: knowing when each claim was said, markers on the scrubber, and the card at the end that asks for positions once there is no video left to interrupt.
What this adds
Claims appear while the debate is still playing. Each is a line of white text on a soft scrim — the same visual language as the subtitle, deliberately not a card — rising in the speaker's own corner and fading out with its own window. Newest at the bottom, nearest their name; earlier ones ride up above it.
ResizeObserver— names vary, and there is no CSS way to say "no wider than that absolutely-positioned sibling".Two decisions worth a look
Only confidently-placed claims appear here. A line asserts they are saying this now, and being wrong about that misquotes a real person. Anything the resolver placed loosely stays in the panel and on the end card, where a list makes no claim about when.
Opacity comes from the playhead, not a CSS animation. Scrubbing into the middle of a claim finds the line at full strength rather than part-way through an animation that started when the element mounted.
Testing
claim-ticker.test.ts— stack ordering and capping, overlap, linger, fade in and out.debate-claim-ticker.test.tsx— icons name themselves, selected side, fade, answer reported once with its direction, no play/pause leak through the line.apps/websuite green (483 files, 5674 tests),tsc --noEmitclean apart from the three files already failing on master.Still unknown
How the fade reads in motion — whether the linger is too long or too short, and whether two stacked lines is one too many. That is the thing to watch rather than anything in the diff.