AMR 生产发布影响报告

生成时间:2026-10-21 02:02 UTC(EKS 观察时间 2026-10-21T02:02:51Z);分析对象:把 origin/main(HEAD 20f4f007d,feat(web): 一键配置 Agent 与视觉验收还原)发布到生产的影响。 四个服务以 EKS Pod 实际运行镜像为生产发布点,DB migration 以对应 workflow 最近一次成功运行的 commit_sha 为发布点;五个维度分别计算变更范围。

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

Web、API、Link、Admin 的发布点取自 Grafana / Prometheus(datasource prometheus,kube-state-metrics)观察到的 Ready Pod 镜像; DB migration 取自 deploy-db-migrations-prod.yml 最近成功运行。 查询按业务容器 + 镜像仓库精确过滤后再按 (namespace, pod) 关联 Ready 状态,并已排除带 deletionTimestamp 的终止中 Pod; 四个服务都是 Ready = spec.replicas = updated = available,没有滚动/回滚混合状态,指标样本距观察时刻均在数秒内。 本次全量目标是 20f4f007d;各维度的 compare range 分别计算,feature 表只列发布点之后的内容。

Web · EKS Pod 实态
Workload:nexu/amr-web · container web
观察时间:2026-10-21T02:02:51Z
Ready Pods:2 / 2(updated 2,available 2),无终止中 Pod
Pod:amr-web-684576c49f-cwz6t, amr-web-684576c49f-q2l59
实际 commit:bbc226561
镜像 digest:sha256:ceb1ebe4694ba64ddd4e6331dc96916af215181ae81b5967260a48ec1d4db5f1
Workflow 审计:deploy-web-eks-prod.yml 最近成功 run 9630(bbc226561);与 Pod:一致
GitOps 审计:powerformer/apps prod overlay 仍为 prod-37d7d377cd17da21061c51b13e0db8298e4e4a16(37d7d377c,2026-09-30);与 Pod:不一致
本次新增(bbc226561...20f4f007d):1 commit
API · EKS Pod 实态
Workload:nexu/amr-api · container api
观察时间:2026-10-21T02:02:51Z
Ready Pods:2 / 2(updated 2,available 2),无终止中 Pod
Pod:amr-api-6cdddb445f-8l2b2, amr-api-6cdddb445f-ngdcc
实际 commit:d87957782
镜像 digest:sha256:59e5d12dbf6d362771dbed360f55405dddb61765e2f0ca24a41741e13b9a762f
Workflow 审计:deploy-api-eks-prod.yml 最近成功 run 9639(d87957782);与 Pod:一致
GitOps 审计:powerformer/apps prod overlay 仍为 prod-3b3ea92c11a210d2af48eda397bc2b39592541bf(3b3ea92c1,2026-09-30);与 Pod:不一致
本次新增(d87957782...20f4f007d):1 commit
Link · EKS Pod 实态
Workload:nexu/amr-link · container link
观察时间:2026-10-21T02:02:51Z
Ready Pods:12 / 12(updated 12,available 12),无终止中 Pod
Pod:amr-link-75948c646b-ts59f, amr-link-75948c646b-fcp9g, amr-link-75948c646b-htc7s 等 12 个
实际 commit:8b0c9bb38
镜像 digest:sha256:f6001da938c17b731763a267dd026e76919f19b6fd33b3dd8b53f541faf631c0
Workflow 审计:deploy-link-eks-prod.yml 最近成功 run 9369(8b0c9bb38);与 Pod:一致
GitOps 审计:powerformer/apps prod overlay 仍为 prod-3b3ea92c11a210d2af48eda397bc2b39592541bf(3b3ea92c1,2026-09-30);与 Pod:不一致
本次新增(8b0c9bb38...20f4f007d):2 commit
Admin · EKS Pod 实态
Workload:nexu/amr-admin · container admin
观察时间:2026-10-21T02:02:51Z
Ready Pods:2 / 2(updated 2,available 2),无终止中 Pod
Pod:amr-admin-84d75849f4-nhswt, amr-admin-84d75849f4-4zhkz
实际 commit:8b0c9bb38
镜像 digest:sha256:c9a9c60857535c7bdddb82d35673411358005cf9b711f1e1fc30f0d5f310e233
Workflow 审计:deploy-admin-eks-prod.yml 最近成功 run 9370(8b0c9bb38);与 Pod:一致
GitOps 审计:powerformer/apps prod overlay 仍为 prod-4d9eee278e70a6bf80e6aaf4600a886c02ea7c73(4d9eee278,2026-09-24);与 Pod:不一致
本次新增(8b0c9bb38...20f4f007d):1 commit
DB migration · workflow 记录
最近成功:run 9345(8b0c9bb38,main)
发布点 commit:8b0c9bb38
与 Pod 发布点:一致(Link / Admin 同一 commit)
本次新增(8b0c9bb38...20f4f007d):1 commit,其中 db/migrations + db/schema 0
范围内容差异:仅 db/recovery/feature-test-429/*(feature-test 恢复资产,生产不执行)

审计差异(必须人工确认):powerformer/apps 的 prod overlay(kubernetes/envs/prod/amr-{web,api,link,admin}/values.yaml)仍固定 09-24~09-30 的旧 commit (web prod-37d7d377cd17da21061c51b13e0db8298e4e4a16、api/link prod-3b3ea92c11a210d2af48eda397bc2b39592541bf、admin prod-4d9eee278e70a6bf80e6aaf4600a886c02ea7c73),与四个服务的 Pod 实态全部不一致; 该 ArgoCD Application 配置了 selfHeal: true。说明生产镜像并非由这些文件的 main 当前内容驱动(例如 Orbit lane 执行、手工 helm 或 ArgoCD source 与之不同)。 本报告一律以 Pod 实态为发布点;发布前建议运维确认 ArgoCD 实际 values 来源,否则 selfHeal 可能把 Pod 拉回旧 tag,直接抹平本次发布。

workflow 审计只作对照:deploy-web-eks-prod.yml 最近成功 run 9630 是 target=share 的 lane(同一 commit 也支撑 share 站点 amr-share-web), 仅凭 workflow 记录判断生产版本会得出错误结论——这正是本报告以 Pod 实态为准的原因。

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

全量范围 8b0c9bb38...20f4f007d 共 9 个 commit;每个维度只保留各自发布点之后的 commit(Web 1、API 1、Link 2、Admin 1、DB 1 但 migration 0)。 发布点之前已生效的内容见 「已在生产生效」,不重复列入。

Feature 聚合规则:按业务行为、用户路径、数据契约和部署依赖聚合;PR、commit、path 仅作为可点击的追溯证据。feature 按影响面从大到小排列。

Feature / Author / Commits Web API Link Admin DB schema / migration
XL一键配置 Agent:API Keys 页 → CC Switch 深链导入

API Keys 页新增「一键配置 Agent」对话框:用户选择本机 agent(Claude Code / Codex / Grok Build / OpenCode / OpenClaw / Hermes)与套餐可用模型后,Web 复用既有 runtime key 创建接口生成名为 <Agent> · <OS> 的 key,再通过 ccswitch://v1/import?... 深链把 provider 交给 CC Switch 导入(Open Design 不写用户本地文件)。API 新增只读端点 GET /api/v1/quick-setup/models(登录 + 付费个人套餐),按请求类型与 agent 返回计划可用模型与默认模型;候选按 Link 的路由匹配、发布门禁与会员权益规则过滤,并对 Codex 默认内置 web_search 不兼容的路由组做排除。Web 侧同时补齐 7 种语言文案与 quick setup 埋点。

依赖说明:无需新增 migration,可用性完全由现网模型目录、路由、发布门禁与套餐权益推导;套餐未配置默认模型时列表回退为固定顺序首项,不会阻断。发布后建议人工走一次真实导入(生成本机配置)核对。

Author:覃栋(qindong) PR #429

  • 20f4f007d feat(web): 一键配置 Agent 与视觉验收还原 (#429)
新增 quick setup 对话框(agent/模型选择、CC Switch 下载与 ccswitch:// 深链生成、重开/重新下载引导)、runtime-keys-client 扩展、api-keys 页入口与样式、i18n(es/fr/ja/ko/pt/ru/zh-TW)、埋点 api_key_quick_setup_view/click/key_result。 新增 GET /api/v1/quick-setup/models(quick-setup-models.ts、persistence/model-catalog.ts#listQuickSetupModels 读取 link.public_models / 路由 / release gates / availability overrides);runtime-keys.ts 抽取 isPaidPolicy 复用;openapi.json 同步。 无新增接口与路由语义变更:本路径复用 Link 既有的 /v1/messages、/v1/models 与权益判定(未改动)。配套的两处 Link 运行时改动单列在下面两行。 无(Admin 镜像仅随 @vela/shared 重建,无行为变更)。 无。
MClaude Code(Anthropic /v1/messages)流式内容块保序

当 Anthropic 请求回退到 Chat 上游时,thinking 与 text 内容块可能重叠,且会出现只有 stop、没有 start 的合成 reasoning 项;Anthropic 客户端按单块顺序拼装,重叠会导致最终结果为空。新增 anthropic_chat_blocks.go:首块立即下发,仅把重叠块排队到前序块关闭,cancel 时释放状态;只在 Chat 回退路径启用(useChat),不影响原生 Responses 上游。

Author:覃栋(qindong) PR #429

  • 20f4f007d feat(web): 一键配置 Agent 与视觉验收还原 (#429)
无。 无。 新增 bifrostengine/anthropic_chat_blocks.go(块保序缓冲)与 anthropic_messages.go 接线(Chat 路径注入 order state),附单测与 e2e 用例。影响所有走 /v1/messages 的 Claude Code / Anthropic 客户端。 无。 无。
MBytePlus Ark 缓存提示与 reasoning effort 兼容修复(OPEND-4124 / 4125)

两处网关兼容问题:1)Ark Responses 不再因为客户端传入 prompt_cache_retention 直接 400 —— 改为省略该可选缓存提示并保留 cache key;2)新增后端 deepseek-v4-1-flash-261017 纳入 BytePlus DeepSeek V4.1 effort 策略(off→none、ultra→max,保留 none/minimal/low/medium/high/xhigh/max),未列入的取值在本地 400 而不再透传上游。生产 shadow 日志中该后端的 reasoning.effort=off/ultra 400 应消失。

Author:Liu Yi(nettee) PR #451

  • 53a353c11 fix(link): 修复 BytePlus 缓存期限与 reasoning effort 兼容性(OPEND-4124/4125) (#451)
无。 无。 providercompat/text.go(isArkDeepSeekV41 版本显式匹配 + effort 别名/白名单)、providercompat/adapter.go(prepareArkOptions 不再拒绝 retention,改为省略)、e2e 用例与 specs/current/link/provider/reasoning-effort-20261020.md。 无。 无。
Smodel_request 分析事件新增凭证归属字段(credentialKind / apiKeyId)

Link 上报的 model_request payload 固定带上 credentialKind(事件缺省视为 runtime);仅 runtime 凭证才附带 apiKeyId —— 控制面凭证使用的是合成 caller ID,不再与 Web 侧 public.api_keys.id 混淆。@vela/shared 的事件 schema 同步收紧(control_plane 不允许带 apiKeyId)。这是数据分析侧的数据契约变更,下游按 apiKeyId join 的口径需要容忍新字段与新缺省值。

Author:覃栋(qindong) PR #429

  • 20f4f007d feat(web): 一键配置 Agent 与视觉验收还原 (#429)
无页面行为变化;@vela/shared 事件 schema 同步(打包含在本次 Web 镜像)。 无运行时改动;@vela/shared 事件 schema 同步。 internal/usage/analytics_notify.go(payload 增加 credentialKind,apiKeyId 仅 runtime 上报)+ 单测。 无。 无。
SAdmin Coding Plan 配额重置的并发与超时恢复(#262)

运营批量重置 coding plan 配额时,原先对每个用户用 pg_try_advisory_xact_lock,只要撞上任意短事务就整体 409。改为 pg_advisory_xact_lock 排队等待;锁等待超时/取消(55P03 / 57014)在事务回滚后统一映射为 409 coding_plan_reset_busy,其它数据库错误仍按未知错误处理;按钮与中英文案说明「会等待」。只影响 Admin 运营操作。

Author:mrcfps PR #262

  • ff6d52c20 fix(admin): recover quota resets from contention and stale previews (#262)
无。 无。 无。 lib/server/admin/coding-plan-reset.ts(改排队锁 + 55P03/57014 → 409)、reset-quota-button.tsx 与 i18n/messages/{en,zh}.json、单测与 e2e。 无 schema/migration。
Sfeature-test 迁移核对工具与 CI 资产(非 runtime)

新增 tools/feature-test-migrate.mjs:在 out-of-order 的 feature-test ledger 上按 db/recovery/feature-test-429/equivalence.json 校验并重放;guardTarget 只允许 vela_feature 或 loopback rehearsal 沙箱,生产地址会被拒绝。同批调整 atlas-local.mjs、db-analyze-after-migrate.mjs、scripts/ci/select-api-e2e.mjs,并记录 specs/current/api-key-agent-setup.md。不进入任何生产镜像行为。

核验:db/recovery/feature-test-429/20261020120000_feature_settlement_scan_index.sql 的 CREATE INDEX CONCURRENTLY usage_events_settlement_scan_idx 定义与 db/migrations/20260820031952_go_plan.sql 中已发布的索引定义一致,仅用于 feature-test 恢复,生产不需要执行。

Author:覃栋(qindong) PR #429

  • 20f4f007d feat(web): 一键配置 Agent 与视觉验收还原 (#429)
无 runtime 变更(仅测试/e2e 选择器)。 无 runtime 变更。 无。 无。 无 migration/schema 变更;db/recovery/* 不属于生产迁移。

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

以下内容都在对应维度的生产发布点之前,已在生产运行。若从 main 重新发布,只分析各自基线之后的净新增。

发布建议

  1. Migration 判断:不需要跑 migration。四个服务发布点之后 db/migrations、db/schema 零变更 (8b0c9bb38...20f4f007d 在 db/ 下只有 db/recovery/feature-test-429/*,且工具 guardTarget 只允许 vela_feature / loopback 沙箱执行); 因此本次不需要先跑 deploy-db-migrations-prod.yml。 注意:各维度发布点不同(Link/Admin/DB 为 8b0c9bb38,API 为 d87957782,Web 为 bbc226561),待发布量分别是 2 / 1 / 1 / 1 / 0。
  2. 服务发布顺序:
    • 1) Link(2 commits):/v1/messages 保序与 BytePlus 兼容都属于网关行为修复,先上可让 CC Switch 导入后的 key 流量立即受益;发布后观察 12 个副本收敛。
    • 2) API(1 commit):新增只读端点,向后兼容;Web 的新对话框依赖 /api/v1/quick-setup/models,因此必须早于 Web。
    • 3) Web(1 commit):在 API 上线后开启新入口;旧版 Web 不受影响,可回滚不影响 API/Link。
    • 4) Admin(1 commit):仅运营侧配额重置,可独立发布,与上述顺序无依赖。
    • DB migration 无变更,不参与排序。
  3. 发布后观测:在动本次发布前,先确认 ArgoCD 实际 values 来源与 Pod 实态的关系(见上方审计差异),避免 selfHeal 回滚。
    • Link:/v1/messages 空响应率与异常结束率、SSE 中断数、首 token 延迟;BytePlus reasoning.effort 400 与带 prompt_cache_retention 的 400 应归零; model_request 事件中 control_plane 不再出现 apiKeyId;Ready 保持 12/12。
    • API:GET /api/v1/quick-setup/models 的 200/401/403/5xx 比例与 p95 延迟;openapi.json 已含新端点;Ready 保持 2/2。
    • Web:api-keys 页 quick setup 的 surface_view / ui_click / api_key_quick_setup_key_result 事件(area=api_key_quick_setup)、 7 种语言文案、生成的 key 名称 <Agent> · <OS>、macOS/Windows 下深链与 Firefox 隐藏 iframe 行为。
    • Admin:coding plan 批量重置的 409 coding_plan_reset_busy 比例与操作耗时。
    • 全局:web/api/admin Ready 2、link Ready 12,无终止中 Pod 堆积;无 5xx 抬升。

备注:所有 commit、PR、workflow 与 compare range 均为 Forgejo(code.powerformer.net/core/amr)链接; 四个服务的 compare range 基于 EKS Pod 观察到的 BASE,DB migration 的 compare range 基于 migration workflow 的 BASE。