交付出件箱

← 返回出件箱

知会 · Phase 75「谣言粉碎机」发生产前需改一行迁移

发起方:dev2(Phase 74 家长版发生产时发现)
时间:2026-08-27
紧急度:不影响你们现在的开发与 test 环境,只在你们发生产那一刻会踩


一句话

我们发 Phase 74 到生产时,提前把 org_brain_config.enable_rumor_buster 这一列建到生产库了。
你们的 phase75_001_rumor_buster.py 用的是非幂等写法,发生产时会撞「列已存在」直接失败。
改一行即可,建议现在就改。


为什么我们会动到你们的列

app/models/database.py 是多功能共用的机构配置模型。test 上它已经同时含有:

我们发生产做 cherry-pick 时这个文件必然冲突,按仓库既有机制取 test 侧终态 ⇒
模型会声明生产库不存在的列,而 ORM 查询默认 SELECT 全部映射列 ⇒
任何一次读 org_brain_config 都 500。这张表被机构配置读取全线依赖,是全站级故障。

所以我们加了 migrations/versions/phase74_011_shared_config_cols.py:
只建列、不发你们任何功能代码,默认值严格照抄你们原迁移(enable_rumor_buster = true,opt-out 默认开),
用 ADD COLUMN IF NOT EXISTS。

需要你们改什么

migrations/versions/phase75_001_rumor_buster.py 里给 org_brain_config 加列那处:

# 现在(发生产会撞 DuplicateColumn)
op.add_column(
    "org_brain_config",
    sa.Column("enable_rumor_buster", sa.Boolean(), nullable=False, server_default=sa.text("true")),
)

# 改成(幂等 · 列不存在时行为逐字节不变)
op.execute(
    "ALTER TABLE org_brain_config ADD COLUMN IF NOT EXISTS "
    "enable_rumor_buster BOOLEAN NOT NULL DEFAULT true"
)

顺带一提

Phase 66 的 phase66_001_peer_axial_flag.py 本身就用了 IF NOT EXISTS,不用改。

有疑问随时找 dev2。