Difflock 1.0.0 est un paquet Laravel de Rati Rukhadze, disponible sur GitHub sous `Heyosseus/difflock`. Il requiert PHP 8.3 et prend en charge Laravel 12 et 13. Le paquet fonctionne avec MySQL, MariaDB, PostgreSQL et SQLite.
php artisan difflock:lint
php artisan difflock:lint -v
php artisan difflock:lint --rule=drop-columnSon analyse porte sur le code source des migrations, sans chargement ni exécution. Difflock l’associe au schéma de la base connectée et aux métadonnées de taille des tables. Les règles couvrent les opérations destructrices, les modifications de colonnes, les index, les clés étrangères et les noms de colonnes sensibles.
`difflock:lint` commence par les migrations en attente. Dans l’exemple présenté, une migration ajoute à `orders` une colonne `channel` obligatoire, une clé `customer_id` avec contrainte et `cascadeOnDelete()`, une colonne `card_number` nullable limitée à 32 caractères, ainsi qu’un index sur `status`. Elle supprime aussi `legacy_token` de `customers` et renomme `name` en `full_name`.
Avec des données existantes, l’outil signale la nouvelle colonne obligatoire, `dropColumn()` et le renommage. Il rappelle aussi que `cascadeOnDelete()` supprime les lignes enfants directement dans la base. Les événements des modèles, les observers et les soft deletes ne s’appliquent alors pas. La règle `change-column` confronte `->change()` à la définition réelle de la colonne. `unindexed-foreign-key` vérifie l’index nécessaire selon le moteur de base de données. `redundant-index` repère notamment `(status)` lorsqu’un index `(status, created_at)` existe déjà.
L’option `-v` donne davantage de détails. `--rule=` permet de sélectionner une règle. En l’absence de migration en attente, Difflock examine tous les fichiers de migration. Un projet existant peut valider son historique avec `php artisan difflock:lint --all --accept`. Le fichier de référence est alors `database/difflock/accepted.json`.
Le contrôle de dérive repose sur une photographie du schéma observé. Difflock ne reconstruit pas un schéma théorique à partir des migrations. Les conditions, les boucles et le SQL brut présents dans ces fichiers ne nécessitent donc pas d’interprétation. `php artisan difflock:diff --save` écrit `database/difflock/schema.json`, qui peut être ajouté au dépôt. Une exécution ultérieure de `php artisan difflock:diff` compare la connexion courante à ce fichier. La syntaxe `--from=staging --to=production` compare deux connexions configurées.
La référence JSON contient les tables, colonnes, index, valeurs par défaut et clés étrangères. Elle ne contient ni lignes ni identifiants de connexion. `snapshot.defaults`, `snapshot.comments` et `ignore.tables` limitent les éléments enregistrés. Le texte mentionne aussi le linting de schéma de Vacuum pour PostgreSQL.
L’installation ne modifie pas `php artisan migrate`. La protection passe par `php artisan difflock:migrate`. Après l’analyse des migrations en attente, la commande s’arrête avant toute écriture lorsque le niveau de blocage configuré est atteint. `--allow-risky` permet de contourner cette protection. `--force` de Laravel reste le paramètre séparé qui confirme une migration en production.
En CI, `php artisan difflock:check --ci` renvoie 0 lorsque le contrôle réussit, 1 en cas de dérive ou de résultats au seuil défini, et 2 lorsque le contrôle ne peut pas démarrer. Les règles qui ne dépendent que du code source peuvent fonctionner sans connexion à une base. L’absence de données sur les tables est alors signalée.
`php artisan difflock:mcp` lance un serveur MCP autonome sur stdio. Ses quatre outils donnent du contexte sur une table, analysent une migration, contrôlent la dérive du schéma et documentent les règles. L’outil de migration accepte un chemin de fichier ou du texte source. Un agent de développement doté d’IA peut ainsi vérifier une migration avant sa création en utilisant le schéma et les statistiques actuels. `php artisan difflock:explain` produit un briefing Markdown sans modèle de langage ni API externe.
L’installation s’effectue avec `composer require heyosseus/difflock --dev`. La configuration est publiée par `php artisan vendor:publish --tag=difflock-config`. `php artisan difflock:doctor` affiche la connexion, les tables disponibles, les migrations en attente, les règles enregistrées et la capacité d’écriture du rôle configuré. Un rôle en lecture seule convient à l’inspection d’une connexion de production.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.