@mostajs/mjs-unit 0.11.2 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/llms.txt CHANGED
@@ -111,6 +111,25 @@ node node_modules/@mostajs/mjs-unit/bin/cli.mjs test-scripts/*.test.mjs
111
111
  sort en code 1 avec un message. Le compte s'imprime : « ✓ N/N test(s) exécutés sur F fichier(s) ».
112
112
  - Le resolver n'agit que sur les specifiers RELATIFS sans extension ; les packages (bare) passent normalement.
113
113
 
114
+ ## S1P (0.12.0)
115
+ S1P — « suite une fois, en parallèle » (règle DEVRULES-S1P du 04/11/2026, premier usage : Guerway, 371 essais).
116
+
117
+ - **`--jobs=N`** (ou `--jobs` / `--jobs=auto` : nombre de processeurs, 4 au plus) : les fichiers sont répartis en N lots de
118
+ durée voisine (durées du rapport `--json` précédent), un processus par lot, puis réunis en UN rapport ; le total
119
+ exécuté reste vérifié contre le total déclaré. Une chaîne de fichiers marquée `// mjs-unit:lot <nom>` reste dans un même lot.
120
+ - **Le bloc `execution` du rapport JSON** (et une ligne ⏱ en sortie et dans le HTML) : mode, lots, durée réelle,
121
+ somme des durées des essais, gain, détail de chaque lot, espace, jeux de données, empreinte.
122
+ - **L'espace propre** : chaque suite a son `TMPDIR` dédié (un sous-espace par lot) ; ce que chaque fichier d'essai y laisse
123
+ est relevé (bases SQLite reconnues à leur en-tête, fichiers, octets), puis l'espace est supprimé, réussite ou échec ;
124
+ `--garder` le conserve pour examen. Fini les bases d'essai laissées dans `/tmp` (constaté : 16 036 dossiers, 26 Go).
125
+ - **`jeu(nom, { pour, construire, detruire })`** : un jeu de données partagé (un compte, puis une autorisation sur ce compte)
126
+ construit au premier `obtenir()`, gardé tant qu'un essai de `pour` n'a pas fini, détruit après le DERNIER ; un essai
127
+ déclaré jamais exécuté est une anomalie relevée.
128
+ - **`mjs-unit rejouer <essai> <fichier...>`** : cet essai seul, dans un espace neuf ; ses jeux de données sont reconstruits.
129
+ - **L'empreinte** de ce qui a été éprouvé (commit, arbre propre, empreinte du `package-lock.json`, Node) au bloc `execution`,
130
+ et **`mjs-unit empreinte --verifier=<rapport.json>`** : code 0 si le rapport vaut encore pour l'arbre courant, sinon les motifs
131
+ (c'est ce qui permet de ne pas rejouer une suite après une fusion `--ff-only`).
132
+
114
133
  ## CLIENT QATRAX (0.11.0)
115
134
  `mjs-unit qatrax etat [--bref] | rapatrier [--tous] | pris <id> [note] | corrige <id> [version] [note] | pousser [plan,run,sbom,sources] [--si-vert]` (sans niveau : plan, run, sbom ; sources sur demande, 0.11.1).
116
135
  Config : package.json "qatrax": { projet, url, nom?, plan?, run?, sbom?, defauts?, curseur?, sources? (défaut test-scripts) } ; QATRAX_URL l'emporte ; clé QATRAX_CLE_CI
@@ -122,3 +141,56 @@ Le cœur (`.`) n'importe pas ce client.
122
141
  ## CONVENTION (écosystème)
123
142
  Tout test ET son runner (`run-tests.sh`) sont versionnés dans `test-scripts/` ; `package.json` `scripts.test`
124
143
  pointe sur le runner. Jamais de test jetable.
144
+
145
+ ## D4Q et D4PF, après la suite (0.13.0)
146
+
147
+ Deux commandes pour ce qui suit une version **intégrée** (suite S1P verte, `main` avancé) ; premier usage : Guerway
148
+ (04/11/2026). L'application décrit ses étapes dans **`d4.config.json`** ; mjs-unit les enchaîne avec les mêmes règles partout.
149
+
150
+ **L'ordre d'une version** : essais rouges → code → suite (`--jobs`, rapport JSON) → intégration S1P
151
+ (`mjs-unit empreinte --verifier`, fusion `--ff-only`) → **`mjs-unit d4q`** → **`mjs-unit d4pf` sur feu vert**.
152
+
153
+ ```bash
154
+ npx mjs-unit d4q # la qualité : ne déploie RIEN (CAPTURES=0 saute une étape marquée « sauterSi »)
155
+ npx mjs-unit d4q ../worktrees/L2-1.4.0 # sur un autre dossier de l'application (un worktree)
156
+ npx mjs-unit d4pf --a-blanc # contrôles, puis les commandes qui seraient lancées ; rien n'est exécuté
157
+ npx mjs-unit d4pf # SEULEMENT sur feu vert explicite pour CETTE version
158
+ npx mjs-unit d4pfq # D4PF puis D4Q (D4Q seulement si D4PF réussit) — sur feu vert ; --a-blanc aussi
159
+ ```
160
+
161
+ #### D4Q — « déploie pour la qualité »
162
+
163
+ Régénère et publie tout ce qui sert à juger la version, dans l'ordre déclaré (chez Guerway : cahier des écrans, feuilles
164
+ de recette par rôle, feuilles de formation, plan Dev+Test, avancement, chiffrage, `mjs-unit qatrax pousser plan,run`).
165
+
166
+ - `exige` : les fichiers sans lesquels D4Q refuse (le rapport de la DERNIÈRE suite : `test-scripts/.out/report.json`) ;
167
+ - chaque étape s'arrête au premier échec, sauf si sa sortie contient son motif `reporterSi` (un quota de service de PDF) :
168
+ elle est alors « reportée » et la suite continue ; `sauterSi: "VAR=valeur"` la saute ;
169
+ - `dossier` : `app` (défaut) ou `racine` (le dossier de `d4.config.json`) ; `lignes` : les dernières lignes montrées.
170
+
171
+ #### D4PF — « déploie pour prod et formation »
172
+
173
+ 1. contrôles : la branche (`main`), aucun fichier suivi modifié hors `ignorer` (expressions sur `git status --porcelain`) ;
174
+ 2. `sauvegardes` : chaque commande écrit sa copie dans `fichier` ; vide ou sans `entete` (ex. `PGDMP`) → arrêt AVANT
175
+ tout déploiement ;
176
+ 3. et 4. `deploiements`, dans l'ordre (production, puis formation) ;
177
+ 5. `sante` : chaque commande rend le JSON de `/health` ; `ok`, `version` du package.json ET `commit` de `main` exigés ;
178
+ 6. `journaux` : les dernières erreurs, pour lecture (des lignes anciennes ne sont pas une erreur de la version).
179
+
180
+ Règles : aucune valeur du `.env` affichée ; ne pas figer la liste des processus du serveur (pas de `pm2 save`) ; le
181
+ `push` et la publication npm restent hors de D4PF. Jetons des commandes : `{racine}`, `{app}`, `{version}`, `{commit}`, `{date}`.
182
+
183
+ ```json
184
+ {
185
+ "app": "mon-api",
186
+ "d4q": { "exige": ["test-scripts/.out/report.json"], "etapes": [
187
+ { "titre": "feuilles de recette", "commande": "node outils/feuillets.mjs", "reporterSi": "QUOTA_EXCEEDED" },
188
+ { "titre": "qatrax", "commande": "npx mjs-unit qatrax pousser plan,run" } ] },
189
+ "d4pf": { "branche": "main", "ignorer": [" \\.env\\.example$"],
190
+ "sauvegardes": [{ "nom": "production", "commande": "ssh serveur 'pg_dump -Fc \"$BASE\"'", "fichier": "sauvegardes/avant-{version}-{date}.dump", "entete": "PGDMP" }],
191
+ "deploiements": [{ "nom": "production", "commande": "bash deploy.sh ./prod.conf" }, { "nom": "formation", "commande": "bash deploy.sh ./formation.conf" }],
192
+ "sante": [{ "nom": "production", "commande": "ssh serveur 'curl -s http://127.0.0.1:5400/health'" }],
193
+ "journaux": "ssh serveur 'tail -n 5 logs/err.log'" }
194
+ }
195
+ ```
196
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mostajs/mjs-unit",
3
- "version": "0.11.2",
3
+ "version": "0.13.0",
4
4
  "description": "Micro-framework de test pour l'écosystème @mostajs/* : zéro dépendance, API minimale (test/expect/run), runner CLI (preuves HTML/JSON/JUnit XML via --report/--json/--junit ; compte rendu de validation CRA lié à la SBOM, CTRF, in-toto test-result via --compte-rendu/--ctrf/--intoto ; mode lecteur --depuis : lit le rapport natif de Java, C#, Python, Go, C++… — JUnit XML, NUnit, TRX, TestNG, Robot Framework, CTest, Cucumber JSON, Behave JSON, Allure 2, CTRF, TAP — et en fait le même compte rendu ; lecteurs réutilisables ./lecteurs ; menu en shell mjs-unit-menu), notions JUnit (échec/erreur, classname, crochets, délai, étiquettes, tests paramétrés), reporters réutilisables (./report), et un resolver ESM qui exécute sous Node les dist à imports sans extension (convention moduleResolution=bundler). Depuis 0.11.0 : le client qatrax (mjs-unit qatrax etat|rapatrier|pris|corrige|pousser, @mostajs/mjs-unit/qatrax), hors du cœur.",
5
5
  "author": "Dr Hamid MADANI <drmdh@msn.com>",
6
6
  "license": "AGPL-3.0-or-later",