You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
apps/web/app/routes/api.user-interactions.ts (khoảng dòng 26-28) resolve slug do client gửi lên bằng inArray(skills.slug, slugs), tức chỉ khớp canonical slug. Sau #25, một slug cũ vẫn resolve bình thường trên mọi route khác nhờ bảng skill_aliases, nhưng ở đây thì không: client gửi slug cũ sẽ nhận về overlay rỗng (trạng thái favorite/vote biến mất) mà không có lỗi nào.
Bằng chứng
resolveSkillBySlug (apps/web/app/lib/db/skill-aliases.ts) là đường duy nhất có alias: nó tra skills.slug trước, rồi skill_aliases.slug, rồi lấy row theo skill_id.
Các route khác (detail, rate, review, favorite, install, vote, usage report) đều đã đi qua resolveSkillBySlug; chỉ api.user-interactions.ts còn tra thẳng theo skills.slug.
Cho mỗi slug đầu vào đi qua resolveSkillBySlug (hoặc một truy vấn join skill_aliases), rồi tập hợp canonical id để tra interactions. Thêm test: slug cũ trỏ tới skill có favorite/vote vẫn trả đúng overlay.
Mức độ
Thấp về tác động, nhưng là lỗ hổng nhất quán của hợp đồng alias mà #25 đã thiết lập: "mọi slug cũ vẫn resolve" hiện chưa đúng ở route này.
Vấn đề
apps/web/app/routes/api.user-interactions.ts(khoảng dòng 26-28) resolve slug do client gửi lên bằnginArray(skills.slug, slugs), tức chỉ khớp canonical slug. Sau #25, một slug cũ vẫn resolve bình thường trên mọi route khác nhờ bảngskill_aliases, nhưng ở đây thì không: client gửi slug cũ sẽ nhận về overlay rỗng (trạng thái favorite/vote biến mất) mà không có lỗi nào.Bằng chứng
resolveSkillBySlug(apps/web/app/lib/db/skill-aliases.ts) là đường duy nhất có alias: nó traskills.slugtrước, rồiskill_aliases.slug, rồi lấy row theoskill_id.resolveSkillBySlug; chỉapi.user-interactions.tscòn tra thẳng theoskills.slug.plans/reports/live-verify-260922-0843-issue-25-24.md.Đề xuất
Cho mỗi slug đầu vào đi qua
resolveSkillBySlug(hoặc một truy vấn joinskill_aliases), rồi tập hợp canonical id để tra interactions. Thêm test: slug cũ trỏ tới skill có favorite/vote vẫn trả đúng overlay.Mức độ
Thấp về tác động, nhưng là lỗ hổng nhất quán của hợp đồng alias mà #25 đã thiết lập: "mọi slug cũ vẫn resolve" hiện chưa đúng ở route này.