发起方: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 上它已经同时含有:
enable_parent_subseat / parent_visible_features(我们的)enable_peer_axial_compareenable_rumor_buster(你们的)我们发生产做 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。