AMR 生产发布影响报告

生成时间:2026-10-28 12:19Z(观察窗口 2026-10-28T12:19:53Z ~ 12:19:57Z);分析对象:从 origin/main(HEAD a96663290)发布 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 均为 a96663290 ([OPEND-4376] feat(link): 内存传递普通请求许可并迁移视频准入至 v2 (#673),2026-10-28 12:18:55Z)。

Web · EKS Pod 实态
Workload:nexu/amr-web · container web
观察时间:2026-10-28T12:19:53Z
观察到的 Ready Pods:2(已排除 deletionTimestamp Pod:0)
实际 commit:568b8981
镜像 digest:sha256:6ea7628ac08f36e9bbcd31cd79a5f56eee08c512d00745fe09f7cb4f19bb2478
Workflow 审计:deploy-web-eks-prod.yml 最近成功 #18208(568b8981);与 Pod:一致
本次新增(568b8981...a96663290):9 commits,其中 apps/web 仅 1 个测试文件
发布点之前已上线:管理后台与工作区用量页面、账单 SQL、模型目录等(Web 容器自 2026-10-27T06:45Z 起未重新部署)
API · EKS Pod 实态
Workload:nexu/amr-api · container api
观察时间:2026-10-28T12:19:54Z
观察到的 Ready Pods:4(已排除 deletionTimestamp Pod:0)
实际 commit:bfc134ea
镜像 digest:sha256:8504c7cc098ca4c56c8b241b1fa74161d8ffc63e7395bafb5bc6d8c8bc540fcb
Workflow 审计:deploy-api-eks-prod.yml 最近成功 #18728(bfc134ea);与 Pod:一致
本次新增(bfc134ea...a96663290):5 commits,services/api 净变更 0
发布点之前已上线:contribution 倍率快照双写、用量/账单 SQL 优化、admission 外键清理
Link · EKS Pod 实态
Workload:nexu/amr-link · container link
观察时间:2026-10-28T12:19:55Z
观察到的 Ready Pods:16(已排除 deletionTimestamp Pod:0)
实际 commit:e05a7065d
镜像 digest:sha256:b3ac7f816f6300086dc55b754157f4339f59b362f9e7d84d9a09972fad96fe08
Workflow 审计:deploy-link-eks-prod.yml 最近成功 #20394(e05a7065d);与 Pod:一致
本次新增(e05a7065d...a96663290):1 commit
发布点之前已上线:11:58Z 刚完成一次发布,含 public model 权限收紧(#677)与 DeepSeek Flash hosted search 修复(#642)
Admin · EKS Pod 实态
Workload:nexu/amr-admin · container admin
观察时间:2026-10-28T12:19:57Z
观察到的 Ready Pods:2(已排除 deletionTimestamp Pod:0)
实际 commit:e05a7065d
镜像 digest:sha256:34fc0425128f95c2edaf576eef9db19da6bd05d44d080433611212f512fb6a44
Workflow 审计:deploy-admin-eks-prod.yml 最近成功 #20395(e05a7065d);与 Pod:一致
本次新增(e05a7065d...a96663290):1 commit,apps/admin 净变更 0
发布点之前已上线:批量封禁事务化与审计修复(#635)已随 11:58Z 发布上线
DB migration · workflow 记录
最近成功:#18678(API id 81619)
发布点 commit:bfc134ea
本次新增(bfc134ea...a96663290):1 commit / 1 migration
发布点之前已执行:20261027093246_contribution_multiplier_snapshot.sql、20261027031902_drop_contribution_admission_foreign_key.sql

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

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

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

Feature / Author / Commits Web API Link Admin DB schema / migration
XL视频准入迁移到 admissions_v2,普通请求改为请求内内存许可

模型限额准入的数据契约改造。普通 / 流式 / 同步图片请求把完整 Permit 集合随请求传递(requestMeta → usage.Result → Recorder),准入只锁额度窗口、不再读写 model_limit_admissions 表;公共与内部视频路径的新许可只写入 link.model_limit_admissions_v2,持久化完成入口可同时接续旧表与 v2。额度窗口、倍率快照、贡献幂等都仍在同一个原子完成事务内。可观测行为变化:普通请求不再持续增加 admissions 行;准入提交结果不确定且未拿到 Permit 时可能少计额度贡献(不再有从存储恢复的兜底)。

必要依赖与先后关系:本文只分析影响、不执行发布或配置变更。

  • 必须先执行 v2 加表 migration(20261028083959_add_video_admissions_v2.sql),再发布 Link;migration 只新增表与索引,不删除旧表、不回填历史数据。
  • 滚动升级需要排空旧 HTTP 请求:旧进程内存中的 Permit 无法跨进程恢复。
  • PR 说明要求「在生产启用普通请求内存许可前」完成并验证 OPEND-4415 的 Usage 展示查询切换与既有倍率回填。当前证据显示该前置项尚未完成:API 生产代码(services/api/src/billing/infra/postgres.ts:5063,已在生产运行)仍以 join link.model_limit_admissions admission on admission.id = contribution.admission_id 做用量页倍率/贡献补全,而内存许可的 contribution.admission_id 是基于内存 Permit UUID、并不存在于旧 admissions 表。因此发布后工作区用量明细里的 plan_multiplier / plan_contribution_credits 对新 Coding Plan 请求会为空,直到 OPEND-4415 的查询切换上线。本次五个维度内没有任何 API 变更来消除这一缺口。
  • 回滚到旧版本二进制会恢复写旧 admissions 表,任何表退役等待期需重新计时。

Author:nettee

  • a96663290 #673 feat(link): 内存传递普通请求许可并迁移视频准入至 v2(OPEND-4376)
无 runtime 变更。9 个 commit 范围内 apps/web 只改了 1 个 Browser QA 测试文件(见下一行)。 无。services/api 在 bfc134ea...a96663290 内净变更 0;但生产 API 现有的 admissions 关联查询会与本次 Link 行为变化产生展示差异,见左侧依赖说明。 15 个文件:handlers/admission_pipeline.go(Permit 传递、permitContext 来源判定)、handlers/openai.go、handlers/anthropic.go、handlers/internal_media_image.go(内存许可)、handlers/internal_media_video.go(persisted 许可)、modellimit/model_limit.go(新增 PermitSource、CompleteUsageWithPermits)、repositories/model_limit.go(v2 写入、双表读取与完成、内存完成路径、失败诊断覆盖两表)、usage/usage.go(Recorder 透传);另含 README 与测试。 无。 migration:新增 db/migrations/20261028083959_add_video_admissions_v2.sql(表 link.model_limit_admissions_v2,主键 id、唯一 (execution_id, policy_id)、5 个外键、4 个 CHECK、2 个索引);schema:db/schema/link.hcl 增加对应表定义;db/migrations/atlas.sum 更新。
SBrowser QA 冷启动竞态修复(仅测试)

Browser QA 的 Team Member 入口用例在 Vite 冷启动时会话未就绪即断言,导致误报。改为同时等待 workspaces/current 响应与页面跳转后再断言;原有的权限拒绝、入口隐藏、零敏感请求断言保持不变。只影响 CI 的测试稳定性,不进任何服务的运行时代码。

Author:nettee

仅 apps/web/tests/browser-agent/member-entry-points.spec.ts;无用户可见行为变化,仍会随 Web 镜像构建。 无。 无。 无。 无 schema/migration。

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

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

发布建议

  1. Migration 判断:bfc134ea 之后新增 1 个 migration 20261028083959_add_video_admissions_v2.sql,必须先运行 deploy-db-migrations-prod.yml。它是纯增表 + 索引,无 DROP、无回填,对旧版本二进制兼容(旧版本不写 v2),可安全先于服务发布。范围内没有被回退的 migration。
  2. 服务发布顺序:① DB migration(1 个 migration)→ ② Link(1 commit:a96663290)→ ③ Web(仅测试文件,按普通节奏发布即可,9 commits 里 apps/web 只 1 个文件)→ ④ API / Admin 本次无净变更,无需为本次发布动作(API 仍是 bfc134ea、Admin 仍是 e05a7065d)。Link 滚动期间需确保旧 HTTP 请求排空后再缩掉旧 Pod;若回滚 Link,注意旧版本会恢复写旧 admissions 表。
  3. 发布后观测:Link 侧看 model_limit_admissions_v2 插入量、旧 model_limit_admissions 是否停止增长、完成事务成功率与 completion_error、准入 fail-open 计数、HTTP 5xx / p99;核对内部与公共视频任务 queued → succeeded 与 contribution 金额;核对普通请求不再产生 admissions 行且贡献恰好 1 次;业务侧重点验证工作区用量明细里 Coding Plan 行的倍率/贡献列——按当前证据这些列在新请求上会为空,需在 OPEND-4415 查询切换上线前后分别确认,避免被当作数据丢失事故。

备注:所有 workflow、commit、PR 或 compare range 都使用可点击的 Forgejo 链接。四个服务的 compare range 基于 EKS Pod 观察到的 BASE(Web 568b8981、API bfc134ea、Link/Admin e05a7065d),DB migration 的 compare range 基于 migration workflow 的 BASE bfc134ea;未使用四个服务最近成功 workflow 的 SHA 替代 Pod 实态(本次二者一致,无手工回滚差异)。