L'étage e2e lance next start, que Next déclare incompatible avec l'output: standalone du gabarit : il n'éprouve pas l'artefact que le Dockerfile déploie #30
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
playwright.config.tsdu gabarit démarre le serveur sous test par :et
apps/web/package.jsonfait destartunnext start(
node scripts/next.mjs start). Orapps/web/next.config.mjsdu même gabaritpose
output: 'standalone', et Next refuse la combinaison — à voix haute, àchaque exécution :
Le plus petit chemin pour le reproduire
Un clone du gabarit,
@eqs/*en 0.11.2 :L'avertissement sort au démarrage du
webServer, avant le premier cas. Mesuréle 2026-09-17 sur un satellite
nestmonté sureqs-satellite-template@53e704c(Node 24.15.0, pnpm 11.8.0, Windows 11) ; les deux fichiers en cause sont ceux
du gabarit, non modifiés.
Deuxième avertissement au même endroit, de la même famille :
Ce que ça coûte
Pas bloquant aujourd'hui, et c'est précisément ce qui le rend gênant.
next startsert quand même depuis.next/, la page rend, le cas passe. Deuxconséquences :
Dockerfilecopie.next/standaloneet lanceserver.js; l'e2e, lui, lance un autre serveur,depuis un autre artefact, avec un autre traçage de fichiers
(
outputFileTracingRoot). Un défaut propre au bundle standalone — un fichiernon tracé, un
public/absent, un chemin de workspace mal résolu — passel'étage e2e en vert et se découvre en production. C'est exactement la classe
de défauts que
2303777(« L'étage e2e du gabarit devient vrai ») visait àfermer.
satellites perdent leur étage e2e le même matin, sur un message qui parle de
configuration Next et pas du gabarit.
Il y a une ironie utile ici : le commentaire de
playwright.config.tsdit« Un étage e2e qui atteste de ce qu'il n'a pas regardé est pire que pas
d'étage » — à propos de
reuseExistingServer. Le même raisonnement s'applique àl'artefact servi.
Ce que je proposerais
Faire pointer le
webServersur le serveur standalone, celui que l'imagelance :
Avec une réserve mesurée : le serveur standalone ne sert pas
.next/staticnipublic/tout seul — leDockerfileles recopie à côté de lui (étagesweb 2/3etweb 3/3). Il faudrait donc soit un petit script qui fait la mêmecopie avant de lancer (le pendant local des trois
COPY), soit assumer quel'e2e local teste le HTML et laisse les assets à la CI. Un script, plutôt :
c'est ce qui rend l'étage local et l'image comparables, ce qui est tout l'objet
de la demande.
Si cette voie est jugée trop lourde pour ce que le gabarit doit livrer, l'autre
réponse honnête est de l'écrire dans
playwright.config.ts: « cewebServern'est pas l'artefact déployé, et voici ce que cet étage ne peut doncpas voir ». Une limite nommée vaut mieux qu'un avertissement que trente dépôts
apprennent à ignorer.
Pour le second avertissement,
NODE_ENV: le fixer explicitement àproductiondans l'envduwebServersuffit, et rapproche encore l'étage dece qui tourne en vrai.
Contournement posé
Aucun. L'étage e2e du satellite est vert tel quel ; c'est ce qu'il atteste qui
est plus étroit qu'il n'en a l'air.
conformite.test.tsne fournit aucun contexte au harnais : depuis 0.12.0, l'étage d'intégration d'un clone neuf est rouge sur 27 règles jamais jouées #32Corrigé — et le défaut allait plus loin que ce que le ticket décrivait.
scripts/e2e.mjslanceeqs e2e up, qui construit l'image duDockerfileet la lève derrière Caddy surEQS_E2E_PORT. Pendant ce temps,playwright.config.tsdémarrait son proprewebServersur un autre port et y pointait sabaseURL. La pile réelle était construite, attendue, payée — et jamais regardée.Le
webServerest donc retiré, pas remplacé : labaseURLvise le proxy de la pile. Retirer un serveur vaut mieux qu'en ajouter un second qui recopierait les troisCOPYduDockerfile— ce serait le même piège une couche plus haut, et c'est pourquoi votre proposition de script de copie n'a pas été retenue. Les deux avertissements disparaissent parce que leur cause disparaît : plus denext start, etNODE_ENV=productionvient de l'image.Ce que ça coûte, et c'est dit dans le fichier :
npx playwright testseul ne démarre plus rien.pnpm test:e2eest la commande.Mesuré : image construite, un cas passé contre le proxy, aucun avertissement Next dans la sortie, pile démontée. Voir
reference/decisions.mdL-002.Deux suites, tirées de la même chasse (
eqs-platform/reference/chasses.md, n°17) :eqs-demoporte la même configuration, avec un commentaire qui affirme l'inverse de ce qui se passe (« on éprouve l'artefact construit, celui qui part en production »), et sontest:e2een&&laisse la pile debout quand les tests échouent. À porter.testing.etage-declare-videsait déjà lire scripts et dépendances ; il pourrait refuser unwebServerdans un dépôt dont letest:e2eappelleeqs e2e up.Fermé le 2026-09-21. Ce ticket restait ouvert faute d'un
Closes #30dans le commit, pas faute de correctif.