Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
7340b5b
feat(debates): resolve when each claim was said, so claims can be tie…
jwalkingjew Sep 15, 2026
3951494
feat(debates): surface claims over the video as they are said, with p…
jwalkingjew Sep 15, 2026
e6829c1
test(debates): keep the feed-player suites in step with the claim ticker
jwalkingjew Sep 15, 2026
172ebff
refactor(debates): move claim cards into the debater's corner as a fa…
jwalkingjew Sep 15, 2026
fcf6a62
refactor(debates): make the live claims ambient, and move the ask to …
jwalkingjew Sep 15, 2026
f361c7a
refactor(debates): tighten the claim line and the end card (GEO-2909)
jwalkingjew Sep 15, 2026
74c6909
refactor(debates): icons under the claim text, and the real claim pil…
jwalkingjew Sep 15, 2026
17a6787
feat(debates): hold the taken side, then tally the lean and ask who w…
jwalkingjew Sep 15, 2026
ab2130f
refactor(debates): hold the during-playback claim layer for its own P…
jwalkingjew Sep 15, 2026
4227fac
feat(debates): surface claims over the video as they are said
jwalkingjew Sep 15, 2026
1ef354a
feat(debates): make the end screen a scorecard, and stop it replaying…
jwalkingjew Sep 15, 2026
90ae748
feat(debates): rebuild the video element to the Figma redesign (GEO-2…
jwalkingjew Sep 17, 2026
b7796ce
feat(debates): persist claim cards, open the backlog on hover, expand…
jwalkingjew Sep 17, 2026
d1b5146
fix(debates): lift the claim stack clear of the scrubber while it is …
jwalkingjew Sep 17, 2026
b4fa0de
fix(debates): fade the resting stack out sooner so it climbs less of …
jwalkingjew Sep 17, 2026
befe3ce
feat(debates): order the claims panel by when claims were said, and a…
jwalkingjew Sep 17, 2026
58076a2
feat(debates): plan and document the claim-timecode backfill across e…
jwalkingjew Sep 17, 2026
df4dd21
docs(debates): regenerate the claim-timecode backfill plan at a 0.55 …
jwalkingjew Sep 17, 2026
eb17138
docs(debates): set the claim-timecode backfill floor to 0.7 (GEO-2909)
jwalkingjew Sep 17, 2026
8252a5a
feat(debates): let claim cards expire again, and open the backlog on …
jwalkingjew Sep 18, 2026
fc5a579
feat(debates): give each debater their own claim corner on their own …
jwalkingjew Sep 18, 2026
fde5819
fix(debates): dissolve the open backlog into the tile's edge instead …
jwalkingjew Sep 18, 2026
9fa6443
feat(debates): give the claim corner a chip, so the backlog is reacha…
jwalkingjew Sep 18, 2026
bb49b4a
refactor(debates): remove the duplication this PR introduced (GEO-2909)
jwalkingjew Sep 18, 2026
5dc3d83
fix(debates): show a claim card once it has been said, not as it star…
jwalkingjew Sep 18, 2026
41d78a1
fix(debates): move the scrubber hashes to the claim's end, and fix ho…
jwalkingjew Sep 18, 2026
3ac21ce
refactor(debates): drop the ticker's unused answered set (GEO-2909)
jwalkingjew Sep 18, 2026
696dc46
refactor(debates): split the end-of-debate card out of this PR (GEO-2…
jwalkingjew Sep 18, 2026
c8a6072
fix(debates): stop drawing scrubber hashes for claims that will never…
jwalkingjew Sep 18, 2026
6f5c2fd
chore(debates): measure the matcher's real error, so the confidence b…
jwalkingjew Sep 18, 2026
e510beb
chore(debates): dump claims against the transcript they matched, for …
jwalkingjew Sep 18, 2026
14c6257
chore(debates): report how much of a claim landed, not just its score…
jwalkingjew Sep 18, 2026
52823a6
feat(debates): place claims by reading the transcript, with the match…
jwalkingjew Sep 18, 2026
b2ae91c
chore(debates): read back the 153 already-published claim offsets too
jwalkingjew Sep 18, 2026
a6d789c
test(debates): stand the claim ticker down in the audio-gate tests
jwalkingjew Sep 18, 2026
5fcd98b
fix(debates): steady the claim corner — chip, width, glass and scroll…
jwalkingjew Sep 18, 2026
1792682
fix(debates): stop the second claim pushing the first off the tile (G…
jwalkingjew Sep 18, 2026
0eae9f2
fix(debates): draw the claims chip only where there is no hover (GEO-…
jwalkingjew Sep 18, 2026
f51ddbb
feat(debates): mirror the bottom band — names left, claims right (GEO…
jwalkingjew Sep 18, 2026
1d75af2
fix(debates): give the open list its gradient back (GEO-2909)
jwalkingjew Sep 18, 2026
48050f4
fix(debates): build the claim card from the Figma frame, and keep its…
jwalkingjew Sep 18, 2026
9c20b4f
fix(debates): put the card's backdrop blur back, at the radius the fr…
jwalkingjew Sep 19, 2026
b40a598
fix(debates): drop the ramp on touch, and size the claim corner for a…
jwalkingjew Sep 19, 2026
679f06a
feat(debates): widen the claim card to 260px, and keep three lines (G…
jwalkingjew Sep 19, 2026
1fd37c2
feat(debates): two lines in a wider card, and let the name give way t…
jwalkingjew Sep 19, 2026
108b576
fix(debates): let the claims chip give way to a live card (GEO-2909)
jwalkingjew Sep 19, 2026
fafda6f
feat(debates): half-width on desktop, full-width on a phone, skinny w…
jwalkingjew Sep 19, 2026
d8ce047
revert(debates): put the desktop claim card back to 360px (GEO-2909)
jwalkingjew Sep 19, 2026
e1b4fef
fix(debates): give the subtitle the phone's full width (GEO-2909)
jwalkingjew Sep 19, 2026
824bd2f
feat(debates): full-width live card above a name that stays put (GEO-…
jwalkingjew Sep 19, 2026
32379df
fix(debates): put the claim corner back on the name's line, over the …
jwalkingjew Sep 19, 2026
45f07be
fix(debates): line the live claim card up with the avatar below it (G…
jwalkingjew Sep 19, 2026
c0081ed
fix(debates): size the backlog against its cards, and let the subtitl…
jwalkingjew Sep 19, 2026
dc9d348
feat(debates): hold a live claim under the pointer, and link the name…
jwalkingjew Sep 19, 2026
ce98ba1
feat(debates): split the tile at the card's top edge for hover (GEO-2…
jwalkingjew Sep 19, 2026
be041e6
fix(debates): hold the backlog open once the pointer has opened it (G…
jwalkingjew Sep 19, 2026
a8fe390
refactor(debates): review pass over the claim-timecode work (GEO-2909)
jwalkingjew Sep 19, 2026
e33d392
chore(debates): drop the claim-timecode planning docs from the PR (GE…
jwalkingjew Sep 19, 2026
24ca16e
fix(debates): address the Copilot review (GEO-2909)
jwalkingjew Sep 19, 2026
1267528
fix(debates): second Copilot pass — polarity words and invisible hit …
jwalkingjew Sep 19, 2026
0692db7
fix(debates): third Copilot pass — five late findings (GEO-2909)
jwalkingjew Sep 19, 2026
a6c018d
fix(debates): fourth Copilot pass — seek clamp, transcript errors, st…
jwalkingjew Sep 19, 2026
c9a5d4f
fix(debates): fifth Copilot pass — end-of-playback clamp, one rendera…
jwalkingjew Sep 20, 2026
ed7264b
fix(debates): expand a clamped claim in place instead of opening the …
jwalkingjew Sep 20, 2026
7002199
fix(debates): sixth Copilot pass — unreachable markers, and stricter …
jwalkingjew Sep 20, 2026
3b30cc7
Merge master into GEO-2909
jwalkingjew Sep 20, 2026
ed16ef0
fix(debates): seventh Copilot pass — contracted negators, and blank n…
jwalkingjew Sep 20, 2026
a538dce
fix(debates): eighth Copilot pass — "cannot", contracted stopwords, a…
jwalkingjew Sep 20, 2026
c36a6b5
fix(debates): ninth Copilot pass — duplicate claims, ungated markers,…
jwalkingjew Sep 20, 2026
42516a8
fix(debates): collapse scrubber hashes that share a moment (GEO-2909)
jwalkingjew Sep 20, 2026
139580e
Merge master into GEO-2909
jwalkingjew Sep 20, 2026
6d6a6c5
fix(debates): tenth Copilot pass — stale answers and the grouped hash…
jwalkingjew Sep 21, 2026
7e0ff04
fix(debates): address review — backlog latch, duplicate turns, dead p…
jwalkingjew Sep 21, 2026
0954517
Merge remote-tracking branch 'origin/master' into preston/geo-2909-ti…
jwalkingjew Sep 21, 2026
c67d4d2
Merge branch 'master' into preston/geo-2909-time-align-debate-claims-…
jwalkingjew Sep 21, 2026
bb0943f
Merge remote-tracking branch 'origin/master' into preston/geo-2909-ti…
jwalkingjew Sep 21, 2026
44e0337
Merge remote-tracking branch 'origin/master' into preston/geo-2909-ti…
jwalkingjew Sep 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ vi.mock('~/core/debates/hooks', () => ({
useDebateMedia: () => ({ data: undefined, isLoading: false, isError: false }),
useDebateTranscript: () => ({ data: { segments: [] }, isLoading: false, error: null }),
useDebateClaims: () => ({ data: { claims: [] } }),
// Reached through the player's claim ticker, which asks per space for the rows behind each
// claim. This suite's debates carry no claims, so it answers with none.
useDebateClaimsBySpaces: () => ({ claims: [], isLoading: false, isError: false }),
// The feed resolves an anchor by id when the space listing does not contain it (GEO-2764).
// These tests never anchor, so it stays idle.
useDebate: () => ({ data: null, isLoading: false, error: null }),
Expand Down Expand Up @@ -99,13 +102,18 @@ vi.mock('~/core/hooks/use-comments', () => ({
// The feed's Claims badge reads the debate's transcript claims through react-query, and this
// suite renders the feed without a QueryClientProvider. Stub it the way the other debate suites do;
// the grouping and ordering have their own unit tests.
vi.mock('~/core/debates/use-debate-transcript-claims', () => ({
useDebateTranscriptClaims: () => ({
claims: { all: [], byAuthorSpaceId: new Map(), unattributed: [], totalCount: 0 },
isLoading: false,
error: null,
}),
}));
vi.mock('~/core/debates/use-debate-transcript-claims', async () => {
// The real empty value rather than a hand-rolled copy of it. A literal here has to be updated
// every time the shape grows a field, and when it isn't, it fails as a runtime TypeError in a
// suite that has nothing to do with claims.
const { EMPTY_TRANSCRIPT_CLAIMS } = await vi.importActual<typeof import('~/core/debates/transcript-claims')>(
'~/core/debates/transcript-claims'
);

return {
useDebateTranscriptClaims: () => ({ claims: EMPTY_TRANSCRIPT_CLAIMS, isLoading: false, error: null }),
};
});

vi.mock('~/core/hooks/use-entity-side-panel', () => ({
useEntitySidePanel: () => ({ openSidePanel: mocks.openSidePanel, closeSidePanel: vi.fn(), sidePanelTarget: null }),
Expand Down Expand Up @@ -139,7 +147,11 @@ describe('DebatesPageClient browse feed', () => {
expect(screen.getByRole('heading', { name: 'Debates are useful' })).toBeInTheDocument();
expect(screen.getAllByText('Fashion').length).toBeGreaterThan(0);
expect(screen.getAllByRole('button', { name: 'Join a debate' }).length).toBeGreaterThan(0);
expect(screen.getAllByText('Winner?').length).toBeGreaterThan(0);
// Both debaters name themselves on their own tile. The "Winner?" pill used to sit here too;
// it moved off the tile entirely when the name row took the bottom-right corner, and winner
// voting now happens on the end-of-debate scorecard and in the claims panel.
expect(screen.getAllByText('Alex').length).toBeGreaterThan(0);
expect(screen.getAllByText('Sam').length).toBeGreaterThan(0);
expect(screen.getAllByTestId('entity-vote-buttons')).toHaveLength(2);

await waitFor(() => expect(container.querySelectorAll('video')).toHaveLength(2));
Expand Down
Loading
Loading