AMR 生产发布影响报告

生成时间:2026-09-24T02:27Z;生产观测采样:2026-09-24T02:21:12Z–2026-09-24T02:21:25Z(基准刷新时刻 2026-09-24T02:21:11Z);分析对象:从 origin/main(HEAD 9555efd13,fix(cms): keep Test gift entry across desktop and web connections (#101))发布 Web、API、Link、Admin、DB migration 与 Model Routing Catalog 的影响。
基线口径:Web / API / Link / Admin 四个服务以 EKS 实际运行的 Ready Pod 镜像 tag 中的 commit 为生产发布点(不使用 deploy-*-eks-prod.yml 的最近成功记录); DB migration 与 Model Routing Catalog 以对应 Forgejo workflow 最近一次成功运行的 commit_sha 为生产发布点。六个维度分别计算变更范围。

当前生产发布点(EKS 实态 + Forgejo workflow 记录)

越新的发布点表示该维度已上线越多内容。feature 表只列发布点之后的变更;发布点之前的内容归入 「已在生产生效」。六个维度基线各不相同,compare range 逐个基线单独给出。

WEB · EKS Pod 实态
Workload:nexu/amr-web · container web
Ready Pods:2 / 2(spec 2 / updated 2 / available 2,无滚动发布或回滚混合态)
实际 commit:4676d97e1
镜像 digest:sha256:379d86f96df5444ca256058b6cb702b67a6376e3fc97b485fc8f603337802079
Workflow 审计:deploy-web-eks-prod.yml 最近成功 #947 / 2026-09-22T02:31:44Z4676d97e1一致
本次新增(4676d97e1...9555efd13):12 commits
发布点之前已上线:Public Pricing 年度文案对齐、年度节省去重、意大利语/土耳其语本地化及其部署修复。
API · EKS Pod 实态
Workload:nexu/amr-api · container api
Ready Pods:2 / 2(spec 2 / updated 2 / available 2,无滚动发布或回滚混合态)
实际 commit:feb5eb7fa
镜像 digest:sha256:ce9939f10b5da205dfc354e7d41fb63462eb46d097238edf40c590f10fca7740
Workflow 审计:deploy-api-eks-prod.yml 最近成功 #385 / 2026-09-21T02:22:13Zfeb5eb7fa一致
本次新增(feb5eb7fa...9555efd13):21 commits
API 是服务维度中最旧的发布点(镜像 tag 落在 2026-09-21 的 CI 提交上);范围内 API 变更全部待发布,无「已生效」增量。
LINK · EKS Pod 实态
Workload:nexu/amr-link · container link
Ready Pods:2 / 2(spec 2 / updated 2 / available 2,无滚动发布或回滚混合态)
实际 commit:4676d97e1
镜像 digest:sha256:d6d339a87fb3299004f80e96ab827e2b5af643a31dfa2210bdb3e5134a64af80
Workflow 审计:deploy-link-eks-prod.yml 最近成功 #948 / 2026-09-22T02:32:33Z4676d97e1一致
本次新增(4676d97e1...9555efd13):11 commits
发布点之前已上线:Xiaomi MiMo 2.6 供应商接入随 catalog 生效;Claude Opus 5.5 的 catalog 路由定义已生效(仅文档与 vendor 测试随 Link 镜像更新)。
ADMIN · EKS Pod 实态
Workload:nexu/amr-admin · container admin
Ready Pods:2 / 2(spec 2 / updated 2 / available 2,无滚动发布或回滚混合态)
实际 commit:0a1243060
镜像 digest:sha256:0139558eec90ff7b2aee7109d5d3cee83a6b317ea0e8ae0ffb8a9a714492dae8
Workflow 审计:deploy-admin-eks-prod.yml 最近成功 #1324 / 2026-09-22T06:26:33Z0a1243060一致
本次新增(0a1243060...9555efd13):5 commits
Admin 是服务维度中最新的发布点:表单抽屉化、页面标题对齐、复杂表格筛选统一、UI 模式回退、会员额度按美元展示均已上线。
DB migration · deploy-db-migrations-prod.yml 记录
最近成功:run #352 · 2026-09-20T08:13:07Z
发布点 commit:ff912897d
本次新增(ff912897d...9555efd13):2 个 migration 文件
发布点之前已上线:截至 20260914115313_account_erasure.sql 的 migration 集合。
DB 是六个维度中最旧的发布点(落后 4 天),两条 Go / Coding Plan migration 全部待执行。
Model Routing Catalog · deploy-model-routing-catalog-prod.yml 记录
最近成功:run #2324 · 2026-09-23T06:15:35Z
发布点 commit:816d1de3e
本次新增(816d1de3e...9555efd13):3 commits(均为 data/json + db/seeds 变更)
发布点之前已上线:Hy4 Aiping / Kimi K3、Grok 4.7、MiMo V2.6 Pro / Flash、Claude Opus 5.5、GPT-6 Sol / Luna、DeepSeek V4.1 Flash 路由、Xiaomi 供应商、AIHubMix 下线与 18 个归档模型退役。
同一 workflow 的窗口内成功记录共 9 次,最近一次为 run #2324;上一次为 run #976(5149e3f66,2026-09-22T03:18:47Z)。

审计对照说明:四个服务的 Forgejo 生产发布 workflow 最近成功记录与 EKS Pod 实态逐项一致(四个服务的 commit 与 digest 均匹配),未发现 GitOps 手工回滚造成的偏差。 GitOps values(powerformer/apps)不在本环境可访问范围内(该仓库位于 GitHub,本流程不读取 GitHub Actions / GitHub 记录),因此未作为对照来源;如需该层证据请在本流程之外补充。

此次发布真正新增的 feature 和影响面

feature 表只包含「各维度生产发布点之后」的变更。Feature 聚合以业务行为、用户路径、数据契约和部署依赖为准;PR、commit 与 path 仅作为可点击的追溯证据。 本次共有 11 个 feature,其中 1 个 XXL、1 个 XL、4 个 L、3 个 M、3 个 S。

Feature / Author / Commits Web API Link Admin DB schema / migration DB catalog(seed)
XXLCoding Plan 计费与额度体系:Go 套餐恢复、按套餐配置限额窗口、订阅锚点与零扣费额度刷新

是什么:四个连续 PR 构成的一条完整计费链路改造。 (1) #54 恢复 Go 付费套餐:价格目录、订阅、Admin 模型包含规则、四档额度配置回归,并新增按工作空间 / 成员 / 模型限定的 billing preflight(API POST /v1/billing/preflight + vela billing preflight CLI),让客户端不再把“钱包余额为 0”误判为不可调用;Coding Plan 请求改为优先消耗套餐额度、耗尽后回退钱包(2) #67 把订阅额度窗口从“首次请求才开始计时”改为以订阅创建时间锚定(升级重算锚点,续费与团队席位变化保留锚点),并开放 Admin 侧 5h / 7d / 30d 重置模式选择。 (3) #82 让限额窗口只作用于选定套餐:个人 5h 可只配置给 Go,Plus / Pro / Max 只返回并展示 7d;已不适用套餐的历史窗口不再限制或展示;Admin 逐套餐勾选适用范围,无 migration、不自动改线上策略。 (4) #99 零扣费用量后主动刷新 Coding Plan 额度:API 新增 workspace 事件(workspace-events)+ Web 订阅事件流(coding-plan-events),额度卡在套餐内用量被计入后立即更新,不再等到下一次轮询。

面向谁 / 用户路径变化:所有 Coding Plan 订阅用户(Go / Plus / Pro / Max,Personal 与 Team)与 Open Design / Codex 类客户端;Go 套餐重新可购买,个人与团队使用一致的窗口规则,套餐用量可见性从“延迟”变为“近实时”。

Author:mrcfps(#54 含 Ray Xi 共同署名、lefarcen review;#82 由 Liu Yi review)、lefarcen(#99

  • 16448b777 feat(billing): restore Go plans and add Coding Plan funding preflight (#54)
  • 1fd9973dd fix(coding-plan): 修正订阅窗口锚点并开放重置模式选择 (#67)
  • 3cacaa1aa feat(coding-plan): 支持按订阅套餐配置限额窗口 (#82)
  • ff197c52e fix(billing): refresh Coding Plan quotas after zero-charge usage (#99)

部署依赖(关键):#54 / #67 明确要求先发 API,再发 Link;#82 额外要求先发布 Admin/API,再由运营在 Admin 里把个人 5h 的 Plus / Pro / Max 取消勾选并保存(否则 Plus / Pro / Max 仍会被历史 5h 窗口限制);#99 的 Web 实时额度卡依赖 API 的 workspace 事件接口。

(BASE_WEB 4676d97e1 之后):apps/web — coding-plan 用量卡与倒计时、landing 定价卡与套餐目录(Go 回归)、public-pricing-offers.tsnav-items.tsbilling-client.tsruntime-keys-client.tsworkspace-selector.tslib/coding-plan-events.ts(#99 新增订阅事件流)。 (BASE_API feb5eb7fa 之后):services/apibilling/core.tsbilling/coding-plan-usage.tsbilling/preflight.ts(新增路由,注册进 app.ts / http/routes.ts / openapi.json)、billing/infra/postgres.tspersistence/users.ts、会员策略锚点下发、workspace-events/*(#99)。 (BASE_LINK 4676d97e1 之后):services/link — 准入流水线 admission_pipeline.goeconomics/classifier.go(额度耗尽回退钱包的计费分类)、membership/client.gomodellimit/model_limit.go(按套餐聚合限额窗口、跳过缺席档位)、repositories/postgres.go (BASE_ADMIN 0a1243060 之后):apps/admin — coding-plan 控制台(limit-policies-panel / limit-policy-fields / tier-value-grid / product-control / models-panel / audience-context)、membership/model-groups-panellib/audit-action-catalog.ts、i18n(中英)。 (BASE_DB ff912897d 之后,2 个 migration):
  • db/migrations/20260921132204_restore_go_coding_plan.sqlpublic.coding_plan_model_entries 增加 contribution_multiplier_goincluded_in_go;重建 link.model_limit_admissions / link.model_limit_windows / link.usage_events / public.credit_usages / public.membership_model_groups 的 billing-evidence 与 coding-plan-pool CHECK 约束。
  • db/migrations/20260922054546_coding_plan_product_isolation.sql — 新建 public.coding_plan_products(按 audience 隔离的套餐开关);coding_plan_model_entries 唯一键改为 (public_model_id, coding_plan_audience)model_limit_policies 增加 coding_plan_audience
  • 同步 db/schema/link.hcldb/schema/public.hcldb/migrations/atlas.sum
无(本 feature 的 catalog 面在 2026-09-23T06:15Z 的 catalog 发布中已先行生效,见「已在生产生效」)。
XLLink 三协议客户端接入:Anthropic Messages、Responses(Codex)与多轮 Agent 工具链路

是什么:让同一个 Vela runtime API key 能直接接入三类官方客户端,而不是只支持 OpenAI Chat Completions。 (1) #79 新增 POST /v1/messages:Anthropic 客户端只改 base URL 即可指向 Link;支持同步与 SSE,文本 / 工具调用 / usage / 错误均为 Anthropic 形状;鉴权接受 x-api-key 或 Bearer(两者同时存在必须一致,否则 401),anthropic-version 必须为 2023-06-01;不含 token counting、batch、retrieve/cancel、beta/server tools。 (2) #88#93 收敛 Messages 的选路语义:Messages 与 Responses 共用 request kind,早期实现会误用“仅 Responses 的 Chat 路由回退”而被 404 拒绝(#88),随后改为复用 Responses 的协议转换能力,Chat 路由转 Chat、原生 Responses 路由优先(#93),空响应或空流显式返回 502。 (3) #81 补齐 Responses 适配,使 Codex 可完成真实多轮工具任务:instructions / developer 内容保留、DeepSeek 多轮 reasoning_content 回放、completed 后客户端断开不再被记为 499、流转发响应取消、Gemini 搜索与函数工具组合显式 400 unsupported_tool_combination、未知 Claude-native 模型默认输出预算提高到 16384。 (4) #96 修复真实 Agent 多轮工具链:工具声明只完成一次、保留最终 usage、避免重复 drain 已耗尽 body 导致 keep-alive 挂起,并包含必要的 Bifrost vendor 补丁(Vertex Gemini 签名顺序、结束原因与流状态)。

影响面与边界:Link 对外协议面从 1 种扩到 3 种(Chat / Responses / Messages),新增公开端点 /v1/messages;Messages 的鉴权边界与其它路由不同(仅该路由接受 x-api-key,非 POST 时忽略)。验证边界:#96 的 runtime × model 矩阵 195 条中 193 条通过,Terra 因第三方上游连接重置失败、Codex/MiniMax 部分暂缓;Gemini 搜索 + 函数工具组合仍不支持。

Author:mrcfps(#79,含 Ray Xi 共同署名;#88)、Liu Yi(#81、#93、#96)

  • 28d81e0ca feat(link): add Anthropic Messages client endpoint (#79)
  • 9160afc0d feat(link): support Responses API keys for Codex agent workflows (#81)
  • 21f6d5daa fix(link): reject chat route fallback for Anthropic Messages (#88)
  • 75a72873b fix(link): support Anthropic Messages over Chat routes (#93)
  • e8164ff96 fix(link): preserve multi-turn agent tools and stream completion (#96)
(BASE_WEB 4676d97e1 之后):apps/web/src/lib/gateway-url.ts 与 API Key 页的 Base URL 计算(为三种协议输出对应地址),见 28d81e0ca 无。三协议端点全部在 Link 实现;API 只提供 runtime key 与计费准入。 (BASE_LINK 4676d97e1 之后):services/link — 新增 internal/handlers/anthropic.gointernal/bifrostengine/anthropic_messages.go;改动 handlers/openai.gomiddleware/auth.goruntimeconfig/manager.gobifrostengine/engine.gothird_party/bifrost-core vendor 补丁(schema / 结束原因 / 流状态 / EOF);specs/link/bifrost-patches.md 记录补丁移除条件。 无。 无 schema / migration。 无 catalog 变更。Messages 只对已有 responses 路由的公开模型生效;#93 之后仅 Chat 路由的模型也可通过协议转换接入,未新增 catalog request kind 或 seed 路由。
LAPI Key 生命周期与免费用户边界:三协议入口、创建拦截与导航门控

是什么:围绕 runtime API key 的一组前后端收口。 (1) #92 API Key 页把接口选择从 2 项改为 3 种格式(OpenAI · Chat Completions / OpenAI · Responses / Anthropic · Messages),每种格式给出对应 Base URL 与推荐客户端(DeepSeek Harness、Codex、Claude Code),页面只展示一个可复制的地址、不再单列接口路径。 (2) #84 API 侧拦截:免费用户及付费权益已到期的用户调用 POST /api/v1/runtime-api-keys 返回 403 paid_plan_required 且不发 key;生效中的 Go / Plus / Pro / Max 与未生效的降级计划不受影响。 (3) #95 Web 侧补全跳转:免费 workspace 直达 /api-keys(线上 /cloud/api-keys)时等待套餐确认后 replace 到 /dashboard 并保留 workspaceId;加载中不挂载密钥页,查询失败显示重试。 (4) #70 导航层门控:主侧边栏移除旧 Web Usage 入口,Free workspace 的 API Keys 入口在桌面与移动端置灰并阻断点击,配 portal tooltip(“升级订阅后可用”/“Available after upgrading your subscription”)。

面向谁 / 用户路径变化:Free 用户不再进入无法使用的密钥管理页(三处一致:导航、直达链接、服务端);付费用户获得按客户端协议区分的接入说明。

Author:mrcfps(#70,含 Ray Xi 共同署名;#84、#95)、Liu Yi(#92)

  • 76b675c3d feat(web): hide Usage tab and gate Free plan API keys (#70)
  • edd1d98fc fix(api): reject free users creating runtime API keys (#84)
  • 30f374d15 feat(web): show three API formats on API key page (#92)
  • 39c5d0a75 fix(web): redirect free API key visitors to dashboard (#95)

依赖:#92 展示的 Messages Base URL 需要 Link 侧 /v1/messages 已上线(见上一条 feature),否则 Claude Code 类客户端会拿到 404。

(BASE_WEB 4676d97e1 之后):apps/webroutes/api-keys.tsxcomponents/layout/nav-items.tsheader.tsxsidebar.tsxdisabled-navigation-tooltip.tsxlib/i18n.tsxpackages/shared/src/workspace-context.ts 增加套餐上下文。 (BASE_API feb5eb7fa 之后):services/apiruntime-keys.ts(付费权益校验 + 403)、app.tsworkspaces/core.tsworkspaces/postgres.ts(workspace 套餐字段)。 无。 无。 无 schema / migration。 无 catalog 变更。
LCMS Touchpoints 运行时决策生命周期(OPEND-3364 ~ OPEND-3375)与 Test gift entry 修复

是什么:API 侧 touchpoint / CMS 运行时决策链路的一轮协同重构:事件凭据校验绑定部署窗口;展示授权改为以 endsAt 为界的绝对授权并把凭据从 decision 中拆出;调用方已持有内容时返回 slim decision;续期改为按主键原地续期而非重新签发;共享制品读取只读被选中 placement 的制品并加字节上限 LRU 缓存;撤销回执脱离 decision 凭据窗口;部署下架时撤回已持有的 decision。 收尾的 #101(本次 HEAD)修复 Test gift entry 在桌面端与 Web 端互相失效touchpoints.test_contexts 的 upsert 不再刷新 updated_at,使同一 tester / snapshot 的实时选择 generation 在另一标签页或桌面端重连时保持有效。

意图:把“不可达服务”降级为“随活动自然到期”,而不是“一次失败的内容消失”,同时降低每次轮询的读取与重写开销。

Author:a1chzt(10 个 commit)、lefarcen(c8d1cf662 文档、#101 修复)

  • ffe7d46fe fix(cms): bind event credential checks to the deployment window(OPEND-3364)
  • 74ad7dc69 feat(cms): grant display authority to endsAt and split out the credential(OPEND-3365)
  • 142297692 perf(cms): read only the selected placement's artifacts(OPEND-3367)
  • 7349eda51 perf(cms): cache shared artifact reads behind a byte-capped LRU(OPEND-3368)
  • 3e5e8644b perf(cms): renew the runtime decision instead of reissuing it(OPEND-3369)
  • dae422187 perf(cms): renew the decision by primary key when the caller names it(OPEND-3369)
  • 4ddbe454c feat(cms): return a slim decision when the caller already holds the content(OPEND-3370)
  • 9f1f16ae8 fix(cms): free the revocation receipt from the decision credential window(OPEND-3372)
  • a67e31426 fix(cms): withdraw a held decision when its deployment is unpublished(OPEND-3375)
  • b143ee8a8 test(cms): cover the runtime lifecycle changes against real PostgreSQL(OPEND-3368/3369/3372)
  • c8d1cf662 docs(cms): correct the documented rollback surface for the display grant
  • 9555efd13 fix(cms): keep Test gift entry across desktop and web connections (#101)

与 Web 侧 Campaign 浮层(下一条 feature)是同一套契约的两端:Web 端“续期保持挂载”依赖 API 侧 issueRuntimeDecision 的原地续期语义,建议 API 与 Web 在同一发布窗口内完成。

无。 (BASE_API feb5eb7fa 之后):services/api/src/touchpoints/persistence.ts(主改动面)、touchpoints/routes.tstouchpoints/shared-artifact-store.ts,配套单元测试与真实 PostgreSQL e2e(含新增 test/e2e/touchpoints-restore-lifecycle.test.ts)。 无。 无。 无。 无 catalog 变更。
LWeb 账务界面整合:套餐与余额设计、充值深链与帮助体系

是什么:#94 把订阅套餐与余额/钱包两套界面按统一设计语言整合:新增 billing-botanical.css 视觉层、billing-dashboard-messages.ts 文案体系、help-tooltipmodal / switch 交互收敛,重写 Coding Plan 用量卡、Team 信用面板与 workspace-b 仪表盘面板,并重构 API Key 页布局;personal-billing-loading 增加加载态。
#83 增加充值深链:?billing=recharge 会在控制台(含 Team 仪表盘与 workspace 选择器)打开充值弹窗,而不是落到账单页默认态。

面向谁:所有控制台付费用户(个人与团队)的订阅 / 余额 / 充值路径;影响面集中在视图与交互状态,不含计费规则改动。

Author:lefarcen

  • 0cd02c85c feat(billing): open the recharge dialog from ?billing=recharge (#83)
  • a26175a99 feat(web): 集成套餐与余额设计并完善账务交互状态 (#94)
(BASE_WEB 4676d97e1 之后):apps/webbilling-botanical.csscomponents/subscription/coding-plan/coding-plan-usage-card.tsxteam/credit-surfaces.tsxteam/workspace-b-dashboard-panel.tsxcomponents/layout/sidebar*.tsxui/help-tooltip.tsxui/modal.tsxlib/billing-dashboard-messages.tsroutes/team-dashboard.tsxroutes/api-keys.tsxroutes/team-billing-deep-link.ts 无。额度与余额数据仍由既有 API 提供;本 feature 是视图层整合。 无。 无。 无 schema / migration。 无 catalog 变更。
MModel Routing Catalog:Claude Opus 5.5 / GPT-6 的 TeamRouter 路由基线

是什么:claude-opus-5.5gpt-6-solgpt-6-luna 增加 TeamRouter 供应商侧的路由定义:3 个 backend model、3 条 route 与 3 条 route policy(priority 50),以及 provider_teamorouter*.json 折后价与 provider_routes.json 映射;同时把三个模型的实时上游 ID 确认结果与 Luna 的工具调用故障记入 provider 文档。

生产影响(重要):按 PR 说明,生产基线里 TeamRouter provider 与这三条后端路由保持 inactive,只有测试激活文件(model_routing_catalog_test_activation.json)把已验收的 Opus 5.5 与 Sol 在测试环境按 priority 5 启用;Luna 因上游 503 upstream_model_error 未被纳入激活。 因此本次 catalog apply 对生产只新增“未启用的路由定义与价格”,不会改变任何模型的实际选路;如需放量必须另行修改 active 状态。

Author:Liu Yi

  • 93a1d5d97 feat(catalog): add TeamRouter routes for Claude Opus 5.5 and GPT-6 (#90)
  • 5cef99715 配套:feat(data): add Xiaomi model preflight source (#89) — 属工具链,见末条 feature
无。 无。 无。 无。 无 schema / migration。 (BASE_CATALOG 816d1de3e 之后,3 个 commit 触及 data/json / db/seeds):
  • data/json/provider_routes.jsonroute_policies.json(+3 条 priority 50 路由策略)、provider_pricing/provider_teamorouter.jsonprovider_teamorouter_anthropic.jsondata/json/model_routing_catalog_test_activation.json
  • db/seeds/seed-model-routing-catalog.sql(3 backend model + 3 route,生产均 inactive)、seed-model-routing-catalog-test-activation.sql
  • deploy-model-routing-catalog-prod.yml 的 apply 步骤执行,无需 migration
M旧版客户端模型目录解析:按服务端 active workspace 计算权益

是什么:旧版 Open Design 的 vela model list 不传 workspace,Link 因而按“个人默认 workspace”计算模型目录,导致当前 Team 付费用户仍看到个人 Free 的模型锁。现在仅对无 workspace、无 Open Design run ID 的非计费模型列表请求增加兼容路径:Link 向 API 发出内部兼容标记,API 用现有 workspace context 解析服务端当前选择,再复用现有成员校验与权益解析;该兼容路径不缓存可变的 workspace 选择,避免切换 Team 后继续命中旧 scope。显式 workspace、固定项目 run、普通聊天与扣费规则保持原样,无 UI / DB / 客户端协议改动。

影响面:仅影响模型目录展示的权益计算,不改变实际运行的收费归属;旧客户端下次刷新目录后生效,本地缓存不会被主动清除。

Author:mrcfps

  • 2d87b8065 fix(models): use active workspace for legacy model discovery (#69)

部署依赖:先部署 API,再部署 Link;依赖现有开关 WORKSPACE_BILLING_LINK_SCOPE_V2=true

无。 (BASE_API feb5eb7fa 之后):services/api/src/app.tsopenapi.tsworkspaces/core.ts + 对应测试。 (BASE_LINK 4676d97e1 之后):services/link/internal/membership/client.go(内部兼容标记)+ 测试。 无。 无 schema / migration。 无 catalog 变更。
MWeb 生产 Campaign 浮层:租约续期与可恢复故障降级

是什么:控制台生产活动浮层(含 gift entry)此前每 30s 轮询成功却先因 hasCurrentLease() 提前返回、丢弃新授权,旧租约一到期即整体卸载宿主;同时 !navigator.onLine、任意非 2xx、未完成的 fetch 三种“无法区分撤销与线路故障”的路径会立刻拆除浮层。 现在 同一 deployment + content version + placement 命中即续期并保持 DOM 挂载renewsMountedContent()),只有“能回答问题的失败”(410 撤销/撤回、租约到期、替换 decision、登出、401/403、不支持的能力、响应体不可解析)才拆除;新增 isRecoverableStatus(区分 5xx 与 4xx)与 isRecoverableTransportFailure。另把活动层 z-indexz-[90] 降到 z-[45],不再盖住 aria-modal 的套餐弹窗。

用户可见变化:活动未撤销时 gift entry 不再间歇性消失(按作者实测:40s 授权窗口下每 60s 有 20s 缺失;注入 500 / 连接重置会损失约 60s;离线则直接丢失);套餐弹窗不再被促销卡遮挡。与 CMS Touchpoints feature 是同一契约的两端。

Author:lefarcen

  • 185393b32 fix(web): renew the console campaign lease instead of rebuilding its host(OPEND-3437、OPEND-3350)
  • aecc339e3 fix(web): keep a recoverable poll failure from tearing down the campaign(OPEND-3363)
(BASE_WEB 4676d97e1 之后):apps/web/src/components/production-campaign-float.tsx 及浏览器测试 tests/browser-agent/production-campaign-float.spec.ts 无。依赖 API 侧 decision 续期语义(见 CMS Touchpoints feature),本 feature 不含 API 代码。 无。 无。 无 schema / migration。 无 catalog 变更。
SWeb 控制台加载态布局稳定

是什么:#100 让控制台在数据加载与切换 workspace 时保持外壳稳定:app-shell / header / sidebar / workspace-shell-shareddashboard-loading-skeletonmatrix-loader 统一改由骨架屏占位,避免加载期间布局跳动。

影响面:纯前端展示层;含 qa-browser-ci.yml 一处测试配置调整。

Author:lefarcen

  • 7f1bcc213 fix(web): keep the console layout stable while loading (#100)
(BASE_WEB 4676d97e1 之后):apps/web/src/components/app-shell.tsxlayout/header.tsxlayout/sidebar.tsxlayout/workspace-shell-shared.tsxshared/dashboard-loading-skeleton.tsxui/matrix-loader.tsx 无。 无。 无。 无 schema / migration。 无 catalog 变更。
SAdmin:用户用量归因拆分与模型审计去重

是什么:#78 把 Admin 用户用量表的“Model / Provider”拆成请求模型、实际路由到的后端模型、实际路由到的供应商三列,并按 request ID 把每个分页 credit usage 行关联到 Link usage event 后解析真实后端模型与 provider(缺 Link 记录则留空,不再回退为可能误导的 provider kind),同步补充中英文标签;#63 让公共模型编辑抽屉逐字段与当前 override 比较后再提交,只对真正变更的字段写审计(此前仅改 Capability 也会连写 Context Budget 审计,仅改 Release Phase 会写 3 条)。

影响面:Admin 运营归因与审计流水准确性;无计费行为、schema 或运行时路由变化。

Author:mrcfps(#78)、Liu Yi(#63)

  • c7865e7e3 fix(admin): distinguish requested and routed models in user usage (#78)
  • 6d963188e fix(admin): avoid duplicate model audit entries (#63)
无。 无。 无。 (BASE_ADMIN 0a1243060 之后):apps/admin/app/[locale]/(protected)/users/[userId]/page.tsxlib/server/admin/core.tslib/api/types.ts、i18n(中英)、models/list/edit-public-model-drawer.tsx + 测试。 无 schema / migration。 无 catalog 变更。
S发布与数据工具链:Public Pricing 校验、Forgejo 事件链接、热修分支授权、Xiaomi preflight

是什么:(1) #65 Public Pricing 部署校验从硬编码“8 plans / 4 personal”改为共享 Zod schema 校验并重算 catalog revision hash —— Go 套餐恢复后计划数变为 9 / 5,旧校验会让 DB 发布 workflow 与 API smoke 误失败; (2) #64 全部 Forgejo 部署 / migration workflow 的 APE ops 事件链接从内部容器 URL + 实例级 run_id 改为公开 Forgejo 主机 + 仓库级 run_number,并新增 workflow 契约检查; (3) #77 允许生产 workflow 从热修分支触发; (4) #60 清理 apps/web 注释中过期的 GitHub 引用与 sandbox 运行时 pin; (5) #89 新增 Xiaomi 供应商的模型目录预检 source(GET /v1/models,过滤 ASR/TTS,保留 time_evidence: unknown),并更新供应商接入文档。

影响面:仅发布流程、校验脚本与文档;不改变任何维度运行时行为。但 (1) 直接决定本次 DB / Catalog / Public Pricing 与 API smoke 能否通过校验,(2) 决定本次发布事件是否可追溯。

Author:Liu Yi

  • 224664e2c fix(ci): validate Public Pricing with the shared schema (#65)
  • 0af937588 fix(ci): correct Forgejo deploy event links (#64)
  • 93b5b8435 ci: allow production workflows from hotfix branches (#77)
  • d89dd437c chore: remove stale GitHub repository references (#60)
  • 5cef99715 feat(data): add Xiaomi model preflight source (#89)
仅注释 / 引用清理:apps/web/src/lib/workspace-dashboard-client.ts 及浏览器测试,无运行时行为变化。 有(校验脚本):services/api/scripts/verify-public-pricing.tsservices/api/package.jsontest/public-pricing.test.ts,同时覆盖 test API smoke、test DB 发布与 prod Public Pricing 发布。 无运行时变更。 无。 不改 db/migrations;但 deploy-db-migrations-prod.yml 的 workflow 文件本身在本范围内被更新(事件链接修正),从 main dispatch 时生效。 不改 data/json / db/seedsdata/scripts/provider_model_preflight.pydeploy-model-routing-catalog-prod.yml 的校验路径在本范围内更新,从 main dispatch 时生效。

已在生产生效(发布点之前,本次不重复发布)

以下内容均在对应维度生产发布点之前,已在生产运行,本次不重复发布。

发布范围提醒:本次群内通知列出的范围是「Go 套餐、Coding Plan、API Key、CMS 修复」。但若按 origin/main HEAD 全量发布,实际会一并上线上表中的 Link 三协议接入、Web 账务界面、Catalog TeamRouter 路由等 11 个 feature —— 即实际发布面大于通知中列举的 4 项

发布建议

  1. Migration 判断:需要先跑 migration。BASE_DB ff912897d 之后有 2 个新 migration(16448b777): db/migrations/20260921132204_restore_go_coding_plan.sqldb/migrations/20260922054546_coding_plan_product_isolation.sql。 两者都包含 ALTER TABLE … ADD CONSTRAINT / ADD COLUMN NOT NULL DEFAULT 与 CHECK 约束重建,属于对既有行有校验要求的变更: 第 2 条新增 public.coding_plan_products 并把 coding_plan_model_entries 唯一键从 (public_model_id) 扩为 (public_model_id, coding_plan_audience), 执行前必须确认现网不存在同一 public_model_id 同时被 personal / team 重复占用的历史行。执行入口:deploy-db-migrations-prod.yml。范围内没有被回退的 migration。
  2. 服务发布顺序(按依赖,六个维度发布点不同):
    1. DB migrationdeploy-db-migrations-prod.yml,2 个文件)— 所有写入 coding_plan_audience 的路径都依赖新列与唯一键。
    2. Model Routing Catalogdeploy-model-routing-catalog-prod.yml,3 commits)— 独立于服务发布;TeamRouter 路由在生产保持 inactive,不会改变现网选路,无需额外凭据(TeamRouter 凭据沿用既有 provider 配置)。
    3. APIdeploy-api-eks-prod.yml,21 commits)— 承载 membership 策略锚点、billing preflight、workspace events、runtime key 拦截与 touchpoints 决策契约。按 #54 / #67 / #69 的明确要求,API 必须先于 Link
    4. Linkdeploy-link-eks-prod.yml,11 commits)— 需等会员策略缓存刷新后再发布(#67);新增 /v1/messages 与 Responses 适配需要在 Web 暴露三协议 Base URL 之前上线。
    5. Webdeploy-web-eks-prod.yml,12 commits)| Admindeploy-admin-eks-prod.yml,5 commits)— 建议在 API + Link 之后;Admin 只带 5 个 commit,其中 #82 需要随 API/Link 一起上线后才做配置动作。
    另:API 侧 CMS 决策契约(OPEND-3364~3375 + #101)与 Web 侧 Campaign 浮层是同一契约的两端,建议 API 与 Web 在同一发布窗口内完成
  3. 发布后必须人工执行的配置动作(不是代码能覆盖的):
    • #82:在 Admin Coding Plan 页把个人 5h 的 Plus / Pro / Max 取消勾选并保存,7d 保持现状;否则 Plus / Pro / Max 仍会被历史 5h 窗口限制和展示。
    • 其余「数据 / seed」变更全部由 catalog workflow 的 apply 步骤覆盖,无需额外 runbook;新增的 TeamRouter 路由如要放量必须另行改为 active(不在本次范围)。
  4. 发布后观测:
    • 计费 / 套餐:Coding Plan 请求的 billing_modecoding_plan vs pay_as_you_go)分布、额度耗尽后回退钱包的比率、zero_charge_evidence='coding_plan' 的记录量;重点看 usage_events / credit_usages 的 billing-evidence CHECK 是否有写入被拒(约束在本次被重建)。
    • 额度窗口:Go 是否返回 5h + 7d、Plus / Pro / Max 是否只返回 7d(验证 coding_plan_audience 与 Admin 勾选是否一致);新订阅与升级后的 reset_at 是否等于订阅创建时间;续费 / 团队席位变化后锚点是否保留。潜在坑:历史订阅若缺少 Stripe 创建时间会暂用本地订阅记录创建时间,发布前应核对“曾替换过订阅”的历史记录。
    • 额度事件流:Web coding-plan-events 连接成功率与重连行为、额度卡是否在套餐内用量计入后立即更新(而非等到下一次轮询)。
    • 三协议端点/v1/messages 的 4xx 分布(401 authentication_error / 400 invalid_request_error)、anthropic-version 校验命中率、Messages 走 Chat 路由转换后的 502 空响应比率、/v1/responses 的 499 计数(应下降);注意 Messages 目前只覆盖同步与 SSE 文本 / 工具调用。
    • API Key 边界403 paid_plan_required 的次数(正常应来自优惠期结束用户)、免费用户直达 /api-keys 是否被正确 replace 到 /dashboard、导航置灰 tooltip 是否中英正确。
    • 模型目录权益:Team 付费用户用旧版 vela model list(不传 workspace)时是否不再出现 Free 锁;切换 Team 后是否立即生效(该兼容路径不缓存 workspace)。
    • CMS / Campaigntouchpoint_stopped 事件频率(应下降)、Web 端 host 节点在无撤销时是否保持稳定挂载、desktop 与 web 同时打开时 Test gift entry 是否互相保持(本次修复点)、410 / 撤回后是否按时清理。
    • Catalog:确认 claude-opus-5.5 / gpt-6-sol / gpt-6-luna 的 TeamRouter 路由在生产仍为 inactive,实际流量仍走 OpenRouter / Bedrock / OpenAI 原路由;public_pricing 的 plan 数量应为 9(5 personal + 4 team)且 revision hash 匹配。
    • Release 流程:APE ops 事件中的 run 链接应指向公开 Forgejo run 页(run_number),不再是内部容器 URL;从热修分支触发生产 workflow 应被允许。

备注:本报告所有 workflow、commit、PR 与 compare range 均使用 code.powerformer.net/core/amr 的可点击链接;四个服务的 compare range 基于 EKS Pod 观察到的 BASE,DB migration 与 Catalog 的 compare range 基于各自 Forgejo workflow 的 BASE,未统一使用最旧基线。

证据附录

EKS / Prometheus 观测(Grafana datasource prometheus,namespace nexu

查询形状:kube_pod_container_info{namespace="nexu", container="<container>", image=~".*/<repo>:prod-[0-9a-f]{40}"} and on(namespace, pod) (kube_pod_status_ready{namespace="nexu", condition="true"} == 1),先按业务容器与镜像仓库过滤出 Pod 集合,再仅按 (namespace, pod) 关联 Ready 指标;未使用宽泛 Pod 名正则,因此不包含 API CronJob、Link Redis 与 metrics exporter。

约束校验:四个服务各 2 个 Ready Pod,同一服务内 commit 与 digest 完全一致;spec / updated / available 副本数均为 2,无滚动发布或回滚混合态;样本时间戳 2026-09-24T02:21:12Z–2026-09-24T02:21:25Z,与查询时刻偏差不超过约 15 秒,远小于 5 分钟新鲜度阈值。若任一服务无 Ready Pod、tag 无法解析、digest 缺失或副本版本不一致,本流程会直接失败而不生成报告。

Forgejo workflow 运行记录(基线来源)

可见性范围说明:Forgejo Actions 运行列表在本环境可回溯至 2026-09-17T12:01:38Z,最新记录 2026-09-24T02:13:52Z;两个基线 workflow 的最近成功运行均晚于该下限,因此不存在“因为窗口截断而漏掉更新成功记录”的情况。