From 31f5df09003951d8e585a90cbc02c6b0cc8ea42d Mon Sep 17 00:00:00 2001 From: airano Date: Tue, 17 Feb 2026 04:16:26 +0330 Subject: [PATCH] fix(db): add stable tiebreaker to search pagination Without a deterministic tiebreaker on skill ID, offset-based pagination through large groups of skills with identical star counts produced non-deterministic ordering. This caused ~1,516 skills to be missed during Meilisearch sync (192,311 sent but only 190,795 unique indexed). Co-Authored-By: Claude Opus 4.6 --- packages/db/src/queries.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/db/src/queries.ts b/packages/db/src/queries.ts index b60da1f..3ac267e 100644 --- a/packages/db/src/queries.ts +++ b/packages/db/src/queries.ts @@ -164,7 +164,7 @@ export const skillQueries = { ? and(eq(skillCategories.categoryId, category), ...conditions) : eq(skillCategories.categoryId, category) ) - .orderBy(primaryOrder, desc(secondaryColumn)) + .orderBy(primaryOrder, desc(secondaryColumn), asc(skills.id)) .limit(limit) .offset(offset); @@ -175,7 +175,7 @@ export const skillQueries = { .select() .from(skills) .where(conditions.length > 0 ? and(...conditions) : undefined) - .orderBy(primaryOrder, desc(secondaryColumn)) + .orderBy(primaryOrder, desc(secondaryColumn), asc(skills.id)) .limit(limit) .offset(offset);