Skill

Diagnose and Repair Drizzle Migration Conflicts

A safety-gated skill to diagnose, repair, and prevent Drizzle Kit migration conflicts in multi-developer repos.

Works with drizzlegitgithub

78
Spark score
out of 100
Updated last month
Version 1.0.0

Add to Favorites

Why it matters

Help development teams safely resolve Drizzle Kit migration conflicts that arise during git merges, rebases, or pull request updates in multi-developer repositories, ensuring migration history integrity without risking production databases.

Outcomes

What it gets done

01

Diagnose migration file conflicts by inspecting journal files, snapshots, and git state to identify the conflict structure

02

Guide safe repair flows that discard conflicting generated migrations and regenerate them from merged schema source code

03

Validate migration integrity through tiered checks from structural inspection to drizzle-kit validation without touching production

04

Design CI and merge-queue policies to prevent future migration conflicts in team workflows

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/ag-drizzle-migration-conflict | bash

Overview

Drizzle Migration Conflict

This skill diagnoses, repairs, and prevents Drizzle Kit migration conflicts through a mode-gated workflow covering structural detection, safe regeneration, and CI hardening. Use it when Drizzle migration files conflict after a merge or rebase, or when designing CI policy to prevent repeated migration conflicts.

What it does

This skill helps diagnose, repair, and prevent Drizzle Kit migration conflicts in a multi-developer repository, recognizing that Drizzle migrations encode both SQL and migration snapshots so the safe fix depends on the current migration directory shape, the Drizzle Kit version, and the git state. It classifies every request into one of four modes - Diagnose, Repair, CI hardening, or Explain - defaulting to Diagnose when the mode isn't explicit, and each mode unlocks a strictly bounded set of actions: Diagnose is read-only, running git status, git ls-files -u, and a helper script without executing drizzle-kit check or any write command; Repair adds file writes and drizzle-kit generate or check execution gated by explicit confirmation of exactly which files and which side, ours or theirs, to change; CI hardening adds proposing or editing workflow files without running migration commands against the user's database; Explain stays conceptual with only optional read-only inspection.

Repository discovery runs a fixed sequence of git and ripgrep commands to collect facts, then inspects drizzle.config for output directory and dialect, package.json scripts for the project-approved generate/check/migrate commands, and dependency versions for drizzle-kit and drizzle-orm, before resolving and running a bundled read-only helper script (checked against a repo-vendored copy, the Claude Code skills directory, or another reported install location) that never connects to a database or writes files. It then identifies whether the repo uses the legacy structure (a shared journal and snapshot files plus root-level numbered SQL files) or the newer folder-based structure (each migration as its own directory with migration.sql and snapshot.json), stopping to report ambiguity rather than guessing at a destructive repair if the structure is unknown or mixed.

Repair principles require resolving schema source conflicts first so the regenerated migration reflects the merged schema rather than one side's stale snapshot, treating the parent or target branch's migration history as the source of truth, preferring to discard and regenerate migration artifacts over hand-editing journal or snapshot files, and validating in tiers - structural checks first, then drizzle-kit check only after confirming its config cannot point at production, then project tests only after inspecting scripts and database targets. Hard safety rules forbid running drizzle-kit migrate, push, or seed scripts against a live database without explicit request and a clear target, forbid deleting migration files or running git checkout/restore without confirmed files and side, forbid recommending drizzle-kit push as a production fix since it skips auditable migration history, and forbid echoing secrets from config or environment files. Diagnostic reports use one of four fixed conclusion values: NO_CONFLICT_FOUND, SAFE_TO_REGENERATE, NEEDS_USER_CONFIRMATION, or BLOCKED_BY_AMBIGUITY.

When to use - and when NOT to

Use it when Drizzle migration files, a journal file, or a snapshot file conflict after a pull, merge, or rebase, when drizzle-kit check reports non-commutative migrations, or when designing CI or merge-queue policy to prevent repeated conflicts. Do not use it to run database-backed migration commands without explicit user confirmation of the target, or for general schema design or query optimization beyond migration conflicts.

Inputs and outputs

Given a repository with a Drizzle migration conflict, it produces a detected migration structure and mode, a diagnostic report with one of four fixed conclusion values, and a safe repair or CI-hardening path with destructive steps explicitly labeled as requiring confirmation.

Integrations

Drizzle Kit and Drizzle ORM, git, ripgrep, and a bundled Python helper script (check_drizzle_migrations.py) that reads migration directories without ever connecting to a database or writing files; references official Drizzle docs, GitHub discussions, and community scripts with trust levels noted per source.

Who it's for

Teams running Drizzle Kit migrations across multiple developers who need a safe, confirmation-gated repair flow after a merge conflict, plus a path to hardening CI so the conflict doesn't recur.

Source README

Drizzle Migration Conflict

Use this skill to help a user diagnose, repair, and prevent Drizzle Kit migration conflicts in a
multi-developer repository. Drizzle migrations encode both SQL and migration snapshots, so the safe
answer depends on the current migration directory shape, the Drizzle Kit version, and the git state.

When to Use This Skill

  • Use when Drizzle migration files, _journal.json, or snapshot.json conflict after a pull, merge, rebase, or PR update.
  • Use when drizzle-kit check reports non-commutative migrations or migration folder conflicts.
  • Use when a team wants a safe repair flow for generated Drizzle migrations after schema changes converge.
  • Use when designing CI or merge-queue policy to prevent repeated Drizzle migration conflicts.

Safety rules

  • Start in read-only diagnosis mode unless the user explicitly asks to fix files.
  • Do not run drizzle-kit migrate, drizzle-kit push, database seed scripts, or any command that
    connects to a live database unless the user explicitly requests it and the target is clear.
  • Treat drizzle-kit check, project typechecks, and tests as command execution that may load project
    config, environment variables, or scripts. Inspect scripts/config first, and require an explicit
    non-production or disposable target before any DB-backed validation.
  • Do not delete migration files, rewrite _journal.json, or run git checkout --ours,
    git checkout --theirs, git restore, or rm unless the user has confirmed the exact side and
    files to change.
  • Do not recommend drizzle-kit push as the production solution for migration conflicts; it skips
    the auditable migration history that teams need.
  • Treat --ignore-conflicts as an exception for a known false positive, not as the normal fix.
  • Preserve schema source code changes unless the user explicitly asks to discard them. Conflict
    repair normally discards generated migrations and regenerates them from the merged schema.
  • If ours and theirs could mean different branches depending on merge direction, ask the user to
    identify the parent branch before suggesting checkout commands.

Required references

  • Read references/sources.md when the answer depends on current Drizzle behavior, official
    guidance, or one of the preserved external links.
  • Read references/conflict-resolution.md before recommending a repair flow.
  • Read references/ci-policy.md before proposing CI, merge queue, or team workflow changes.
  • Read references/report-template.md before writing a diagnostic report.

Source references

The full list of official docs, Drizzle GitHub discussions, community scripts, and merge-queue
references lives in references/sources.md with trust levels and caveats. Read that file whenever
the answer depends on current Drizzle behavior. Re-verify the official docs and the most relevant
discussion when the project's drizzle-kit major version changes, since migration internals
(snapshot format, journal shape, drizzle-kit check semantics) have shifted between releases.

Mode selection

Classify the task first:

  1. Diagnose - The user has a conflict or failed drizzle-kit check and wants to understand it.
  2. Repair - The user explicitly asks to fix or regenerate migration files.
  3. CI hardening - The user wants to prevent future conflicts in PRs or merge queues.
  4. Explain - The user wants a conceptual answer or a team playbook.

When the mode is not explicit, choose Diagnose.

Each mode unlocks a specific set of actions. Do not cross these boundaries without an explicit upgrade:

  • Diagnose - read-only only. Run git status, git ls-files -u, the helper script, and file
    inspection. Do not run drizzle-kit check, typechecks, tests, or any write command. Report
    findings and the proposed repair path, but do not execute it.
  • Repair - adds file writes and drizzle-kit generate/check execution, each gated by the
    Safety rules and explicit confirmation of the exact files and side (ours/theirs) to change.
  • CI hardening - adds proposing or editing CI/workflow files. Do not run migration commands
    against the user's database to validate the workflow; validate the workflow syntax and logic only.
  • Explain - conceptual only. No commands against the repo beyond optional read-only inspection.

Repository discovery

Collect repo facts before giving commands:

git status --short
git rev-parse --show-toplevel
git rev-parse --abbrev-ref HEAD
git ls-files -u
rg --files -g 'drizzle.config.*' -g 'package.json' -g 'pnpm-lock.yaml' -g 'yarn.lock' -g 'package-lock.json'

Then inspect the relevant files:

  • drizzle.config.* for out, schema, dialect, and config shape.
  • package.json scripts for the project-approved generate, check, and migrate commands.
  • package.json dependencies or lockfile snippets for drizzle-kit and drizzle-orm versions.
  • The migration output directory, either from config or common names like drizzle/, migrations/,
    or src/db/migrations/.

If this skill's helper script is available, run it in read-only mode:

python3 <skill-dir>/scripts/check_drizzle_migrations.py --root .

Resolve <skill-dir> to the installed skill directory before running. Check these locations in order
and use the first that contains scripts/check_drizzle_migrations.py:

  1. The target repository's vendored copy: <repo-root>/skills/drizzle-migration-conflict.
  2. The Claude Code skills directory: ~/.claude/skills/drizzle-migration-conflict.
  3. Any other install location reported by the user's environment.

If none of these resolve, fall back to the manual git/rg inspection commands above and tell the
user the helper script was not found. Use --config <file> and --migrations-dir <dir> when the
project has multiple Drizzle configs or outputs. The script never connects to a database and never
writes files; it only reads migration directories and reports structural issues.

Migration structure decision

Identify the structure before proposing a fix:

  • Legacy structure: <out>/meta/_journal.json, <out>/meta/*_snapshot.json, and root-level
    migration SQL files such as <out>/0003_name.sql.
  • Folder-based structure: each migration is a directory containing migration.sql and
    snapshot.json.
  • Unknown or mixed structure: stop and report ambiguity. Do not guess a destructive repair.

Recommended repair principles

  • Resolve schema source conflicts first. The regenerated migration must reflect the merged schema,
    not one side's stale snapshot.
  • Treat the parent or target branch migration history as the source of truth when repairing a feature
    branch after updating from that branch.
  • Prefer discarding and regenerating generated migration artifacts over hand-editing journal or
    snapshot files.
  • After regeneration, validate in tiers: database-free structural checks first; then drizzle-kit check only after confirming its config/env cannot point at production; then project tests only
    after inspecting the scripts and any database targets.
  • If the user asks to apply changes, state exactly which files will be changed before performing the
    write.

Output rules

  • Use the user's language when practical, but keep command snippets and file paths literal.
  • State the detected migration structure and selected mode.
  • Separate confirmed conflicts from assumptions and missing evidence.
  • Give a safe default path first, then optional automation or CI hardening.
  • For destructive steps, label them as "requires confirmation" and explain what will be lost.
  • Never echo secrets. When inspecting drizzle.config.*, .env, or environment variables, do not
    include database URLs, passwords, tokens, or connection strings in the report. Reference them as
    <redacted> or describe only whether they point at a production-like target.
  • Use the conclusion values from references/report-template.md for diagnostic reports:
    NO_CONFLICT_FOUND, SAFE_TO_REGENERATE, NEEDS_USER_CONFIRMATION, or BLOCKED_BY_AMBIGUITY.

Limitations

  • This skill cannot guarantee that a regenerated migration is production-safe without review against the target database state and deployment process.
  • It does not run DB-backed migration commands unless the user explicitly confirms the target and the command.
  • It is focused on Drizzle Kit migration conflicts, not general schema design or application-query optimization.

Test prompts

Use these prompts to validate the skill behavior:

  • "My Drizzle _journal.json and 0003_snapshot.json conflict during merge. Tell me what to do."
  • "We upgraded to the migration folder layout and drizzle-kit check reports a non-commutative conflict."
  • "Design CI so our team stops merging broken Drizzle migrations."
  • "Can I solve this production Drizzle migration conflict with drizzle-kit push?"
  • "Use the links in the skill to re-check the current official Drizzle migration conflict guidance."
  • "We're halfway through moving from the legacy flat layout to folder-based migrations. How do we handle a conflict during the transition?"
  • "Our drizzle.config.ts sets out from process.env.MIGRATIONS_DIR, and the helper says no out directory was found. What now?"
  • "drizzle-kit check keeps failing on a migration we know commutes. Can we just always pass --ignore-conflicts?"

FAQ

Common questions

Discussion

Questions & comments ยท 0

Sign In Sign in to leave a comment.