AMR 生产发布影响报告

生成时间:2026-09-17 11:58:05Z(EKS 观察时间 2026-09-17T11:55:12Z);分析对象:从 origin/main(HEAD 0abec4e997c97d03a8d45be81f5f0c1f865e361d)发布 Web、API、Link、Admin、DB migration 与 Model Routing Catalog 的影响分析。结论是现在发布不会新增任何功能和变更:六个维度的生产发布点已经覆盖该 commit,或范围内不存在该维度的路径变更。注意:四个服务的生产发布点取 EKS Pod 实际运行镜像(不是这四个服务部署 workflow 的成功记录,因为 GitOps 仓库可能被手工回滚),DB migration 与 Model Routing Catalog 的生产发布点取对应 workflow 最近一次成功运行的 head_sha;六个维度分别计算变更范围。

当前生产发布点(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)。

观察口径:kube_pod_container_info{namespace="nexu", container="<业务容器>", image=~".*/amr-*:prod-[0-9a-f]{40}"} 与 kube_pod_status_ready{condition="true"}==1 通过 and on(namespace, pod) 关联得到每个服务的 Ready Pod 集合;副本数使用精确 deployment="amr-*" 的 kube_deployment_spec_replicas / _updated / _available。 四个服务各自 Ready Pod 的 commit 与镜像 digest 完全一致,副本 spec = updated = available(rollout 已完成),样本龄 ≤ 31.2s(远小于 5 分钟上限)。API CronJob、Link Redis、metrics exporter 等附属工作负载已被镜像过滤排除在结果之外。

Web · EKS Pod 实态
Workload:nexu/amr-web · container web
观察时间:2026-09-17T11:54:41Z(样本龄 31.2s,≤5 分钟)
Ready Pods:2 / 2(updated 2、available 2)
Pod:amr-web-755c478d56-298pv、amr-web-755c478d56-hd4vr
实际 commit:0abec4e997c97d03a8d45be81f5f0c1f865e361d
镜像 digest:sha256:6362b52fab5f4a773b6a2f0e2b79efab5e3de442c192ec4272476d26d2796390
Workflow 审计(仅对照):deploy-web-eks-prod.yml 最近成功 0abec4e99(2026-09-17T09:06:18Z → 2026-09-17T09:19:10Z);与 Pod:一致(0abec4e99),未发现 GitOps 手工回滚差异
本次新增(0abec4e99...0abec4e99):0 commits,无:该维度发布点已经等于目标 commit(0abec4e99...0abec4e99 为空),重新发布同一 commit 不产生变更
已生效内容:0abec4e99(Test 控制台构建期开关、浮窗空决策 200、指标路由,今天 09:19Z 随本次 Web 发布上线)、CMS 生产发布第一期(ca0020856)、活动浮窗每用户每活动一次(eb27bf64f、4c6778845、887f30463)、Test/Production 共享 realtime 生命周期(8bc9d356e)、仪表盘去 Test 控件(fbb3c53de)、控制台触发器对齐设计稿(92df166e0)、DS V4.1 多语言定价页(46cab47fe)、placement 归因透传(5c25f8b65)。
API · EKS Pod 实态
Workload:nexu/amr-api · container api
观察时间:2026-09-17T11:54:53Z(样本龄 19.1s,≤5 分钟)
Ready Pods:2 / 2(updated 2、available 2)
Pod:amr-api-87c7c56d-wc8dl、amr-api-87c7c56d-x4rhb
实际 commit:0abec4e997c97d03a8d45be81f5f0c1f865e361d
镜像 digest:sha256:3e3cbb349128fdc6cee6f738dc10ff1fab930adf92d5832ca4edd57f5d74a31c
Workflow 审计(仅对照):deploy-api-eks-prod.yml 最近成功 0abec4e99(2026-09-17T08:57:43Z → 2026-09-17T09:02:57Z);与 Pod:一致(0abec4e99),未发现 GitOps 手工回滚差异
本次新增(0abec4e99...0abec4e99):0 commits,无:该维度发布点已经等于目标 commit(0abec4e99...0abec4e99 为空),重新发布同一 commit 不产生变更
已生效内容:0abec4e99(runtime 空决策 200 契约、touchpoints 指标路由,今天 09:02Z 随本次 API 发布上线)、CMS 生产提升 + canary gate(ca0020856)、不可变内容生命周期与跨 host 验收(0f5bf8525)、单一 artifact store(8c2d0f95b)、GDPR 账号删除(39abf116f、0d31e2d62)、锁定默认 Team(c9daae41c)、realtime test 授权租约(5eb9df7bf)。
Link · EKS Pod 实态
Workload:nexu/amr-link · container link
观察时间:2026-09-17T11:54:55Z(样本龄 16.5s,≤5 分钟)
Ready Pods:2 / 2(updated 2、available 2)
Pod:amr-link-6bdbc759c9-rczwh、amr-link-6bdbc759c9-8mqpt
实际 commit:180a48b2381183ffbe7441a499ac017d9a5ed789
镜像 digest:sha256:7645cc2cc0350c1dafba6b8e34fa3147856f2be77fa3c0da78495b991e660f8f
Workflow 审计(仅对照):deploy-link-eks-prod.yml 最近成功 180a48b23(2026-09-17T06:39:16Z → 2026-09-17T06:45:08Z);与 Pod:一致(180a48b23),未发现 GitOps 手工回滚差异
本次新增(180a48b23...0abec4e99):2 commits,其中 0 个触及 services/link → 该维度无待发布变更
已生效内容:长上下文分档计费(af7415d35、77054ca19)、内部模型目录 provider 名称(e736d1b3d)、Coding Plan Go 档位下线与退役配置清理(6ed3057a5、eecb4434d)、runtime config 变更触发滚动重启(4e54b8ff6)。
Admin · EKS Pod 实态
Workload:nexu/amr-admin · container admin
观察时间:2026-09-17T11:54:58Z(样本龄 13.5s,≤5 分钟)
Ready Pods:2 / 2(updated 2、available 2)
Pod:amr-admin-6b5c8bb9d5-5qcx9、amr-admin-6b5c8bb9d5-z2pvh
实际 commit:58e310d6f4f4fd99377c794a43bfccacb8c1c24f
镜像 digest:sha256:cb59b14ebf91908bfed2500ebebf597d17396ac72c3fe7afd0d5eafbe082e43e
Workflow 审计(仅对照):deploy-admin-eks-prod.yml 最近成功 58e310d6f(2026-09-17T06:52:05Z → 2026-09-17T06:54:32Z);与 Pod:一致(58e310d6f),未发现 GitOps 手工回滚差异
本次新增(58e310d6f...0abec4e99):1 commit,其中 0 个触及 apps/admin → 该维度无待发布变更
已生效内容:58e310d6f(APE 发布失败不再让运营操作 500,即本维度发布点本身)、APE 审计事件与可读卡片(aff6031ae、f9c762458)、patrol 告警/报告去重(15de6f1b2)、活动操作居中弹窗(463752395)、金额亚分精度(7cbaeb015)、CMS 管理链路(ca0020856)。
deploy-db-migrations-prod.yml · workflow 记录
最近成功:2026-09-17T06:23:44Z → 2026-09-17T06:29:42Z(run 35189631246)
发布点 commit:180a48b2381183ffbe7441a499ac017d9a5ed789(head_sha 180a48b23811…)
本次新增(180a48b23...0abec4e99):2 commits 在范围内,0 个触及 db/migrations 与 db/schema → 0 个新增 migration
今天 06:29Z 的 run 已应用此前的 migration(最新 6 个:CMS ×2、patrol ×2、touchpoint realtime ×1、account_erasure ×1)。
deploy-model-routing-catalog-prod.yml · workflow 记录
最近成功:2026-09-17T08:28:58Z → 2026-09-17T08:35:54Z(run 35199894849)
发布点 commit:58e310d6f4f4fd99377c794a43bfccacb8c1c24f(head_sha 58e310d6f4f4…)
本次新增(58e310d6f...0abec4e99):1 commit 在范围内,0 个触及 data/ 与 db/seeds → 0 个 catalog 变更
已生效:长上下文分档定价与 GPT 价格同步(af7415d35、77054ca19)、DeepSeek V4.1 Flash(21c79c6c6)。今天 08:35Z 的 run 已覆盖全部历史 catalog 内容。

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

feature 表只包含「各维度生产发布点之后」的变更:四个服务以 EKS Pod 实态为基线(本次观察 2026-09-17T11:55:12Z),DB migration 与 Catalog 以 workflow 记录为基线。发布点之前已生效的内容见 「已在生产生效」 一节,最近一次已完成的发布见 「最近一次生产发布」。

Feature 聚合口径:按业务行为、用户路径、数据契约与部署依赖聚合;PR、分支、作者与目录只作为可点击的追溯证据,不构成划分依据。本次范围内(六个维度)净有效变更数为 0,因此表中只有一行「无待发布 feature」说明。

Feature / Author / Commits Web API Link Admin DB schema / migration DB catalog(seed)
—本次(现在发布)无待发布 feature

六个维度的生产发布点已经覆盖 origin/main(HEAD 0abec4e997c97d03a8d45be81f5f0c1f865e361d)或范围内不存在该维度的路径变更,因此现在触发任何发布 workflow 都不会带来新的功能或行为变更: Web 与 API 的 EKS Pod 已经运行 0abec4e99(即 origin/main 本身),Link、Admin、DB migration、Model Routing Catalog 的发布点虽然较旧,但它们与 TARGET 之间的 commit 均未触及各自的路径。

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 镜像此前在 /dashboard 对每个 personal owner 无条件挂载 Test 活动控制台,于是每 30s 轮询一次 /runtime/test-deployments 并拿到 404 test_runtime_unavailable,所有生产用户都会持续产生无效请求与浏览器报错噪声。现在只有构建期显式传入 VITE_CMS_TEST_RUNTIME=true 的镜像(Test / feature-test)与本地 dev 才挂载,生产构建永不请求 Test runtime。

Author:Caprika(Co-authored-by: Claude Opus 5)

  • 0abec4e99 fix(cms): stop production web Test polling and 404s for "no activity" (#2066) — Caprika
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 契约变更)

GET /api/v1/touchpoints/runtime/production 过去把「无决策」这个正常结果用 404 production_runtime_not_found 表达,使浮窗轮询在生产浏览器里表现为失败请求并触发 touchpoint_load_failed 诊断。现在 host 可传 emptyResponse=200 得到 200 {"decision": null};未传参的 host 行为不变;撤下/回收仍是 410 production_runtime_withdrawn;非法值返回 400。Web 浮窗 opt-in,并把空 200 与 404 完全等价处理(保留已签发 lease、不触发诊断)。双向上线安全。

Author:Caprika(Co-authored-by: Claude Opus 5)

  • 0abec4e99 fix(cms): stop production web Test polling and 404s for "no activity" (#2066) — Caprika
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 中,全部被归入 unknown 标签,活动运行时、构建、内容版本、Test/生产部署等流量无法按路由聚合观测。本次一次性登记 25 条 touchpoints 路由。

Author:Caprika(Co-authored-by: Claude Opus 5)

  • 0abec4e99 fix(cms): stop production web Test polling and 404s for "no activity" (#2066) — Caprika
无。 services/api/src/metrics.ts 新增 25 条 route pattern;metrics.test.ts 新增 94 行断言(含动态 id 不泄漏进标签)。已生效(09:02Z)。 无。 无。 无。 无。

这三项行为变更在「已在生产生效」一节中不再重复展开——因为 Web 与 API 的发布点已经等于 0abec4e99,它们对当前发布点而言属于已生效内容。

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

以下内容在各维度生产发布点之前,已在生产运行,现在重新发布不会再次改变它们。四个服务以 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。

发布建议

  1. 是否需要再发布:不需要。六个维度的发布点已经覆盖 origin/main(HEAD 0abec4e997c97d03a8d45be81f5f0c1f865e361d)或范围内没有该维度的路径变更: Web 0abec4e99...0abec4e99 空、API 0abec4e99...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 的代码在该范围内没有任何改动,功能上等价于一次滚动重启,没有业务收益,可等下一次真实变更一起发。
  2. Migration 判断:不需要跑 migration。DB 发布点为 run 35189631246 @ 180a48b2381183ffbe7441a499ac017d9a5ed789,范围内(180a48b23...0abec4e99,2 commit)未触及 db/migrations 与 db/schema,db/migrations 文件集合与发布点完全一致(新增 0 个)。因此不要为了本次发布触发 deploy-db-migrations-prod.yml。
  3. 数据 seed / catalog 判断:不需要重新 apply。范围内 data/、db/seeds 无改动(58e310d6f4f4fd99377c794a43bfccacb8c1c24f 到 0abec4e997c97d03a8d45be81f5f0c1f865e361d 只有 1 个 commit,0 个触及 catalog 路径),今天 08:35Z 的 deploy-model-routing-catalog-prod.yml run 已经覆盖全部历史 catalog 内容;也没有额外手工 seed 步骤。
  4. 发布后观测(核验最近一次发布已经生效,而不是等待新的发布):
    • 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。

备注:所有 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 手工回滚导致的差异。