fix(store): 补 checks/auto_approve_* 列的 ensureColumn 迁移(旧 DB 缺列 bug)

线上实测复现:既有 DB 的 projects 表早于这三列创建,schema.sql 的
CREATE TABLE IF NOT EXISTS 对已存在表是 no-op,故必须靠 ensureColumn 补列,
否则 createProject 的 INSERT 引用不存在的列报错「table projects has no column named checks」。
上个会话加列时漏了迁移,:memory: 测试走全新建表没暴露。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-24 23:41:10 +08:00
parent 1f318c2667
commit 1bf3fecf42
2 changed files with 56 additions and 0 deletions
+5
View File
@@ -37,6 +37,11 @@ export function openDb(file: string): Database.Database {
ensureColumn(db, 'projects', 'budget_usd', 'budget_usd REAL'); // 项目当期预算上限 USD(null=不限)
ensureColumn(db, 'projects', 'budget_period', "budget_period TEXT NOT NULL DEFAULT 'month'"); // 预算周期 day|month
ensureColumn(db, 'tasks', 'attachments', 'attachments TEXT'); // 附件 JSON [{name,type,path}](图片/文件随任务提交)
// checks/auto_approve_* 在 schema.sql 的 CREATE TABLE 里有,但既有 DB 表已存在时 CREATE 是 no-op
// 故这三列必须也走 ensureColumn 迁移(否则旧 DB 缺列,createProject INSERT 报错)。
ensureColumn(db, 'projects', 'checks', 'checks TEXT'); // 分项检查命令 JSON {"lint":..,"typecheck":..,"build":..}
ensureColumn(db, 'projects', 'auto_approve_plan', 'auto_approve_plan INTEGER NOT NULL DEFAULT 0'); // 拆解全 easy 时跳过 plan_review
ensureColumn(db, 'projects', 'auto_approve_exec', 'auto_approve_exec INTEGER NOT NULL DEFAULT 0'); // 双复审 approve 后跳过 exec_review 自动合并
ensureColumn(db, 'projects', 'agent_rules', 'agent_rules TEXT'); // L2 项目级 agent 执行规范(注入 worker prompt
const schema = readFileSync(join(HERE, 'schema.sql'), 'utf8');
db.exec(schema);