Skip to content

fix(cursor): quarantine catalog models whose runs always fail upstream - #2653

Merged
lidge-jun merged 1 commit into
codex/cursor-gap-3from
codex/cursor-gap-4
Aug 26, 2026
Merged

fix(cursor): quarantine catalog models whose runs always fail upstream#2653
lidge-jun merged 1 commit into
codex/cursor-gap-3from
codex/cursor-gap-4

Conversation

@lidge-jun

Copy link
Copy Markdown
Owner

Summary

  • /v1/models served cursor/claude-opus-5 while every live Run against it failed upstream with Cursor Connect error not_found (probe C2a in devlog/_plan/260826_cursor_responses_gap, 100% failure incl. plain retry) — a picker offering a model that cannot answer.
  • Removes the bare claude-opus-5 row from CURSOR_STATIC_MODELS and adds a narrow CURSOR_KNOWN_UNCALLABLE_MODEL_IDS quarantine applied inside filterCursorConfiguredModelsByLiveDiscovery, so live, cached, stale, and static serving paths all agree. -fast/-thinking siblings (separate wire families with success evidence) are preserved; custom user provider overrides are not routed through this canonical seed and stay untouched.

Stacked on #2652. Design: 060_catalog_honesty.md.

Verification

  • bun test tests/cursor-uncallable-quarantine.test.ts — 5 pass (seed removal, sibling survival, live-list drop, empty-live degradation path, set narrowness).
  • bun test tests/cursor-discovery.test.ts tests/cursor-static-catalog.test.ts tests/cursor-hardening.test.ts tests/cursor-effort-suffix.test.ts — 92 pass 0 fail total.
  • bun x tsc --noEmit — clean.

Checklist

  • Focused tests green
  • Typecheck clean
  • All degradation paths share the gate
  • Devlog updated (060)

@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner August 26, 2026 03:38
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review (2)
  • ^dev$
  • ^preview$

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a21eed59-384b-4e98-9086-76bd4f625f38

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the bug Something isn't working label Aug 26, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 778766c038

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

): T[] {
return configured.filter(model =>
isCursorRouterModelId(model.id) || isCursorModelAvailableForAccount(model.id, liveIds),
!CURSOR_KNOWN_UNCALLABLE_MODEL_IDS.has(model.id)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Scope the quarantine to canonical Cursor catalogs

For a custom provider using adapter: "cursor", this helper is still called by src/codex/catalog/provider-fetch.ts; if live discovery confirms claude-opus-5 plus any other configured model, the other model keeps available nonempty and this check silently removes the explicitly configured Opus model, even when the custom endpoint can call it. Apply the quarantine only when the models originate from the canonical Cursor registry/transport, rather than to every provider using this adapter.

AGENTS.md reference: src/AGENTS.md:L10-L10

Useful? React with 👍 / 👎.

@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 57 / 80

설명

이 풀 리퀘스트는 /v1/modelscursor/claude-opus-5를 보여 주지만, 그 모델로 Run을 하면 Cursor가 항상 not_found를 돌려주는 문제를 고칩니다. 지금 devsrc/adapters/cursor/discovery.ts 248줄은 정적 씨드에 claude-opus-5를 넣습니다. 249줄의 -fast 형제는 그대로 둡니다. filterCursorConfiguredModelsByLiveDiscovery(212-218줄)는 라우터 모델이거나 라이브 목록에 있으면 통과시킵니다. GetUsableModels가 맨 id를 광고하면, 호출이 항상 실패해도 선택기에 남습니다.

고침은 두 겹입니다. 정적 씨드에서 맨 claude-opus-5를 빼고, CURSOR_KNOWN_UNCALLABLE_MODEL_IDS에 그 id를 넣은 뒤 공유 필터에서 잘라 냅니다. 라이브, 캐시, 오래된 목록, 정적 경로가 같은 결정을 하게 하려는 것입니다. -fast-thinking 형제는 다른 와이어 가족이고 성공 증거가 있어 남깁니다. 사용자가 직접 적은 제공자 덮어쓰기는 이 씨드를 거치지 않습니다.

격리 집합이 한 id뿐인 것은 지금 증거에 맞습니다. 집합을 크게 만들면 아직 되는 모델을 숨길 수 있습니다. 다만 필터는 model.id가 정확히 claude-opus-5일 때만 자릅니다. 카탈로그 행이 cursor/claude-opus-5이거나 노력 접미사가 붙은 값이면 이 집합을 비껴 갑니다. 정적 씨드는 맨 id를 쓰므로 기본 경로는 막히지만, 접두사가 붙은 설정 행은 남을 수 있습니다.

이 PR도 지금 dev 위가 아닙니다. 베이스는 codex/cursor-gap-3, 곧 #2652입니다. 파일 충돌 가능성은 낮지만, 스택 규칙상 #2650-#2652가 먼저입니다. 변경 자체는 작고 테스트 다섯 개가 씨드 제거, 형제 유지, 라이브 목록 삭제, 빈 라이브 경로, 집합 크기를 고정합니다.

src/adapters/cursor/discovery.ts:248 - 정적 씨드가 맨 claude-opus-5를 아직 제공해 선택기에 호출 불가 모델이 뜹니다.
src/adapters/cursor/discovery.ts:212 - 지금 필터는 라이브 광고만 보고, 항상 실패하는 id를 자르지 않습니다.
경로/심볼 - 격리 검사가 정확 문자열 claude-opus-5만 보아 cursor/claude-opus-5 같은 접두사 행은 남을 수 있습니다.
경로/심볼 - 베이스가 #2652라 현재 dev(12f5876)에는 혼자 합칠 수 없습니다.

메인테이너의 판단이 필요한 지점

  • 격리를 맨 id 하나에만 둘지, 접두사와 노력 접미사를 같은 가족으로 볼지 정해야 합니다.
  • GetUsableModels가 나중에 맨 claude-opus-5를 고치면 집합에서 빼는 담당을 정해야 합니다.
  • 사용자가 직접 적은 덮어쓰기를 정말 그대로 둘지, 같은 격리로 막을지 정해야 합니다.

너의 추천

#2650-#2652가 먼저 들어간 뒤 이 PR을 마지막에 합치세요. 지금 dev에 직접 합치지 마세요. 합치기 전에는 필터가 비교하는 id 형식이 카탈로그가 실제로 쓰는 형식과 같은지 확인하세요. 집합은 좁게 유지하고, 미리보기 배포는 하지 마세요.

이 댓글은 grok-bot이 작성했습니다

@lidge-jun
lidge-jun merged commit 58313f0 into codex/cursor-gap-3 Aug 26, 2026
25 of 28 checks passed
@lidge-jun
lidge-jun deleted the codex/cursor-gap-4 branch August 26, 2026 06:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant