Coding Plan 5 小时限额打满后静默切到 Start Plan 档位;配置里套餐档位自相矛盾,且模型选择写入数据库失败(v3.14.3 桌面版)
摘要
使用 BigModel Coding Plan 跑 GLM-5.3-Flash 时,5 小时限额打满(HTTP 429,错误码 1308)后,客户端在 6 秒内把请求切到 account:bigmodel-start-plan 继续跑,全程没有提示,也没有询问是否允许换档。同一时刻设置文件里两个键对"用哪个套餐"的说法互相矛盾。
我需要官方确认的是:切到 Start Plan 之后的调用,走的是哪套计费? 本机日志只有 token 用量,没有金额字段,我无法自证是否产生了套餐外扣费。这也是我提这个 issue 的直接原因。
另外发现一个独立的写入缺陷:session.model_selection.persist_failed 报 FOREIGN KEY constraint failed,一晚上出现 22 次,用户的模型选择没能落库。
环境
- ZCode 桌面版 3.14.3(
ZCODE_APP_VERSION=3.14.3,ZCODE_BUILD_COMMIT_ID=ab4d5e6b,win32 x64)
- Windows 11,时区 Asia/Shanghai
- 账号:BigModel Coding Plan(个人版),模型 GLM-5.3-Flash
- 时间:2026-09-28 晚 ~ 09-29 00:14(北京时间)
一、静默切换档位
时间线(北京时间,日志原文时间戳已转本地时区)
09-28 22:45:35 model.request.failed HTTP 429
[1308][已达到 5 小时的使用上限。您的限额将在 2026-09-29 02:28:02 重置。]
provider = account:bigmodel-individual-coding-plan
09-28 22:46:11 继续用 new-provider-4 / deepseek-v4.1-flash
09-28 22:46:13 继续用 account:bigmodel-individual-coding-plan / GLM-5.3-Flash(又通了)
09-29 00:13:59 model.request.failed HTTP 429
[1308][已达到 5 小时的使用上限。您的限额将在 2026-09-29 03:46:12 重置。]
provider = account:bigmodel-individual-coding-plan
09-29 00:14:05 model.request.completed
provider = account:bigmodel-start-plan ← 6 秒后换了档位
model = GLM-5.3-Flash
端点 = https://zcode.z.ai/api/v1/zcode-plan/anthropic
09-29 00:14:05 / 00:14:14 又 4 次成功
关键点:00:13:59 的报错明确说限额要到 03:46 才重置,但 6 秒后就有 GLM-5.3-Flash 请求成功了 —— 因为客户端把请求发到了 Start Plan(另一个档位),而不是等待原套餐限额恢复。
为什么这值得关注
按源码里的定义,这是两个不同的套餐档位,不是同一个池子:
account:bigmodel-individual-coding-plan → BigModel 个人版 Coding Plan,端点 https://open.bigmodel.cn/api/anthropic
account:bigmodel-start-plan → Start Plan,端点 https://zcode.z.ai/api/v1/zcode-plan/anthropic
config/provider/zcode-builtin.json 里两者的 access.mode 分别是 individual-coding-plan 和 start-plan。
需要官方确认:限额打满后自动换档,是设计行为还是缺陷?换档后的调用按哪套计费?
期望行为
- 限额打满后不要自动切到另一个档位;应该停下并提示用户("5 小时限额已满,02:28 恢复,是否改用其他档位/供应商?")。
- 如果确实要自动切换,必须在界面上明确告知切换到了哪个档位、按什么计费。
- 提供按档位/渠道的用量明细,让用户能自查有没有套餐外消耗。
二、设置文件里套餐档位自相矛盾
同一份 setting.json 里两个键对 bigmodel 家族指向不同档位:
"providerFamilyConnectionSelections": {
"zai": { "kind": "individual-coding-plan" },
"bigmodel": { "kind": "individual-coding-plan" }
},
"modelProviderFamilySelectedKeys": {
"zai": "coding-plan:builtin:zai-coding-plan",
"bigmodel": "coding-plan:builtin:bigmodel-start-plan"
}
connectionSelections.bigmodel 说 individual-coding-plan,selectedKeys.bigmodel 却说 start-plan。两个键描述的是同一件事,取值不一致。
对照 zai 家族:connectionSelections.zai = individual-coding-plan 与 selectedKeys.zai = coding-plan:builtin:zai-coding-plan 是一致的。只有 bigmodel 家族对不上。
coding-plan-cache.json 里几个档位的状态也都是不可用:
"builtin:zai-start-plan": { "status": "available" },
"builtin:zai-coding-plan": { "status": "unavailable", "reason": "coding_plan_not_entitled" },
"builtin:bigmodel-coding-plan": { "status": "unavailable", "reason": "coding_plan_not_connected" },
"builtin:bigmodel-start-plan": { "status": "unavailable", "reason": "coding_plan_not_authenticated" }
需要官方确认:当这两个键不一致时,客户端以哪个为准?这会不会就是上面"限额满了自动切档"的根因?
三、模型选择写入数据库失败(22 次)
一晚上出现 22 条 session.model_selection.persist_failed,全部是同一个错误:
{"event":"session.model_selection.persist_failed","level":"warn",
"context":{"error":"FOREIGN KEY constraint failed","modelId":"glm-5.3","providerId":"new-provider-4"}}
时间分布(北京时间):00:25(8 次)、12:06(2 次)、20:49(2 次)、21:08(2 次)、21:18(4 次)、21:32(4 次)、22:12(2 次)、22:29(2 次)、22:52(2 次)、22:53(2 次)、23:18(2 次)、23:20(2 次)、23:35(2 次)。
涉及 new-provider-4、new-provider-2、new-provider、aad839c6-...、opencode-zen-chat 以及官方 account:bigmodel-individual-coding-plan。
同一次切换里,session.model.updated 成功了,但落库失败:
{"event":"session.model.updated","context":{"model":"new-provider-4/glm-5.3",
"previousModel":"account:bigmodel-individual-coding-plan/GLM-5.3"}}
{"event":"session.model_selection.persist_failed","context":{"error":"FOREIGN KEY constraint failed",
"modelId":"glm-5.3","providerId":"new-provider-4"}}
影响:用户选的模型没能存进数据库。重启后会话可能回到旧模型,而用户以为已经改过了 —— 这个体感很像"我明明切了模型,怎么还在用另一个"。怀疑与 session-store 的 provider 外键约束有关(provider 记录先于 selection 写入,或自定义 provider 未在引用表登记)。
复现步骤
- 用 BigModel Coding Plan(个人版)跑 GLM-5.3-Flash,把 5 小时限额打满。
- 观察限额报错(HTTP 429 / 1308)之后是否有请求继续成功。
- 检查
setting.json 里 providerFamilyConnectionSelections.bigmodel 与 modelProviderFamilySelectedKeys.bigmodel 是否指向同一档位。
- 反复切换模型,检查日志里是否出现
session.model_selection.persist_failed。
实际结果:限额满后 6 秒切到 Start Plan 并成功;两个配置键不一致;模型选择落库报外键错误。
期望结果:限额满后停下并提示;两个配置键语义一致;模型选择能正常持久化,失败时在界面报错而不是只写 warn 日志。
证据
以上全部来自本机宿主日志 ~/.zcode/cli/log/zcode-2026-09-28.jsonl、zcode-2026-09-29.jsonl,以及 ~/.zcode/v2/setting.json、~/.zcode/v2/coding-plan-cache.json。已脱敏:会话正文、API key、供应商真实名称均未包含(自定义 provider 保留原始标识符以便定位)。
如果需要,我可以补上完整的原始日志片段或导出相关时间窗。
补充说明
我无法从本机日志确认是否真的产生了扣费 —— 日志里只有 usageInputTokens / usageOutputTokens 这类 token 计数,没有金额或计费渠道字段。所以我把问题收敛成可验证的三条,计费部分请官方结合账号后台核实。如果第一条"限额满后切档"按设计就是不计费的降级兜底,请说明;如果是计费行为,希望补上明确提示。
Coding Plan 5 小时限额打满后静默切到 Start Plan 档位;配置里套餐档位自相矛盾,且模型选择写入数据库失败(v3.14.3 桌面版)
摘要
使用 BigModel Coding Plan 跑 GLM-5.3-Flash 时,5 小时限额打满(HTTP 429,错误码 1308)后,客户端在 6 秒内把请求切到
account:bigmodel-start-plan继续跑,全程没有提示,也没有询问是否允许换档。同一时刻设置文件里两个键对"用哪个套餐"的说法互相矛盾。我需要官方确认的是:切到 Start Plan 之后的调用,走的是哪套计费? 本机日志只有 token 用量,没有金额字段,我无法自证是否产生了套餐外扣费。这也是我提这个 issue 的直接原因。
另外发现一个独立的写入缺陷:
session.model_selection.persist_failed报FOREIGN KEY constraint failed,一晚上出现 22 次,用户的模型选择没能落库。环境
ZCODE_APP_VERSION=3.14.3,ZCODE_BUILD_COMMIT_ID=ab4d5e6b,win32 x64)一、静默切换档位
时间线(北京时间,日志原文时间戳已转本地时区)
关键点:00:13:59 的报错明确说限额要到 03:46 才重置,但 6 秒后就有 GLM-5.3-Flash 请求成功了 —— 因为客户端把请求发到了 Start Plan(另一个档位),而不是等待原套餐限额恢复。
为什么这值得关注
按源码里的定义,这是两个不同的套餐档位,不是同一个池子:
account:bigmodel-individual-coding-plan→ BigModel 个人版 Coding Plan,端点https://open.bigmodel.cn/api/anthropicaccount:bigmodel-start-plan→ Start Plan,端点https://zcode.z.ai/api/v1/zcode-plan/anthropicconfig/provider/zcode-builtin.json里两者的access.mode分别是individual-coding-plan和start-plan。需要官方确认:限额打满后自动换档,是设计行为还是缺陷?换档后的调用按哪套计费?
期望行为
二、设置文件里套餐档位自相矛盾
同一份
setting.json里两个键对 bigmodel 家族指向不同档位:connectionSelections.bigmodel说 individual-coding-plan,selectedKeys.bigmodel却说 start-plan。两个键描述的是同一件事,取值不一致。对照 zai 家族:
connectionSelections.zai = individual-coding-plan与selectedKeys.zai = coding-plan:builtin:zai-coding-plan是一致的。只有 bigmodel 家族对不上。coding-plan-cache.json里几个档位的状态也都是不可用:需要官方确认:当这两个键不一致时,客户端以哪个为准?这会不会就是上面"限额满了自动切档"的根因?
三、模型选择写入数据库失败(22 次)
一晚上出现 22 条
session.model_selection.persist_failed,全部是同一个错误:{"event":"session.model_selection.persist_failed","level":"warn", "context":{"error":"FOREIGN KEY constraint failed","modelId":"glm-5.3","providerId":"new-provider-4"}}时间分布(北京时间):00:25(8 次)、12:06(2 次)、20:49(2 次)、21:08(2 次)、21:18(4 次)、21:32(4 次)、22:12(2 次)、22:29(2 次)、22:52(2 次)、22:53(2 次)、23:18(2 次)、23:20(2 次)、23:35(2 次)。
涉及
new-provider-4、new-provider-2、new-provider、aad839c6-...、opencode-zen-chat以及官方account:bigmodel-individual-coding-plan。同一次切换里,
session.model.updated成功了,但落库失败:{"event":"session.model.updated","context":{"model":"new-provider-4/glm-5.3", "previousModel":"account:bigmodel-individual-coding-plan/GLM-5.3"}} {"event":"session.model_selection.persist_failed","context":{"error":"FOREIGN KEY constraint failed", "modelId":"glm-5.3","providerId":"new-provider-4"}}影响:用户选的模型没能存进数据库。重启后会话可能回到旧模型,而用户以为已经改过了 —— 这个体感很像"我明明切了模型,怎么还在用另一个"。怀疑与
session-store的 provider 外键约束有关(provider 记录先于 selection 写入,或自定义 provider 未在引用表登记)。复现步骤
setting.json里providerFamilyConnectionSelections.bigmodel与modelProviderFamilySelectedKeys.bigmodel是否指向同一档位。session.model_selection.persist_failed。实际结果:限额满后 6 秒切到 Start Plan 并成功;两个配置键不一致;模型选择落库报外键错误。
期望结果:限额满后停下并提示;两个配置键语义一致;模型选择能正常持久化,失败时在界面报错而不是只写 warn 日志。
证据
以上全部来自本机宿主日志
~/.zcode/cli/log/zcode-2026-09-28.jsonl、zcode-2026-09-29.jsonl,以及~/.zcode/v2/setting.json、~/.zcode/v2/coding-plan-cache.json。已脱敏:会话正文、API key、供应商真实名称均未包含(自定义 provider 保留原始标识符以便定位)。如果需要,我可以补上完整的原始日志片段或导出相关时间窗。
补充说明
我无法从本机日志确认是否真的产生了扣费 —— 日志里只有
usageInputTokens/usageOutputTokens这类 token 计数,没有金额或计费渠道字段。所以我把问题收敛成可验证的三条,计费部分请官方结合账号后台核实。如果第一条"限额满后切档"按设计就是不计费的降级兜底,请说明;如果是计费行为,希望补上明确提示。