破坏性操作的三道闸
目标
破坏性操作在执行前设三道闸:数据改动先准备可恢复备份、不可逆操作先说明回退方案、发布前审查实际 diff;凭据由 secrets 管理,发布遵循项目既定的版本控制与 CI/CD 流程。
操作步骤
备份闸与回退闸
备份闸要求任何数据库结构或数据改动执行前先备份,备份文件按时间戳命名放到项目根目录 backups/,未备份不得执行 migrate、drop、alter、delete 操作。SQLite 示例命令为 cp database.db backups/database_$(date +%Y%m%d_%H%M%S).db,命名格式为 {原文件名}_{YYYYMMDD_HHMMSS}.db。回退闸要求不可逆操作前说明如何恢复、需要哪些备份文件、预计恢复耗时,说不出这三点就说明操作没想清楚。
发布前核对预期与实际差异
审查闸用于比较预期改动、发布说明和实际 diff,发现混入无关变更就暂停。可以由独立审查者或隔离上下文的 Agent 执行。发布应走项目既定的版本控制和 CI/CD 流程,不限定某一家托管平台;紧急修复也要补齐记录。
凭据不进入代码和版本历史
所有凭据必须通过环境变量或 secrets 管理,禁止硬编码进代码和配置文件,因为 Key 一旦进入 git 历史等于永久泄露,只能作废重发。
完成检查
diff 审查和日常 PR review 有什么区别: diff 审查把预期改动和实际 diff 拆开比对,专门用于缺少 PR review 的独立开发流程。当没有第二个 reviewer 时,让隔离上下文的 Agent 充当审查者,检查实际改动是否与 Release Notes 描述一致。
为什么 Key 进 git 历史就无法挽回: git 会保留所有历史版本,即使从当前代码中删除,Key 仍能在历史提交中找到。因此只能作废重发,无法通过删除来解决泄露。