用途:安全移除已完成发布的 Sentry option 或 FlagPole feature flag,避免因合并顺序错误而改变生产行为或让 automator 主分支报错。FlagPole flag 会通过 manager.py 自动注册同名 option 特性,因此与 option 走相同的 configoptions 路径。
固定顺序:
- 在 sentry / getsentry 中把每个读取点折叠为最终胜出的结果,并删除已死分支。若该 flag 同时在 static/ 和 src/ 被读取,通常拆成两个 PR,因为前后端并非原子部署;需两个 PR 都已部署。
- 待步骤 1 部署到所有区域后,从 sentry-options-automator 的 YAML 删除对应值或 flag 块。
- 待步骤 2 部署且 automator 运行变绿后,从 sentry 的 defaults.py / temporary.py 删除注册。
步骤 0 前置检查:确认是否由 automator 管理(option 需在 defaults.py 中有 FLAG_AUTOMATOR_MODIFIABLE,flag 始终适用;带 FLAG_PRIORITIZE_DISK 或无该标记的来自 ops 配置,不适用本流程);确认是否应删除(门控套餐/层级权益的 flag 是永久的,应把 manager.add(...) 从 temporary.py 移到 permanent.py 并保留 automator 条目);用 rg -n '<name>' src/ static/ tests/ 在 sentry 和 getsentry 中查读取点,用 rg -n '<name>' options/ 查设置位置与取值(以 automator 在 HEAD 的值为准)。
步骤 1:将各调用点折叠为胜出结果,不要把值留成 if True 或孤立常量。可选先改 defaults.py 的 default= 为已发布值并部署,再折叠调用点。同时清理由失败分支孤立的函数、组件、序列化器、hook、测试、fixture、分析事件、样式、类型,以及被特性门控的路由与导航项。
步骤 2:从 automator 删除值。option 删除后回退到 defaults.py 注册的默认值;flag 删除后自动注册为空对象,FlagPole 弃权并回落到 settings.SENTRY_FEATURES,即 manager.add 的 default= 参数(通常为 False),flag 会对所有人关闭而非保持 100%。需检查 options/default/<file>.yaml 及每个 options/regions/*/<file>.yaml;flag 只在 options/default/flagpole.yaml。注意 flag 注册上的 default=True 会在 YAML 删除后仍保持开启。合并后确认部署在 #feed-options-automator 变绿。
步骤 3:删除 defaults.py 中的 options.register(...) 或 temporary.py 中的 manager.add(...)。对 api_expose=True 的 flag,这也会从组织序列化器的 features 数组移除它,故步骤 1 的前端 PR 必须已部署。
若区域间取值不一致或 automator 运行出现 [DRIFT],应停止并询问用户,报告发现的值由其决定,不要自行选择。
常见失败:提前删注册会导致 automator CI 报 [ERROR] 与 options-drift 变红;值卡在 sentry_option 无法取消设置时需重新注册、让 automator 取消设置后再删注册;automator PR 合并后行为翻转说明步骤 2 早于步骤 1 全区域部署,可回滚该 PR。