porter() retire le **/ et éteint ESLint sur tout src/ : le gabarit lint 12 fichiers sur 51, eqs-demo zéro sous src/ #100
Closed
opened 2026-09-30 18:32:56 +00:00 by nicolas-fryder
·
1 comment
No Branch/Tag specified
main
dev
@eqs/tooling@0.24.3
@eqs/testing@0.24.3
@eqs/telemetry@0.24.3
@eqs/platform-next@0.24.3
@eqs/platform-nest@0.24.3
@eqs/http@0.24.3
@eqs/errors@0.24.3
@eqs/config@0.24.3
@eqs/cli@0.24.3
@eqs/auth@0.24.3
@eqs/tooling@0.24.2
@eqs/testing@0.24.2
@eqs/telemetry@0.24.2
@eqs/platform-next@0.24.2
@eqs/platform-nest@0.24.2
@eqs/http@0.24.2
@eqs/errors@0.24.2
@eqs/config@0.24.2
@eqs/cli@0.24.2
@eqs/auth@0.24.2
@eqs/tooling@0.24.1
@eqs/testing@0.24.1
@eqs/telemetry@0.24.1
@eqs/platform-next@0.24.1
@eqs/platform-nest@0.24.1
@eqs/http@0.24.1
@eqs/errors@0.24.1
@eqs/config@0.24.1
@eqs/cli@0.24.1
@eqs/auth@0.24.1
@eqs/tooling@0.24.0
@eqs/testing@0.24.0
@eqs/telemetry@0.24.0
@eqs/platform-next@0.24.0
@eqs/platform-nest@0.24.0
@eqs/http@0.24.0
@eqs/errors@0.24.0
@eqs/config@0.24.0
@eqs/cli@0.24.0
@eqs/auth@0.24.0
@eqs/tooling@0.23.0
@eqs/testing@0.23.0
@eqs/telemetry@0.23.0
@eqs/platform-next@0.23.0
@eqs/platform-nest@0.23.0
@eqs/http@0.23.0
@eqs/errors@0.23.0
@eqs/config@0.23.0
@eqs/cli@0.23.0
@eqs/auth@0.23.0
@eqs/tooling@0.22.0
@eqs/testing@0.22.0
@eqs/telemetry@0.22.0
@eqs/platform-next@0.22.0
@eqs/platform-nest@0.22.0
@eqs/http@0.22.0
@eqs/errors@0.22.0
@eqs/config@0.22.0
@eqs/cli@0.22.0
@eqs/auth@0.22.0
@eqs/tooling@0.21.0
@eqs/testing@0.21.0
@eqs/telemetry@0.21.0
@eqs/platform-next@0.21.0
@eqs/platform-nest@0.21.0
@eqs/http@0.21.0
@eqs/errors@0.21.0
@eqs/config@0.21.0
@eqs/cli@0.21.0
@eqs/auth@0.21.0
@eqs/tooling@0.20.0
@eqs/testing@0.20.0
@eqs/telemetry@0.20.0
@eqs/platform-next@0.20.0
@eqs/platform-nest@0.20.0
@eqs/http@0.20.0
@eqs/errors@0.20.0
@eqs/config@0.20.0
@eqs/cli@0.20.0
@eqs/auth@0.20.0
@eqs/tooling@0.19.0
@eqs/testing@0.19.0
@eqs/telemetry@0.19.0
@eqs/platform-next@0.19.0
@eqs/platform-nest@0.19.0
@eqs/http@0.19.0
@eqs/errors@0.19.0
@eqs/config@0.19.0
@eqs/cli@0.19.0
@eqs/auth@0.19.0
@eqs/tooling@0.17.1
@eqs/testing@0.17.1
@eqs/telemetry@0.17.1
@eqs/platform-next@0.17.1
@eqs/platform-nest@0.17.1
@eqs/http@0.17.1
@eqs/errors@0.17.1
@eqs/config@0.17.1
@eqs/cli@0.17.1
@eqs/auth@0.17.1
@eqs/tooling@0.17.0
@eqs/testing@0.17.0
@eqs/telemetry@0.17.0
@eqs/platform-next@0.17.0
@eqs/platform-nest@0.17.0
@eqs/http@0.17.0
@eqs/errors@0.17.0
@eqs/config@0.17.0
@eqs/cli@0.17.0
@eqs/auth@0.17.0
@eqs/tooling@0.16.0
@eqs/testing@0.16.0
@eqs/telemetry@0.16.0
@eqs/platform-next@0.16.0
@eqs/platform-nest@0.16.0
@eqs/http@0.16.0
@eqs/errors@0.16.0
@eqs/config@0.16.0
@eqs/cli@0.16.0
@eqs/auth@0.16.0
@eqs/tooling@0.15.0
@eqs/testing@0.15.0
@eqs/telemetry@0.15.0
@eqs/platform-next@0.15.0
@eqs/platform-nest@0.15.0
@eqs/http@0.15.0
@eqs/errors@0.15.0
@eqs/config@0.15.0
@eqs/cli@0.15.0
@eqs/auth@0.15.0
@eqs/tooling@0.14.0
@eqs/testing@0.14.0
@eqs/telemetry@0.14.0
@eqs/platform-next@0.14.0
@eqs/platform-nest@0.14.0
@eqs/http@0.14.0
@eqs/errors@0.14.0
@eqs/config@0.14.0
@eqs/cli@0.14.0
@eqs/auth@0.14.0
@eqs/tooling@0.13.0
@eqs/testing@0.13.0
@eqs/telemetry@0.13.0
@eqs/platform-next@0.13.0
@eqs/platform-nest@0.13.0
@eqs/http@0.13.0
@eqs/errors@0.13.0
@eqs/config@0.13.0
@eqs/cli@0.13.0
@eqs/auth@0.13.0
@eqs/tooling@0.12.2
@eqs/testing@0.12.2
@eqs/telemetry@0.12.2
@eqs/platform-next@0.12.2
@eqs/platform-nest@0.12.2
@eqs/http@0.12.2
@eqs/errors@0.12.2
@eqs/config@0.12.2
@eqs/cli@0.12.2
@eqs/auth@0.12.2
@eqs/tooling@0.12.1
@eqs/testing@0.12.1
@eqs/telemetry@0.12.1
@eqs/platform-next@0.12.1
@eqs/platform-nest@0.12.1
@eqs/http@0.12.1
@eqs/errors@0.12.1
@eqs/config@0.12.1
@eqs/cli@0.12.1
@eqs/auth@0.12.1
@eqs/tooling@0.12.0
@eqs/testing@0.12.0
@eqs/telemetry@0.12.0
@eqs/platform-next@0.12.0
@eqs/platform-nest@0.12.0
@eqs/http@0.12.0
@eqs/errors@0.12.0
@eqs/config@0.12.0
@eqs/cli@0.12.0
@eqs/auth@0.12.0
@eqs/tooling@0.11.2
@eqs/testing@0.11.2
@eqs/telemetry@0.11.2
@eqs/platform-next@0.11.2
@eqs/platform-nest@0.11.2
@eqs/http@0.11.2
@eqs/errors@0.11.2
@eqs/config@0.11.2
@eqs/cli@0.11.2
@eqs/auth@0.11.2
@eqs/tooling@0.11.1
@eqs/testing@0.11.1
@eqs/telemetry@0.11.1
@eqs/platform-next@0.11.1
@eqs/platform-nest@0.11.1
@eqs/http@0.11.1
@eqs/errors@0.11.1
@eqs/config@0.11.1
@eqs/cli@0.11.1
@eqs/auth@0.11.1
@eqs/tooling@0.11.0
@eqs/testing@0.11.0
@eqs/telemetry@0.11.0
@eqs/platform-next@0.11.0
@eqs/platform-nest@0.11.0
@eqs/http@0.11.0
@eqs/errors@0.11.0
@eqs/config@0.11.0
@eqs/cli@0.11.0
@eqs/auth@0.11.0
@eqs/tooling@0.10.1
@eqs/testing@0.10.1
@eqs/telemetry@0.10.1
@eqs/platform-next@0.10.1
@eqs/platform-nest@0.10.1
@eqs/http@0.10.1
@eqs/errors@0.10.1
@eqs/config@0.10.1
@eqs/cli@0.10.1
@eqs/auth@0.10.1
@eqs/tooling@0.10.0
@eqs/testing@0.10.0
@eqs/telemetry@0.10.0
@eqs/platform-next@0.10.0
@eqs/platform-nest@0.10.0
@eqs/http@0.10.0
@eqs/errors@0.10.0
@eqs/config@0.10.0
@eqs/cli@0.10.0
@eqs/auth@0.10.0
@eqs/tooling@0.9.0
@eqs/testing@0.9.0
@eqs/telemetry@0.9.0
@eqs/platform-next@0.9.0
@eqs/platform-nest@0.9.0
@eqs/http@0.9.0
@eqs/errors@0.9.0
@eqs/config@0.9.0
@eqs/cli@0.9.0
@eqs/auth@0.9.0
@eqs/tooling@0.8.1
@eqs/testing@0.8.1
@eqs/telemetry@0.8.1
@eqs/platform-next@0.8.1
@eqs/platform-nest@0.8.1
@eqs/http@0.8.1
@eqs/errors@0.8.1
@eqs/config@0.8.1
@eqs/cli@0.8.1
@eqs/auth@0.8.1
@eqs/tooling@0.8.0
@eqs/testing@0.8.0
@eqs/telemetry@0.8.0
@eqs/platform-next@0.8.0
@eqs/platform-nest@0.8.0
@eqs/http@0.8.0
@eqs/errors@0.8.0
@eqs/config@0.8.0
@eqs/cli@0.8.0
@eqs/auth@0.8.0
@eqs/tooling@0.7.0
@eqs/testing@0.7.0
@eqs/telemetry@0.7.0
@eqs/platform-next@0.7.0
@eqs/platform-nest@0.7.0
@eqs/http@0.7.0
@eqs/errors@0.7.0
@eqs/config@0.7.0
@eqs/cli@0.7.0
@eqs/auth@0.7.0
@eqs/tooling@0.6.0
@eqs/testing@0.6.0
@eqs/telemetry@0.6.0
@eqs/platform-next@0.6.0
@eqs/platform-nest@0.6.0
@eqs/http@0.6.0
@eqs/errors@0.6.0
@eqs/config@0.6.0
@eqs/cli@0.6.0
@eqs/auth@0.6.0
@eqs/tooling@0.5.1
@eqs/testing@0.5.1
@eqs/telemetry@0.5.1
@eqs/platform-next@0.5.1
@eqs/platform-nest@0.5.1
@eqs/http@0.5.1
@eqs/errors@0.5.1
@eqs/config@0.5.1
@eqs/cli@0.5.1
@eqs/auth@0.5.1
@eqs/tooling@0.5.0
@eqs/testing@0.5.0
@eqs/telemetry@0.5.0
@eqs/platform-next@0.5.0
@eqs/platform-nest@0.5.0
@eqs/http@0.5.0
@eqs/errors@0.5.0
@eqs/config@0.5.0
@eqs/cli@0.5.0
@eqs/auth@0.5.0
@eqs/tooling@0.4.0
@eqs/testing@0.4.0
@eqs/telemetry@0.4.0
@eqs/platform-next@0.4.0
@eqs/platform-nest@0.4.0
@eqs/http@0.4.0
@eqs/errors@0.4.0
@eqs/config@0.4.0
@eqs/cli@0.4.0
@eqs/auth@0.4.0
@eqs/tooling@0.2.0
@eqs/telemetry@0.2.0
@eqs/errors@0.2.0
@eqs/config@0.2.0
@eqs/tooling@0.1.0
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
Infrastructure/eqs-platform#100
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ce qui ne va pas
eqs-satellite-template/eslint.config.mjsrestreint les profils du socle à chaque application avec :Le
.replace(/^\*\*\//, '')transforme**/*.tsen*.ts, et le préfixe donneapps/api/*.ts. Dans un glob,*ne traverse pas/: ce motif ne matche que les fichiers directement dansapps/api, jamaisapps/api/src/**.Mesuré, sur les trois dépôts
Le gabarit lui-même (
eqs-satellite-template,eslint . --format json --no-cache) :apps/api/src/main.tsn'y est pas. Aucun fichier desrc/n'y est.eqs-demo: 20 fichiers analysés, 0 soussrc/. Le dépôt dont la raison d'être est d'appeler chaque package en conditions réelles ne lint pas une ligne de son domaine.nuage(rétrofit en cours, mêmeporterrecopié) : 28 fichiers, 0 violation. En retirant le seul.replace(...): 227 fichiers, 374 violations.Pourquoi ça passe inaperçu
Deux effets se combinent, et chacun rassure :
.js/.mjs/.cjspar défaut, sans qu'aucunfilesne les réclame. Les scripts et les fichiers de configuration remontent donc dans la sortie, et la commande n'a pas l'air vide. Ce sont eux, les 12 et les 20.knipSatellite(), écrit il y a huit jours, pour la même raison — un motif déduit qui ne couvre pas la forme réelle du dépôt.Le commentaire au-dessus de
porter()explique longuement pourquoi il faut PRÉFIXER et non remplacer, et il a raison. C'est le.replacequi annule le préfixage qu'il défend.Le correctif
Préfixer, et ne rien retirer :
**/*.ts→apps/api/**/*.ts. Le bloc restreint à**/domain/**/*.tsdevientapps/api/**/domain/**/*.ts, ce qui est exactement ce que le commentaire veut préserver.Ce que je proposerais au-delà du correctif
Exporter
porterdepuis@eqs/tooling/eslint. Trois dépôts portent aujourd'hui la même fonction recopiée à l'identique, avec le même défaut — c'est la définition de ce qu'un socle existe pour supprimer (« six dépôts ont copiécheck.mjs, aucune copie n'est identique »). Un satellite qui écrit...porter('apps/api', nest)ne devrait pas avoir à connaître la sémantique des globs d'ESLint.Et un contrôle qui refuse une porte vide.
tooling.eslint-etendvérifie que la configuration étend bien les profils ; il ne vérifie pas qu'elle ATTEINT quelque chose. Uneslint --format jsonqui rend moins de fichiers que le dépôt n'en compte soussrc/est un signal mécanique, et il aurait attrapé celui-ci comme il aurait attrapé #83. C'est la règle du cadre : « une porte qui ment est pire que pas de porte ».Versions
@eqs/tooling0.14.0, ESLint 9.39.5, Node 24.15.0, pnpm 11.8.0, Windows 11.Mesuré le 2026-09-30 sur
eqs-satellite-template@7035fec,eqs-demo@2550041, etEQS-Sandbox/NUAGEbrancheretrofit-socle-eqs.Contournement posé
nuageécrit sonporter()sans le.replace, avec un commentaire qui pointe ce ticket. Il n'y aura rien à retirer quand@eqs/toolingexportera le sien : la fonction locale disparaîtra au profit de l'import.knipSatellite()produit 34 indices de configuration qu'un satellite ne peut pas faire taire, et qui accusent SON fichier #101profilDene lit que le manifeste de la racine : tout dépôt de profilnestrendprofile: null, et c'est exactement le cas queeqs migratesert #99Première moitié faite :
@eqs/tooling/eslintexporteporter. PR #102, changesetporter-eslint-sous-dossier, D-050. Le ticket reste ouvert pour la seconde moitié — le contrôle qui refuse une porte qui n'atteint rien.Reproduit avant de corriger
Sur
eqs-satellite-template@7035fec,eslint . --format json --no-cache:apps/api/src/main.tsy est avec le correctif, pas sans. Je compte 31 fichiers.ts/.tsxsousapps/horsgeneratedetdist, là où le ticket dit 51 — l'écart vient probablement du périmètre compté, et il ne change rien au verdict.Un détail qui a son intérêt pour la suite : mon premier compteur « dont sous
src/» rendait 0 même avec le correctif. C'était mon script qui était faux, pas le correctif — un antislash avalé à l'écriture du fichier, donc une classe de caractères qui ne matchait que les chemins en slash avant. C'est la liste des fichiers qui a tranché, pas le compteur. Deux mesures qui se contredisent, on ne croit ni l'une ni l'autre : on regarde la chose.Ce que
porterfait, et ce qu'il refuseConcaténation de préfixe, rien de retiré.
**/domain/**/*.tsdevientapps/web/**/domain/**/*.ts, ce que le commentaire d'origine voulait préserver. Un blocignores-seul reste global. Et un préfixe vide ou terminé par un slash lève, au lieu de produire des motifs faux en silence.Le test compte les fichiers, il n'assure pas un motif
C'est le point qui compte le plus dans ce ticket. Une assertion sur la chaîne
apps/api/**/*.tspasserait avec un motif juste et une sémantique mal comprise — c'est exactement ce qui a manqué pendant trois recopies, puisque le commentaire au-dessus deporter()décrivait correctement ce qu'il fallait faire.Le test crée un dépôt à deux niveaux (
apps/api/racine.ts,apps/api/src/moyen.ts,apps/api/src/profond/bas.ts) et compte ce qu'ESLint atteint. Éprouvé en réinjectant la faute :Sur le cahier
§5 disait « fichiers, pas de code » alors que le paquet livrait déjà
conformite,knip-satellite,orvaletworkspaces-dockerfile. La règle était fausse depuis quatre modules, et on l'avait contournée quatre fois sans l'amender. Elle porte maintenant son critère (D-050) : du code ici quand un satellite devrait sinon connaître la sémantique d'un outil tiers pour écrire sa configuration, et se tromper.Ce qui reste
tooling.eslint-etendvérifie que la configuration étend les profils, pas qu'elle touche des fichiers. Uneslint --format jsonqui rend moins de fichiers que le dépôt n'en compte soussrc/aurait attrapé celui-ci et #83. C'est pour ça que le ticket n'est pas fermé.Trouvé en commitant, même forme que ce ticket
Le
pre-commita refusé ma première tentative pour une variable morte dans mon propre test — à raison. Et au passage il a montré quepnpm checkne lint paspackages/*/scripts/:lint:racinene couvre queknip.tsetscripts/de la racine, et lecheckde@eqs/toolingjoue son vérificateur sans se linter lui-même. Le seul filet est l'ESLint large dupre-commit.Une porte qui n'atteint pas ce qu'on croit, encore. Pas ouvert en ticket séparé pour l'instant : c'est la même classe que celui-ci, et votre proposition 2 est le bon endroit pour la traiter.
createEqsApp: better-auth monté sur/api/authavale toutes les routes voisines, en silence #105healthChecksne peut rien injecter : les sondes sont figées avant que le conteneur Nest existe #106runConformance:rootsert deux choses qui ne vivent pas au même endroit dans un monorepo #109// eqs-http:autorisedoit être sur la ligne dufetch, ce que Prettier défait #110