用途:M22 在迁移运行前把候选迁移当作静态制品做安全审查,是 migration-safety auditor(MSA)与 db-migration-writer agent 共同遵守的契约,服务于性能与规模维度。破坏性且不可逆的迁移是性能轴上的最高严重级上限。
主要检查项:可回滚性(是否有可用的 down/rollback,或遵循 expand-contract:新增→回填→切换→删除分多次部署);锁级别(是否对热表加阻塞锁,如 Postgres 中带 volatile 默认值加列(11 之前)、ALTER COLUMN TYPE、未加 NOT VALID 的 CHECK/FK、非 CONCURRENTLY 建索引会取 ACCESS EXCLUSIVE 或阻塞写入;建议 CREATE INDEX CONCURRENTLY、ADD CONSTRAINT ... NOT VALID 后 VALIDATE CONSTRAINT);表重写(强制全表重写的变更);破坏性操作(DROP COLUMN、DROP TABLE、TRUNCATE、DROP NOT NULL、删除仍被部署代码读取的列);在已有数据的表上加无默认值的 NOT NULL;枚举变更(枚举值不能删除或重排,变更集合应使用查找表,ALTER TYPE ... ADD VALUE 为追加式,PG12+ 可在事务中执行);schema 漂移(声明式制品 schema.prisma / structure.sql / snapshot 与迁移历史不一致)。
使用方式:Tier-0 静态检查解析迁移 SQL 或 ORM 迁移文件(scripts/parse-schema.mjs、parse-orm-python.py),扫描 DROP TABLE|DROP COLUMN|TRUNCATE、ALTER COLUMN .* TYPE、无 DEFAULT 的 ADD COLUMN ... NOT NULL、缺少 CONCURRENTLY 的 CREATE INDEX、缺少 NOT VALID 的 ADD CONSTRAINT、ALTER TYPE .* ADD VALUE 或枚举值删除/重排、缺少 down/rollback 块、制品与最新迁移的漂移。Tier-1 验证查询评估影响表规模:SELECT pg_size_pretty(pg_total_relation_size('<t>')), reltuples FROM pg_class WHERE relname='<t>'; 并检查将取的锁或对影子库做 dry_run_migration;无库可达时标为 needs_api,不做静默通过。
发现格式:每条发现遵循 schema/finding.schema.json,含 evidence.observed(逐字引用违规语句,敏感信息脱敏)、verification.reproduce(使用 $DATABASE_URL 的可运行命令)、verification.method(migration_lint 或 dry_run_migration)、fix_preview(更安全改写,如 CONCURRENTLY、NOT VALID + VALIDATE、expand-contract 序列)、expected_impact({axis, confidence, magnitude, rationale},仅分档不给出裸百分比)。
限制:M22 为只读,只做 lint 与建议,从不执行迁移;执行由 writer agent 在用户明确接受后进行。锁的严重度取决于表大小与写入速率,无实时证据时对未知规模表的阻塞操作记为方向性(中等),不声称停机秒数。仅 DROP/TRUNCATE 类破坏性且不可逆迁移在性能轴封顶为 5 级,可逆或 expand-contract 变更为警告,漂移为方向性且不封顶。资料未提供具体收费与平台支持信息。