AMR 生产发布影响报告

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

结论概述

六个维度的发布点本次已经收敛到 main 附近:Web Pod 为 37d7d377c(main HEAD 的前一个 commit,09-30 12:39 UTC 发布)、 API 与 Link Pod 直接等于 main HEAD 3b3ea92c1(09-30 14:07 / 14:06 UTC 发布)、 Catalog 发布点 392374aba(09-30 03:35 UTC run)、DB migration 发布点 a7aa125f3(09-28 run)、 Admin Pod 仍停留在 4d9eee27(09-24)。

因此本轮从 main 发布,净新增只有 1 个 feature:Admin 公开模型状态 API(0dc3fc2fb), 该 commit 自 09-25 起一直待发布至今(Admin 自 09-24 后未再滚动发布)。 Web / API / Link / DB migration / Model Routing Catalog 五个维度净新增为 0: Web 的 37d7d377c...3b3ea92c1 范围内唯一 1 个 commit 不触及 apps/web;API、Link 发布点已等于 main,范围为 0; DB 的 a7aa125f3...3b3ea92c1 无任何 db/migrations / db/schema 变更;Catalog 的 392374aba...3b3ea92c1 无任何 data/json / db/seeds 变更。

本次不需要跑 migration,也不需要 apply catalog seed,只需要发布 Admin。四个服务的 Forgejo workflow 最近成功记录与 EKS Pod 实态完全一致,未发现手工回滚或滚动发布混合态。

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

Web、API、Link、Admin 的发布点来自 Grafana / Prometheus 观察到的 Ready EKS Pod 镜像(kube_pod_container_info × kube_pod_status_ready,namespace nexu,datasource UID prometheus); DB migration 与 Catalog 的发布点来自对应 Forgejo workflow 最近一次成功运行的 commit_sha。越新的发布点意味着该维度已上线越多内容,feature 表里只允许列出发布点之后的变更; 发布点之前的 commit 属于已生效,归入「已在生产生效」一节,不得重复出现在 feature 表。目标 commit 均为 3b3ea92c1 (fix(link): handle BytePlus history and DeepSeek request compatibility (#172),2026-09-30T13:48:31Z)。

Web · EKS Pod 实态
Workload:nexu/amr-web · container web
观察时间:2026-10-01T02:08:02Z(样本年龄 21s ≤ 5min)
Ready Pods:2 / 2(spec 2,updated 2,available 2,unavailable 0)
实际 commit:37d7d377c
镜像 digest:sha256:64720a397a3f80287a7ec78ae1aee018fca99a1ff24def173e769e08272d3c18
Workflow 审计:deploy-web-eks-prod.yml 最近成功 run #3465(37d7d377c,2026-09-30T12:39:44Z);与 Pod:一致
本次新增(37d7d377c...3b3ea92c1):1 commit,其中触及 apps/web 的 0 个
(发布点之前已上线:Design Plan 权益/模型同步、MiMo V2.6 Pro、GPT-6.1 Sol 活动、Plus 套餐 GPT-6 Sol 等,见「已在生产生效」)
API · EKS Pod 实态
Workload:nexu/amr-api · container api
观察时间:2026-10-01T02:08:08Z(样本年龄 15s ≤ 5min)
Ready Pods:2 / 2(spec 2,updated 2,available 2,unavailable 0)
实际 commit:3b3ea92c1
镜像 digest:sha256:6599559c5f91bdad4c73298152779034a2938f27d32c74bc8808dee470f0a002
Workflow 审计:deploy-api-eks-prod.yml 最近成功 run #3477(3b3ea92c1,2026-09-30T14:07:02Z);与 Pod:一致
本次新增(3b3ea92c1...3b3ea92c1(空范围)):0 commit,无待发布内容
(发布点之前已上线:billing 数据库负载收敛、HTTP 指标路由归类、Go intro 重发、billing ledger 查询上界等,见「已在生产生效」)
Link · EKS Pod 实态
Workload:nexu/amr-link · container link
观察时间:2026-10-01T02:08:13Z(样本年龄 10s ≤ 5min)
Ready Pods:3 / 3(spec 3,updated 3,available 3,unavailable 0)
实际 commit:3b3ea92c1
镜像 digest:sha256:0b5379e4c4f0e360fd5534abda3c2d5ded5b63c52b798be13a50b9357d2b7adf
Workflow 审计:deploy-link-eks-prod.yml 最近成功 run #3476(3b3ea92c1,2026-09-30T14:06:47Z);与 Pod:一致
本次新增(3b3ea92c1...3b3ea92c1(空范围)):0 commit,无待发布内容
(发布点之前已上线:BytePlus 兼容层统一、上下文上限/溢出错误归一、DeepSeek/BytePlus 历史与结构化输出兼容等,见「已在生产生效」)
Admin · EKS Pod 实态
Workload:nexu/amr-admin · container admin
观察时间:2026-10-01T02:08:19Z(样本年龄 5s ≤ 5min)
Ready Pods:2 / 2(spec 2,updated 2,available 2,unavailable 0)
实际 commit:4d9eee27
镜像 digest:sha256:dc8f4af23e8f449a8b71b69a20e9ac67e9ad7bf03abbc456ba578c01dc8b5fd9
Workflow 审计:deploy-admin-eks-prod.yml 最近成功 run #2873(4d9eee27,2026-09-24T10:53:45Z);与 Pod:一致
本次新增(4d9eee27...3b3ea92c1):28 commits,其中触及 apps/admin 的 1 个(0dc3fc2fb,#127)
(发布点之前已上线:GO 额度统一遵循 Admin 会员权益配置,见「已在生产生效」)
DB migration · workflow 记录
最近成功:2026-09-28T11:54:22Z → 11:57:48Z,success(run #3104)
发布点 commit:a7aa125f3
本次新增(a7aa125f3...3b3ea92c1):19 commits,其中触及 db/migrations / db/schema 的 0 个,不需要跑 migration
(发布点之前已上线:20260928085420_account_user_id_index.sql 并发建索引 + atlas/schema 同步,见「已在生产生效」)
Model Routing Catalog · workflow 记录
最近成功:2026-09-30T03:35:19Z → 03:38:06Z,success(run #3325)
发布点 commit:392374aba
本次新增(392374aba...3b3ea92c1):8 commits,其中涉及 data/json 与 db/seeds 的 0 个,不需要 apply catalog
(发布点之前已上线:GPT-6.1 Sol 接入、Claude Sonnet 5.5、BytePlus 文本路由恢复、路由权重调整等,见「已在生产生效」)

观察方式:Grafana(https://grafana.powerformer.net)Prometheus datasource(UID prometheus)× kube-state-metrics,namespace nexu; 只接受命中目标业务容器与镜像仓库正则(prod-[0-9a-f]{40})且 kube_pod_status_ready{condition="true"} == 1 的 Pod, 因此 API CronJob、Link Redis 与 metrics exporter 不会混入。每个服务的 2~3 个 Ready Pod commit 与 digest 完全一致,Desired = Updated = Available,无滚动发布或回滚混合态。 审计对照使用四个服务的 Forgejo workflow 最近成功记录(core/amr actions); GitOps values(github.com/powerformer/apps)不在本地 repos/ 且本流程未拉取,故未与 Pod 实态逐项比对,本报告发布点一律以 Pod 实态为准。

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

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

Feature 聚合规则:以业务行为、用户路径、数据契约和部署依赖为准;不得机械按 PR、分支、作者或目录划分。PR、commit 和 path 仅作为可点击的追溯证据。

Feature / Author / Commits Web API Link Admin DB schema / migration DB catalog(seed)
MAdmin 公开模型状态 API(无会话可读)+ 发布相位变更幂等化

本轮唯一的净新增 feature,也是自 09-25 起持续待发布的唯一内容(Admin 自 4d9eee27 后未再发布)。 Admin 新增匿名只读接口 GET /api/public/v1/models,供脚本/外部系统在没有 Admin 会话的情况下读取模型目录状态: 支持 name / status / visibility / releasePhase 精确匹配过滤,未知、空、重复或非法过滤返回 400,非 GET 方法返回 405; 响应带有稳定 schemaVersion,包含模型身份/类型、技术状态、可见性、发布相位、可用 route 数、派生的 routing/public 可见性与 blockers、deployedAt 与 releasedAt, 且不暴露 provider 配置、凭据、价格、backend 名与 route id,响应头为 Cache-Control: private, no-store;该路由刻意置于 /api/admin/* 之外,原有需鉴权的 Admin 路由行为不变。

同一次改动修正发布相位变更的时钟语义:相位未变化时不再刷新 updated_at、不再写审计事件,使 releasedAt 等于最后一次真实进入 released 的时间(pre_release / archived 时为 null)。

Author:Liu Yi(nettee)

无(37d7d377c...3b3ea92c1 内 apps/web 无变更)。 无(API 发布点已等于 main HEAD,范围为 0;接口挂在 Admin 服务,不走 API 服务)。 无(Link 发布点已等于 main HEAD,范围为 0)。 apps/admin/app/api/public/v1/models/route.ts(新增匿名 GET 路由)、 apps/admin/lib/server/public-model-status.ts(过滤校验 + 查询 + 稳定投影 + usable route / blocker 计算,212 行新增)、 apps/admin/lib/server/admin/core.ts、apps/admin/lib/server/admin/models.ts(发布相位变更幂等化,不再无意义刷新 updated_at / 写审计); 测试 test/public-model-status.test.ts、test/admin-console.test.ts,文档 apps/admin/README.md。共 7 文件、+535 / -27。
影响面:Admin 对外多出一个无鉴权读端点(部署在网络内部,不新增浏览器 CORS);运营侧 release phase 操作的行为变化(releasedAt 语义更严格)。运维可借此端点在模型 release 前/后自动核对 catalog 生效状态。
无(a7aa125f3...3b3ea92c1 内 db/migrations 与 db/schema 均无变更)。 无(392374aba...3b3ea92c1 内 data/json 与 db/seeds 均无变更)。
S非 runtime:CI workflow 兼容性、代码质量工具链、文档校准

非 runtime 变更,不进入任何服务维度列。其中 8a48165f6 移除 Forgejo 不支持的 workflow permissions 键,改动覆盖全部 .forgejo/workflows/* (含 deploy-db-migrations-prod.yml 与 deploy-model-routing-catalog-prod.yml)。由于 workflow 文件在 dispatch 时从 main 读取,本次发布立即使用新版本。 37639613f(代码质量工具 Erosion / Verbosity 分项目报告)与 8b22b0b11(文档与代码对齐)不参与镜像构建与部署。 三者均已在 4d9eee27...3b3ea92c1 范围内,但对四个服务镜像与 DB/Catalog 内容无影响。

Author:mrcfps(#140)、Liu Yi(nettee,#129 / #130)

  • 8a48165f6 fix(ci): 移除 Forgejo 不支持的 workflow permissions(PR #140)
  • 37639613f feat(tools): 新增 Erosion / Verbosity 分项目分析与独立报告(PR #129)
  • 8b22b0b11 docs: reconcile documentation with code evolution(PR #130)
无 runtime 变更。 无 runtime 变更。 无 runtime 变更。 无 runtime 变更。 不影响 migration 内容;仅影响 workflow 定义本身(production dispatch 走新版本)。 不影响 seed 内容。

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

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

发布建议

  1. Migration 判断:不需要跑 migration。 BASE_DB a7aa125f3(2026-09-28)之后到 main 的 19 个 commit 中,没有任何 db/migrations / db/schema 变更; 最新的 migration 文件仍是已执行的 20260928085420_account_user_id_index.sql。无需触发 deploy-db-migrations-prod.yml。
  2. 服务发布顺序:本轮只有 Admin 一个服务需要发布,单独触发 deploy-admin-eks-prod.yml(发布 3b3ea92c1)即可,无需 DB → Catalog → Link → API → Web 的顺序约束。 Web(37d7d377c,差 1 个不触及 apps/web 的 commit)、API 与 Link(已等于 main HEAD)本轮不必滚动发布,重发不会带来任何运行时变化。
  3. 数据 seed / catalog 判断:不需要 apply catalog。 BASE_CATALOG 392374aba(2026-09-30T03:35Z run #3325)已经越过 main 上全部 data/json / db/seeds 变更, 392374aba...3b3ea92c1 范围内 0 个 catalog 变更。无需触发 deploy-model-routing-catalog-prod.yml。 注意:Catalog 中 GPT-6.1 Sol 的 release phase 按 design 仍为 pre_release,对用户可见性由 Admin 侧的发布相位操作决定,与本次 Admin 部署的代码无关。
  4. 发布后观测:
    • Admin:GET /api/public/v1/models 无 Cookie 返回 200 且 Cache-Control: private, no-store;非法 releasePhase 返回 400;POST 返回 405;GET /api/admin/models/tables 无鉴权仍返回 401(确认鉴权边界未被放宽)。
    • Admin:Ready Pod 数与镜像 tag 变为 nexu/amr-admin @ prod-3b3ea92c1…(Prometheus kube_pod_container_info),部署后 status/updated/available 恢复一致。
    • Admin 运营侧:切换一次模型 release phase,确认 releasedAt 只在相位真正变化时刷新,重复提交同一相位不产生新的审计事件。
    • 回归确认:Web / API / Link 未滚动发布,其 Pod 镜像与 digest 应保持本报告中的值不变。

备注:本报告所有 workflow、commit、PR 与 compare range 均为 Forgejo core/amr(https://code.powerformer.net/core/amr)链接。 四个服务的 compare range 基于 EKS Pod 观察到的 BASE(Web 37d7d377c、API / Link 3b3ea92c1、Admin 4d9eee27), DB migration 与 Catalog 的 compare range 基于各自 workflow 最近成功运行的 BASE(a7aa125f3 / 392374aba),未使用统一的最旧基线,也未用 workflow 的最近成功 SHA 替代 Pod 实态。