AMR 生产发布影响报告
结论概述
六个维度的发布点本次已经收敛到 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)。
nexu/amr-web · container web37d7d377csha256:64720a397a3f80287a7ec78ae1aee018fca99a1ff24def173e769e08272d3c1837d7d377c...3b3ea92c1):1 commit,其中触及 apps/web 的 0 个nexu/amr-api · container api3b3ea92c1sha256:6599559c5f91bdad4c73298152779034a2938f27d32c74bc8808dee470f0a0023b3ea92c1...3b3ea92c1(空范围)):0 commit,无待发布内容nexu/amr-link · container link3b3ea92c1sha256:0b5379e4c4f0e360fd5534abda3c2d5ded5b63c52b798be13a50b9357d2b7adf3b3ea92c1...3b3ea92c1(空范围)):0 commit,无待发布内容nexu/amr-admin · container admin4d9eee27sha256:dc8f4af23e8f449a8b71b69a20e9ac67e9ad7bf03abbc456ba578c01dc8b5fd9a7aa125f320260928085420_account_user_id_index.sql 并发建索引 + atlas/schema 同步,见「已在生产生效」)392374aba
观察方式: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 / Author / Commits | Web | API | Link | Admin | DB schema / migration | DB catalog(seed) |
|---|---|---|---|---|---|---|
|
MAdmin 公开模型状态 API(无会话可读)+ 发布相位变更幂等化
本轮唯一的净新增 feature,也是自 09-25 起持续待发布的唯一内容(Admin 自
同一次改动修正发布相位变更的时钟语义:相位未变化时不再刷新 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 变更,不进入任何服务维度列。其中 Author:mrcfps(#140)、Liu Yi(nettee,#129 / #130) |
无 runtime 变更。 | 无 runtime 变更。 | 无 runtime 变更。 | 无 runtime 变更。 | 不影响 migration 内容;仅影响 workflow 定义本身(production dispatch 走新版本)。 | 不影响 seed 内容。 |
已在生产生效(发布点之前,本次不重复发布)
以下 feature / commit 均在对应生产发布点之前,已在生产运行。四个服务以 EKS Pod 实态为基线,DB migration 与 Catalog 以 Forgejo workflow 记录为基线。若从 main 重新发布,只分析各自基线之后的净新增;基线之前的内容不得出现在 feature 表中。
-
Catalog(BASE_CATALOG
392374aba已生效,2026-09-30T03:35:19Z @ run #3325):392374aba接入 GPT-6.1 Sol(#158,Public + Team 模型、provider_openai / openrouter 路由、public pricing,baseline 仍为pre_release)、9cb11dffa下调 Aiping 路由、优先 DeepSeek / BytePlus(#157)、c5452886c恢复 BytePlus DeepSeek / GLM 文本路由(#153)、2134cdb88接入 Claude Sonnet 5.5(#146)、06cf3e250回退路由权重并临时禁用 BytePlus 文本路由(#141)、01a204b6c提升 BytePlus 优先级、下调 Aliyun DeepSeek(#139)、4247cbca3降低 BytePlus DeepSeek / GLM 路由权重(#126)均已 apply 到生产目录。 -
DB migration(BASE_DB
a7aa125f3已生效,2026-09-28T11:54:22Z @ run #3104):a7aa125f3(#137)db/migrations/20260928085420_account_user_id_index.sql(account user 查询索引,concurrent 创建)已执行,db/atlas.hcl、db/schema/public.hcl、docs/ops/post-migrate-analyze.md同步落地。这是本仓库目前最新的 migration。 -
Link(BASE_LINK
3b3ea92c1已生效,2026-09-30T14:06:47Z @ run #3476):3b3ea92c1BytePlus 历史与 DeepSeek 请求兼容 + 结构化输出(#172)、b28db717d输入上限与上下文溢出错误归一(#168)、2180569caprovider 请求归一与本地校验错误分类(#161)、126947877统一 BytePlus 请求兼容层(#145)、26370c56e省略 BytePlus 不支持的 reasoning summary 字段(#136)、6e4509a96转换前剥离不支持的 stream_options(#135),以及 #158 的 Bifrost OpenAI reasoning 补丁。 -
API(BASE_API
3b3ea92c1已生效,2026-09-30T14:07:02Z @ run #3477):ddc167a31收敛 workspace billing ledger 查询上界(#160)、d8907669abilling 侧对 legacy 订阅者一次性重发 Go intro(#156)、95c2819d4补齐缺失 HTTP 指标路由归类(#134)、e43cbd2b6降低 billing preflight / snapshot / 鉴权的数据库负载(#132)。 -
Web(BASE_WEB
37d7d377c已生效,2026-09-30T12:39:44Z @ run #3465):37d7d377cPlus 套餐模型列表加入 GPT-6 Sol(#171)、5993bc6fcDesign Plan 加入 GPT-6.1 Sol 与限时用量加成(#169)、4fdebb905折叠的 Design Plan 行避开 View all(#167)、c56bb26daDesign Plan 加入 MiMo V2.6 Pro(#165)、d8907669ateam-dashboard 的 Go intro 重发入口(#156)、125902bef同步 Design Plan 权益/模型/用量估算(#150)、2519d1014隐藏 Design Plan 额度金额(#148)。 -
Admin(BASE_ADMIN
4d9eee27已生效,2026-09-24T10:53:45Z @ run #2873):4d9eee27(#125)GO 额度统一遵循 Admin 会员权益配置。Admin 发布点之后仅有 #127 一个apps/admin变更,即本报告 feature 表中的唯一一行。 - 范围内已回退(净变更归零,本次不发布):
4d9eee27...3b3ea92c1内未发现 add→revert 型净变更;Catalog 路由权重的两次调整(#139 / #141 / #157)为叠加式收敛,均已 apply 生效。
发布建议
-
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。 -
服务发布顺序:本轮只有 Admin 一个服务需要发布,单独触发 deploy-admin-eks-prod.yml(发布
3b3ea92c1)即可,无需 DB → Catalog → Link → API → Web 的顺序约束。 Web(37d7d377c,差 1 个不触及apps/web的 commit)、API 与 Link(已等于 main HEAD)本轮不必滚动发布,重发不会带来任何运行时变化。 -
数据 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 部署的代码无关。 -
发布后观测:
- 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…(Prometheuskube_pod_container_info),部署后 status/updated/available 恢复一致。 - Admin 运营侧:切换一次模型 release phase,确认
releasedAt只在相位真正变化时刷新,重复提交同一相位不产生新的审计事件。 - 回归确认:Web / API / Link 未滚动发布,其 Pod 镜像与 digest 应保持本报告中的值不变。
- Admin:
备注:本报告所有 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 实态。