diff --git a/README.md b/README.md index 3415532..00d298c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - 读取 Obsidian 索引上下文:从 `docs/obsidian` 的总入口、模块索引、文档矩阵、工作流关系和 Canvas 摘要中按模块或关键词定位文档,并返回 `codeAnchors` / `ruleAnchors` 锚定到现有项目别名、源码路径、相关规则文档和后续上下文工具。 - 检查子项目环境:Git/SVN、包管理器、Node 版本、env 文件、Git 状态。 - 生成防偏差工作包:把开工前检查、禁止项、风险扫描、验证计划汇总成一份可执行清单。 -- 生成验证建议:按后端、前端、样式、页面、部署、MCP 等变更类型给出轻量验证命令。 +- 生成验证建议:按后端、前端、样式、页面、部署、数据库、MCP 等变更类型给出轻量验证命令和迁移核验要点。 - 固化改动后 review:验证计划和提交清单都会提醒执行 `kt_global_code_review` / `pnpm run global-review`。 - 生成任务收尾包:把状态、验证计划、可选验证执行、全局 review 和历史清理收成一份结果。 - 生成大方向完结闭环审计:确认开发目标、测试证据、问题记录、稳定解法和 ktWorkflow 升级是否齐备。 diff --git a/src/selfTest.ts b/src/selfTest.ts index e386e79..ccf9ab6 100644 --- a/src/selfTest.ts +++ b/src/selfTest.ts @@ -87,6 +87,19 @@ export async function runSelfTest(): Promise { throw new Error('API Jest verification command self-check failed'); } + const databaseVerification = buildVerificationPlan({ + changeType: 'database', + project: 'api', + }); + const databaseVerificationNotes = databaseVerification.notes.join('\n'); + if ( + !databaseVerificationNotes.includes('备份目标表') || + !databaseVerificationNotes.includes('SHOW COLUMNS') || + !databaseVerificationNotes.includes('真实接口 smoke') + ) { + throw new Error('database migration verification self-check failed'); + } + const closeoutNeedsUpgrade = buildWorkstreamCloseout({ problemRecords: ['Jenkins 状态需要结合日志和 K8s 状态确认。'], reusablePatterns: ['deploy-observation'], diff --git a/src/tools/verification.ts b/src/tools/verification.ts index 140d8b6..bffcdba 100644 --- a/src/tools/verification.ts +++ b/src/tools/verification.ts @@ -27,6 +27,12 @@ export function buildVerificationPlan(input: VerificationPlanInput): Verificatio notes.push('当前目录不是独立 Git/SVN 仓库,提交和 diff 检查需要切到对应子仓库执行。'); } + if (changeType === 'database') { + notes.push( + '数据库变更上线后必须备份目标表,执行对应幂等迁移 SQL,并用 SHOW COLUMNS / SHOW INDEX / 关键行数和真实接口 smoke 验证。', + ); + } + if ( typecheck && ['api', 'frontend', 'general', 'mcp', 'page', 'refactor', 'style'].includes(changeType)