Synthèse automatique
Passe en revue les migrations de base de données et les contrats d'API, de DTO ou d'événements pour vérifier que le code de la release précédente fonctionne encore après le changement, afin qu'un rollback ne provoque pas de panne.
Points forts
- Sépare clairement les contrôles bloquants des contrôles de contrat, avec des contre-exemples SQL concrets pour chaque règle.
- Décrit le schéma expand/contract : cesser d'écrire, déployer, vérifier l'absence de lecteurs, puis supprimer dans une tâche ultérieure avec dépendance de déploiement.
- Couvre les pièges de performance PostgreSQL : default volatil qui réécrit la table, index non CONCURRENTLY, contraintes sans NOT VALID puis VALIDATE.
- Étend l'analyse aux contrats exposés, y compris les clients mobiles impossibles à mettre à jour de force.
Limites
- Les recommandations sont très centrées sur PostgreSQL (PG11+/PG12+, CONCURRENTLY, NOT VALID) ; MySQL ou SQLite demandent d'autres patterns.
- C'est une liste de contrôle de revue manuelle : aucun script ni vérification automatisée n'est fourni pour l'appliquer.
- Le document s'interrompt en pleine phrase sur la découverte des consommateurs, donc l'outillage associé n'est pas entièrement spécifié.
À utiliser lors de la revue d'une diff ou d'une conception qui ajoute ou modifie une migration, un endpoint, un DTO, un payload d'événement ou un type partagé.
À éviter pour des changements purement internes sans impact sur le schéma ni sur les consommateurs, ou sur des bases sans migrations versionnées.
Analyse de sécurité
SûrThe file is purely instructional review guidance: no executable commands, no shell pipelines, no network or credential handling, no obfuscation, and nothing that disables safety. It references abstract reviewer actions (grep_code, list_links, cross-repo clone) only as conceptual checks, not as runnable directives, and the only quoted SQL is illustrative anti-patterns shown as things NOT to ship.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
Review this PR: it adds `ALTER TABLE tasks ADD COLUMN priority int NOT NULL` and drops `legacy_status` in the same migration. Is the previous release's code still safe if we roll back?We renamed `userName` to `username` in the /v1/profile response. Find every consumer and tell me whether this can ship in one task or needs an ordered expand/contract sequence.Our migration runner wraps each file in a single transaction. Is `CREATE INDEX CONCURRENTLY idx_tasks_status ON tasks(status)` safe there, and what is the alternative?name: migration-and-contract-review category: quality description: Use when a diff or design adds or changes a DB migration, an endpoint or DTO, an event payload, or a shared type with consumers source: sbdchd/squawk docs (Apache-2.0), ankane/strong_migrations (MIT), Google AIP-180 (CC BY 4.0), adapted
Migration & Contract Review
Why It Matters Here
A production rollback reverts the merge commit — it does not undo the schema. The old code has to keep running against the new schema until a human decides otherwise, and the system already flags a schema-touching task for a mandatory stage deploy. A migration or contract reviewed only for "does it run" and not "does the PREVIOUS release's code still work against it" is an outage waiting for the next rollback.
Pair with migration-safety (backend-developer, same rules from the authoring side) and spec-authoring's Security & data / Decision record sections for the design-time version of this.
Blocking Checks (Important or Critical)
Editing an applied migration. A migration already run on any environment is immutable; a fix is a new migration.
- ❌ editing
0042_add_status.sqlafter it merged. - ✅
0051_fix_status_default.sqlthat corrects it.
A stub or empty down/rollback migration. If it can't really be undone, say so and give the operational alternative instead of a down migration that lies.
Drop, rename or retype of a column or table still read by deployed code.
- ❌
ALTER TABLE tasks DROP COLUMN legacy_status;in the same task that stops writing it. - ✅ stop writing it (task N), deploy, confirm no reads remain (
grep_code/consumer check), THEN drop it (task N+1,deploy_depends_on: ["N"]).
ADD COLUMN … NOT NULL with no default, or a volatile default (rewrites the whole table).
- ❌
ALTER TABLE tasks ADD COLUMN priority int NOT NULL; - ✅
ALTER TABLE tasks ADD COLUMN priority int NOT NULL DEFAULT 0;— a constant default on PG11+ does not rewrite the table.
CREATE INDEX without CONCURRENTLY on a table already carrying rows, or CONCURRENTLY used inside a transaction / a multi-statement file the repo's migration runner wraps in one (check how the runner executes a file before assuming CONCURRENTLY is safe there).
- ❌
CREATE INDEX idx_tasks_status ON tasks(status);on a live table — takes a write lock for the build. - ✅
CREATE INDEX CONCURRENTLY idx_tasks_status ON tasks(status);, run outside a transaction.
A FK or CHECK added without NOT VALID + a later VALIDATE.
- ❌
ALTER TABLE tasks ADD CONSTRAINT fk_project FOREIGN KEY (project_id) REFERENCES projects(id);— locks and scans the whole table. - ✅
ADD CONSTRAINT … NOT VALID;then, in a later step/migration,VALIDATE CONSTRAINT fk_project;.
SET NOT NULL on an existing column with no prior validated CHECK (col IS NOT NULL) (PG12+ lets the planner skip the full scan once that check is validated).
A data backfill inside the schema migration, unbatched. Backfill in application code or a batched script, not a single blocking UPDATE in the DDL migration.
A new query path added with no supporting index — works in dev on a handful of rows, locks up in production.
Contract Checks
- Additive is safe: a new optional response field, a new endpoint, a new optional request field with a default.
- Breaking needs every consumer updated and ordered: a renamed/removed field, a changed type or status code, a new REQUIRED request field, a changed default page size, a changed enum's meaning.
- AIP-180: "Old clients must be able to work against newer servers" — source, wire and semantic compatibility all have to hold, not just "it compiles."
- Mobile clients cannot be force-updated. Anything an already-installed app reads stays readable until a later, separate contract task ships and enough time has passed — never break it in the same task that adds the new shape.
- Find consumers with
list_links(component, direction:"in"), thengrep_codein the cloned consumer repo (technical-analysis-workflow's cross-repo clone procedure) for the exact field/endpoint. - Error shape and status codes are part of the contract — changing a 404 to a 200-with-null, or a flat error body to a nested one, breaks a consumer's error handling exactly like a renamed field.
Design-Side Application (spec-authoring)
Any schema or contract change in the design gets: the expand step and the contract (breaking) step as SEPARATE tasks in the split, a before_deploy entry on the expand task ("migration N applied on stage"), and a rollback_plan that states plainly that the schema stays and names what still reads it. The contract-breaking task carries deploy_depends_on on every consumer-update task.
Common Mistakes
- Treating "the migration ran in the task's dev DB" as proof it's safe in production — a live table with real row counts behaves differently under a table rewrite or a non-concurrent index build.
- Reviewing the SQL in isolation from the code that reads the table — a column drop is safe only once nothing reads it, which is a code fact, not a SQL fact.
- Accepting "the mobile team will update eventually" as cover for a breaking contract change shipped now.
Red Flags
- A single migration file both drops a column and the diff still has a reader for it (
grep_codethe old field name). NOT NULLadded to an existing column with no earlierCHECKstep.- A renamed REST field with no corresponding
blocked_by/deploy_depends_onon the consuming repositories' tasks. before_deploy/rollback_planleft empty on a task thatHasMigration.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/migration-contract-review-mveraomk/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/migration-contract-review-mveraomk' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/migration-contract-review-mveraomk/download' --output '.skill-downloads/migration-contract-review-mveraomk/SKILL.md.part' && mv '.skill-downloads/migration-contract-review-mveraomk/SKILL.md.part' '.skill-downloads/migration-contract-review-mveraomk/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/migration-contract-review-mveraomk/SKILL.md' && test -s '.skill-downloads/migration-contract-review-mveraomk/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/migration-and-contract-review' && cp -R '.skill-downloads/migration-contract-review-mveraomk' '.claude/skills/migration-and-contract-review'Cursor
test -f '.skill-downloads/migration-contract-review-mveraomk/SKILL.md' && test -s '.skill-downloads/migration-contract-review-mveraomk/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/migration-and-contract-review' && cp -R '.skill-downloads/migration-contract-review-mveraomk' '.cursor/skills/migration-and-contract-review'Codex
test -f '.skill-downloads/migration-contract-review-mveraomk/SKILL.md' && test -s '.skill-downloads/migration-contract-review-mveraomk/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/migration-and-contract-review' && cp -R '.skill-downloads/migration-contract-review-mveraomk' '.agents/skills/migration-and-contract-review'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/migration-contract-review-mveraomk'openskills read 'migration-contract-review-mveraomk'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/migration-contract-review-mveraomk/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.