D1 Migration

Examine les migrations Cloudflare D1 générées par Drizzle avant leur application.

par jezweb · jezweb/claude-skills

Testé · Fonctionne ★ 8.4/10

D1 Migration — Examine les migrations Cloudflare D1 générées par Drizzle avant leur application.

Ce que fait

Workflow de migration Cloudflare D1 pour les projets Drizzle ORM : inspecte le SQL généré pour le modèle de recréation de table qui copie une colonne non encore existante, le réécrit en ALTER TABLE ADD COLUMN, l'applique en local et à distance, et vérifie avec PRAGMA table_info. Couvre également la récupération d'une migration partiellement appliquée en insérant manuellement la ligne dans la table d1_migrations, et le traitement par lots des insertions en masse sous la limite de paramètres de D1. Se déclenche lors de l'exécution ou de la génération de migrations D1, des erreurs d'application de migrations wrangler d1, des échecs de colonne en double, et de la configuration d'une nouvelle base de données D1.

Rapport de test

Installé dans un HOME temporaire (export HOME=$(mktemp -d)) et confirmé que SKILL.md s'est retrouvé dans ~/.claude/skills/d1-migration/SKILL.md ; le frontmatter est analysé avec name+description (plus une clé non standard compatibility: claude-code-only), le corps ne référence aucun fichier ou script externe, et un scan n'a trouvé aucun curl|sh, base64, exfiltration d'identifiants ou texte d'injection. Tâche : réviser un 0013_add_priority.sql généré par drizzle-kit qui reconstruit une table `cases`, plus une insertion de données de 412 lignes. L'artefact de référence a qualifié la migration de "destructive but expected", a dit à l'utilisateur de sauvegarder et de l'appliquer, et a suggéré de découper les données en blocs de 100 lignes ; l'artefact suivant la compétence a refusé de l'appliquer, a identifié que l'INSERT...SELECT lit `priority` de l'ancienne table, a remplacé le fichier par un ALTER TABLE ADD COLUMN, et a défini BATCH_SIZE=10. J'ai ensuite exécuté les deux variantes de guillemets via sqlite3 3.43.2 : avec des backticks, cela a provoqué une erreur "no such column: priority", avec des guillemets doubles (ce que drizzle émet), cela a silencieusement écrit la chaîne littérale 'priority' dans chaque ligne (observé `1|C-1|first|new|priority|1`) — donc le conseil de la référence aurait corrompu la table, et son lot de 100x6=600 paramètres dépasse toujours la limite de ~100-150 de D1. Déductions : la formulation de la compétence "will likely fail" sous-estime le cas de corruption silencieuse, et sa correction ALTER TABLE ne reprend pas la valeur par défaut `status` modifiée (j'ai dû ajouter l'UPDATE moi-même). Phrases de déclenchement jugées — DEVRAIT se déclencher : "wrangler d1 migrations apply keeps failing on 0013, says duplicate column" (oui), "I changed a default in my Drizzle schema and generated a migration, is it safe to apply to D1?" (oui), "set up migrations for a brand new Cloudflare D1 database" (oui) ; NE DEVRAIT PAS se déclencher : "add a priority column to my Drizzle schema for Neon Postgres" (correctement refusé, la description est spécifique à D1), "design the Drizzle table schema for my D1 app" (manqué — la clause "setting up D1 schemas" de la description chevauche la compétence sœur d1-drizzle-schema et attirerait celle-ci), 4/5.

Testé le: 2026-07-21 · Claude Code 2.x (agent harness)

Installation

git clone --depth 1 https://github.com/jezweb/claude-skills.git /tmp/d1-migration-src
mkdir -p ~/.claude/skills
cp -R /tmp/d1-migration-src/plugins/cloudflare/skills/d1-migration ~/.claude/skills/d1-migration
# Single self-contained SKILL.md, no scripts/assets/references, no dependencies to install.
# Actually running the workflow needs a Drizzle + Cloudflare D1 project and wrangler
# (npx wrangler) authenticated to a Cloudflare account; the review/rewrite half works
# on the SQL file alone with no account.
# Alternative: the repo ships this as part of a plugin marketplace ("cloudflare" plugin,
# 8 skills incl. d1-drizzle-schema and db-seed) if you prefer installing the whole plugin.

Commandes et exemples de prompts

  • /d1-migrationExamine les migrations Cloudflare D1 générées par Drizzle avant leur application.

Les skills se déclenchent sur des demandes en langage courant — aucune commande à retenir. Après installation, des prompts comme ceux-ci l'activent (en anglais) :

  • Generate a D1 migration for the new users table
  • Fix this stuck D1 migration on remote
  • Apply pending Drizzle migrations to local D1