AMR 生产发布影响报告

生成时间:2026-10-30T02:00Z(schedule daily-release-impact);分析对象:从 origin/main(HEAD 0edc16b4, [OPEND-3102] perf(billing): 收敛日常额度读取的重复计算与历史依赖 (#756),2026-10-30 01:59:23Z)发布的影响分析。 四个服务以 EKS Pod 实际运行镜像为生产发布点,DB migration 以对应 workflow 最近成功运行的 commit_sha 为生产发布点;五个发布维度分别计算变更范围。

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

Web、API、Link、Admin 的发布点来自 Grafana / Prometheus(kube-state-metrics,namespace nexu)观察到的 Ready EKS Pod 镜像, 已按 kube_pod_deletion_timestamp 排除终止中 Pod;DB migration 的发布点来自 deploy-db-migrations-prod.yml 最近一次成功运行。 feature 表只列出各维度发布点之后的变更;发布点之前的 commit 属于已生效,归入「已在生产生效」一节。 与 2026-10-29 的那份报告相比,五个发布点在 24 小时内没有任何变化(四个服务未重新部署、DB migration 未再次运行),但 origin/main 已从 a30eb9fc3 前进到 0edc16b4。

Web · EKS Pod 实态
Workload:nexu/amr-web · container web
观察时间:2026-10-30T02:00:35Z
观察到的 Ready Pods:2(amr-web-dfb8b75-glks9 / -d9nwc)
实际 commit:568b8981(2026-10-27 06:45Z · #620)
镜像 digest:sha256:6ea7628ac08f36e9bbcd31cd79a5f56eee08c512d00745fe09f7cb4f19bb2478
Workflow 审计:deploy-web-eks-prod.yml 最近成功 #18208(同 commit,与 Pod 一致,无手工回滚)
本次新增(568b8981...0edc16b4):17 commits
Web 发布点为五维中最旧(落后 API 4 小时、落后 Link/Admin/DB 1.5 天),因此 Web 待发布内容最多。
API · EKS Pod 实态
Workload:nexu/amr-api · container api
观察时间:2026-10-30T02:00:36Z
观察到的 Ready Pods:4(amr-api-6b48f88d89-*)
实际 commit:bfc134ea(2026-10-27 10:39Z · #634)
镜像 digest:sha256:8504c7cc098ca4c56c8b241b1fa74161d8ffc63e7395bafb5bc6d8c8bc540fcb
Workflow 审计:deploy-api-eks-prod.yml 最近成功 #18728(同 commit,与 Pod 一致)
本次新增(bfc134ea...0edc16b4):252 commits(其中 122 个 test 提交)
Link · EKS Pod 实态
Workload:nexu/amr-link · container link
观察时间:2026-10-30T02:00:37Z
观察到的 Ready Pods:13(amr-link-656bcffbf7-*)
实际 commit:a9666329(2026-10-28 12:18Z · #673)
镜像 digest:sha256:43cd3fd0d67bf723cf4d131e518eca1d08409cdef246dcf7239c4e7f3153490d
Workflow 审计:deploy-link-eks-prod.yml 最近成功 #20433(同 commit,与 Pod 一致)
本次新增(a9666329...0edc16b4):22 commits(其中 4 个 test 提交)
Admin · EKS Pod 实态
Workload:nexu/amr-admin · container admin
观察时间:2026-10-30T02:00:39Z
观察到的 Ready Pods:2(amr-admin-*)
实际 commit:e05a7065(2026-10-28 11:58Z · #677)
镜像 digest:sha256:34fc0425128f95c2edaf576eef9db19da6bd05d44d080433611212f512fb6a44
Workflow 审计:deploy-admin-eks-prod.yml 最近成功 #20395(同 commit,与 Pod 一致)
本次新增(e05a7065...0edc16b4):3 commits
DB migration · workflow 记录
最近成功:#20415(API id 84043,2026-10-28)
发布点 commit:a9666329
本次新增(a9666329...0edc16b4):13 commits
待应用:db/migration-rollout.json 指向的 production-forward 包共 111 个阶段迁移(expand 57 / contract 1 / legacy_team_prepare 5 / application_ready 20 / runtime_ready 28)。
本次 README 说明见 发布建议:当前 manifest 未绑定已批准的 bridge 证据,contract 阶段无法通过。

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

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

Feature 聚合规则:以业务行为、用户路径、数据契约和部署依赖为准;PR、commit 和 path 仅作为可点击的追溯证据。 净新增规模:Web 468 文件(+104,343/−5,453)、API 1,535 文件(+584,641/−13,560)、Link 280 文件(+115,278/−379)、 Admin 59 文件(+11,141/−389)、DB 1,188 文件(+96,839/−38,其中 57 个新 db/migrations、6 个新 db/schema 源)。

Feature / Author / Commits Web API Link Admin DB schema / migration
XXL席位放开一期:席位定价、成员席位与邀请流程

面向所有工作空间用户的席位计费一期:套餐/席位定价入口、席位数量与成员席位动作、邀请落地页与十语文案、共享套餐额度明细与额度说明气泡、旧空间升级回流提示。 Web 是主实现(components/commerce 50 个文件、components/console 21 个、components/team 6 个,新增 routes/team、team-seat-action、workspace-invite-preview、wallet、usage-cost-detail 等路由), 同时改到 API 的席位/权限与订阅判定、Link 的请求许可判定、Admin 的席位与套餐管理界面,并依赖新的 membership 结构迁移。

Author:杨瑾龙、eli、luogao、覃栋

  • a30eb9fc3 feat: 集成席位放开一期,持续补齐验收与回归 (#467)
  • 93280b583 fix(web): 落实席位一期文案审阅并同步十语 (#685) · dd5e0ebfe 席位一期 UI 默认开启 (#699)
  • 274147605 切换空间不重复打开创建弹窗 (#693) · 7c25b2d64 localize workspace member invitations (#715)
  • a64af5660 定价入口仅 Owner 可见,补齐旧空间升级回流提示 (#706) · 5d7ef6192 恢复共享套餐定价弹窗的额度明细 (#707)
  • 9a3352a1d 额度说明气泡上移 (#700) · 0a6a48c92 赠送额度模型限制移入 tooltip (#743)
  • 0aa7d2828 恢复旧团队 Owner 升级入口 (#724) · caaf554f5 移除 API 密钥页的可用模型展示 (#732)
  • a98195eba 保留 Stripe 返回地址的部署路径 (#745) · e7e1774ae 允许活跃成员查看工作空间用量明细 (#753)
本 feature 的主实现:席位/定价/邀请/额度 UI 与十语文案(components/commerce、components/console、components/team、assets/seats-phase1、lib/i18n-locales 8 个语言文件),新增 team / 邀请预览 / wallet / 用量明细路由。由于 Web 发布点(2026-10-27)早于 #467 合并,本 feature 在 Web 侧整体未上线。 席位/成员权限与订阅判定、工作空间用量明细查询(billing/http、workspaces/*)、面向席位一期的 API 路由;#467 的 1,403 个 API 文件中的席位部分。 #467 中与请求许可、准入判定相关部分(services/link 252 个文件中的席位/额度判定),使新席位额度对普通请求生效。 #467 的 Admin 席位/套餐管理界面与查询(59 个文件)。 membership 与共享额度结构:20261018200641_workspace_shared_expand_structure.sql、20261018200710_workspace_shared_expand_constraints_public_membership_entitlements_install.sql、20261020030930_members_registration_invite_signal.sql、20261028051631_usage_wallet_resolution_structure.sql 等(57 个新 db/migrations 中的席位部分),在 forward 包的 expand / legacy_team_prepare / application_ready 阶段生效。
XXL旧 Team 留存订阅与本地资金计费迁移(retained / funded local migration)

本次改动量最大的工程:把旧 Team 订阅、既有资金与赠送额度按本地实际订阅与本地资金迁移,不再依赖历史价格、Stripe 远端订阅与旧债导入前置; 结算路由改为读取已完成的工作空间快照,过期 Free 交接、退款资金归属、个人配额归属、日常额度读取全部收敛到当前事实。 同时产出 5 阶段 production-forward 迁移包(expand 前必须保持 shared billing 关闭),这是本次发布的关键路径。

Author:lefarcen、杨瑾龙、Amy

  • b9a0d5702 feat(billing): migrate retained Team from current local subscription and funds · 5951ec4c7 read retained funded contracts from current local facts
  • 6f03d40f5 hand off funded Team contracts from current local sources · 2e45387e1 route settlement from completed workspace state
  • 4f458164c 收口迁移恢复与旧计费连续性 (#696) · 47e21fe9b 移除日常迁移门禁并恢复个人回填 (#716)
  • d47f869af 承接迁前旧债并修正迁移快照误拦 (#722) · 0edc16b4 收敛日常额度读取的重复计算与历史依赖 (#756)
  • 3224a9d06 prepare and refresh funded migrations from local service contracts · 48aa0fa63 prove and register funded local production forward upgrade
  • d6b311473 represent unknown original renewal cash without price reconstruction(Admin) · 19aa91f09 更新共享工作空间测试余额 (#717)
无 runtime 变更(apps/web 仅 #726 计费回归测试文件)。 API 本次 252 个 commit 的主体:billing/workspace-commerce 76 个文件、billing/migration-jobs 28 个、billing/infra 17 个 —— 迁移准备/预检/迁移任务协调、留存 Team 日历与赠额账本、退款与资金归属校验、普通成员变更与邀请不再依赖资金锁、结算与额度读取改为当前事实(含 #756 性能收敛)。 legacy_funding_retained_local.go、retained 物化 SQL、可空本地配额审计、本地固定规则迁移收据、原赠额排除(22 个 Link commit 中的 18 个)。 d6b311473 未知原始续费现金展示、b9a0d5702 按本地订阅与资金迁移留存 Team(3 个 Admin commit 中的 2 个)。 57 个新 db/migrations(retained_team_grant_ledger、retained_team_calendar_source/epochs、retained_team_local_funded_source、retained_team_nullable_local_source、aligned_funded_retained_cutover、billing_migration_job_coordination 等)+ 6 个新 db/schema 源;production-forward 包 111 个阶段迁移(db/recovery/retained-team-production-forward-production125-funded-source-20261030)。
L分享协作:云端评论修复、手机只读评论、服务端统一校验与上传恢复

分享画布的协作体验修复:云端评论线程与手机端只读评论行为修正;上传/分享鉴权统一到服务端裁定,补齐上传恢复、失败回收与实例一致性校验。 分享页走独立的 amr-share-web 生产发布(deploy-web-eks-prod.yml 的 target=share),发布前置会等待同提交的 API 已在生产可用,因此该 feature 的实际可用性取决于 API 能否先发布。

Author:zhangchi

  • c8d4102bc fix(share): 云端评论修复与手机只读评论
  • 7e41ee4e9 refactor(share): 统一服务端校验并补齐上传恢复与回收 (#579)
components/shared-artifact 12 个文件、分享路由、手机只读视图与相应单测/浏览器用例。 resources 服务端统一校验、上传恢复与回收、collab 评论接口、分享策略读路径。 无。 无。 20261028094201_public_upload_recovery.sql(forward 包 pendingMainSources 条目,已在 expand 阶段覆盖)。
M用量与支付可观测性:finalized usage / gift debit 指标与 Link 供应商观测

新增有界基数口径的用量与赠送扣减指标(finalized usage、gift debit),以及 Link 侧供应商调用与网关结果观测(request outcomes、provider attempt observer), 用于发布后判断计费与转发是否正确,不改变业务判定。

Author:韩沅锡、Liu Yi

  • dc2744c7e feat(observability): add bounded finalized usage and gift debit metrics (#731)
  • 891ec4ed8 feat(link): 补齐供应商调用与网关结果观测 (#686)
无。 计费指标埋点(billing/infra 指标命名/口径)与对应测试。 internal/usage finalized 指标、internal/requestobs 请求结果观测中间件、bifrost-core provider attempt observer、media 观测接线。 无。 无 schema/migration。
M用量与额度读取修复:倍率快照、旧个人订阅等级与日常额度性能

Usage 明细在普通请求停止写入 admissions 后仍 INNER JOIN 旧表取倍率,导致新 Coding Plan 用量倍率显示未知:改为优先读 contribution 倍率快照、对历史空快照 LEFT JOIN 旧 admission 兜底(不默认 ×1)。 另修复未绑定工作区时旧个人订阅等级显示错误,并收敛日常额度读取的重复计算与历史依赖。

Author:Liu Yi、zhangchi、杨瑾龙

  • 6e044e1b1 fix(usage): 兼容 admissions 停写前后的套餐倍率查询 (#695)
  • 0447373de fix(billing): 修复未绑定工作区的旧个人订阅等级显示 (#736)
  • 0edc16b4 perf(billing): 收敛日常额度读取的重复计算与历史依赖 (#756)
无。 billing/infra/postgres.ts 用量明细倍率查询、workspaces 订阅等级解析、日常额度读取路径。 无。 无。 无 schema/migration(仅查询兼容层;历史空快照回填与彻底移除旧 admission JOIN 不在本次范围)。

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

以下内容的 commit 均在对应维度的生产发布点之前,已在生产运行。四个服务以 EKS Pod 实态为基线,DB migration 以 workflow 记录为基线; 重新发布不会再次引入这些变更。

发布建议

结论:本次不建议、也无法按五元组现在发布。DB 的 contract 阶段与 API 的 schema 门禁互相等待,形成死锁;唯一可以先执行的是 DB 的 expand 阶段。

  1. Migration 判断 —— 必须先跑 expand,但 contract 现在会硬失败。 db/migration-rollout.json 指向 production125-funded-source-20261030 manifest (schemaSourceSHA b38c74ac0,originalMainSHA a9666329,api_required_stage = runtime_ready), 共 111 个阶段迁移:expand 57 / contract 1 / legacy_team_prepare 5 / application_ready 20 / runtime_ready 28,另有 18 个在线索引与生产数据 preflight。
    • expand:不依赖 writer fleet,可先执行;需通过生产数据 preflight(preflight.sql)与 production125 ledger 校验。执行期间必须保持 shared billing 关闭。
    • contract:scripts/prod-db-migration-workflow.py 的 verify_bridge_compatibility() 要求 manifest 内 bridgeCompatibility.approved = true 且目录内有与之绑定的 bridge-compatibility.json。 当前 manifest 没有 bridgeCompatibility 字段,该目录也没有 bridge-compatibility.json,因此 contract 会在 No approved expand-only bridge smoke… 处直接失败,后续 legacy_team_prepare / application_ready / runtime_ready 因阶段边界依赖同样无法进行。
    • 环依赖:contract 还要求 amr-api / amr-link / amr-admin / amr-web 四个 Deployment 全部处于 prod-<GITHUB_SHA>、完全就绪、且 shared billing 显式为 off; 而 deploy-api-eks-prod.yml 在部署前无条件执行 api-schema-precheck:api_required_stage = runtime_ready 时必须已全量应用 runtime_ready,否则只能走 bridge 分支,而 bridge 分支同样要求上述已批准的 bridgeCompatibility。 结论:API 无法在 contract 之前发布,contract 又要求 API 已在同一 commit 上,五个维度当前无法闭合。
    解锁条件(文件级):在 manifest 中绑定已评审的 bridgeCompatibility(sourceFiles 覆盖 services/api/src、services/link、packages/shared/src 与 4 个依赖文件,8 项真实链路检查全部 passed,含 current / switch / old cash / Team 与个人 signed paid+repeat / Go ready / original funding / API model funding preflight),并在同目录提供 bridge-compatibility.json。
  2. 服务发布顺序 —— 只有在 bridge 证据就位后才成立。
    1. DB expand(57 个迁移,保持 shared billing 关闭)。
    2. Web、API、Link、Admin 全部发布到同一个 commit(contract 的 writer fleet 校验要求四个 Deployment 同时是 prod-<同一 SHA>,因此不能分批到不同 commit)。此步 API 走 bridge precheck 分支。
    3. DB contract → legacy_team_prepare → application_ready → runtime_ready,每阶段单独一次 dispatch(writers_ready_revision 必须等于该次 dispatch 的 GITHUB_SHA)。
    4. runtime_ready 完成后再按常规流程确认 API 最终版本(api_required_stage 已满足)。
    待发布净增:Web 17 commits(最小发布点)、API 252、Link 22、Admin 3、DB 13 commits + 111 个阶段迁移。 分享页(amr-share-web)必须等同提交 API 在生产可用后才能发布,因此排在 API 之后。
  3. 发布后观测。
    • DB:每个阶段的 checkpoint 与 schema-ledger-proof.json 一致;在线索引 CONCURRENTLY 的 ready/valid;preflight 计数器保持 0 / complete;contract 完成前 shared billing 必须仍为 off。
    • Link / API 计费:#731 的 finalized usage 与 gift debit 指标基数是否有界、是否出现骤增;请求结果观测(#686)中 4xx/5xx 与网关失败原因分布。
    • 用量与额度:#695 兼容期内 Usage 明细倍率是否仍出现"未知"(历史空快照属已知残留);日常额度读取的延迟与 DB 负载(#756)。
    • 分享:上传恢复/回收成功率、手机端只读评论区行为、分享鉴权 403/401 比例(#579 / c8d4102bc)。
    • 席位:#467 的定价入口可见范围(Owner)、邀请落地页、席位变更与套餐升级回流的 4xx 与前端错误上报。

备注:所有 workflow、commit、PR 与 compare range 均使用 Forgejo 链接(https://code.powerformer.net/core/amr)。 四个服务的 compare range 基于 EKS Pod 观察到的 BASE(Web 568b8981、API bfc134ea、Link/Admin a9666329), DB migration 的 compare range 基于 workflow 记录 a9666329;未统一使用最旧基线,也未用最近成功 workflow 的 SHA 替代 Pod 实态。 Ready Pod 数量仅为观察值(Web 2 / API 4 / Link 13 / Admin 2),不表示副本一致性或健康检查通过。