Skip to content

fix(desktop): 修复 Claude 官方订阅下 Fable 模型周限不显示 (#3244) - #3260

Merged
MagicLizi merged 2 commits into
makecindy:mainfrom
yuaiccc:fix/3244-fable-weekly-limit
Aug 25, 2026
Merged

fix(desktop): 修复 Claude 官方订阅下 Fable 模型周限不显示 (#3244)#3260
MagicLizi merged 2 commits into
makecindy:mainfrom
yuaiccc:fix/3244-fable-weekly-limit

Conversation

@yuaiccc

@yuaiccc yuaiccc commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

修复 Claude 官方订阅下会话信息栏 Fable 模型周限不显示的问题(#3244,必现;同环境 Opus/Sonnet 正常)。

根因有两处:

  1. matchScopedWindowForModelmodelDisplayName.toLowerCase() === family 精确匹配,但端点对 display_name 的口径存在 Fable / Claude Fable / Fable 5 等变体,精确等于会漏掉变体(Opus/Sonnet 碰巧都是短名才没暴露)。
  2. 旧 schema 兜底(parseClaudeOAuthUsageResponseseven_day_* 顶层键)只列了 Opus/Sonnet,漏了 Fable,走旧端点或降级快照时 Fable 周限直接丢失。

修复:匹配改为 includes(family)(家族名互斥,不会跨家族误命中);旧 schema 兜底补 seven_day_fable;文件头注释同步。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:使用 Claude 官方订阅时,会话信息栏中 Fable 模型的周限不显示 #3244
  • 本 PR 包含:apps/desktop/src/shared/claudeSubscriptionUsage.ts 匹配与 legacy 兜底修复;apps/desktop/src/main/usage/__tests__/claudeSubscriptionUsage.test.ts 两个回归用例
  • 明确不包含:UI 组件/样式改动;其他模型家族(Mythos/Haiku 端点目前不下发分模型周窗口)
  • 用户可见变化:Claude 官方订阅、当前会话模型为 Fable 时,会话信息栏第二栏重新显示 Fable 周限
  • 是否存在 breaking change:无

UI 变化

不涉及:本次仅修正 usage 数据解析与匹配逻辑,未改动任何 UI 组件、样式或文案;展示路径(TodaySpendChip 等)不变,原本拿到数据就能显示。

怎么验证的

自动验证

pnpm --filter desktop test -- claudeSubscriptionUsage
结果:claudeSubscriptionUsage.test.ts 全部通过(含新增 2 个回归用例:
display_name 变体 "Claude Fable" / "Fable 5" 匹配;legacy seven_day_fable 解析为 Fable scoped 窗口)

pnpm --filter desktop run typecheck
结果:通过

CI:client-ci(Linux/Windows unit tests、verify、Desktop Git integration)、DCO、pr-design-basis、Greptile Review 均为 SUCCESS。

手工验证

不涉及:缺陷为纯数据解析/匹配逻辑,已由针对性回归测试覆盖 display_name 变体与 legacy schema 两条触发路径;无 UI 视觉或交互变化需要目检。

未执行的验证

无。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:

影响与回滚

  • 影响范围:仅 Desktop Claude 官方订阅 usage 解析。匹配放宽为 includes 后,由于 claudeModelFamily 返回的家族名(fable/opus/sonnet)互斥且不会作为子串出现在彼此的 display_name 中,不会跨家族误命中;Opus/Sonnet 现有行为不变。legacy 兜底仅在 seven_day_fable 存在时新增一个 Fable 窗口,缺字段时行为与之前一致。
  • 回滚 / 降级方式:revert 本 PR 即可,无数据迁移或持久化变更。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

@yuaiccc
yuaiccc requested a review from a team as a code owner August 22, 2026 20:56
@greptile-apps

greptile-apps Bot commented Aug 22, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 修复 Claude 官方订阅中 Fable 模型周限缺失的问题。

  • 放宽 scoped 窗口的模型家族名称匹配,并优先使用窗口自带的模型 ID 归类
  • 为旧 schema 增加 seven_day_fable 解析,并按家族合并混合响应中的 legacy 兜底窗口
  • 增加 Fable 名称变体、legacy 解析、混合响应合并及去重回归测试

Confidence Score: 5/5

当前变更看起来可以安全合并。

未发现仍然存在的阻塞性故障。

Important Files Changed

Filename Overview
apps/desktop/src/shared/claudeSubscriptionUsage.ts 扩展 Fable legacy 周窗口解析,并统一 scoped 窗口的家族匹配与按家族去重逻辑。
apps/desktop/src/main/usage/tests/claudeSubscriptionUsage.test.ts 覆盖 Fable display_name 变体、modelId 优先级、legacy 兜底及混合 schema 合并行为。

Reviews (8): Last reviewed commit: "fix(desktop): merge legacy scoped usage ..." | Re-trigger Greptile

@MagicLizi MagicLizi added the status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) label Aug 22, 2026

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

格式门未通过,请先补齐 PR 模板后再请求审查。

  • Description 缺段落:这次改了什么 / 怎么验证的 / 风险
    当前正文有问题/根因/修复/测试,但标题与模板字段对不上,机器门禁和后续审查都对不齐。

请按仓库 .github/PULL_REQUEST_TEMPLATE.md 用这三段重写 Description(可把现有根因/测试内容挪进对应段),推新 commit 或 gh pr edit 更新描述后即可再审。

@yuaiccc

yuaiccc commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

已按 .github/PULL_REQUEST_TEMPLATE.md 重写 Description,补齐「这次改了什么 / 怎么验证的 / 风险」三段(把原根因、测试内容挪进对应段),并通过 gh pr edit 更新正文。代码无变更,CI 仍全绿。麻烦复审,谢谢 @MagicLizi

@yuaiccc
yuaiccc force-pushed the fix/3244-fable-weekly-limit branch from 8128b3d to 5168049 Compare August 24, 2026 06:47
@yuaiccc

yuaiccc commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

已按上条意见用 gh pr edit 补齐模板三段;顺带把分支 rebase 到最新 main(单 commit、DCO 保留、代码内容无变化)并 force-push,最新 commit 为 516804955,CI 正在重跑。麻烦复审,谢谢 @MagicLizi

@yuaiccc

yuaiccc commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

申请复审 @MagicLizi @dashhuang:格式意见已处理(Description 按模板补齐三段),并已 rebase 到最新 main(单 commit 516804955、DCO 齐全、代码内容无变化),新 commit 上 CI 全绿、无冲突。烦请 Approve / Dismiss 原 review,谢谢。

@yuaiccc
yuaiccc marked this pull request as draft August 24, 2026 07:29
@yuaiccc
yuaiccc marked this pull request as ready for review August 24, 2026 07:29
@yuaiccc yuaiccc closed this Aug 24, 2026
@yuaiccc yuaiccc reopened this Aug 24, 2026
@yuaiccc

yuaiccc commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

CI 红叉说明:与本 PR 无关的主干既有 flaky 测试

最新一轮(head c2194dad)Windows 失败的测试:

apps/desktop/src/main/plugin-publisher/__tests__/orchestrator.test.ts:179
AssertionError: expected 'confirming' to match /^(failed|cancelled)$/

证据表明这是 main已存在的 flaky 测试,不是本 PR 引入:

  1. 同一个断言今天在 main 上也失败了(且在 Linux,非 Windows):run 32694761976(head dfef7ea0,今日 05:47),报错逐字相同 expected 'confirming' to match /^(failed|cancelled)$/

  2. 本 PR 只改了两个文件:

    • apps/desktop/src/shared/claudeSubscriptionUsage.ts
    • apps/desktop/src/main/usage/__tests__/claudeSubscriptionUsage.test.ts

    完全不触碰 plugin-publisher/orchestrator.test.tsclient.test.ts

  3. 三轮 CI 的失败在不同 shard、不同无关测试间漂移(先 client.test.ts 传输重发预算,后 orchestrator.test.ts 发布器状态机),而 rebase 后的第一轮 CI(head 516804955)全绿——典型基础设施 flaky 特征。

我无 admin 权限重跑失败 job(gh run rerun 返回 Must have admin rights)。代码改动已由针对性回归测试覆盖且第一轮全绿,烦请 maintainer 结合上述证据判读。其余事项(模板三段、DCO)均已就绪。

@yuaiccc
yuaiccc force-pushed the fix/3244-fable-weekly-limit branch from 54f8223 to 9a71993 Compare August 24, 2026 08:55

@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: 9a719931e3

ℹ️ 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".

Comment thread apps/desktop/src/shared/claudeSubscriptionUsage.ts Outdated
@MagicLizi MagicLizi removed the status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) label Aug 24, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

@yuaiccc 👋 这个 PR 还有 1 条 review conversation 没 resolve(apps/desktop/src/shared/claudeSubscriptionUsage.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

@MagicLizi MagicLizi added the status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) label Aug 24, 2026
@yuaiccc

yuaiccc commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

Description 已按 .github/PULL_REQUEST_TEMPLATE.md 就位,三个标题齐全:这次改了什么 / 怎么验证的 / 风险,正文内容与本 PR diff 一致(includes(family) 匹配放宽、补 seven_day_fable legacy 兜底、文件头注释同步、两个回归用例,不涉及 UI)。

当前 head 9a719931e 上检查全绿:DCO、client-ci(Linux/Windows unit tests、verify、Desktop Git integration)、pr-design-basis、Greptile Review 均 SUCCESS。

麻烦 @MagicLizi 复审并 dismiss 原 CHANGES_REQUESTED,谢谢。

yuaiccc added 2 commits August 24, 2026 23:57
matchScopedWindowForModel 之前用 modelDisplayName 小写后与家族名精确相等匹配,
但端点对 display_name 的口径历史上有 'Fable' / 'Claude Fable' /
'Fable 5' 等形态,精确等于会漏掉变体;Opus/Sonnet 碰巧用短名所以正常。

两处修复:
1. matchScopedWindowForModel 改为 includes 家族名(家族互斥不会误命中)
2. 旧 schema 兜底补 seven_day_fable 顶层键——原先只列了 Opus/Sonnet,
   走旧端点或降级快照时 Fable 周限直接丢失

补两条回归测试:display_name 变体匹配、legacy seven_day_fable 解析。

Signed-off-by: yuaiccc <yuaiccc@aliaun.com>
Signed-off-by: yuaiccc <yuaiccc@aliaun.com>
@yuaiccc
yuaiccc force-pushed the fix/3244-fable-weekly-limit branch from 9a71993 to e9e80f0 Compare August 24, 2026 16:05
@yuaiccc

yuaiccc commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

Codex P1 已按“按模型家族合并 legacy fallback”处理并推送到最新主干基线。

  • commit: e9e80f03e(DCO signed)
  • 新增混合响应与同家族去重回归测试
  • 相关 usage 测试 28 通过,desktop typecheck 通过
  • 已 resolve 对应 review conversation

@codex review 请基于最新 head 复核。

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: e9e80f03e6

ℹ️ 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".

@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) and removed status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) awaiting-discussion 等待维护者讨论(review-pr) labels Aug 25, 2026
@MagicLizi
MagicLizi dismissed their stale review August 25, 2026 01:02

这些问题已在当前 head 的后续 commit 中修复(格式门/安全门已通过),自动 dismiss 旧的 CHANGES_REQUESTED 以解除合并阻塞。

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed at e9e80f0. Fable weekly quota matching now covers display_name variants and legacy seven_day_fable without crossing families. No P0/P1.

@MagicLizi
MagicLizi merged commit 976181c into makecindy:main Aug 25, 2026
11 checks passed
@MagicLizi

Copy link
Copy Markdown
Contributor

合了。Fable 周限这次能对上 display_name 变体和旧 schema,订阅栏不会再只剩 Opus/Sonnet。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants