mcpField
F
fix

fix

github.com/hainrixz数据与数据库2271 次安装6 天前更新
代码仓库

关于 fix

fix 是一项需主动调用的数据库迁移技能,可将审计发现转为迁移草案。默认采用 dry-run,区分自动、提议和建议类变更,并仅在明确确认后写入。

主要功能

  1. 01默认采用 dry-run
  2. 02按风险分类修复
  3. 03展示迁移差异及说明
  4. 04写入前要求确认
  5. 05写入后重新验证发现
  6. 06不直接写入线上数据库

适用场景

  1. 01预览审计发现对应的迁移
  2. 02按类别限定修复范围
  3. 03逐项审查语义变更
  4. 04写入后验证迁移效果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/hainrixz/claude-db --skill fix

安装后在 Claude Code 中输入/fix确认已加载。

详细介绍

修复(选择性启用的写入器)

disable-model-invocation: true 表示模型绝不能自行触发此操作——只有用户运行 /claude-db:fix 时才能触发。写入仅通过 db-migration-writer 子 Agent(唯一具有 Write/Edit 权限的 Agent)进行,且仅在明确确认后进行。默认采用干运行。

可修复性类别(来自每条发现的 fixable 字段——参见 schema/finding.schema.json)

  • AUTO — 确定性、增量式、可逆、可由机器验证,且语义风险低。可以写入(附带差异并经确认),以在线安全的扩展-收缩迁移形式表达变更: 添加缺失的非唯一索引 / FK 支持索引;通过 NOT VALID 再 VALIDATE 添加 NOT NULL/CHECK/UNIQUE 约束;通过 NOT VALID 再验证添加缺失的 FK;以增量方式添加默认值或生成列;扩大过小的整数键。每项都附带干净的回滚迁移。
  • PROPOSED — 会改变数据、语义或结构;生成迁移草案,并要求逐项接受:会强制转换 / 重写数据的类型变更(例如将用于金额的 float 改为 numeric)、回填、反规范化 / 规范化调整、重命名、枚举变更、软删除 / 时态列。
  • ADVISORY — 工具绝不写入:引擎选择(M0)、分片 / 分区拓扑、RLS / 安全策略设计、容量 / 扩展决策,以及任何需要真实生产数据或对意图作出判断的事项。

工作流

  1. 获取发现项(来自上次审计、重新执行的审计或发现项 JSON)。筛选 fixable: auto(如果用户选择加入,也包括 proposed)。按 --category 限定范围。
  2. 为每项构建精确的迁移(存在重写 / 锁定风险时采用扩展-收缩步骤),并在每个差异前用通俗语言写一行说明,解释其作用和原因——然后给出统一差异 / 迁移文件内容。询问用户以获取任何必需的真实输入(回填值、枚举目标集合、FK 目标)——绝不自行编造。
  3. 干运行(默认):按文件 / 步骤分组打印每行通俗说明和差异。不写入任何内容。总结不带 --dry-run 运行 fix 会做出的变更,包括每个步骤的锁定级别和可逆性。
  4. 仅在明确确认后:委派给 db-migration-writer 执行应用。用户可选择逐项确认或批量确认。

安全性(硬性规则)

  • 默认采用干运行;只有移除 --dry-run 并确认后才会写入。
  • 任何数据丢失 / 破坏性步骤(DROP、TRUNCATE、缩小类型、移除枚举值)在写入前都必须经过 /claude-db:migrate 令牌握手——fix 会将此类步骤交由 migration-safety 处理,不会绕过该流程。握手要求输入具体内容,而非是或否:用户必须逐字输入受影响对象的名称(例如,输入 orders 以确认删除 orders 表)——回复不匹配则中止该步骤。
  • 感知 Git 状态:除非使用 --force,否则如果工作树有未提交更改,则拒绝写入;优先使用分支。通过 git status --porcelain 检测。不在 Git 仓库中的分支情况:在仓库外运行 git status --porcelain 会以 128 退出——此时将“不在仓库中”视为可写入(没有内容会变为脏状态),备份仍写入插件数据目录;写入前用一行话告知用户。
  • 幂等:检测已有约束 / 索引;绝不重复创建(重新运行时,只要已应用,就不会产生新的差异)。
  • 重新验证:写入后,重新运行每条发现的 verification.reproduce / 断言,并逐项报告通过 / 失败。
  • 绝不触碰 .git/、.env/机密信息、锁文件或项目根目录之外的文件;绝不写入正在运行的数据库——fix 只生成迁移文件,迁移工具才负责在握手流程下应用迁移。
  • 不得编造:绝不写入虚构的默认值、回填值、统计数据、价格或凭据。

评论

支持 Markdown