AMR 生产发布影响报告
当前生产发布点(EKS 实态 + workflow 记录)
Web、API、Link、Admin 的发布点来自 Grafana / Prometheus(datasource prometheus,namespace nexu)观察到的 Ready EKS Pod 实际运行镜像;DB migration 与 Model Routing Catalog 的发布点来自对应 workflow 最近一次成功运行。
越新的发布点意味着该维度已上线越多内容,feature 表里只允许列出发布点之后的变更;发布点之前的 commit 属于已生效,统一归入「已在生产生效」一节。目标 commit 均为
0abec4e997c97d03a8d45be81f5f0c1f865e361d
(fix(cms): stop production web Test polling and 404s for "no activity" (#2066),2026-09-17 16:37 +0800)。
nexu/amr-web · container webamr-web-755c478d56-298pv、amr-web-755c478d56-hd4vr0abec4e997c97d03a8d45be81f5f0c1f865e361dsha256:6362b52fab5f4a773b6a2f0e2b79efab5e3de442c192ec4272476d26d27963900abec4e99...0abec4e99):0 commits,无:该维度发布点已经等于目标 commit(0abec4e99...0abec4e99 为空),重新发布同一 commit 不产生变更nexu/amr-api · container apiamr-api-87c7c56d-wc8dl、amr-api-87c7c56d-x4rhb0abec4e997c97d03a8d45be81f5f0c1f865e361dsha256:3e3cbb349128fdc6cee6f738dc10ff1fab930adf92d5832ca4edd57f5d74a31c0abec4e99...0abec4e99):0 commits,无:该维度发布点已经等于目标 commit(0abec4e99...0abec4e99 为空),重新发布同一 commit 不产生变更nexu/amr-link · container linkamr-link-6bdbc759c9-rczwh、amr-link-6bdbc759c9-8mqpt180a48b2381183ffbe7441a499ac017d9a5ed789sha256:7645cc2cc0350c1dafba6b8e34fa3147856f2be77fa3c0da78495b991e660f8f180a48b23...0abec4e99):2 commits,其中 0 个触及 services/link → 该维度无待发布变更nexu/amr-admin · container adminamr-admin-6b5c8bb9d5-5qcx9、amr-admin-6b5c8bb9d5-z2pvh58e310d6f4f4fd99377c794a43bfccacb8c1c24fsha256:cb59b14ebf91908bfed2500ebebf597d17396ac72c3fe7afd0d5eafbe082e43e58e310d6f...0abec4e99):1 commit,其中 0 个触及 apps/admin → 该维度无待发布变更180a48b2381183ffbe7441a499ac017d9a5ed789(head_sha 180a48b23811…)180a48b23...0abec4e99):2 commits 在范围内,0 个触及 db/migrations 与 db/schema → 0 个新增 migration58e310d6f4f4fd99377c794a43bfccacb8c1c24f(head_sha 58e310d6f4f4…)58e310d6f...0abec4e99):1 commit 在范围内,0 个触及 data/ 与 db/seeds → 0 个 catalog 变更此次发布真正新增的 feature 和影响面
| Feature / Author / Commits | Web | API | Link | Admin | DB schema / migration | DB catalog(seed) |
|---|---|---|---|---|---|---|
|
—本次(现在发布)无待发布 feature
六个维度的生产发布点已经覆盖 Author:不适用(无待发布变更)
|
无待发布变更:范围内 0 个 commit 中 0 个触及 apps/web。Web 发布点 = 0abec4e997c97d03a8d45be81f5f0c1f865e361d,0abec4e99...0abec4e99 为空。 |
无待发布变更:范围内 0 个 commit 中 0 个触及 services/api。API 发布点 = 0abec4e997c97d03a8d45be81f5f0c1f865e361d,0abec4e99...0abec4e99 为空。 |
无待发布变更:范围内 2 个 commit 中 0 个触及 services/link。范围内 2 个 commit(58e310d6f、0abec4e99)只改动 apps/admin、apps/web、services/api 与 CI workflow。 |
无待发布变更:范围内 1 个 commit 中 0 个触及 apps/admin。范围内 1 个 commit(0abec4e99)只改动 apps/web、services/api 与 CI workflow。 |
无待发布变更:范围内 2 个 commit 中 0 个触及 db/migrations, db/schema。db/migrations 文件集合与发布点完全一致(97 个文件,新增 0 个)。 |
无待发布变更:范围内 1 个 commit 中 0 个触及 data, db/seeds。范围内无 data/json、data/scripts、db/seeds 改动。 |
最近一次生产发布(已完成):0abec4e99 → API 09:02Z / Web 09:19Z
本次发布影响的真正新增内容在 0abec4e99(PR #2066,Author:Caprika,Co-authored-by: Claude Opus 5)。它已经发布完成:API 由 deploy-api-eks-prod.yml · run 35202509739(08:57:43Z → 09:02:57Z)发布,Web 由 deploy-web-eks-prod.yml · run 35203288690(09:06:18Z → 09:19:10Z)发布;四个服务的 EKS Pod 实态(本次观察 2026-09-17T11:55:12Z)与之一致,因此这三项行为变更现在已经在生产运行。
| Feature / Author / Commit | Web | API | Link | Admin | DB schema / migration | DB catalog(seed) |
|---|---|---|---|---|---|---|
|
M生产 Web 不再挂载 Test 活动控制台:Test 运行时改为构建期开关
生产 Web 镜像此前在 Author:Caprika(Co-authored-by: Claude Opus 5) |
apps/web/Dockerfile 新增 ARG/ENV VITE_CMS_TEST_RUNTIME;app-shell.tsx 改为按构建开关挂载;新增 apps/web/src/lib/cms-test-runtime.ts 与 2 个测试(0abec4e99)。已生效(09:19Z)。 |
无。 | 无。 | 无。 | 无 schema/migration。 | 无。CI 侧 deploy-web-eks-test.yml / deploy-web-eks-feature-test.yml 加 build-arg 只影响 Test 与 feature-test 镜像,不进入 catalog 或 seed。 |
|
M生产运行时「无决策」改为 opt-in 的 200 +
{"decision": null}(HTTP 契约变更)
Author:Caprika(Co-authored-by: Claude Opus 5) |
production-campaign-float.tsx 请求加 emptyResponse=200,空 200 走与 404 相同的「保留 lease、不报诊断」路径;浏览器回归 +46 行。已生效(09:19Z)。 |
services/api/src/touchpoints/routes.ts query schema 新增 emptyResponse: z.literal("200").optional(),新增 no-decision 分支并在调用 repository 前剥离该参数;touchpoints-web-console-rollout.test.ts 新增 6 个用例。已生效(09:02Z)。 |
无。 | 无。 | 无契约/表结构变更(仅 HTTP 响应形状)。 | 无。 |
|
SAPI 指标路由标签补齐 touchpoints 全量路由
Touchpoint 路由未登记在 API 的 metric route map 中,全部被归入 Author:Caprika(Co-authored-by: Claude Opus 5) |
无。 | services/api/src/metrics.ts 新增 25 条 route pattern;metrics.test.ts 新增 94 行断言(含动态 id 不泄漏进标签)。已生效(09:02Z)。 |
无。 | 无。 | 无。 | 无。 |
已在生产生效(发布点之前,本次不重复发布)
以下内容在各维度生产发布点之前,已在生产运行,现在重新发布不会再次改变它们。四个服务以 EKS Pod 实态为基线,DB migration 与 Catalog 以 workflow 记录为基线;因此同一 commit 可能在某一维度已生效、在另一维度仍处于范围内但不产生任何变更。今天的生产发布波次:DB migration 06:29Z、API 06:39Z → 09:02Z、Link 06:45Z、Web 06:49Z → 09:19Z、Admin 06:54Z、Catalog 08:35Z。
- Catalog(发布点 run 35199894849 · 2026-09-17T08:28:58Z @
58e310d6f4f4fd99377c794a43bfccacb8c1c24f已生效):长上下文(>272K)分档定价与 GPT 价格同步(af7415d35、77054ca19)、DeepSeek V4.1 Flash(21c79c6c6)。范围内(58e310d6f...0abec4e99,1 commit)无data/与db/seeds改动。 - DB migration(发布点 run 35189631246 · 2026-09-17T06:23:44Z @
180a48b2381183ffbe7441a499ac017d9a5ed789已生效):最近 6 个 migration 已应用——20260909101013_cms_content_lifecycle.sql、20260909140436_cms_restore_host_evidence.sql、20260910094000_add_alert_sent_signatures.sql、20260910094001_add_patrol_reports_hourly_key.sql、20260914101138_touchpoint_test_context_realtime.sql、20260914115313_account_erasure.sql(生产库现在已有touchpointsschema 与account_erasure_operations)。范围内无新增 migration。 - Link(发布点 @
180a48b2381183ffbe7441a499ac017d9a5ed789已生效,06:45:08Z 发布):长上下文分档计费(af7415d35、77054ca19)、内部模型目录 provider 名称(e736d1b3d)、Coding Plan Go 档位下线与退役配置清理(6ed3057a5、eecb4434d)、runtime config 变更触发滚动重启(4e54b8ff6)。 - API(发布点 @
0abec4e997c97d03a8d45be81f5f0c1f865e361d已生效,09:02:57Z 发布,包含最近一次发布的全部三项变更):0abec4e99(runtime 空决策 200 契约、touchpoints 指标路由,今天 09:02Z 随本次 API 发布上线)、CMS 生产提升 + canary gate(ca0020856)、不可变内容生命周期与跨 host 验收(0f5bf8525)、单一 artifact store(8c2d0f95b)、GDPR 账号删除(39abf116f、0d31e2d62)、锁定默认 Team(c9daae41c)、realtime test 授权租约(5eb9df7bf)。 - Web(发布点 @
0abec4e997c97d03a8d45be81f5f0c1f865e361d已生效,09:19:10Z 发布,包含最近一次发布的全部三项变更):0abec4e99(Test 控制台构建期开关、浮窗空决策 200、指标路由,今天 09:19Z 随本次 Web 发布上线)、CMS 生产发布第一期(ca0020856)、活动浮窗每用户每活动一次(eb27bf64f、4c6778845、887f30463)、Test/Production 共享 realtime 生命周期(8bc9d356e)、仪表盘去 Test 控件(fbb3c53de)、控制台触发器对齐设计稿(92df166e0)、DS V4.1 多语言定价页(46cab47fe)、placement 归因透传(5c25f8b65)。 - Admin(发布点 @
58e310d6f4f4fd99377c794a43bfccacb8c1c24f已生效,06:54:32Z 发布):58e310d6f(APE 发布失败不再让运营操作 500,即本维度发布点本身)、APE 审计事件与可读卡片(aff6031ae、f9c762458)、patrol 告警/报告去重(15de6f1b2)、活动操作居中弹窗(463752395)、金额亚分精度(7cbaeb015)、CMS 管理链路(ca0020856)。 - 同一 commit 的跨维度错位:
0abec4e99只改动apps/web、services/api与两个 Test CI workflow,因此对 Web/API 是发布点本身,对 Link / Admin / DB / Catalog 仍在「发布点之后」但不产生这些维度的任何变更——feature 表中不出现。58e310d6f同理只在apps/admin有改动,对 DB 维度落在范围内但无 migration 变更。 - 范围内已回退(净变更归零):无。
180a48b2381183ffbe7441a499ac017d9a5ed789、58e310d6f4f4fd99377c794a43bfccacb8c1c24f、180a48b2381183ffbe7441a499ac017d9a5ed789、58e310d6f4f4fd99377c794a43bfccacb8c1c24f到0abec4e997c97d03a8d45be81f5f0c1f865e361d之间没有 revert commit,也没有被回退的 migration 需要特殊说明。 - 非生产环境变更(不随生产发布):
0abec4e99对deploy-web-eks-test.yml/deploy-web-eks-feature-test.yml增加VITE_CMS_TEST_RUNTIME=true,只影响 Test 与 feature-test 镜像;这是本次改动的必要配套(生产镜像不传该参数)。
发布建议
- 是否需要再发布:不需要。六个维度的发布点已经覆盖
origin/main(HEAD0abec4e997c97d03a8d45be81f5f0c1f865e361d)或范围内没有该维度的路径变更: Web0abec4e99...0abec4e99空、API0abec4e99...0abec4e99空、Link 2 commit/0 有效、Admin 1 commit/0 有效、DB 2 commit/0 个新增 migration、Catalog 1 commit/0 个 catalog 变更。 现在触发 deploy-web-eks-prod.yml / deploy-api-eks-prod.yml 只会重新部署同一个 commit(无变化);触发 deploy-link-eks-prod.yml / deploy-admin-eks-prod.yml 会把镜像 tag 推到prod-0abec4e99,但 Link / Admin 的代码在该范围内没有任何改动,功能上等价于一次滚动重启,没有业务收益,可等下一次真实变更一起发。 - Migration 判断:不需要跑 migration。DB 发布点为 run 35189631246 @
180a48b2381183ffbe7441a499ac017d9a5ed789,范围内(180a48b23...0abec4e99,2 commit)未触及db/migrations与db/schema,db/migrations文件集合与发布点完全一致(新增 0 个)。因此不要为了本次发布触发 deploy-db-migrations-prod.yml。 - 数据 seed / catalog 判断:不需要重新 apply。范围内
data/、db/seeds无改动(58e310d6f4f4fd99377c794a43bfccacb8c1c24f到0abec4e997c97d03a8d45be81f5f0c1f865e361d只有 1 个 commit,0 个触及 catalog 路径),今天 08:35Z 的 deploy-model-routing-catalog-prod.yml run 已经覆盖全部历史 catalog 内容;也没有额外手工 seed 步骤。 - 发布后观测(核验最近一次发布已经生效,而不是等待新的发布):
- Web 生产不再请求 Test runtime:以 personal owner 身份打开
/dashboard,浏览器网络面板中不应再出现周期性的/api/v1/touchpoints/runtime/test-deployments(此前每 30s 一次、必 404),也不应渲染 Test 活动控制台。 - 生产浮窗契约:
GET /api/v1/touchpoints/runtime/production?…&emptyResponse=200在「无决策」时返回200 {"decision": null};touchpoint_load_failed诊断计数应归零。 - lease 连续性:空 200 之后已签发的 lease 必须保留(浮窗内容不闪断、不重挂载),与 404 行为逐字一致。
- 撤下 / 回收路径不变:带
activeDecisionId的请求仍返回410 production_runtime_withdrawn;若出现400 invalid_production_runtime_request,说明有 host 传了非法emptyResponse值。 - API 指标:touchpoints 请求的 route 标签不再是
unknown;重点看runtime/production的状态码分布是否已由 404 转为 200。 - Test / feature-test 不回归:两个环境的 Web 镜像带
VITE_CMS_TEST_RUNTIME=true,Test 控制台应仍可见。 - Rollout 健康:
amr-web、amr-api双副本 Ready 且 digest 与本次观察一致,spec = updated = available。
- Web 生产不再请求 Test runtime:以 personal owner 身份打开
备注:所有 workflow、commit、compare range 均为可点击 GitHub 链接。四个服务的 compare range 基于 EKS Pod 观察到的 BASE(web 0abec4e99、api 0abec4e99、link 180a48b23、admin 58e310d6f),DB migration 与 Catalog 的 compare range 基于各自 workflow 最近成功运行的 head_sha(180a48b23、58e310d6f),未统一使用最旧基线,也未用 workflow SHA 替代 Pod 实态。四个服务部署 workflow 的最近成功记录与 Pod 实态完全一致,未发现 GitOps 手工回滚导致的差异。