eqs check n'offre aucun moyen de déclarer une tâche supplémentaire : un dépôt qui a un second projet TypeScript doit garder son propre scripts/check.mjs #84

Closed
opened 2026-09-21 08:08:50 +00:00 by nicolas-fryder · 0 comments

Ce qui ne va pas

tachesParDefaut(root) de @eqs/testing déduit les tâches de la porte (lint, format, types, unit, doctor, knip, types:<projet> par membre du workspace). executerCheck({ taches }) accepte une liste, mais le binaire eqs-check — celui que le gabarit branche sur pnpm check et que check.yml appelle — ne lit aucune configuration : il n'y a pas de moyen déclaratif d'ajouter une tâche.

Le cas concret : D-024 dit qu'un dépôt rétrofitté « pose une baseline d'erreurs TypeScript, par dossier, dans son propre tsconfig ». TypeScript ne sait pas relâcher un drapeau par dossier ; la seule façon de tenir noUncheckedIndexedAccess sur src/ tout en le relâchant sur tests/ est un second projet (tests/tsconfig.json, qui étend la racine et relâche les deux drapeaux) exclu du projet racine. Ce second projet doit être joué par la porte, sinon la suite de tests n'est plus typée du tout — le tsconfig.json d'eqs-demo explique lui-même pourquoi c'est grave (« tsc --noEmit reste vert sur une suite cassée »).

Il faut donc une tâche types-tests: tsc -p tests/tsconfig.json. Aujourd'hui, la seule façon de l'avoir est de ne pas adopter eqs-check et de garder un scripts/check.mjs local — précisément ce que @eqs/testing existe pour retirer (« six dépôts ont copié check.mjs, aucune copie n'est identique »).

Reproduction

Un dépôt avec tsconfig.json (qui exclut tests/) et tests/tsconfig.json. pnpm check (= eqs-check) :

  ✓ lint  ✓ format  ✓ types  ✓ unit  ✓ doctor  ✓ knip

types ne lit jamais tests/** ; une erreur de type dans un test ne rougit rien.

Ce que je proposerais

  1. Lire une liste de tâches supplémentaires dans le manifeste racine, à côté de eqs.profile :
    "eqs": { "profile": "next-fullstack", "check": { "taches": [{ "nom": "types-tests", "cmd": ["tsc", "--noEmit", "-p", "tests/tsconfig.json"] }] } }
    
    avec requiert optionnel, comme les tâches par défaut. Les tâches déclarées s'ajoutent, elles ne remplacent rien.
  2. Ou, plus étroit : tachesParDefaut découvre tout **/tsconfig.json hors node_modules et produit une tâche types:<dossier> par projet qui n'est pas inclus par le projet racine. C'est ce que fait déjà la découverte par workspace ; il s'agit de l'étendre aux projets TypeScript qui ne sont pas des paquets.

La 1 couvre aussi les cas qu'on ne prévoit pas ; la 2 règle le cas D-024 sans configuration. Les deux ne s'excluent pas.

Ce que ça coûte

Contournable (ATLAS garde son scripts/check.mjs en attendant l'étape 8 du rétrofit), mais ça repousse l'adoption d'eqs-check et la ligne check.yml de la flotte suppose pnpm check = eqs-check avec son .eqs/check.json — sans lui, testing.check-budget se déclare non exécutable.

Versions

@eqs/testing 0.12.1, @eqs/cli 0.12.1, pnpm 11.8.0, Node 24.15.0, Windows 11. Contexte : rétrofit d'ATLAS, branche epic/retrofit de EQS/ATLAS, docs/retrofit-eqs.md (étape 1, tâche 1b).

## Ce qui ne va pas `tachesParDefaut(root)` de `@eqs/testing` déduit les tâches de la porte (lint, format, types, unit, doctor, knip, `types:<projet>` par membre du workspace). `executerCheck({ taches })` accepte une liste, mais le binaire `eqs-check` — celui que le gabarit branche sur `pnpm check` et que `check.yml` appelle — ne lit aucune configuration : il n'y a **pas de moyen déclaratif** d'ajouter une tâche. Le cas concret : D-024 dit qu'un dépôt rétrofitté « pose une baseline d'erreurs TypeScript, par dossier, dans son propre tsconfig ». TypeScript ne sait pas relâcher un drapeau par dossier ; la seule façon de tenir `noUncheckedIndexedAccess` sur `src/` tout en le relâchant sur `tests/` est un **second projet** (`tests/tsconfig.json`, qui étend la racine et relâche les deux drapeaux) exclu du projet racine. Ce second projet doit être joué par la porte, sinon la suite de tests n'est plus typée du tout — le `tsconfig.json` d'`eqs-demo` explique lui-même pourquoi c'est grave (« `tsc --noEmit` reste vert sur une suite cassée »). Il faut donc une tâche `types-tests: tsc -p tests/tsconfig.json`. Aujourd'hui, la seule façon de l'avoir est de **ne pas** adopter `eqs-check` et de garder un `scripts/check.mjs` local — précisément ce que `@eqs/testing` existe pour retirer (« six dépôts ont copié `check.mjs`, aucune copie n'est identique »). ## Reproduction Un dépôt avec `tsconfig.json` (qui exclut `tests/`) et `tests/tsconfig.json`. `pnpm check` (= `eqs-check`) : ``` ✓ lint ✓ format ✓ types ✓ unit ✓ doctor ✓ knip ``` `types` ne lit jamais `tests/**` ; une erreur de type dans un test ne rougit rien. ## Ce que je proposerais 1. Lire une liste de tâches supplémentaires dans le manifeste racine, à côté de `eqs.profile` : ```json "eqs": { "profile": "next-fullstack", "check": { "taches": [{ "nom": "types-tests", "cmd": ["tsc", "--noEmit", "-p", "tests/tsconfig.json"] }] } } ``` avec `requiert` optionnel, comme les tâches par défaut. Les tâches déclarées s'ajoutent, elles ne remplacent rien. 2. Ou, plus étroit : `tachesParDefaut` découvre tout `**/tsconfig.json` hors `node_modules` et produit une tâche `types:<dossier>` par projet qui n'est pas inclus par le projet racine. C'est ce que fait déjà la découverte par workspace ; il s'agit de l'étendre aux projets TypeScript qui ne sont pas des paquets. La 1 couvre aussi les cas qu'on ne prévoit pas ; la 2 règle le cas D-024 sans configuration. Les deux ne s'excluent pas. ## Ce que ça coûte Contournable (ATLAS garde son `scripts/check.mjs` en attendant l'étape 8 du rétrofit), mais ça repousse l'adoption d'`eqs-check` et la ligne `check.yml` de la flotte suppose `pnpm check` = `eqs-check` avec son `.eqs/check.json` — sans lui, `testing.check-budget` se déclare non exécutable. ## Versions `@eqs/testing` 0.12.1, `@eqs/cli` 0.12.1, pnpm 11.8.0, Node 24.15.0, Windows 11. Contexte : rétrofit d'ATLAS, branche `epic/retrofit` de `EQS/ATLAS`, `docs/retrofit-eqs.md` (étape 1, tâche 1b).
Sign in to join this conversation.
No milestone
No project
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#84
No description provided.