AMR 生产发布影响报告

生成时间:2026-10-20 07:40 UTC;分析对象:从 origin/main(HEAD 8b0c9bb38)发布 Web、API、Link、Admin、DB migration 的影响分析。 注意:四个服务以 EKS Pod 实际运行镜像为生产发布点,DB migration 以对应 workflow 最近成功运行的 commit_sha 为生产发布点;五个发布维度分别计算变更范围。

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

Web、API、Link、Admin 的发布点来自 Grafana / Prometheus 观察到的 Ready EKS Pod 镜像;DB migration 的发布点来自对应 workflow 最近一次成功运行。越新的发布点意味着该维度已上线越多内容,feature 表里只允许列出发布点之后的变更; 发布点之前的 commit 属于已生效,归入「已在生产生效」一节,不得重复出现在 feature 表。目标 commit 均为 8b0c9bb38 (fix(link): 实时下发 Responses reasoning 摘要增量(OPEND-4022) (#449))。

Web · EKS Pod 实态
Workload:nexu/amr-web · container web
观察时间:2026-10-20 07:32:57 UTC
Ready Pods:2 / 2(spec 2,updated 2,available 2;无终止中 Pod)
实际 commit:b34670be2
镜像 digest:sha256:91282629a8bcdbe63a3d65250e73003ecb581f547f8bd0c0830bd290d3735d9e
Workflow 审计:deploy-web-eks-prod.yml 最近成功 #67387(2026-10-19 12:06:04 UTC);与 Pod:一致
本次新增(b34670be2...8b0c9bb38):12 commits,触及 apps/web 2 个(runtime 1 个)
发布点之前已上线:评论模式切换移除阻塞式 HEAD 校验、协作评论时间戳保留等 Web 修复
API · EKS Pod 实态
Workload:nexu/amr-api · container api
观察时间:2026-10-20 07:33:04 UTC
Ready Pods:2 / 2(spec 2,updated 2,available 2;无终止中 Pod)
实际 commit:b34670be2
镜像 digest:sha256:8a9db043d682972419297d32c1ee66b6f6b9e5fbc57d27416af587cc7a750544
Workflow 审计:deploy-api-eks-prod.yml 最近成功 #67371(2026-10-19 11:59:04 UTC);与 Pod:一致
本次新增(b34670be2...8b0c9bb38):12 commits,触及 services/api 5 个(runtime 3 个)
发布点之前已上线:DB job / 连接池 / 通知 metrics、计费 summary 读取优化、webhook 去重索引使用
Link · EKS Pod 实态
Workload:nexu/amr-link · container link
观察时间:2026-10-20 07:33:11 UTC
Ready Pods:12 / 12(spec 12,updated 12,available 12;无终止中 Pod)
实际 commit:b34670be2
镜像 digest:sha256:04457534c592786df448b732e0c0fa48451987eb0911327501a31d7b1bd1b057
Workflow 审计:deploy-link-eks-prod.yml 最近成功 #67372(2026-10-19 11:59:25 UTC);与 Pod:一致
本次新增(b34670be2...8b0c9bb38):12 commits,触及 services/link 6 个(全部 runtime)
发布点之前已上线:BytePlus 历史 / context edit / reasoning effort 兼容修复、模型可用性生命周期
Admin · EKS Pod 实态
Workload:nexu/amr-admin · container admin
观察时间:2026-10-20 07:33:18 UTC
Ready Pods:2 / 2(spec 2,updated 2,available 2;无终止中 Pod)
实际 commit:b34670be2
镜像 digest:sha256:b8422aa93d8eb51ad7035611b6fafdd2d260709bdc2fe9ef8bf0b0f6dc1edd69
Workflow 审计:deploy-admin-eks-prod.yml 最近成功 #67373(2026-10-19 11:59:41 UTC);与 Pod:一致
本次新增(b34670be2...8b0c9bb38):12 commits,触及 apps/admin 3 个(全部 runtime)
发布点之前已上线:Patrol 巡检监控下线、模型配置审计动作调整
DB migration · workflow 记录
最近成功:2026-10-19 11:43:02Z → 11:58:21Z(workflow_dispatch)
发布点 commit:b34670be2
本次新增(b34670be2...8b0c9bb38):1 commit,2 个 migration
发布点之前已上线:至 20261016174645_usage_event_token_summary_index.sql(含 credit usage scope totals/buckets、stripe webhook 索引、token summary 索引)

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

feature 表只包含「各维度生产发布点之后」的变更:四个服务以 EKS Pod 实态为基线,DB migration 以 workflow 记录为基线。发布点之前已生效的内容见 「已在生产生效」 一节,不要重复列入。

Feature 聚合规则:以业务行为、用户路径、数据契约和部署依赖为准;不得机械按 PR、分支、作者或目录划分。PR、commit 和 path 仅作为可点击的追溯证据。

Feature / Author / Commits Web API Link Admin DB schema / migration
XL数据库故障切换隔离与依赖就绪(API / Link / Admin)

针对 2026-10-20 生产 RDS 故障切换事故:API 因未处理的空闲连接池错误(57P01)退出,请求堆积在指向旧主库的连接上,而健康检查无条件返回 200 继续放量,最终拖垮共享 Ingress。发布后:空闲连接错误不再杀进程;连接建立与排队等待有 2s 截止、队列上限为池容量 4 倍;区分存活 /health 与依赖就绪 /ready,DB 不可用期间 /ready 与业务准入返回 503;Link 就绪覆盖 PostgreSQL / Redis / draining;Admin 就绪覆盖配置与 PostgreSQL。影响全部经 API 的业务请求准入、Link 代理与 Admin 控制台。

必要依赖:API / Link / Admin 的新镜像必须与其 readiness chart 变更同批发布;把 chart 先套到旧镜像会让探针访问不存在的 /ready 而持续不就绪。

Author:mrcfps

  • 024422999 fix: contain database failover and add API, Link, and Admin readiness (#442)
无。 services/api/src/database-availability.ts、observed-pool.ts、app.ts、index.ts 与故障注入 E2E fixtures;deploy/charts/api/values.yaml 改为 /ready 启动/就绪探针。13 个文件。 internal/server/readiness.go(PostgreSQL / Redis / draining)、server.go、repositories/postgres.go 空闲错误处理、charts/link/values.yaml。6 个文件。 app/api/admin/readyz/route.ts、lib/server/readiness.ts、lib/server/admin/core.ts(空闲错误与连接获取上限)、deploy/charts/admin/values.yaml。4 个文件。 无 schema / migration 变更。
LAPI 滚动发布期间 SSE 连接平滑迁移

此前滚动发布会同时关闭全部 SSE 连接,旧客户端集中重连并各自发起恢复读,形成读放大。发布后 SIGTERM 先摘除就绪、预留 10s 端点传播,再用 45s 把 workspace / resource / public-share 三类流均匀关闭,随后 HTTP、已准入 handler、后台 worker 与连接池收尾,总截止 85s;就绪改为一次性启动门(池预热 + 初次 LISTEN 健康),就绪后不因共享 DB 饱和被驱逐。chart 改为 maxUnavailable=0、maxSurge=1、minReadySeconds=15、terminationGracePeriodSeconds=100(chart 内强制 ≥100)、startupProbe 指向 /ready。影响每次 API 发布期间的长连接会话(工作区事件、资源事件、公开分享评论)。

必要依赖:镜像与 chart 必须成对发布;只在旧 chart 上换镜像或只回滚镜像都不安全(旧镜像没有 /ready)。首次升级仍按旧行为终止旧进程,客户端可能在后续副本替换中再次迁移。

Author:mrcfps

  • b16207417 fix(api): pace SSE migration during rolling deployments (#389)
无。 event-stream-drain.ts、lifecycle.ts、request-pool.ts、shutdown.ts、index.ts、config.ts、metrics.ts、workspace-events / resources / collab 流处理与 7 个新测试;deploy/charts/api/templates/deployment.yaml 与 values.yaml。28 个文件。 无。 无。 无 schema / migration 变更。
LBilling 结算恢复:有界扫描、游标与重试持久化

结算兜底扫描此前反复对最老 usage history 做 anti-join 并超时。发布后按有序 keyset 分页发现(默认 72 小时回看、最近 10 页 × 2000 行、历史 1 页 × 2000 行,每阶段最多 100 个候选),在事务内物化分页后做反连接与作用域校验,持久化游标、历史边界与失败重试(按实际失败时间做指数退避),保留 request_id 幂等与跨副本 guard。影响计费补记准确性、billing worker 的 DB 负载与延迟。

必要依赖:必须先通过 deploy-db-migrations-prod.yml 应用两个 migration(含 post-migration ANALYZE),再发布 API;否则新代码会访问尚不存在的 usage_settlement_retries / usage_settlement_scan_cursors。历史补记成功会生成真实账务分录,代码回滚不会撤销。

Author:zhangchi(co-authored a1chzt、mrcfps)

  • c84252eb3 perf(billing): bound settlement recovery scans and persist retries (#388)
无。 billing/core.ts、billing/infra/postgres.ts、config.ts、index.ts、openapi.ts 与结算恢复 / 扫描成本 E2E。11 个文件。 无。 无。 20261017021500_usage_settlement_recovery.sql(新建 usage_settlement_retries、usage_settlement_scan_cursors 及索引)与 20261019035155_usage_settlement_history_fence.sql(新增 history_end 列);同步 atlas.sum、db/schema/public.hcl。
L模型路由协议与参数兼容修复(OPEND-3756)

统一 Chat / Responses / Messages 之间的历史与工具内容转换,并只在确认的模型与档位范围内归一化参数:工具结果 text 转 input_text、Messages thinking + tool_use 补空 content、对拒绝 developer 角色的模型精确转 system、剔除不支持的 temperature / top_p、DeepSeek disabled 归一为 none、补齐 deepseek-v4-flash 默认 thinking 保护;非流式 Responses→Chat 补齐 finish_reason。用户可见变化:此前返回 400/422 的请求(Aliyun Kimi K3、DeepSeek V4.1 Flash、ZAI GLM 5.3 等路由)恢复成功,工具调用与内容顺序保持不变。

Author:Liu Yi

  • 1b2bda743 fix(link): 修复模型路由协议与参数兼容缺陷(OPEND-3756) (#444)
无。 无。 bifrostengine(engine.go、deepseek_chat_tools.go、responses_chat_history.go、responses_reasoning.go、responses_facade.go、responses_chat_tools.go)、providercompat(adapter.go、default_reasoning.go、text.go)、third_party/bifrost-core/schemas/mux.go 与 e2e fixtures。21 个文件。 无。 无 schema / migration 变更。
LWeb 小语种文案按需加载(首屏 JS −13%)

8 种小语种(zh-TW、pt、es、ru、fr、ko、de、ja)文案从首屏公共包拆成带 hash 的静态资源,仅在用户使用该语言时 fetch 加载;zh-CN / en-US 保留在首屏。首屏 JS 由 570 KB 降至 494 KB(−13%)。切换语言先加载目标语言包,加载失败仍切换并回退基础文案,随后自动重试;语言检测、查词顺序与业务组件不变。影响所有 Web 首屏加载与语言切换路径。

Author:罗高

  • 767809bfb perf(web): 小语种文案按需加载,首屏 JS 减少 13% (OPEND-4000) (#349)
src/lib/i18n-locale-packs.ts、8 个 src/lib/i18n-locales/*.json、i18n.tsx、main.tsx 与新增单测 / 浏览器测试。18 个文件(新增静态资源随 Web 构建产物发布,无额外配置)。 无。 无。 无。 无 schema / migration 变更。
MAdmin 单模型目录测试与独立 CLI 发行

新增 amr-admin catalog test --public-model/--backend-model(可选 --protocol、--prompt),Admin 公共模型表新增测试对话框,页面与 CLI 共用同一测试 handler;CLI 拥有独立 VERSION、catalog template、可复现 Node 归档、校验和安装器与 Forgejo/R2 发布 workflow。后续修复草稿 tag 复用、附件鉴权与安装器默认 URL,并统一 prod/test/local profile 与授权页样式。影响运营 / 客服在 Admin 上做单模型推理检查,以及内部 CLI 使用者。

必要依赖:catalog test 需 Admin 与 Link 同批上线;CLI 首次自动化发行需先准备 R2 bucket / 自定义域 CDN,并配置 AMR_ADMIN_RELEASE_ENABLED、AMR_ADMIN_RELEASE_BUCKET、AMR_ADMIN_RELEASE_URL、CLOUDFLARE_ACCOUNT_ID、CLOUDFLARE_API_TOKEN,缺失时 release workflow 会显式失败。

Author:Liu Yi

  • a599a498a feat(admin): single-model catalog tests and standalone CLI distribution (#440)
  • f5a383539 fix(admin-cli): recover Forgejo releases and verify repeatable publishing (#445)
无 runtime 变更(仅 1 个浏览器测试文件)。 无 runtime 变更(仅 1 个测试文件)。 内部诊断链路调整:internal/backendtest/test.go、internal/server/internal_public_models.go、internal_backend_diagnostics.go 及目录配置测试。5 个文件。 模型列表测试对话框、模型配置 action 与审计动作、cli/(VERSION、amr-admin.mjs、release/ 打包发布安装脚本、cli-auth.ts)、i18n 文案与测试。累计 38 个文件。 无 schema / migration 变更。
MLink 模型可用性窗口聚合性能

auto-availability 控制器此前为每个 model/provider 直方图重复扫描同一 usage 窗口,且每 tick 对相同 10 分钟窗口聚合两次。发布后由一次 (model_id, provider_id, status_code) 聚合派生总数、失败数与状态直方图,默认 tick 聚合调用 4→3,缓存不跨 tick;调度与下线/恢复阈值不变。生产只读对比:30 分钟窗口 984 ms→215 ms,临时读块 16,133→592。影响可用性判定时延与 DB CPU 占用。

Author:mrcfps

  • 8283b69dd perf(link): avoid repeated model availability window aggregation (#441)
无。 无。 internal/autoavailability/controller.go、internal/repositories/postgres.go 及真实数据库回归 / e2e 测试。6 个文件。 无。 无 schema / migration 变更(复用既有索引)。
MDeepSeek 输出预算按上游协议下发

官方 DeepSeek Chat 出站边界改用 max_tokens(此前误用 max_completion_tokens,上游忽略后回落到默认 65,536),修复用户设置 384K 输出预算仍被 64K 截断的问题。影响 DeepSeek 长输出请求的完成度、finish_reason 与 token 计费口径。

Author:nettee(Liu Yi)

  • 1963f1f88 fix(link): honor DeepSeek output budgets instead of falling back to 64K (#447)
无。 无。 internal/providercompat/adapter.go 出站预算字段映射与单测 / 真实 handler E2E。5 个文件。 无。 无 schema / migration 变更。
SResponses reasoning 摘要增量实时下发(OPEND-4022)

Chat 后端经 /v1/responses 返回 reasoning 时,客户端现在会先收到 summary_part.added,再逐段收到 summary_text.delta,最后 done,同时保留完整摘要供下一轮工具调用回放;增量绑定预留 item_id、output_index=0、summary_index=0,sequence 单调性、工具回放与取消行为不变。影响使用 Responses 协议的流式推理展示体验。

Author:Liu Yi

  • 8b0c9bb38 fix(link): 实时下发 Responses reasoning 摘要增量(OPEND-4022) (#449)
无。 无。 internal/bifrostengine/responses_reasoning.go 与流式回归测试。2 个 runtime 文件。 无。 无 schema / migration 变更。
S生产 Web 发布 workflow 复用接入独立分享站

在既有 deploy-web-eks-prod.yml 上增加 target 维度:默认 console / preflight 行为完全不变;target=share 时使用根路径 /、amr-share-web 与独立 tag,并要求显式 mode=deploy。属于发布流程能力变更,不改变任何运行时行为;分享站真正上线还依赖受审资源、DNS/TLS/Secret 与同 SHA API 就绪。

Author:zhangchi

  • fda6d64b2 feat(release): 复用生产 Web workflow 接入独立分享站 (#443)
无 runtime 变更(仅发布 workflow 与 tools/prod-web-release.mjs)。 无 runtime 变更。 无 runtime 变更。 无。 不影响 migration workflow(无 db/ 变更)。
SPreview 环境 Vela 应用组泳道

把四个 Vela 服务作为一个 Orbit PR 泳道部署,支持 shared-Test 或独立 PostgreSQL;独立泳道复制一致快照、执行该 PR 的 Atlas migration 并 ANALYZE,再把命名空间内连接注入 API / Link / Admin。共享数据部署在 db/schema 或 db/migrations 变化时按 ORBIT_SHARED_SCHEMA_SHA 前置拒绝。只影响 preview / CI 发布链路,不改变生产 runtime。

Author:mrcfps

  • 7da7b7344 feat(preview): deploy complete Vela application group lanes (#432)
无 runtime 变更。 无 runtime 变更(仅 1 个测试文件)。 无 runtime 变更。 无。 不新增 migration;但会校验共享数据部署的 schema baseline,migration 不一致时 preview 部署失败。

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

以下 feature 的 commit 均在对应生产发布点之前,已在生产运行。四个服务以 EKS Pod 实态为基线,DB migration 以 workflow 记录为基线。若从 main 重新发布,只分析各自基线之后的净新增;生成报告时必须把基线之前的内容从 feature 表挪到这里。

发布建议

  1. Migration 判断:DB migration 发布点(run #67356,b34670be2)之后新增 2 个 migration:20261017021500_usage_settlement_recovery.sql、20261019035155_usage_settlement_history_fence.sql。两者均为增量(新建两张表 + 一个可空列),必须先运行 deploy-db-migrations-prod.yml(含 post-migration ANALYZE)再发布 API。范围内没有被回退的 migration,不存在跳过执行的特例。
  2. 服务发布顺序:
    1. DB migration(2 个文件,1 commit)→ 确认 atlas.sum 一致、usage_settlement_* 表与索引存在、ANALYZE 完成。
    2. Admin + Link 同批(catalog test 需要两端同时具备;Link 共 6 个 runtime commit,Admin 3 个)。
    3. API(3 个 runtime commit:故障切换就绪、SSE 滚动迁移、billing 有界扫描)。API / Link / Admin 的镜像与 readiness chart 必须成对发布,chart 先于旧镜像会导致 /ready 404。
    4. Web(1 个 runtime commit,i18n 语言包,可独立发布)。
    5. 可选、需单独授权:分享站 target=share 发布、Admin CLI 首次自动化发行(先备好 R2/CDN 与相关环境变量)。
    维度发布点相同的部分可并行,但上述依赖顺序不能颠倒;若只发单个服务,注意 Link/Admin 的 readiness chart 仍要与其镜像配对。
  3. 发布后观测:
    • API:/ready 状态与 503 比例、请求池等待数与 2s 超时计数、SSE 重连率与恢复读 p95、发布窗口内 5xx;确认 /health 仍只反映进程存活。
    • DB:migration 后 usage_settlement_scan_cursors 游标推进、usage_settlement_retries 重试分布、billing worker 扫描耗时与 DB CPU/AAS。
    • Link:供应商 4xx/422 比例(协议兼容修复)、DeepSeek 输出长度与 finish_reason=length 比例、Responses 流中 reasoning delta 是否先于 output_item.done、可用性聚合 SQL 调用数与耗时。
    • Admin:/api/admin/readyz 与页面可用性、单模型目录测试结果与耗时、CLI 发行流水线产物与 CDN 校验和。
    • Web:首屏 JS 体积(预期 570 KB → 494 KB br)、语言包请求失败率与语言切换回退日志。

备注:所有 workflow、commit、PR 或 compare range 均使用可点击的 Forgejo 链接。四个服务的 compare range 基于 EKS Pod 观察到的 b34670be2,DB migration 的 compare range 基于 migration workflow 记录的 b34670be2;本次五个维度发布点恰好一致,但计算仍按各维度独立执行。四个服务最近成功的生产 deploy workflow 与 Pod 实态完全一致(web #67387、api #67371、link #67372、admin #67373,均部署 b34670be2)。