@routerhub/agent-rules 1.5.169 → 1.5.170
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.base.md +7 -0
- package/package.json +1 -1
- package/rules/global.md +7 -0
package/AGENTS.base.md
CHANGED
|
@@ -277,6 +277,13 @@
|
|
|
277
277
|
- 典型反例:`byteplus/seedance-2.0-mini` 视频生成,上游(火山引擎 t2v)拒绝 `resolution` 参数返回 400「the parameter resolution ... is not valid」,调度器仍按通用重试逻辑重试 3 次、每次同样 400,重试耗尽后模型被标成红色 failed 徽章,官网视频一直生成不出来。根因是「该参数不该传」这个确定性错误,重试多少次都不会成功。
|
|
278
278
|
- 自查:写重试逻辑时先问「这次失败重试一次会不会成功?」会(瞬时故障)→ 重试;不会(确定性错误)→ 不重试,直接暴露根因/告警。看到「重试 N 次全部失败」时,第一反应必须是研究「为什么每次都会失败」,而不是加大重试次数或加长间隔。
|
|
279
279
|
|
|
280
|
+
### ⑪ 对称实现缺失:同一约束在多条等价路径上漏同步 = 静默放行
|
|
281
|
+
|
|
282
|
+
- ⚠️ 同一个业务约束(拦截、限额、准入、状态判断)如果有多条**等价的代码路径**(如普通路由 + 健康分路由、多入口函数、多套 switch),必须确认每条路径都实现了同一套约束——漏掉任意一条,那条路径就静默绕过约束,不报错、不告警,是最隐蔽的缺口。
|
|
283
|
+
- **类比:小区有正门和好几个侧门,正门配了保安,但侧门忘了配——坏人绕一下就从没保安的侧门进去了,你还以为整个小区都有人守。**
|
|
284
|
+
- 典型反例:MP-73 vendor 双预算封顶。准入函数 `accountSkip` 在普通路由(`providers/pool.go`)实现了 `case accountSkipVendorBudget`(vendor 超限 → 429),但健康分路由 `pool_health.go` 的 6 处 *2 系列 switch(GenerateText2/Stream2/Responses2/ResponsesStream2/GenerateContentNative2/GenerateContentStreamNative2)全部漏了这个 case,vendor 超限时落入 default 被放行、返回 200 而非 429——同一条约束,普通路由守了、健康分路由没守。
|
|
285
|
+
- 自查:新增/修改拦截、限额、准入类约束时,先 `grep -rn "switch.*accountSkip\|case accountSkip"` 找出**所有消费同一枚举/函数的路径**,逐个核对是否都补了新 case;Go 的 switch 漏 case 会落入 default(静默放行)而不是编译报错,不能靠编译器兜底。
|
|
286
|
+
|
|
280
287
|
## ⚠️ 网关后端编码铁律(来自 PR 评审沉淀)
|
|
281
288
|
|
|
282
289
|
⚠️ 本章来自 routerhub-gateway 92 个已合入 PR 中多位评审者(hankWaling / baikaifa / sam-pomex / rachelPomex / eason-qing / enzo0824)的 review 评论沉淀,每条都有真实 PR 出处。写 Go 后端(网关/代理/计费/路由类)代码时对照本节自查。本节所有条目均为强制规则,命中即自检。
|
package/package.json
CHANGED
package/rules/global.md
CHANGED
|
@@ -277,6 +277,13 @@ name: "通用规则"
|
|
|
277
277
|
- 典型反例:`byteplus/seedance-2.0-mini` 视频生成,上游(火山引擎 t2v)拒绝 `resolution` 参数返回 400「the parameter resolution ... is not valid」,调度器仍按通用重试逻辑重试 3 次、每次同样 400,重试耗尽后模型被标成红色 failed 徽章,官网视频一直生成不出来。根因是「该参数不该传」这个确定性错误,重试多少次都不会成功。
|
|
278
278
|
- 自查:写重试逻辑时先问「这次失败重试一次会不会成功?」会(瞬时故障)→ 重试;不会(确定性错误)→ 不重试,直接暴露根因/告警。看到「重试 N 次全部失败」时,第一反应必须是研究「为什么每次都会失败」,而不是加大重试次数或加长间隔。
|
|
279
279
|
|
|
280
|
+
### ⑪ 对称实现缺失:同一约束在多条等价路径上漏同步 = 静默放行
|
|
281
|
+
|
|
282
|
+
- ⚠️ 同一个业务约束(拦截、限额、准入、状态判断)如果有多条**等价的代码路径**(如普通路由 + 健康分路由、多入口函数、多套 switch),必须确认每条路径都实现了同一套约束——漏掉任意一条,那条路径就静默绕过约束,不报错、不告警,是最隐蔽的缺口。
|
|
283
|
+
- **类比:小区有正门和好几个侧门,正门配了保安,但侧门忘了配——坏人绕一下就从没保安的侧门进去了,你还以为整个小区都有人守。**
|
|
284
|
+
- 典型反例:MP-73 vendor 双预算封顶。准入函数 `accountSkip` 在普通路由(`providers/pool.go`)实现了 `case accountSkipVendorBudget`(vendor 超限 → 429),但健康分路由 `pool_health.go` 的 6 处 *2 系列 switch(GenerateText2/Stream2/Responses2/ResponsesStream2/GenerateContentNative2/GenerateContentStreamNative2)全部漏了这个 case,vendor 超限时落入 default 被放行、返回 200 而非 429——同一条约束,普通路由守了、健康分路由没守。
|
|
285
|
+
- 自查:新增/修改拦截、限额、准入类约束时,先 `grep -rn "switch.*accountSkip\|case accountSkip"` 找出**所有消费同一枚举/函数的路径**,逐个核对是否都补了新 case;Go 的 switch 漏 case 会落入 default(静默放行)而不是编译报错,不能靠编译器兜底。
|
|
286
|
+
|
|
280
287
|
## ⚠️ 网关后端编码铁律(来自 PR 评审沉淀)
|
|
281
288
|
|
|
282
289
|
⚠️ 本章来自 routerhub-gateway 92 个已合入 PR 中多位评审者(hankWaling / baikaifa / sam-pomex / rachelPomex / eason-qing / enzo0824)的 review 评论沉淀,每条都有真实 PR 出处。写 Go 后端(网关/代理/计费/路由类)代码时对照本节自查。本节所有条目均为强制规则,命中即自检。
|