[Bug]: Favorited legacy models stay buried in the Legacy section instead of hoisting to the top (web)

Open Beginner friendly
#11,925 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
90/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
react, typescript
Domain
frontend

Research direction

Start in apps/web/src/components/chat/ModelPickerContent.tsx, focusing on filteredModels and the legacySection split. Reproduce the issue with a favorited legacy model, then verify that favorites appear with the other favorites and that unfavoriting returns the model to the Legacy models group.

Written by the indexing model from the issue text.

Description

accepted bug via-triage
Before submitting
  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.
Area

apps/web

Steps to reproduce
  1. Have a provider (e.g. Claude) with at least one model classified as legacy (e.g. Claude Opus 4.8).
  2. Favorite that legacy model (star it) in the model picker.
  3. Open the model picker on that provider's tab.
Expected behavior

Favorited models are hoisted to the top of the list. A favorited legacy model should behave the same way — it should appear at the top with the other favorites, not inside the "Legacy models" group. Unfavoriting it should return it to the Legacy group.

This is already the behavior on the native iOS client — it was fixed there in cee01c05f5 ("fix(swift-ios): show legacy models in favorites"), which promotes favorited legacy models out of the legacy group and returns them when unfavorited.

Actual behavior

The favorited legacy model stays buried inside the "Legacy models" section instead of being hoisted to the top with the other favorites. The star renders on the row, but the row is under Legacy.

Root cause is in apps/web/src/components/chat/ModelPickerContent.tsx. filteredModels is correctly sorted favorites-first (groupFavorites: true), but legacySection then splits the list purely on isLegacy, ignoring favorite status:

const currentModels = filteredModels.filter((model) => !model.isLegacy);
const legacyModels  = filteredModels.filter((model) =>  model.isLegacy);

So every legacy model — favorited or not — is pulled into the collapsed Legacy group, which defeats the favorite hoist for any legacy favorite. Legacy grouping (#5190) and favorite hoisting shipped independently and were never reconciled on web.

Note: the React Native mobile client does not expose model favorites at all, so this interaction only affects apps/web (and desktop, which wraps it). The native iOS client is already fixed.

Impact

Minor bug or occasional failure

Version or commit

main @ 8fc60a9849 (reproduced on v0.0.41-nightly.20260915.1766, identical to main for this file)

Environment

apps/web / desktop, any provider with a favorited legacy model

Dominant language
TypeScript
Stars
23.3k
Forks
6k
Avg merge
10h 57m
Merged PRs (30d)
365

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from pingdotgg/t3code

All issues in pingdotgg/t3code

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.