AMR 生产发布影响报告
当前生产发布点(EKS 实态 + workflow 记录)
Web、API、Link、Admin 的发布点来自 Grafana / Prometheus(datasource prometheus)观察到的 Ready EKS Pod 实际运行镜像;DB migration 与 Catalog 的发布点来自对应 workflow 最近一次成功运行。
越新的发布点意味着该维度已上线越多内容,feature 表里只允许列出发布点之后的变更;发布点之前的 commit 属于已生效,归入「已在生产生效」一节,不得重复出现在 feature 表。目标 commit 均为
ca0020856
(feat(cms): production CMS launch — canary gate, promotion on the production API, runbook (#2053),2026-09-16)。
nexu/amr-web · container webamr-web-5f9f864765-4r8qt、amr-web-5f9f864765-hfdhbae4b84f76sha256:321e7728c850b705aa6cedfafc381f862900719a6e65b4eb0606599a61098c56ae4b84f76...ca0020856):11 commits 触及该服务路径nexu/amr-api · container apiamr-api-7f77b4bfc-9rq8s、amr-api-7f77b4bfc-dgljjb6a6adafbsha256:8a5b8f37a1eeb5d28f17771f50710bd094f6e39e478db7ed5a571d8dd1e204ccb6a6adafb...ca0020856):15 commits 触及该服务路径nexu/amr-link · container linkamr-link-8596d5684f-scgm4、amr-link-8596d5684f-65cfleecb4434dsha256:28aa5dd46346cf723150ce708abce394b369ecd86baa45cec3e986aa7e34bd4beecb4434d...ca0020856):8 commits 触及该服务路径6ed3057a5(Coding Plan Go 档位下线)在发布点之前已生效。nexu/amr-admin · container adminamr-admin-b885c85ff-vr6wt、amr-admin-b885c85ff-c6bmdeecb4434dsha256:ec024eb44eed002541226dbb73baf1f5dd06eccc79a2837c378909a2f0d10151eecb4434d...ca0020856):9 commits 触及该服务路径eecb4434d(head_sha eecb4434d0bd…)eecb4434d...ca0020856):5 commits 触及 db/migrations + db/schema,新增 6 个 migration20260909071815_retire_coding_plan_go_config.sql(Coding Plan Go 配置下线 phase 2);生产库因此尚无 touchpoints schema,CMS 提升第一次写入会失败。21c79c6c6(head_sha 21c79c6c6d0b…)21c79c6c6...ca0020856):4 commits 触及 data/ 或 db/seeds,其中 2 个为功能性 catalog 变更(af7415d35、77054ca19)21c79c6c6)及更早的模型/路由/定价。此次发布真正新增的 feature 和影响面
| Feature / Author / Commits | Web | API | Link | Admin | DB schema / migration | DB catalog(seed) |
|---|---|---|---|---|---|---|
|
XXLCMS(Touchpoint)生产上线:不可变内容 → Test 跨环境验收 → 生产提升,带白名单 canary
把运营活动从「只能在 Test 发布」变成「可发布到生产」。Admin 在 Author:Caprika
|
只选 ready 内容、Test 撤下独立(de6ead823);canary 拒绝时按 production_runtime_withdrawn 清空浮窗(ca0020856)。 |
不可变内容生命周期 + 跨 host Test 验收(0f5bf8525);Test 与提升共用同一 CAS artifact store(8c2d0f95b);ZIP 目录白名单与存储失败上报(02ce3dd9c);就绪内容选择与撤下(de6ead823);realtime Test 生命周期与授权租约(5eb9df7bf);生产 API 提升 + canary gate + 证据端点(ca0020856)。 |
无 runtime 变更。 | 活动管理/内容库/发布记录重构(0f5bf8525)、上传与撤下(02ce3dd9c、de6ead823)、活动操作改为居中弹窗(463752395)、promote/unpublish/restore 路由与 history 双环境合并、CMS authoring origin/token(ca0020856)。 |
3 个 migration:20260909101013_cms_content_lifecycle.sql(新建 touchpoints schema,activities / content_versions / artifact_bytes / production_deployments / content_revocations 等)、20260909140436_cms_restore_host_evidence.sql、20260914101138_touchpoint_test_context_realtime.sql(0f5bf8525、5eb9df7bf)。 |
无。 |
|
XL管理员发起的 GDPR 账号删除(冻结 → 计费/内容处理 → 确认)+ 对账 CronJob
生产 Admin 可以对指定账号发起不可逆删除:API 侧新增 account-erasure 领域(freeze / billing / content / confirm / processors 步骤、指标、状态机与 7 天 deadline),并给 auth、billing、媒体、协作、资源、workspace 等模块补删除语义;Link 侧支持账号数据的删除/匿名化;API chart 新增 account-erasure 对账 CronJob。之后修正了确认邮件文案。 Author:open-design-crew[bot](主实现)、nettee(邮件修正) |
无。 | 新增 services/api/src/account-erasure/*(路由、steps、指标、suppressions)与 app/auth/billing/media/collab/resources/workspaces 的删除语义(39abf116f);确认邮件修正(0d31e2d62)。含部署侧 deploy/charts/api/templates/account-erasure-reconciliation-cronjob.yaml。 |
services/link/internal/repositories/postgres.go 支持删除/匿名化(39abf116f)。 |
用户页账号删除表单、状态标签、恢复 UI、审计动作目录与 admin router 接线(39abf116f)。 |
1 个 migration:20260914115313_account_erasure.sql(新建 account_erasure_operations;app_users.status 增加 deleting/deleted、access_revoked_at;account/user/users deletedAt;team_project_catalog.deleted_at;media.assets.deleted_at/object_deleted_at;image_tasks 增加 cancel_requested_at)。 |
无。 |
|
L长上下文(>272K input tokens)分档计费 + OpenAI GPT 价格同步
OpenAI 系模型(gpt-6-astra 家族、gpt-5.4 / 5.5 / 5.6 系列)在公开定价与路由目录中引入 long_context 档位:单次请求输入超过 272K token 时按更高费率(例如 gpt-6-astra input 10 → 20、output 50 → 75 每 1M token;gpt-5.6-luna input 1 → 0.2 基础价 + 0.4 长上下文价)。Link 计费与成本核算按档位取价,API 在公开模型价格响应里输出 longContext,Web 价格页展示档位说明。属于直接改变用户账单金额的变更。 Author:Marc Chan |
模型价格页与文案增加长上下文档位(af7415d35、77054ca19 的 Web 部分;77054ca19 另含浏览器回归用例)。 |
公开模型价格 schema/响应新增 longContext 及字段一致性校验(af7415d35)。 |
internal/catalog/pricing.go、internal/usage 按 long_context 档位计费,并修正 IsExplicitlyZeroCost(零基础价 + 付费长上下文不得绕过钱包准入)(af7415d35)。 |
无。 | 无 schema/migration。 | provider_openai.json、public_pricing.json、db/seeds/seed-model-routing-catalog.sql、data/scripts/build_model_json.py 新增 long_context 档位并同步 GPT 价格(af7415d35、77054ca19)。 |
|
MWeb 端活动浮窗/控制台活动的展示行为
面向登录用户的 touchpoint 浮窗行为调整:控制台活动不再带测试控件、Test/Production 共享同一 realtime 生命周期、Test 模式下允许已注册活动导航、礼包入口与弹窗宽度对齐设计、控制台活动按「每用户每活动一次」展示,并按设计稿调整触发器位置。全部由生产运行时决策驱动,属于 Web 侧展示层收敛。 Author:Caprika
|
fbb3c53de 仪表盘活动去掉测试控件;a88eb8651 Test 模式活动导航;2e589a9d1 礼包入口/弹窗宽度;8bc9d356e Test 与 Production 共享 realtime 生命周期;eb27bf64f 每用户每活动仅展示一次(新增 campaign-dismissal.ts);92df166e0 触发器与设计稿对齐。 |
无(对应 API 行为在本表 CMS 一行)。 | 无。 | 无。 | 无。 | 无。 |
|
MPlacement 归因透传到订阅/充值结账与回执
Open Design 活动归因链路新增 placementId:结账、订阅、升级请求与 Stripe metadata、pending 订阅升级证据都会携带 placement,充值/团队订阅路径同时保留原有归因字段。影响付费转化归因数据与后续对账分析。 Author:Caprika
|
billing-client.ts、open-design-attribution.ts 透传 placement(5c25f8b65)。 |
billing core/http 的 checkout、subscription、team subscription、upgrade schema 与 pending 证据新增 placementId,openapi.json 同步(5c25f8b65)。 |
无。 | 无。 | 无。 | 无。 |
|
MAdmin 巡检(patrol)告警与小时报告多副本重复修复
amr-admin 双副本各自启动定时器,导致同一小时写入两条巡检报告、告警重复发送。修复后告警按签名去重(alert_sent_signatures),报告写入改为按 (env, reported_hour) upsert 并加唯一索引,历史重复行在同一次迁移里折叠。属于运营可信度修复。 Author:open-design-crew[bot]
|
无。 | 无。 | 无。 | patrol client、alert-runner、alert-state、feishu-webhook、patrol-alert-scheduler 去重改造(15de6f1b2)。 |
2 个 migration:20260910094000_add_alert_sent_signatures.sql、20260910094001_add_patrol_reports_hourly_key.sql(含历史重复折叠 + 唯一索引)。 |
无。 |
|
M运行时配置变更触发 Pod 重载(Helm checksum 注解)
API、Admin、Link 的 Deployment 模板加入配置校验和注解,ConfigMap/Secret 运行时配置变化会触发滚动重启;发布配置时会出现 Pod 重启,属于发布流程可预期行为变化(Web chart 未改)。 Author:nettee
|
无(web chart 未改)。 | deploy/charts/api/templates/deployment.yaml(4e54b8ff6)。 |
services/link/charts/link/templates/deployment.yaml(4e54b8ff6)。 |
deploy/charts/admin/templates/deployment.yaml(4e54b8ff6)。 |
无。 | 无。 |
|
SAPI:返回被锁定的默认 Team
修复 owner 的默认 Team 被锁定时 Author:lefarcen
|
无。 | workspaces/core.ts、workspaces/postgres.ts、workspaces/routes.ts(c9daae41c)。 |
无。 | 无。 | 无。 | 无。 |
|
SAdmin 控制台:亚分金额精度与共享表单组件
金额展示保留亚分精度(不再把 Author:nettee |
无。 | 无。 | 无。 | 7cbaeb015 金额格式化;879e4079b 组件抽取(行为等价重构)。 |
无。 | 无。 |
|
SLink:内部模型目录暴露 provider 名称
内部公开模型目录的 projection 与响应增加 provider 名称字段,供内部消费方展示/排障使用。 Author:lbjzz-hash
|
无。 | 无。 | internal/catalog/projection.go、internal/server/internal_public_models.go(e736d1b3d)。 |
无。 | 无。 | 无(未改 data/ 与 db/seeds)。 |
|
SCLI 客户端(不在本次四个服务范围内)
range 内包含两处 CLI 变更,但它们不随 Web/API/Link/Admin 镜像发布;若 CLI 有独立发布通道需单独处理。 Author:Ray Xi、open-design-crew[bot] |
无。 | 无。 | 无。 | 无。 | 无。 | 无。 |
|
SCI / 文档 / 规格归档(无 runtime 行为变更)
规格归档、文档校准与 CI 镜像来源调整。注意:Archive old specs (#2006) 虽触及 services/api、services/link、data/、db/seeds、db/schema 等路径,但内容是把 spec 引用替换为 ADR/现有文档的注释与 metadata.source 文案,无行为变更,不会改变 catalog 数据或服务逻辑;fix(ci): pull MinIO images from quay.io (#1988) 只改 CI 与本地容器镜像来源。 Author:nettee、github-actions[bot]、open-design-crew[bot]
|
无。 | 无 runtime 变更(fa83eca6c 仅注释)。 | 无 runtime 变更(fa83eca6c 仅注释)。 | 无。 | 不改动 db/migrations,不影响 migration workflow。 | 不改动 db/seeds 的 SQL/数据语义,不影响 catalog workflow。 |
已在生产生效(发布点之前,本次不重复发布)
以下内容在各维度生产发布点之前,已在生产运行,本次重新发布不会再次改变它们。四个服务以 EKS Pod 实态为基线,DB migration 与 Catalog 以 workflow 记录为基线;因此同一 commit 可能在某一维度已生效、在另一维度仍待发布(例如 0f5bf8525 的 Web 部分已上线,API/Admin/DB 部分仍在本次范围内)。
- Catalog(发布点 2026-09-10 07:42:12Z @
21c79c6c6已生效):DeepSeek V4.1 Flash(models / provider_routes / route_policies / public_pricing + seeds,21c79c6c6)已上线;更早的模型与定价同样已生效。 - DB migration(发布点 2026-09-09 09:07:00Z @
eecb4434d已生效):20260909071815_retire_coding_plan_go_config.sql已执行(Coding Plan Go 配置下线 phase 2)。 - Link(发布点 @
eecb4434d已生效):Coding Plan Go 档位下线(领域类型、economics 分类器、modellimit、postgres 仓储,6ed3057a5)已在生产运行。 - Admin(发布点 @
eecb4434d已生效):模型表管理权限(ff55214d7)、旧 Go 倍率保留(1b5c7b629)、Coding Plan Go 配置下线(6ed3057a5)已生效。 - API(发布点 @
b6a6adaf已生效):发布点之后触及 services/api 的 commit 都已计入本次 feature 表;其中eecb4434d、46cab47fe、463752395只有测试改动,无 runtime 行为。 - Web(发布点 @
ae4b84f76已生效):DS V4.1 多语言定价活动页(46cab47fe)、CMS 第一期 Web 端 app-shell / campaign float / test console(0f5bf8525)、默认移除 CMS 活动入口并保留显式验收(ae4b84f76)已上线。 - 范围内已回退:无。
b6a6adaf…ca0020856之间没有任何 revert commit,不存在「净变更归零」的条目,也没有被回退的 migration 需要特别说明。 - 非生产环境变更(不随生产发布):
c4eba5216把 feature-test 环境绑定到 GDPR erasure 分支,仅影响 feature-test 环境。
发布建议
- Migration 判断:必须先跑 migration。发布点
eecb4434d之后共有 6 个待执行 migration:3 个 CMS(20260909101013_cms_content_lifecycle.sql、20260909140436_cms_restore_host_evidence.sql、20260914101138_touchpoint_test_context_realtime.sql)、2 个 patrol(20260910094000_add_alert_sent_signatures.sql、20260910094001_add_patrol_reports_hourly_key.sql)、1 个账号删除(20260914115313_account_erasure.sql)。顺序约束:migration 必须在 CMS 提升之前完成(生产库当前没有touchpointsschema,提升第一次写入即失败,且失败是静默的);同一 run 会连带执行 3 个非 CMS migration(patrol×2 + account_erasure),需要各自 owner 先确认。range 内无被回退的 migration。执行方式:gh workflow run deploy-db-migrations-prod.yml --ref main,不要用服务部署 workflow 跑迁移。 - 服务发布顺序(依据 CMS 生产发布 runbook:镜像先于 GitOps、Secrets 先于 GitOps、migration 先于提升):
① DB migration(6 个)→ ② Catalog(deploy-model-routing-catalog-prod.yml,2 个功能性 commit)→ ③ API(deploy-api-eks-prod.yml,15 commits,含 CMS 生产提升与 canary gate)→ ④ Admin(deploy-admin-eks-prod.yml,9 commits;注意 Admin 不在 amr-vela-deploy 脚本里,需单独触发)→ ⑤ Web(deploy-web-eks-prod.yml,11 commits)→ ⑥ Link(deploy-link-eks-prod.yml,8 commits,与 catalog 长上下文定价配套;catalog 先上、Link 后上时旧 Link 会忽略 long_context 字段,务必确认两者同批完成)。
前置条件(非代码):Secrets Manager 4 个属性、生产 API 身份对 Test 桶
cms-cas/前缀的读权限 —— 缺任何一项都会造成启动失败或证据读取 404。 - 数据 seed / catalog 判断:catalog 变更(public_pricing、provider_openai、seed-model-routing-catalog.sql)由 deploy-model-routing-catalog-prod.yml 的 plan/apply 步骤覆盖,不需要额外手工 seed;CMS 与 GDPR 不经过 catalog workflow,走各自的 migration。发布前请对 catalog 变更单独跑一次 dry-run,确认 GPT 价格与 long_context 档位按预期写入。
- 发布后观测:
- API 存活:
amr-api双副本 Ready 且无重启循环;TOUCHPOINT_ENVIRONMENT=production与CMS_ARTIFACT_STORE_MODE/_REGION/_BUCKET/_ROLE任一缺失会导致 crash loop(配置错误应回滚而不是现场调试)。 - CMS 提升链路:Admin
/activities走完导入 → 构建 → Test → 验收 → Promote;关注 promote 请求耗时是否逼近生产 API 证据客户端 5s 硬编码超时;history 页应同时显示 Test 生命周期与生产部署。 - Canary:白名单账号能在生产看到 console placement,非白名单账号看不到;被撤下的账号收到
410 production_runtime_withdrawn后浮窗立即清除。 - 计费:Link long_context 档位计费与成本指标,重点核对 >272K token 请求的实际扣费与钱包准入(含零基础价 + 付费长上下文组合);Web 价格页展示与 public_pricing 一致。
- 账号删除:erasure 指标与
account_erasure_operations状态推进、对账 CronJob 正常运行、7 天 deadline 告警。 - patrol:每环境每小时只有一条报告,告警不再重复推送。
- Link:内部模型目录响应包含 provider 名称字段。
- API 存活:
备注:所有 workflow、commit、compare range 均为可点击 GitHub 链接。四个服务的 compare range 基于 EKS Pod 观察到的 BASE(web ae4b84f76、api b6a6adafb、link/admin eecb4434d),DB migration、Catalog 的 compare range 基于各自 workflow 最近成功运行的 head_sha,未统一使用最旧基线,也未用 workflow SHA 替代 Pod 实态。四个服务最近的 workflow 记录与 Pod 实态完全一致(见上方审计对照)。