Deux messages qui envoyaient dans un mur, et une variable que personne ne validait #111
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "nicolas-fryder/dev"
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?
#104 — la commande d'isolement n'existait pas
eqs-checkimprimait, en cas d'échec,eqs check --only=format.eqseteqs-checksont deux binaires, et l'aide deeqsne mentionne pascheck:la ligne envoyait dans un mur, et le mur laissait croire que la commande avait
disparu du socle. C'est la ligne qu'on lit au moment précis où quelque chose est
cassé.
La chasse a rendu sept instances de plus, dont deux actionnables :
Un champ
faireest littéralement ce qu'il faut faire. Les cinq autres étaient dela prose, corrigées avec : nommer un binaire qui n'existe pas reste trompeur même
en commentaire.
J'ai écrit dans mon rapport précédent qu'aucun test ne fixait ce message. C'était
vrai du message d'échec, et faux en général : un test pinçait la chaîne du
contrôle
testing.check-budget, et il a rougi comme il devait. Le messaged'échec, lui, est fixé maintenant — et le test interdit explicitement
eqs checknu, parce que le tiret est tout le sujet.
#107 —
DOCS_ACCESSlue hors schéma@eqs/platform-nestla lisait sur la source brute.DOCS_ACCESS=publlicretombait donc en silence sur le défaut —
sessionen production — et ladocumentation disparaissait sans un mot.
baseSchemala porte, en enum, sans.default(): la valeur par défautdépend de l'environnement et se calcule dans la plateforme. Un défaut ici
écraserait ce calcul.
Ce changement n'est pas additif, contrairement à ce que le ticket annonçait
Mesuré :
ecartsEnvExampleréclame TOUTE clé du schéma dans.env.example,optionnelle ou non.
Chaque satellite doit donc ajouter
DOCS_ACCESS=à son.env.example, sans quoiconfig.env-examplerougit. C'est le prix, et il est dans le bon sens : jusqu'iciun satellite ne pouvait PAS documenter cette variable sans faire échouer sa porte,
puisqu'elle était inconnue du schéma.
Le gabarit et
eqs-demoont reçu la ligne dans la même passe, dans leurs propresdépôts. Vérifié par la mesure ci-dessus, pas prédit.
Et la porte a exigé trois corrections de plus
EXEMPLE_SOCLE, la fixture de conformité de@eqs/config, et la chaîne pincée decheck-budget. Trois tests rouges avant d'être complétés — exactement lecouplage que le changeset documente, éprouvé sur le socle lui-même avant d'être
annoncé aux satellites.
Ce que je n'ai pas vérifié
L'effet sur un satellite réel : il installe
@eqs/configdepuis le registre et neverra ce changement qu'en 0.15.0.
Et la porte a rougi une première fois sur
@eqs/errors, avec deuxemitUnexpectedExit— le flake de fork de la chasse 23, seconde passe verte,aucun échec nommé.
Closes #104
Closes #107
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
DOCS_ACCESSaffirmait une chose que je n'avais pas le droit de faire 11be2e544e`app.use('/api/auth', …)` capte TOUT le sous-arbre en Express, et `toNodeHandler` rend 404 sur ce que better-auth ne connaît pas **sans appeler `next()`**. Une route de l'application placée là est enregistrée par Nest, vue par `DecisionsService`, présente au contrat — et morte à l'exécution (#105). ## Le pire mode d'échec possible Pas d'erreur au démarrage. Pas de conflit de route signalé. Un 404 à l'exécution, sur des routes qui ont l'air parfaitement montées. Sur un satellite rétrofitté, **66 tests d'intégration sur 67** sont tombés d'un coup, et le diagnostic ne ressemblait pas à sa cause. `createEqsApp` refuse maintenant de démarrer, nomme les routes, et dit quoi faire. ## Ça lève, ça n'avertit pas « Un package échoue au démarrage, pas à la première requête. » Le ticket proposait « refuser ou avertir » ; la doctrine tranche, et ce cas ne laisse aucun doute : une route inatteignable est une faute de configuration, pas un état dégradé. Deux détails de placement qui portent tout le correctif : - le contrôle tourne **après** `listen()` / `init()`. C'est le premier endroit où la pile Express porte les routes des contrôleurs ; déclaré plus haut, il ne verrait rien et rendrait un vert de complaisance ; - la couche de better-auth, montée par `app.use`, **n'est pas une `route`** de cette pile, donc `routesMontees` ne la voit pas. Ce qui ressort est forcément une route de l'application — pas besoin de la filtrer, et c'est écrit dans le commentaire pour que personne n'ajoute un filtre qui casserait le sens. ## Qui est concerné, et pourquoi personne ne l'avait vu Tout dépôt **rétrofitté**, par construction : ses routes d'authentification maison sont précisément le code que le socle vient remplacer, et elles sont encore là pendant la transition. Le gabarit, lui, n'a pas de routes d'authentification propres. Il ne rencontre jamais ce cas — et c'est exactement pour ça que le défaut a vécu : la forme que le socle éprouve n'est pas la forme qui casse. ## Deux tests, et le second compte autant « refuse au démarrage, et nomme la route avec sa méthode » attrape le défaut : éprouvé en désactivant le garde, il rougit. « laisse passer une application dont aucune route ne tombe sous ce chemin » est le miroir, et sans lui un garde qui refuserait TOUT passerait le premier seul. C'est la forme que j'aurais dû donner d'emblée aux tests de `porter` ce matin. La phrase manquante est aussi dans la doc de `auth.basePath` : aucune route de l'application ne peut vivre sous ce chemin. Le ticket la demandait, et c'est ce qui fait chercher au bon endroit. ## Non fait La troisième piste du ticket — que `eqs migrate inspect` le signale sur un dépôt non rétrofitté, AVANT de commencer. Elle est juste et elle appartient à `@eqs/cli` : il faudrait y reconnaître les contrôleurs sous `auth` sans monter l'application. À regarder avec #99, qui vient d'apprendre à `profilDe` à lire les applications d'un workspace. Closes #105 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>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 #106rootservait deux choses qui ne vivent pas au même endroit 9a690afbbbrunConformance:rootsert deux choses qui ne vivent pas au même endroit dans un monorepo #109