AMR 生产发布影响报告
当前生产发布点(EKS 实态 + Forgejo workflow 记录)
Web、API、Link、Admin 的发布点来自 Grafana / Prometheus 观察到的 Ready EKS Pod 镜像(namespace nexu,datasource prometheus,由 kube-state-metrics 采集,全部样本新鲜度在 29 秒内);DB migration 的发布点来自对应 Forgejo workflow 最近一次成功运行。四个服务均已校验:同一服务所有 Ready Pod 的 commit 与 digest 一致、副本数 spec = updated = available(无滚动中 / 回滚中的混合状态)、Ready Pod 数等于 spec 副本数。四个服务的 workflow 最近成功记录与 Pod 实态全部一致(仅作审计对照)。
feature 表里只列出发布点之后的变更;发布点之前的内容属于已生效,归入「已在生产生效」一节。目标 commit 为 a96eefe50(feat(billing): expose independent funding feedback for AMR (#248),2026-10-13 14:00,lefarcen),本地 main 与 origin/main 相同。
本轮采样说明:本次采样一次成功,四个服务均处于稳定状态(无滚动 / 回滚中的混合状态,无新旧 Pod 并存),直接采用该快照作为发布点。与上一份报告(2026-10-13 16:19 本地)相比,六个生产发布点全部前进了:Web 27e00e635 → 72252761d、API 3b3ea92c1 → 72252761d、Link e9d02aa9b → 72252761d、Admin 92ef6744c → 72252761d、DB f1b0d7643 → 806b12365(Catalog 仍为 f3ab9fccd)。也就是说:上一份报告列出的待发布项(#243、#164、#253、#254、#245 等)已经在 2026-10-13T08:24–08:34Z 的发布中上线(DB run #4711,API run #4725,Link run #4726,Admin run #4727,Web run #4732),全部归入下面「已在生产生效」一节。四个服务现在都停在同一个 commit 72252761d 上(即 HEAD 之前的第 2 个 commit),origin/main 从那以后只前进了 2 个业务 commit(c07e72e0a #258、a96eefe50 #248),即本报告的两个 feature。
nexu/amr-web · container webkube_pod_container_info,image 过滤 amr-web:prod-[0-9a-f]{40} 且仅取 Ready Pod)72252761dsha256:54a3225c93637ff7a2e4893e5dc1898dce5260a813f02a2b4bd4265a559bcc3famr-web-5fbc7d6c48-6prlv, amr-web-5fbc7d6c48-lzmbm72252761d;与 Pod:一致(workflow 最近成功运行的 commit_sha 与 Pod 实态相同)72252761d...a96eefe50):2 commits;触及该服务目录的变更 0 个触及该服务目录的变更nexu/amr-api · container apikube_pod_container_info,image 过滤 amr-api:prod-[0-9a-f]{40} 且仅取 Ready Pod)72252761dsha256:9108f206817cac71ddb939988614a77dff4379b26c5edd7d9e451d61c7d3f705amr-api-696dfb78db-h6jhq, amr-api-696dfb78db-x6vkp72252761d;与 Pod:一致(workflow 最近成功运行的 commit_sha 与 Pod 实态相同)72252761d...a96eefe50):2 commits;触及该服务目录的变更 a96eefe50 feat(billing): expose independent funding feedback for AMR (#248)nexu/amr-link · container linkkube_pod_container_info,image 过滤 amr-link:prod-[0-9a-f]{40} 且仅取 Ready Pod)72252761dsha256:7ac11c23bee3bcb15525b8c6982cb433823d280810e6316b30ff474ac14b4795amr-link-688b4fff6d-nzqfb, amr-link-688b4fff6d-wzh87, amr-link-688b4fff6d-4hmx9, amr-link-688b4fff6d-zv46z, amr-link-688b4fff6d-2qm9z, amr-link-688b4fff6d-p4zmr, amr-link-688b4fff6d-5pt8c, amr-link-688b4fff6d-c4vs872252761d;与 Pod:一致(workflow 最近成功运行的 commit_sha 与 Pod 实态相同)72252761d...a96eefe50):2 commits;触及该服务目录的变更 c07e72e0a fix(link): normalize provider parameters and tool IDs (OPEND-3756) (#258)nexu/amr-admin · container adminkube_pod_container_info,image 过滤 amr-admin:prod-[0-9a-f]{40} 且仅取 Ready Pod)72252761dsha256:75548e75345199ca24e3f241ac917ac22870bfe273f4a151ac4b6e4e3fcd964damr-admin-74dd9479cf-68rrt, amr-admin-74dd9479cf-r2rcg72252761d;与 Pod:一致(workflow 最近成功运行的 commit_sha 与 Pod 实态相同)72252761d...a96eefe50):2 commits;触及该服务目录的变更 0 个触及该服务目录的变更workflow_dispatch)806b12365f3ab9fccd)不能作为目录配置已生效的证据。main(a96eefe50)执行 pnpm --filter @vela/api pricing:plan 得到目标 revision 93e51aaf…(planCount 9 = 5 personal + 4 team),与生产 active revision 完全一致。GET /api/v1/public/pricing/latest(amr-api.open-design.ai)返回 revision=93e51aaf86617b5314a5ed9a08aa8fd5c24413a9c0357aa402c8773a15a9acfb、publishedAt=2026-09-24T09:07:34.435Z、schemaVersion=1、9 个 plan;ETag 与 body revision 一致、Cache-Control: public, max-age=300。此次发布真正新增的 feature 和影响面
| Feature / Author / Commits | Web | API | Link | Admin | DB schema / migration | Admin 模型配置操作 |
|---|---|---|---|---|---|---|
|
XLAMR 独立资金状态提示:预检新增
fundingCheck 只读三态(#248)在既有的已认证预检端点 ① 三态语义:Coding Plan 配额可用优先于空钱包,钱包余额为正也算 ② 既有端点的可用性语义变更(本轮真正的风险点):同一个 handler 现在在认证触达数据库之前限流——每 API 实例最多 ③ 缓存与身份边界:只有新鲜通过认证 + 工作区授权的请求可以共享 member/model 读结果或命中 5 秒正向缓存(键含 user + workspace + member + model,每实例最多保留 1,000 条正例);负例与错误不缓存,缓存不绕过成员撤销; ④ 消费端与降级:OD 把该字段当纯早期 UI 反馈,遇到 503 / 超时按 Author:lefarcen |
无(该提交未改 apps/web/)。 |
待发布:services/api 7 files,+742 / −80:src/billing/http/routes.ts(+111 / −60,预检 handler 重构为限流 + 截止 + 缓存 + 新字段)、新增 src/billing/preflight-load.ts(91 行,BillingPreflightUnavailableError / 并发与正向缓存)、src/billing/preflight.ts(+104,billingFundingCheck 三态判定)、src/persistence/users.ts(+16,funding constraints 读取);测试 test/billing-preflight-load.test.ts(+119)、test/billing-preflight.test.ts(+173 / −20)、test/e2e/billing-funding-constraints.test.ts(+128)。同一提交另改 packages/shared/src/index.ts(+2,schema 新增可选 fundingCheck)与 apps/cli(2 files,+3 / −1,BillingPreflightResponse 透出字段)——后者属 Vela CLI 独立发布通道,见「发布建议」。发布后要盯 503 比例:按默认连接池只有每实例 2 个并发预检名额。 |
无(该提交未改 services/link/)。 |
无(该提交未改 apps/admin/)。 |
无 schema / migration(PR 明确「不含部署、数据库 migration 与网关策略变更」)。 | 无模型目录配置操作:该字段仅只读现有 Provider / 模型 / 价格 / 路由与 member 充值策略,不需要也不应该在 Admin 里改任何配置。 但 insufficient 的正向判定依赖「每条 active 路由都可证明确实收费」与在途充值证据,该配置现状本轮未做独立只读核验(待核验);证据缺失时该字段按设计退化为 unknown,不影响准入,因此不阻塞发布。 |
|
LLink 供应商参数与工具 ID 兼容修复(OPEND-3756,#258)
修复 OPEND-3756 下 7 类已在本地真实供应商链路复现的上游拒绝,全部只落在 Link(含 2 个必要的 vendor patch),无 schema、无 Admin 配置依赖: ① ZAI GLM( ② DeepSeek 显式 ③ Vertex Gemini Flash( ④ Bedrock Opus 5.5 thinking + temperature:上游在 thinking 生效时只接受 ⑤ Bedrock 历史里的超长工具 ID:超过 64 字符的 ⑥ Aliyun Kimi( ⑦ Chat-backed Responses 工具流:item 明确不改:ZAI 不支持的 effort 仍显式失败;Bedrock 别名只作用于最终报文,不补造缺失的工具结果或参数;工具流测试不承诺「同一 chunk 多工具起始」。两个 vendor patch 的失败证据、维护与移除条件记录在 Author:Liu Yi |
无。 | 无(该提交未改 services/api/)。 |
待发布:services/link 15 files,+611 / −21:internal/providercompat/(adapter.go +6 / −3、structured_output.go +17 / −1、text.go +39 / −1,新增 Opus temperature 处理与 GLM / Vertex 别名)+ 3 个新测试(+147 / −2);internal/bifrostengine/ 2 个回归测试(+69 / −5);third_party/bifrost-core/ 4 files +304 / −7(新增 providers/bedrock/tool_ids.go 80 行 + 132 行测试、schemas/mux.go 的 fc_ item ID、providers/bedrock/{chat,responses}.go 的 ID 归一 / 恢复);e2e/link 4 files(+232 / −3,含 provider-compat-followup.sql / zai-effort.sql fixtures 与 138 行复现脚本);3 个 spec 文档(+56)。必须确认全部 8 个副本滚动完成(同一 commit、同一 digest、spec = updated = available = 8)后才算发布完成。 |
无。 | 无 schema / migration。 | 无模型目录操作:参数归一与 tool ID 别名都在 Link 代码 / vendor patch 内完成,不需要在 Admin 里改 Provider / 模型 / effort 默认值 / 路由。未核验(无需核验)。 |
已在生产生效(发布点之前,本次不重复发布)
以下 feature / commit 均在对应生产发布点之前,已在生产运行。四个服务以 EKS Pod 实态为基线,DB migration 以 Forgejo workflow 记录为基线;若从 main 重新发布,只分析各自基线之后的净新增。
- 四个服务(Web / API / Link / Admin 现均为
72252761d):2026-10-13T08:29–08:34Z 的一次集中发布把四个服务同时推到72252761d(2026-10-13T08:29:18Z 起的 runs #4725(API)、#4726(Link)、#4727(Admin)、#4732(Web)),上一份报告列出的全部待发布项由此上线:aea58ea9b(#243)Coding Plan 可恢复批量额度重置(Admin + API + Link + DB 四维度);f755e70dc(#164)CMS Touchpoint:Test 活动完整发现 + 上下文身份绑定 + 回执交接(API + Admin 侧,Web 侧更早已上线);3d3babea8(#253)Link 供应商参数兼容(DeepSeek 强制工具 /off别名 / Haiku 采样参数);1644468d6(#254)Link TTFT 改为首次有效输出 + 新增每请求 TPS 分布;529858f59(#245)Web Go 5 小时最高额度统一为 $10(含 12 语言文案),Web 也由27e00e635前进到72252761d。
- API(BASE_API
3b3ea92c1之前的改动已生效):旧基线停在 2026-09-30(#172),此后到72252761d之间的 API 侧改动(#160、#164、#243 等)已随上面的集中发布上线;本轮 API 唯一待发布内容是 #248。 - Link(BASE_LINK
e9d02aa9b之前的改动已生效):2026-10-12 11:47Z 的滚动上线了 #242(Haiku 5.5 adaptive thinking / 低预算 reasoning),随后 #243、#253、#254 又随 10-13 08:29Z 的滚动上线;本次采样 Link 稳定在 8/8 Ready(同一 commit72252761d、同一 digest、spec = updated = available = 8)。本轮 Link 唯一待发布内容是 #258。 - Admin(BASE_ADMIN
92ef6744c之前的改动已生效):#235、#229 / #234、#228、#226、#188、#170、#159 等已在更早的发布中上线,#164 与 #243 的 Admin 侧随 10-13 08:30Z 的滚动上线。本轮 Admin 无待发布变更。 - DB migration(BASE_DB
806b12365已生效,2026-10-13T08:24:04Z @ run #4711,triggerworkflow_dispatch):该次 apply 把上一个基线f1b0d7643之后的唯一 migrationdb/migrations/20261012113538_coding_plan_quota_resets.sql(#243,coding_plan_quota_resets表 + 3 个部分唯一索引 + 4 个ON DELETE RESTRICT外键,db/schema/public.hcl/atlas.sum同步)应用到生产。因此本轮不需要再跑 migration:基线之后到 HEAD 没有任何新的db/migrations/、db/schema/变更。 - Public Pricing(独立发布流程,生产 active revision
93e51aaf…,2026-09-24T09:03:05Z @ run #2813 /0ab43a985):本次核验发现源与生产一致,无需重新发布——本地main(a96eefe50)执行pnpm --filter @vela/api pricing:plan得到 revision93e51aaf86617b5314a5ed9a08aa8fd5c24413a9c0357aa402c8773a15a9acfb(9 plan = 5 personal + 4 team),与生产GET /api/v1/public/pricing/latest返回的revision/publishedAt=2026-09-24T09:07:34.435Z完全一致;观察时间 2026-10-14T02:04Z 前后。仓库里的data/json/public_pricing.json是 catalog 生成器源数据,不是该 API 的发布源。 - 模型目录 · Admin 配置(非代码发布维度,独立核验):本轮两个 feature 都不依赖模型目录配置操作,因此未做独立 Admin / 数据库只读核验,核验状态记为「待核验」;不对现有生产模型 / 路由 / 价格做任何推断,也不得用 seed 或手工 SQL「回填」。
- 范围内已回退(净变更归零):本报告各维度 compare range 内没有任何回退 commit(历史回退
ed2fdcd97#193 → #127 在两个服务发布点之前,本次发布不含回退)。
发布建议
- Migration 判断:本次不需要跑 migration。BASE_DB
806b12365(2026-10-13T08:24:04Z apply)已包含仓库最新一份 migration(db/migrations/20261012113538_coding_plan_quota_resets.sql),基线之后到 HEAD 的 3 个 commit 0 个触及db/migrations//db/schema/,因此不要 dispatch deploy-db-migrations-prod.yml。 - 服务发布顺序(本轮):只有 API 与 Link 有净变更,两者互不依赖,可任意顺序或并行滚动;Web / Admin 无净变更,重新发布只是把同一份代码再滚动一次(不产生行为变化),可以跳过:
- 1) API:触发 deploy-api-eks-prod.yml 发布
a96eefe50(#248,services/api7 files +742 / −80 +packages/sharedschema)。注意这是对既有预检端点的行为变更:默认PG_POOL_MAX=10时每 API 实例只允许 2 个并发预检,超出 503 +Retry-After: 1,且有 2 秒响应截止。发布前请确认生产实际PG_POOL_MAX取值(本 Run 未核验),并按min(8, floor(PG_POOL_MAX/4))复核每实例名额;若观察到 OD 早期提示频繁退化为unknown,先判断是否被billing_preflight_unavailable卸载(这是可选提示的预期降级路径,不需要立刻回滚 API)。 - 2) Link:触发 deploy-link-eks-prod.yml 发布
c07e72e0a(#258,services/link15 files +611 / −21,含 2 个 vendor patch)。必须确认 8 个副本全部滚动完成(同一 commit、同一 digest、spec = updated = available = 8)——本轮无 migration、无配置依赖,发布本身没有前置条件。 - 3) Vela CLI(跨仓库前置条件,不是 EKS 发布):#248 的字段要在用户侧真正可用,需要走 vela-cli-release.yml(手动 dispatch + npm 发布)出一个带
fundingCheck的稳定版。本 Run 只读观察 npm registry:@powerformer/vela-cli的latest仍是 0.1.3(2026-09-20T08:37Z,早于本仓库所有apps/cli十月份改动),test通道为 0.1.4-test.1(2026-10-13T08:44Z,source6ec4e93b4)。结论:带该字段的 CLI 尚未进入稳定通道,需要单独安排 CLI 版本发布;在那之前 OD 会按unknown降级。 - 4) OD(外部仓库):消费端在
nexu-io/open-design(草稿 PR #8688,commit16fcf2b),不属于 AMR 发布范围;AMR 侧 API + CLI 到位后,OD 才能拿到独立早期提示。
- 1) API:触发 deploy-api-eks-prod.yml 发布
- Catalog / Admin 模型配置判断:不需要触发 deploy-model-routing-catalog-prod.yml,也不需要任何 Admin 模型目录操作——#248 只读现有 Provider / 模型 / 价格 / 路由配置(证据缺失时退化为
unknown),#258 完全在 Link 代码内完成。现有环境若触发该 workflow 只会打印跳过提示;不要用历史 seed 或手工 SQL 去「回填」或回滚既有配置。配置现状(含insufficient判定所依赖的路由收费 / 充值策略证据)本轮未核验(待核验),不阻塞本次发布。 - Public Pricing 判断:不需要发布。本地
pricing:plan计算出的 revision 与生产 active revision93e51aaf…一致(见上,2026-10-14T02:04Z 核验),因此不要为本次发布 dispatch deploy-public-pricing-prod.yml——该 workflow 没有只读模式,每次 dispatch 都是真实生产写入。 - 发布后观测:
- Pod 实态:API 应从
72252761d滚动到a96eefe50,Ready 恢复 2/2;Link 应从72252761d滚动到a96eefe50,Ready 恢复 8/8;两者都应满足同一 commit、同一 digest、spec = updated = available。 - #248(API):观察
GET /api/v1/workspaces/{workspaceId}/billing/preflight的 503billing_preflight_unavailable比例与Retry-After、2 秒截止命中率、以及被占满的并发槽是否能在底层 SQL 结束后释放;确认fundingCheck三态分布与funding自洽(available与「Coding Plan 可用或钱包为正」一致,insufficient必须同时满足四个条件);确认负例 / 错误未被缓存、5 秒正向缓存没有跨身份泄漏、缓存未绕过成员撤销;确认Cache-Control: private, no-store在成功与失败分支都存在;如果这是一个新引入的容量瓶颈,先看是否只影响这次新增的可选预检调用方(Link 准入不依赖该端点,agent run 不应因此被拒绝)。 - #258(Link):对
glm-5.3-flash/glm-5.3-flashx、deepseek-flash(显式json_object)、gemini-3.7/3.8-flash(minimal)、Bedrockclaude-opus-5-5(thinking + temperature)、Bedrock 超长工具 ID 历史、kimi-k2.7-code(developer 角色)、Chat-backed Responses 工具流 7 类场景,确认上游 400 归零并返回非零 usage;确认 Responses 流里 item id 为fc_…、call_id仍为call_…,Bedrock 回显按原 ID 恢复;确认 ZAI 不支持的 effort 仍然显式失败(不应被静默改成合法档位),Bedrock 工具结果的缺失参数没有被补造。 - 回归项(已生效,仅抽查):#243 的 Admin 重置页面 /
coding_plan_quota_resets表、#164 的 Admin Activities Test 活动分页、#254 的gateway_model_output_tokens_per_second指标、#245 的定价页 Go 5 小时列$10。 - Public Pricing(仅核对,无需发布):
GET /api/v1/public/pricing/latest应继续返回revision=93e51aaf…,ETag与缓存头正常。
- Pod 实态:API 应从
备注:本报告所有 workflow、commit、PR 与 compare range 均指向 Forgejo code.powerformer.net/core/amr,不使用 GitHub Actions。四个服务的 compare range 基于 Grafana / Prometheus 观察到的 Ready Pod 镜像 commit(而非 GitOps / workflow 最近成功记录);DB migration 的 compare range 基于 deploy-db-migrations-prod.yml 最近一次成功运行的 commit_sha;四个服务维度另附对应 deploy-*-eks-prod.yml 最近成功记录作为审计对照,本次四者与 Pod 实态全部一致。Admin 模型配置没有 Git compare range,本轮无依赖项,核验状态记为「待核验」;Public Pricing 为独立发布流程,按源 revision 与生产 active revision 的一致性判断。