e017bcc9bb97b834bd34ee14897658e1b89eb27e
**问题**:上一轮加的"配置丢失告警"只比对 platform_config_item,而受 config_release 整版本替换影响的表有**三张**(按 information_schema 核对):platform_config_item / prompt_template_version / model_routing_rule。这个盲区造成过真实后果 —— 客服闲聊提示词 挂在 release 174,active 变成 181 后 load_active_prompt 读不到,而 Agent 侧有逐字段 兜底、回落到代码默认值,于是功能看着正常、没人发现、**一行告警都没有**。 **改动**(均在 app/service/config_release_service.py): 1. 新增 RELEASE_SCOPED_TABLES:三张表 + 各自的**逻辑键**。逻辑键不含 release_id、 不含自增 id、也**不含 version** —— 同名提示词在不同版本里可以用不同 version, 那仍是同一份配置。清单是穷举的,并注明漏掉任何一张的后果都是静默失效。 2. 新增 effective_snapshot():读当前生效版本在**全部三张表**里的内容,每行已剥掉 id / elease_id(见 NOT_PORTABLE_COLUMNS),可直接作为新版本的写入载荷。 发布脚本应先取它、再追加本次变更,这样"漏继承"就从"每次靠人记得"变成结构上不容易漏。 3. _warn_dropped_items 改为逐张表比对,告警里带上表名。 model_routing_rule 没有 ORM 映射,用原生 SQL 处理;它当前 0 行,但纳进来才不会将来 配了又漏。 测试:新增一条专门锁住"提示词被丢掉时也要点名"(那正是这次的盲区),并把 fake session 改成按表 + release 返回行 —— 第一版 fake 不分表,查提示词表时会拿到配置项的行、 报 KeyError,虽然真实代码是按表查的,但 fake 不真实就盖不住问题。 ruff / mypy(136 文件) / 612 unit+contract 全绿。
Description
番茄炒蛋组
18 MiB
Languages
Python
99.9%