AMR 生产发布影响报告

生成时间:2026-10-08(观察时刻 2026-10-08T02:07:44Z);分析对象:从 origin/main(HEAD f3ab9fccd)发布 Web、API、Link、Admin、DB migration 与 Model Routing Catalog 的影响分析。四个服务以 EKS Pod 实际运行镜像为生产发布点,DB migration 与 Catalog 以对应 Forgejo workflow 最近一次成功运行的 commit_sha 为生产发布点;六个维度分别计算变更范围。

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

Web、API、Link、Admin 的发布点来自 Grafana / Prometheus 观察到的 Ready EKS Pod 镜像(namespace nexu,datasource prometheus,由 kube-state-metrics 采集);DB migration 与 Catalog 的发布点来自对应 Forgejo workflow 最近一次成功运行。 feature 表里只允许列出发布点之后的变更;发布点之前的 commit 属于已生效,归入「已在生产生效」一节。目标 commit 均为 f3ab9fccd(feat(catalog): onboard Claude Haiku 5.5 (#209),2026-10-07 22:04,Liu Yi)。

Web · EKS Pod 实态
Workload:nexu/amr-web · container web
观察时间:2026-10-08T02:07:44Z(Grafana / Prometheus kube_pod_container_info,image 过滤 amr-web:prod-[0-9a-f]{40})
Ready Pods:2 / 2(updated 2,available 2)
实际 commit:37d7d377c
镜像 digest:sha256:64720a397a3f80287a7ec78ae1aee018fca99a1ff24def173e769e08272d3c18
Workflow 审计(仅供参考):deploy-web-eks-prod.yml 最近成功 run #3465 @ 37d7d377c;与 Pod:一致(workflow 最近成功运行的 commit_sha 与 Pod 实态相同)
本次新增(37d7d377c...f3ab9fccd):6 commits,其中 0 个触及该服务目录的变更
发布点之后 6 个 commit(3b3ea92c1 link、724488f4b / ed2fdcd97 admin、23cfe2099 link、940218638 / f3ab9fccd catalog)均不触及 apps/web/,Web 无净新增内容。
API · EKS Pod 实态
Workload:nexu/amr-api · container api
观察时间:2026-10-08T02:07:44Z(Grafana / Prometheus kube_pod_container_info,image 过滤 amr-api:prod-[0-9a-f]{40})
Ready Pods:2 / 2(updated 2,available 2)
实际 commit:3b3ea92c1
镜像 digest:sha256:6599559c5f91bdad4c73298152779034a2938f27d32c74bc8808dee470f0a002
Workflow 审计(仅供参考):deploy-api-eks-prod.yml 最近成功 run #3477 @ 3b3ea92c1;与 Pod:一致(workflow 最近成功运行的 commit_sha 与 Pod 实态相同)
本次新增(3b3ea92c1...f3ab9fccd):5 commits,其中 0 个触及该服务目录的变更
发布点之后 5 个 commit 均不触及 services/api/,API 无净新增内容。
Link · EKS Pod 实态
Workload:nexu/amr-link · container link
观察时间:2026-10-08T02:07:44Z(Grafana / Prometheus kube_pod_container_info,image 过滤 amr-link:prod-[0-9a-f]{40})
Ready Pods:2 / 2(updated 2,available 2)
实际 commit:3b3ea92c1
镜像 digest:sha256:0b5379e4c4f0e360fd5534abda3c2d5ded5b63c52b798be13a50b9357d2b7adf
Workflow 审计(仅供参考):deploy-link-eks-prod.yml 最近成功 run #3476 @ 3b3ea92c1;与 Pod:一致(workflow 最近成功运行的 commit_sha 与 Pod 实态相同)
本次新增(3b3ea92c1...f3ab9fccd):5 commits,其中 23cfe2099 fix(link): observe media attempt and asynchronous task failures (#144)
发布点之后 5 个 commit 中 1 个触及 services/link/:23cfe2099(#144 媒体失败观测),即本报告 feature 表第 3 行。
Admin · EKS Pod 实态
Workload:nexu/amr-admin · container admin
观察时间:2026-10-08T02:07:44Z(Grafana / Prometheus kube_pod_container_info,image 过滤 amr-admin:prod-[0-9a-f]{40})
Ready Pods:2 / 2(updated 2,available 2)
实际 commit:4d9eee278
镜像 digest:sha256:dc8f4af23e8f449a8b71b69a20e9ac67e9ad7bf03abbc456ba578c01dc8b5fd9
Workflow 审计(仅供参考):deploy-admin-eks-prod.yml 最近成功 run #2873 @ 4d9eee278;与 Pod:一致(workflow 最近成功运行的 commit_sha 与 Pod 实态相同)
本次新增(4d9eee278...f3ab9fccd):33 commits,其中 0dc3fc2fb feat(admin): expose public model status API (#127)、724488f4b feat(admin): restore drawers, navigation titles and query filters (#188)、ed2fdcd97 revert(admin): rollback public model status API and release phase idempotency (#127) (#193)
发布点之后 33 个 commit 中 3 个触及 apps/admin/:0dc3fc2fb(#127)→ 724488f4b(#188)→ ed2fdcd97(回退 #127);净变更只有 #188,即本报告 feature 表第 1 行。
DB migration · workflow 记录
最近成功:run #3104 @ 2026-09-28T11:54:21Z
发布点 commit:a7aa125f3
本次新增(a7aa125f3...f3ab9fccd):24 commits,其中触及 db/migrations/ + db/schema/ 的变更 0 个
数据源为 Forgejo run 列表(tea api /repos/core/amr/actions/runs),不使用 GitHub Actions。发布点之后无 migration / schema 变更,无需重新运行该 workflow。
Model Routing Catalog · workflow 记录
最近成功:run #3803 @ 2026-10-07T15:43:43Z
发布点 commit:940218638
本次新增(940218638...f3ab9fccd):1 commits,其中触及 data/json/ + db/seeds/ 的变更 1 个
数据源为 Forgejo run 列表(tea api /repos/core/amr/actions/runs),不使用 GitHub Actions。待发布 1 个 catalog commit(f3ab9fccd,#209 Claude Haiku 5.5)。

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

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

结论:本轮有净新增内容的维度只有三个:Admin(1 个 feature,724488f4b,另含 #127 已被 ed2fdcd97 完整回退的净零噪声)、Catalog(1 个 commit,f3ab9fccd Claude Haiku 5.5)、Link(1 个 commit,23cfe2099 媒体失败观测)。Web、API、DB migration 的发布点之后没有触及本维度目录的变更,重发不会带来运行时变化。Catalog 侧的 940218638(#205 停用 BytePlus DeepSeek V4.1 Flash 路由)已在 2026-10-07T15:43:43Z 随 run #3803 apply 到生产,属于已生效内容,不重复发布。

Feature / Author / Commits Web API Link Admin DB schema / migration DB catalog(seed)
LAdmin 控制台 UI 恢复:抽屉表单、导航标题对齐、统一带标签筛选栏

恢复此前被 #56 撤销的 Admin UI 优化:表单改用右侧抽屉(#47),页面 H1 与侧边导航标题一致并精简说明(#49),用户、成员、订单、退款、风控使用统一带标签筛选栏(新增 components/ui/query-filter-bar.tsx,筛选条件同步到 URL 参数、重置清除查询,#50);确认操作仍为弹窗。附带修复历史恢复抽屉关闭后的焦点丢失(Escape 回到触发入口)并补充先失败后通过的焦点回归测试。影响对象是内部运营 / 风控 / 财务人员,影响面广(17 个顶层页面 + 会员等级 / 模型规则 / 模型折扣 / 活动配置弹窗),但不改变任何后端契约。

注:该 feature 在 ed2fdcd97 合并后即为待发布状态(与上一份发布影响报告一致,本轮 Admin 发布点未变),本轮 Admin 发布点未变,仍是唯一待发布 feature。

Author:Liu Yi

  • 724488f4b feat(admin): restore drawers, navigation titles and query filters(#188)
无。 无。 无。 29 files,+1799 / −1440,全部在 apps/admin/:页面 app/[locale]/(protected)/{activities,audit-logs,coding-plan,coupons,email-domains,entitlements,members,message-center,models/auto-availability,models/list,orders,patrol,refund-management,risk-control,users,workspaces}/page.tsx,新增 components/ui/query-filter-bar.tsx,组件 features/membership/{tier-dialog,model-rule-dialog,model-discount-dialog,model-groups-panel}.tsx、features/refund-management/historical-cancel-only-form.tsx、features/touchpoints/activity-manager.tsx、i18n 中英文案与测试。
仅展示层、文案与测试;未改 Server Actions、API handler、后端 repository、权限规则或数据库 schema。焦点修复属无障碍回归修复,风险点集中在抽屉打开/关闭与筛选栏 URL 同步。
无 schema / migration。 无 catalog 变更。
MCatalog:上线 Claude Haiku 5.5(新 public model + 双 route + 分层计价)

新增 public model claude-haiku-5.5(llm / public / capability standard,context_limit 1,000,000、context_budget 132,000),并配两条 active route:Bedrock global.anthropic.claude-haiku-5-5(priority 8,主)与 OpenRouter anthropic/claude-haiku-5.5(priority 20,备),对应两个 active backend model 行。计价为 0.1 / 0.5 / 0.01 / 0.125 USD per 1M tokens,并首次为该模型引入 input_tokens_above=100000 的 5x 长上下文分档(0.5 / 2.5 / 0.05 / 0.625),同时进入 public_pricing.json 与 build_model_json.py 的官方 override。发布行为注意:该 model ID 已加入 model_routing_catalog_release_gates.json,catalog apply 只会把它的 Public Model Release Phase 初始化为 pre_release(已存在的 Admin-owned 相位不被覆盖),因此 apply 之后模型仍不会对用户可见 / 可请求,需要产品 / 运维通过 Admin 发布相位动作改为 released 才真正上线;对存量模型、存量路由无任何改动。

Author:Liu Yi

无。 无(价格投影 /api/v1/public/pricing/latest 需要单独触发 public pricing workflow,见发布建议)。 无 Link 代码变更;模型经 catalog 数据驱动,Link 侧只要 catalog 载入即可路由。 无(模型可见性由既有 Admin 发布相位操作决定,本次不改 Admin 代码)。 无 schema / migration。 data/json/ 8 个文件:models.json(新增 claude-haiku-5.5,context_limit 1,000,000 / context_budget 132,000)、provider_routes.json(+2 active route)、route_policies.json(Bedrock 8 / OpenRouter 20)、provider_pricing/provider_bedrock.json 与 provider_openrouter.json(含 long_context 分档)、openrouter_metadata.json、public_pricing.json、model_routing_catalog_release_gates.json;db/seeds/ 3 个文件(seed-model-routing-catalog.sql 新增 public_model / backend_model / route 行,baseline phase pre_release;seed-model-routing-catalog-test-activation.sql 仅 test 置 released;生成器测试);另附 specs/current/link/{model-context-budget,token-pricing}.md 证据更新。
MLink:媒体调用失败与异步任务失败的告警可用观测

修复「媒体失败在告警中丢失」的问题:此前后备供应商成功会覆盖先前失败,异步视频任务失败还会被记成 HTTP 200 的成功轮询。现在在切换供应商 / 替换终态错误之前,先记录带上游归属维度(provider / model / request_id / endpoint)的有界 WARN 日志 event=provider_attempt_failed(upstream media request failed),覆盖公开与内部的图片生成 / 编辑、视频创建 / 查询 / 下载;图片调用复用既有 Bifrost failed-attempt observer,内部重试最终成功也保留失败观测。视频 create/retrieve 观察到 failed / expired / cancelled 时额外记录 event=provider_task_failed(upstream media task failed,含 task_id / task_status),即使该次 HTTP 是 200。不改变 HTTP usage 口径、计费结算、响应体、路由与重试策略;调用前的准入 / 校验拒绝仍走既有 rejection 日志,不伪装成供应商失败;日志不追加原始响应体、请求内容或下载 URL。告警生效还依赖 apps 仓库的 Grafana 规则(apps#587 的对应配置)已部署,且该 PR 明确「post-deployment delivery validation remains outstanding」。

Author:mrcfps

  • 23cfe2099 fix(link): observe media attempt and asynchronous task failures(#144)
无。 无。 8 files,+357 / −3,全部在 services/link/:新增 internal/handlers/media_observability.go(logMediaProviderFailure / logMediaTaskFailure)与 253 行单测;internal/handlers/openai.go 在 image generate/edit、video create/retrieve/content 的失败与 io.Copy 中断处接入日志;internal_media_image.go / internal_media_video.go 接入内部接口同名路径;specs/current/link/provider/README.md 记录日志契约。无路由、无公共响应结构、无计费路径变更。 无。 无 schema / migration。 无 catalog 变更。

本轮被排除的 Admin 变更(净变更归零):0dc3fc2fb feat(admin): expose public model status API(#127)已被 ed2fdcd97 revert(admin): rollback public model status API and release phase idempotency(#193)完整回退,git diff 4d9eee278...f3ab9fccd -- apps/admin 与 724488f4b 单 commit diff 逐行一致(已用 diff 校验为 IDENTICAL)。该 API 从未进入生产(BASE_ADMIN 早于 #127),因此 净变更归零:既不进入 feature 表,也不需要回滚动作;Admin 此刻发布不会上线 GET /api/public/v1/models,发布相位更新行为保持原状(相位不变时仍刷新 updated_at 并记录审计事件)。

范围内其余 commit 不触及六个维度的 runtime 路径:8a48165f6 fix(ci): 移除 Forgejo 不支持的 workflow permissions(#140,仅 .forgejo/workflows/ 的 PR/CI 工作流)、37639613f feat(tools): 新增 Erosion / Verbosity 分析与独立报告(#129,tools/code_quality/)、8b22b0b11 docs: reconcile documentation with code evolution(#130)。均在对应发布点之前或不属于六个维度,不改变服务运行时行为,也不影响 deploy-*-prod.yml。

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

以下 feature / commit 均在对应生产发布点之前,已在生产运行。四个服务以 EKS Pod 实态为基线,DB migration 与 Catalog 以 Forgejo workflow 记录为基线;若从 main 重新发布,只分析各自基线之后的净新增。

发布建议

  1. Migration 判断:不需要跑 migration。BASE_DB a7aa125f3(2026-09-28)之后到 main 的 24 个 commit 中,没有任何 db/migrations/ 或 db/schema/ 变更;最新 migration 仍是已执行的 20260928085420_account_user_id_index.sql,无需触发 deploy-db-migrations-prod.yml。
  2. 服务发布顺序:本轮只需发布 Link、Admin 两个服务,加上一次 Catalog apply。建议顺序:Catalog → Link → Admin(三者无强制依赖:Catalog 是数据面、Link 只加日志、Admin 只改前端;先 apply catalog 可让 Link 立刻能路由新模型,但新模型仍需 release phase 才可请求)。
    • Catalog:触发 deploy-model-routing-catalog-prod.yml(发布 f3ab9fccd),apply 1 个 catalog commit(新模型 + 路由 + 计价)。
    • Link:触发 deploy-link-eks-prod.yml,发布 23cfe2099 共 1 个 commit(滚动后应等于 main HEAD)。
    • Admin:触发 deploy-admin-eks-prod.yml,发布 724488f4b 共 1 个 feature(发布点之后 33 个 commit 中净剩 1 个)。
    • Web / API 不必滚动发布:Web 发布点之后 6 个 commit、API 之后 5 个 commit 均不触及各自目录,重发无运行时变化。
  3. 数据 seed / catalog 判断:
    • Catalog apply 会幂等覆盖 link.public_model_release_gates:新模型 public_model_claude_haiku_5_5 初始化为 pre_release(ON CONFLICT DO NOTHING,不覆盖 Admin 已维护的相位),因此 apply 后模型仍不可请求;如需真正上线,必须由产品 / 运维按 新模型 onboarding SOP 在 Admin 把 release phase 改为 released。baseline 中 claude-haiku-5.5 的 public model 与两条 route 均为 active,技术上有意图、但不等于对外可用。
    • Public Pricing 是独立 workflow:public_pricing.json 由 deploy-public-pricing-prod.yml 单独发布(当前基线 0ab43a985,2026-09-24)。若希望 /api/v1/public/pricing/latest 与官网价格表出现 Haiku 5.5 的价格行,需要单独触发该 workflow;这一次 dispatch 会一并带上 2134cdb88(Sonnet 5.5)、392374aba(GPT-6.1 Sol)与 f3ab9fccd(Haiku 5.5)三行价格,属于价格投影的追平,不改变模型可用性。若不需要对外价格先更新,可暂不触发。
  4. 发布后观测:
    • Pod 实态:Link 与 Admin 镜像 tag 应变为 prod-f3ab9fccd…,Ready 恢复 2/2,updated / available 与 spec 一致;Web / API 镜像与 digest 应保持本报告值不变(用于确认「无净变化」预期)。
    • Catalog apply 校验:link.public_model_release_gates 中 public_model_claude_haiku_5_5.release_phase 为 pre_release;backend model / route 行为 active、priority 为 Bedrock 8 / OpenRouter 20;模型在公开模型列表与 /v1/models 中不可见(fail-closed)。
    • Link 媒体观测(#144):图片生成 / 编辑、视频创建 / 查询 / 下载失败时应出现 Loki 中 event=provider_attempt_failed(upstream media request failed)与 event=provider_task_failed(upstream media task failed)日志,且带 provider / model / request_id / endpoint 归属字段;视频任务 failed/expired/cancelled 在 HTTP 200 轮询下也应产生日志。告警真正触发需要 apps 仓库 Grafana 规则已部署(apps#587);本次发布后应做一次投递验证(PR 自述 post-deployment delivery validation 仍待完成),并确认计费 / usage 口径未受这些日志改动影响。
    • Admin UI 回归(#188 影响面最广):用户 / 成员 / 订单 / 退款 / 风控五个页面筛选栏提交后 URL 参数与列表正确、重置能清空查询;会员等级额度按美元提交后换算正确(如 $20.50 → 205000 credits);模型规则 / 模型折扣 / 活动配置抽屉保存与失败恢复;历史恢复抽屉 Escape 后焦点回到触发入口。鉴权边界保持不变:GET /api/public/v1/models 应仍为 404(该路由已随 #127 回退)。

备注:本报告所有 workflow、commit、PR 与 compare range 均指向 Forgejo code.powerformer.net/core/amr,不使用 GitHub Actions。四个服务的 compare range 基于 Grafana / Prometheus 观察到的 Ready Pod 镜像 commit;DB migration 与 Catalog 的 compare range 基于各自 workflow 最近一次成功运行的 commit_sha。