Test d'intégration des packages auth : file: vs tarball — la vraie découverte fondatrice¶
Contexte¶
Avant même le câblage réel documenté dans
jobPipeline/architecture/procedure-cablage-auth-package, deux tests
d'intégration successifs (2026-07-02 puis 2026-07-03) ont été menés pour
valider si @kanmaber/auth-backend/auth-frontend (extraits de
ProjetESM) étaient réutilisables « en état » dans jobPipeline. Ces tests
sont à l'origine de la décision de distribuer le package via .tgz
plutôt que file: sur un dossier — décision qui a ensuite causé le piège
de cache npm documenté dans
jobPipeline/debug/lecons-cablage-auth-package.
Contenu¶
Test 1 (2026-07-02) — via file:../../Shared/packages/... (dossier)¶
- Backend : installation et typecheck OK, smoke test OK (34 use cases, 36 controllers instanciés sans DB réelle).
- Point non résolu déjà identifié : le package utilise son propre schéma Prisma, sans collision visible car aucune requête réelle n'était faite.
- Frontend : install et typecheck OK, mais risque découvert —
npm lsrévèlereact-router-dom/zustand/lucide-reactinstallés en double (version racine jobPipeline vs version imbriquée dans le package). Risque théorique de contexte Router cassé à l'exécution, non vérifiable à ce stade (pas de frontend scaffoldé).
Test 2 (2026-07-03) — via tarball (npm pack + .tgz)¶
Refait spécifiquement parce qu'une question annexe sur react-router-dom a
révélé que file: ne garantit pas une instance de module unique, même
à version strictement identique (vérifié via require.resolve() :
deux chemins physiquement différents avec file: sur un dossier).
Résultats, une fois dédupliqué correctement par tarball :
| Aspect | file: (02/07) |
tarball (03/07) |
|---|---|---|
| react-router-dom/zustand dédupliqués | ❌ Non (croyance erronée) | ✅ Oui, vérifié par require.resolve() |
Conflits peer deps (@hookform/resolvers, lucide-react) |
Masqués | Révélés immédiatement au premier npm install strict |
@prisma/client partagé |
Non (isolé par package) | Oui — révèle que jobPipeline n'a pas encore les modèles session/codeVerification/backupCode (typeof p.session === 'undefined') |
| Smoke test "preuve" de fonctionnement | Trompeur (n'appelle aucune méthode Prisma réelle) | Toujours trompeur pour la même raison, mais le problème sous-jacent est désormais visible autrement |
Enseignement clé : file: sur un dossier masque à la fois les
problèmes de déduplication de modules ET les conflits de peer
dependencies. Un test d'intégration qui utilise file: donne une fausse
impression de compatibilité. Le tarball (npm pack) est la seule méthode
qui reproduit fidèlement un vrai npm install depuis un registre.
Décision / Conclusion¶
Toujours valider une intégration de package local via tarball
(npm pack), jamais via file: sur un dossier. Cette règle a motivé le
choix initial de distribution en .tgz pour @kanmaber/auth-backend
(confirmé dans la procédure de câblage réelle) — un choix qui a ensuite
eu sa propre contrepartie (le piège de cache npm sur les dépendances
file:...tgz, documenté séparément) mais qui reste le bon compromis
face au risque de désynchronisation Prisma identifié plus tard
(voir jobPipeline/debug/lecons-cablage-auth-package, leçon sur le
rejet de l'option dossier symlinké).
À faire (au moment de ces tests, largement traité depuis)¶
- Fusionner
auth-backend/prisma/auth.prisma.fragmentdans le schéma de jobPipeline (fait depuis, voir jobPipeline/architecture/fusion-schema-prisma-auth). - Aligner
@hookform/resolvers/lucide-react(toujours ouvert, voir étape 6 de jobPipeline/architecture/procedure-cablage-auth-package).
Liens connexes¶
- jobPipeline/architecture/procedure-cablage-auth-package — câblage réel qui a suivi ces tests
- jobPipeline/debug/lecons-cablage-auth-package — piège de cache npm rencontré ensuite avec la distribution tarball choisie ici
- jobPipeline/architecture/fusion-schema-prisma-auth — résolution du problème Prisma identifié par ce test
- jobPipeline/index — index du projet