@mostajs/kind-catalog 0.1.0 → 0.1.1

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/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  **Auteur** : Dr Hamid MADANI <drmdh@msn.com>
4
4
 
5
+ ## 0.1.1 — 2026-09-03
6
+
7
+ ### Ajouté — `bind` : lier une épreuve à l'essai qui la couvre DÉJÀ
8
+
9
+ Constaté **en instanciant pour la première fois**, dans ATC. Une application qui reprend une fiche
10
+ l'éprouve déjà, la plupart du temps : ATC vérifiait la garde de périmètre par cinq essais avant que
11
+ la fiche n'existe.
12
+
13
+ Sans liaison, la projection ajoutait **cinq essais `automated` sans renvoi** — c'est-à-dire cinq
14
+ trous dans la porte qualité de l'application, et une invitation à réécrire ce qui existe.
15
+
16
+ ```js
17
+ toDevtest(kinds, { project, prefix: 'ATC', bind: {
18
+ 'KIND-PERIMETRE-01': ['test-scripts/unit/portail.test.mjs::T-POR-2', null, …],
19
+ }})
20
+ ```
21
+
22
+ **Une épreuve non liée devient `manual`, et c'est voulu** : elle reste visible dans le suivi comme
23
+ un travail à faire, sans mentir sur son état. La déclarer `automated` sans renvoi prétendrait qu'un
24
+ essai la couvre.
25
+
26
+ `T-KC-6b` tient les deux cas. 23 essais.
27
+
5
28
  ## Non publié — 2026-09-02 (soir) · le corpus double par EXPLORATION du parc
6
29
 
7
30
  Sept applications du parc ont été relues — CRM/TRADING, LabTrax, CollabTrax, LabTraxAdmin, SofTrax,
@@ -407,6 +407,20 @@
407
407
  "expected": "au moins trois incidents, issus de projets DISTINCTS — une exigence rencontrée dans trois projets indépendants n'est plus une opinion d'auteur, c'est un fait du métier"
408
408
  }
409
409
  ]
410
+ },
411
+ {
412
+ "ref": "T-KC-6b",
413
+ "specRef": "SPEC-KC-03",
414
+ "type": "automated",
415
+ "priority": "critical",
416
+ "title": "T-KC-6b — une épreuve LIÉE devient automatisée ; non liée, elle reste MANUELLE",
417
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-6b",
418
+ "steps": [
419
+ {
420
+ "action": "projeter une fiche à deux épreuves, dont une seule liée à un essai réel",
421
+ "expected": "la liée est `automated` avec son renvoi ; l'autre est `manual` sans renvoi — la déclarer automatisée prétendrait qu'un essai la couvre, et ouvrirait un trou dans la porte qualité de l'application"
422
+ }
423
+ ]
410
424
  }
411
425
  ]
412
426
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mostajs/kind-catalog",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Catalogue de KINDS — fiches d'exigence réutilisables, projetables en plan mostajs-devtest/1 lisible par qatrax. N'exécute rien, ne stocke rien.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-or-later",
package/src/projection.js CHANGED
@@ -27,8 +27,20 @@ const corps = (ref) => propre(ref).replace(/^KIND-/, '');
27
27
  * @param {{key:string,name:string,description?:string}} o.project le projet, au sens qatrax
28
28
  * @param {string} o.prefix préfixe des références — `ATC`, `RESTO`… ISOLE deux applications qui
29
29
  * reprennent la même fiche : sans lui, leurs plans se marcheraient dessus dans le même qatrax.
30
+ * @param {object} [o.bind] ce que l'application COUVRE DÉJÀ : `{ 'KIND-X': [autoRef|null, …] }`,
31
+ * une entrée par épreuve de la fiche, dans l'ordre.
32
+ *
33
+ * ⚠️ POURQUOI `bind` EXISTE — constaté le 03/09/2026, en instanciant pour la première fois.
34
+ * Une application qui reprend une fiche l'éprouve DÉJÀ, la plupart du temps : ATC vérifiait la
35
+ * garde de périmètre par cinq essais avant que la fiche n'existe. Sans `bind`, la projection
36
+ * ajoutait cinq essais `automated` SANS renvoi — c'est-à-dire cinq trous dans la porte qualité,
37
+ * et une invitation à réécrire ce qui existe.
38
+ *
39
+ * ⚠️ UNE ÉPREUVE NON LIÉE DEVIENT `manual`, ET C'EST VOULU. Elle reste visible dans le suivi
40
+ * comme un travail à faire, sans mentir sur son état : la déclarer `automated` sans renvoi
41
+ * prétendrait qu'un essai la couvre.
30
42
  */
31
- export function toDevtest(kinds = [], { project, prefix = 'APP' } = {}) {
43
+ export function toDevtest(kinds = [], { project, prefix = 'APP', bind = {} } = {}) {
32
44
  if (!project?.key || !project?.name) throw new Error('toDevtest: `project` { key, name } requis');
33
45
  const p = propre(prefix).toUpperCase();
34
46
  const plan = { plan: PLAN_VERSION, project: { ...project }, specs: [], realisations: [], tests: [] };
@@ -61,13 +73,18 @@ export function toDevtest(kinds = [], { project, prefix = 'APP' } = {}) {
61
73
  status: 'todo',
62
74
  });
63
75
 
76
+ const lie = Array.isArray(bind?.[k.ref]) ? bind[k.ref] : [];
64
77
  k.test.forEach((t, i) => {
78
+ const renvoi = propre(lie[i]) || null;
65
79
  plan.tests.push({
66
80
  ref: `T-${p}-${corps(k.ref)}-${i + 1}`,
67
81
  specRef,
68
82
  title: `T-${p}-${corps(k.ref)}-${i + 1} — ${t.action}`,
69
- type: 'automated',
83
+ // Lié à un essai réel → automatisé. Non lié → MANUEL : un travail à faire, pas un
84
+ // essai qu'on prétend avoir écrit.
85
+ type: renvoi ? 'automated' : 'manual',
70
86
  priority: 'critical',
87
+ ...(renvoi ? { autoRef: renvoi } : {}),
71
88
  steps: [{ action: t.action, expected: t.attendu }],
72
89
  });
73
90
  });