@mostajs/kind-catalog 0.1.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/README.md +103 -0
  3. package/docs/00-ETAPE-INAUGURALE-KIND-CATALOG.md +105 -0
  4. package/docs/03bis-PROMPT-IMAGE-OBJECTIF-KIND-CATALOG.md +99 -0
  5. package/docs/09bis-MATRICE-SOURCING-KIND-CATALOG.md +176 -0
  6. package/docs/10-PRESENTATION-COMMERCIALE-KIND-CATALOG.md +140 -0
  7. package/docs/11-SLIDES-COMMERCIAL-KIND-CATALOG.md +154 -0
  8. package/docs/12-DOC-TECHNIQUE-KIND-CATALOG.md +164 -0
  9. package/docs/13-SLIDES-DEV-KIND-CATALOG.md +162 -0
  10. package/docs/14-PROMPT-IMAGE-KIND-CATALOG.md +88 -0
  11. package/docs/15-REVUE-SECURITE-KIND-CATALOG.md +98 -0
  12. package/docs/16-DPIA-CONFORMITE-KIND-CATALOG.md +100 -0
  13. package/docs/ARTICLE-SEO-KIND-CATALOG.md +96 -0
  14. package/docs/AUDIT-EXISTANT-KIND-CATALOG.md +127 -0
  15. package/docs/DEVTEST-PLAN.kind-catalog.json +412 -0
  16. package/docs/ETUDE-ETAT-ART-KIND-CATALOG-02092026.md +207 -0
  17. package/docs/PLAN-DEV-KIND-CATALOG.md +186 -0
  18. package/docs/PLAN-PUBLICATION-KIND-CATALOG.md +80 -0
  19. package/docs/PLAN-SUIVI-MONITORING.md +66 -0
  20. package/docs/PLAN-TESTS.md +79 -0
  21. package/docs/SEO-KEYWORDS-KIND-CATALOG.md +46 -0
  22. package/docs/articles/01-ARTICLE-KIND-CATALOG.md +229 -0
  23. package/kinds/acces.kind.mjs +48 -0
  24. package/kinds/apprentissage.kind.mjs +25 -0
  25. package/kinds/chiffres.kind.mjs +80 -0
  26. package/kinds/decision.kind.mjs +88 -0
  27. package/kinds/donnees.kind.mjs +108 -0
  28. package/kinds/ecran-service.kind.mjs +71 -0
  29. package/kinds/integration.kind.mjs +83 -0
  30. package/kinds/metier-optimisation.kind.mjs +210 -0
  31. package/kinds/traces.kind.mjs +39 -0
  32. package/llms.txt +34 -0
  33. package/package.json +46 -0
  34. package/src/catalogue.js +98 -0
  35. package/src/index.js +4 -0
  36. package/src/instance.js +85 -0
  37. package/src/kind.js +152 -0
  38. package/src/projection.js +76 -0
@@ -0,0 +1,412 @@
1
+ {
2
+ "plan": "mostajs-devtest/1",
3
+ "project": {
4
+ "key": "kind-catalog",
5
+ "name": "@mostajs/kind-catalog"
6
+ },
7
+ "_comment": "CATALOGUE DE KINDS (0.1.0). Un catalogue n'a aucun comportement à l'exécution : ces essais ne prouvent pas qu'une fiche est JUSTE — cela se prouve en l'appliquant, dans le plan de l'application. Ils tiennent ce qui rendrait le catalogue NUISIBLE : une fiche sans critère de succès donne un cadre à des réponses qu'on ne peut pas juger, avec l'autorité d'une fiche ; une fiche sans erreur connue se reprend comme une expérience et n'est qu'un titre ; une projection invalide part chez qatrax.",
8
+ "specs": [
9
+ {
10
+ "ref": "SPEC-KC-01",
11
+ "title": "Une fiche inutilisable est refusée AU MONTAGE, en nommant tout ce qui manque",
12
+ "priority": "critical",
13
+ "status": "verified"
14
+ },
15
+ {
16
+ "ref": "SPEC-KC-03",
17
+ "title": "La projection produit un plan mostajs-devtest/1 que le parseur OFFICIEL accepte",
18
+ "priority": "critical",
19
+ "status": "verified"
20
+ },
21
+ {
22
+ "ref": "SPEC-KC-04",
23
+ "title": "Instancier EXIGE de nommer ce qui est affiné, et le trace",
24
+ "priority": "critical",
25
+ "status": "verified"
26
+ },
27
+ {
28
+ "ref": "SPEC-KC-05",
29
+ "title": "Le corpus est cohérent : références uniques, verdicts connus, domaines déclarés",
30
+ "priority": "critical",
31
+ "status": "verified"
32
+ },
33
+ {
34
+ "ref": "SPEC-KC-06",
35
+ "title": "Le module N'EXÉCUTE RIEN et NE STOCKE RIEN",
36
+ "priority": "critical",
37
+ "status": "verified"
38
+ },
39
+ {
40
+ "ref": "SPEC-KC-07",
41
+ "title": "Le corpus livré est valide, sourcé et lisible",
42
+ "priority": "critical",
43
+ "status": "verified"
44
+ }
45
+ ],
46
+ "realisations": [
47
+ {
48
+ "ref": "REL-KC-01",
49
+ "specRef": "SPEC-KC-01",
50
+ "kind": "feature",
51
+ "title": "Une fiche inutilisable est refusée AU MONTAGE, en nommant tout ce qui manque",
52
+ "artifact": "src/",
53
+ "progress": 100,
54
+ "status": "done"
55
+ },
56
+ {
57
+ "ref": "REL-KC-03",
58
+ "specRef": "SPEC-KC-03",
59
+ "kind": "feature",
60
+ "title": "La projection produit un plan mostajs-devtest/1 que le parseur OFFICIEL accepte",
61
+ "artifact": "src/",
62
+ "progress": 100,
63
+ "status": "done"
64
+ },
65
+ {
66
+ "ref": "REL-KC-04",
67
+ "specRef": "SPEC-KC-04",
68
+ "kind": "feature",
69
+ "title": "Instancier EXIGE de nommer ce qui est affiné, et le trace",
70
+ "artifact": "src/",
71
+ "progress": 100,
72
+ "status": "done"
73
+ },
74
+ {
75
+ "ref": "REL-KC-05",
76
+ "specRef": "SPEC-KC-05",
77
+ "kind": "feature",
78
+ "title": "Le corpus est cohérent : références uniques, verdicts connus, domaines déclarés",
79
+ "artifact": "src/",
80
+ "progress": 100,
81
+ "status": "done"
82
+ },
83
+ {
84
+ "ref": "REL-KC-06",
85
+ "specRef": "SPEC-KC-06",
86
+ "kind": "feature",
87
+ "title": "Le module N'EXÉCUTE RIEN et NE STOCKE RIEN",
88
+ "artifact": "src/",
89
+ "progress": 100,
90
+ "status": "done"
91
+ },
92
+ {
93
+ "ref": "REL-KC-07",
94
+ "specRef": "SPEC-KC-07",
95
+ "kind": "feature",
96
+ "title": "Le corpus livré est valide, sourcé et lisible",
97
+ "artifact": "src/",
98
+ "progress": 100,
99
+ "status": "done"
100
+ }
101
+ ],
102
+ "tests": [
103
+ {
104
+ "ref": "T-KC-1",
105
+ "specRef": "SPEC-KC-01",
106
+ "title": "T-KC-1 — une fiche sans `succes` est refusée",
107
+ "type": "automated",
108
+ "priority": "critical",
109
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-1",
110
+ "steps": [
111
+ {
112
+ "action": "définir sans critère de succès",
113
+ "expected": "refus nommant `succes` — sans critère écrit, tout résultat paraît bon, avec l'autorité d'une fiche"
114
+ }
115
+ ]
116
+ },
117
+ {
118
+ "ref": "T-KC-2",
119
+ "specRef": "SPEC-KC-01",
120
+ "title": "T-KC-2 — une fiche sans `erreurs` est refusée",
121
+ "type": "automated",
122
+ "priority": "critical",
123
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-2",
124
+ "steps": [
125
+ {
126
+ "action": "définir sans erreur connue",
127
+ "expected": "refus — une fiche qui n'apprend rien n'a pas de raison d'être reprise"
128
+ }
129
+ ]
130
+ },
131
+ {
132
+ "ref": "T-KC-3",
133
+ "specRef": "SPEC-KC-01",
134
+ "title": "T-KC-3 — le refus liste TOUT ce qui manque, d’un coup",
135
+ "type": "automated",
136
+ "priority": "critical",
137
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-3",
138
+ "steps": [
139
+ {
140
+ "action": "valider une fiche vide",
141
+ "expected": "tous les manques en un message — corriger un manque pour en découvrir un autre fait abandonner"
142
+ }
143
+ ]
144
+ },
145
+ {
146
+ "ref": "T-KC-4",
147
+ "specRef": "SPEC-KC-01",
148
+ "title": "T-KC-4 — une erreur sans `consequence` est refusée",
149
+ "type": "automated",
150
+ "priority": "critical",
151
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-4",
152
+ "steps": [
153
+ {
154
+ "action": "erreur réduite à un titre",
155
+ "expected": "refus nommant l'index et le champ"
156
+ }
157
+ ]
158
+ },
159
+ {
160
+ "ref": "T-KC-4b",
161
+ "specRef": "SPEC-KC-01",
162
+ "title": "T-KC-4b — le VERDICT ne se décerne pas : `eprouve` exige un fait",
163
+ "type": "automated",
164
+ "priority": "critical",
165
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-4b",
166
+ "steps": [
167
+ {
168
+ "action": "verdict éprouvé sur une simple référence",
169
+ "expected": "refus ; une origine `incident` ou `terrain` l'autorise, une fiche `propose` entre librement"
170
+ }
171
+ ]
172
+ },
173
+ {
174
+ "ref": "T-KC-5",
175
+ "specRef": "SPEC-KC-03",
176
+ "title": "T-KC-5 — la projection est acceptée par `parseDevtestPlan` de @mostajs/qa-engine",
177
+ "type": "automated",
178
+ "priority": "critical",
179
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-5",
180
+ "steps": [
181
+ {
182
+ "action": "projeter le corpus et le soumettre au parseur officiel",
183
+ "expected": "`ok: true` — le seul juge qui compte est celui de qatrax"
184
+ }
185
+ ]
186
+ },
187
+ {
188
+ "ref": "T-KC-6",
189
+ "specRef": "SPEC-KC-03",
190
+ "title": "T-KC-6 — chaque épreuve de la fiche devient un essai relié à son exigence",
191
+ "type": "automated",
192
+ "priority": "critical",
193
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-6",
194
+ "steps": [
195
+ {
196
+ "action": "projeter une fiche à deux épreuves",
197
+ "expected": "deux essais reliés, et l'exigence porte les erreurs connues avec leur conséquence"
198
+ }
199
+ ]
200
+ },
201
+ {
202
+ "ref": "T-KC-7",
203
+ "specRef": "SPEC-KC-03",
204
+ "title": "T-KC-7 — le préfixe d’application ISOLE les références",
205
+ "type": "automated",
206
+ "priority": "critical",
207
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-7",
208
+ "steps": [
209
+ {
210
+ "action": "projeter la même fiche pour deux applications",
211
+ "expected": "aucune collision — sinon leurs plans se marcheraient dessus dans le même qatrax"
212
+ }
213
+ ]
214
+ },
215
+ {
216
+ "ref": "T-KC-7b",
217
+ "specRef": "SPEC-KC-03",
218
+ "title": "T-KC-7b — une fiche seulement `propose` n’apparaît pas comme VÉRIFIÉE",
219
+ "type": "automated",
220
+ "priority": "critical",
221
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-7b",
222
+ "steps": [
223
+ {
224
+ "action": "projeter une fiche proposée",
225
+ "expected": "statut `draft` — sinon le suivi annonce une exigence tenue qui ne l'est pas"
226
+ }
227
+ ]
228
+ },
229
+ {
230
+ "ref": "T-KC-8",
231
+ "specRef": "SPEC-KC-04",
232
+ "title": "T-KC-8 — instancier SANS rien affiner est permis, et se voit",
233
+ "type": "automated",
234
+ "priority": "critical",
235
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-8",
236
+ "steps": [
237
+ {
238
+ "action": "instancier tel quel",
239
+ "expected": "aucun affinage, et la version de la fiche est portée"
240
+ }
241
+ ]
242
+ },
243
+ {
244
+ "ref": "T-KC-9",
245
+ "specRef": "SPEC-KC-04",
246
+ "title": "T-KC-9 — un affinage sans motif, ou hors des champs affinables, est REFUSÉ",
247
+ "type": "automated",
248
+ "priority": "critical",
249
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-9",
250
+ "steps": [
251
+ {
252
+ "action": "affiner sans motif, puis un champ non affinable",
253
+ "expected": "refus des deux — sinon « réutiliser » se dégrade en « recopier »"
254
+ }
255
+ ]
256
+ },
257
+ {
258
+ "ref": "T-KC-9b",
259
+ "specRef": "SPEC-KC-04",
260
+ "title": "T-KC-9b — un affinage qui CASSE la fiche est refusé",
261
+ "type": "automated",
262
+ "priority": "critical",
263
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-9b",
264
+ "steps": [
265
+ {
266
+ "action": "vider les erreurs par affinage",
267
+ "expected": "refus — on n'affine pas jusqu'à vider l'exigence"
268
+ }
269
+ ]
270
+ },
271
+ {
272
+ "ref": "T-KC-9c",
273
+ "specRef": "SPEC-KC-04",
274
+ "title": "T-KC-9c — l’index inverse dit QUI emploie une fiche, et ce que chacun a affiné",
275
+ "type": "automated",
276
+ "priority": "critical",
277
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-9c",
278
+ "steps": [
279
+ {
280
+ "action": "deux instances dont une affinée",
281
+ "expected": "les deux applications et l'affinage sont rendus"
282
+ }
283
+ ]
284
+ },
285
+ {
286
+ "ref": "T-KC-10",
287
+ "specRef": "SPEC-KC-05",
288
+ "title": "T-KC-10 — deux fiches ne peuvent pas partager une `ref`",
289
+ "type": "automated",
290
+ "priority": "critical",
291
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-10",
292
+ "steps": [
293
+ {
294
+ "action": "corpus avec doublon",
295
+ "expected": "reproche nommant la référence"
296
+ }
297
+ ]
298
+ },
299
+ {
300
+ "ref": "T-KC-11",
301
+ "specRef": "SPEC-KC-05",
302
+ "title": "T-KC-11 — un verdict inconnu est refusé ; `ecarte` exige son MOTIF et RESTE au catalogue",
303
+ "type": "automated",
304
+ "priority": "critical",
305
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-11",
306
+ "steps": [
307
+ {
308
+ "action": "verdict fantaisiste, puis écarté sans motif, puis avec",
309
+ "expected": "refus, refus, puis conservation — une fiche écartée qui disparaît sera réinventée"
310
+ }
311
+ ]
312
+ },
313
+ {
314
+ "ref": "T-KC-11b",
315
+ "specRef": "SPEC-KC-05",
316
+ "title": "T-KC-11b — un domaine non déclaré est refusé",
317
+ "type": "automated",
318
+ "priority": "critical",
319
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-11b",
320
+ "steps": [
321
+ {
322
+ "action": "domaine hors liste",
323
+ "expected": "refus — un domaine non déclaré échappe à la revue et fragmente le corpus en synonymes"
324
+ }
325
+ ]
326
+ },
327
+ {
328
+ "ref": "T-KC-12",
329
+ "specRef": "SPEC-KC-06",
330
+ "title": "T-KC-12 — le module n’écrit RIEN et n’appelle AUCUN solveur",
331
+ "type": "automated",
332
+ "priority": "critical",
333
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-KC-12",
334
+ "steps": [
335
+ {
336
+ "action": "exercer toute la surface avec un dépôt piégé, puis relire les sources",
337
+ "expected": "aucune touche, aucune I/O hors du chargement du corpus"
338
+ }
339
+ ]
340
+ },
341
+ {
342
+ "ref": "T-CORP-1",
343
+ "specRef": "SPEC-KC-07",
344
+ "title": "T-CORP-1 — chaque fiche du corpus passe la validation",
345
+ "type": "automated",
346
+ "priority": "critical",
347
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-CORP-1",
348
+ "steps": [
349
+ {
350
+ "action": "auditer le corpus",
351
+ "expected": "aucun reproche"
352
+ }
353
+ ]
354
+ },
355
+ {
356
+ "ref": "T-CORP-2",
357
+ "specRef": "SPEC-KC-07",
358
+ "title": "T-CORP-2 — toute fiche ÉPROUVÉE porte un fait, pas une idée",
359
+ "type": "automated",
360
+ "priority": "critical",
361
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-CORP-2",
362
+ "steps": [
363
+ {
364
+ "action": "relire les origines des fiches éprouvées",
365
+ "expected": "au moins un `incident` ou `terrain` — ATT&CK ne consigne que l'observé"
366
+ }
367
+ ]
368
+ },
369
+ {
370
+ "ref": "T-CORP-3",
371
+ "specRef": "SPEC-KC-07",
372
+ "title": "T-CORP-3 — le corpus entier se projette en un plan valide",
373
+ "type": "automated",
374
+ "priority": "critical",
375
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-CORP-3",
376
+ "steps": [
377
+ {
378
+ "action": "projeter tout le corpus",
379
+ "expected": "plan accepté par le parseur officiel"
380
+ }
381
+ ]
382
+ },
383
+ {
384
+ "ref": "T-CORP-4",
385
+ "specRef": "SPEC-KC-07",
386
+ "title": "T-CORP-4 — le corpus couvre les domaines annoncés, et son état est LISIBLE",
387
+ "type": "automated",
388
+ "priority": "critical",
389
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-CORP-4",
390
+ "steps": [
391
+ {
392
+ "action": "statistiques du corpus",
393
+ "expected": "chaque domaine annoncé est peuplé ; le taux éprouvé est rendu, ni 0 ni 100 %"
394
+ }
395
+ ]
396
+ },
397
+ {
398
+ "ref": "T-CORP-5",
399
+ "specRef": "SPEC-KC-07",
400
+ "type": "automated",
401
+ "priority": "critical",
402
+ "title": "T-CORP-5 — une fiche rencontrée dans PLUSIEURS projets porte plusieurs origines",
403
+ "autoRef": "test-scripts/unit/catalogue.test.mjs::T-CORP-5",
404
+ "steps": [
405
+ {
406
+ "action": "relire les origines de KIND-PERIMETRE-01",
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
+ }
409
+ ]
410
+ }
411
+ ]
412
+ }
@@ -0,0 +1,207 @@
1
+ # État de l'art — catalogues d'exigences réutilisables
2
+
3
+ **Livrable #1** (DEVRULES §9) · **Auteur** : Dr Hamid MADANI <drmdh@msn.com> · **Date** : 2026-09-02
4
+ **Sujet** : `@mostajs/kind-catalog`
5
+
6
+ > ⚠️ **Sources à vérifier avant publication.** Cette étude est écrite hors ligne : les références
7
+ > sont données par titre, auteur et année, sans URL ni numéro de page. Le livrable #9 (publication)
8
+ > exige leur vérification. Aucune n'est citée pour un chiffre précis.
9
+
10
+ ---
11
+
12
+ ## 1 · Vertical — par système : comment le monde catalogue une exigence
13
+
14
+ ### 1.1 · Les patrons d'exigences
15
+
16
+ **Stephen Withall, *Software Requirement Patterns*** (Microsoft Press, 2007) est l'ancêtre direct
17
+ de ce que nous construisons : un **catalogue de patrons d'exigence** réutilisables, chacun avec un
18
+ gabarit, des exemples, et des « considérations » — c'est-à-dire les pièges. Le livre organise ses
19
+ patrons par domaine (données, performances, accès…).
20
+
21
+ **Ce qu'il apporte** : la preuve qu'une exigence se catalogue et se réemploie.
22
+ **Ce qui lui manque pour nous** : le catalogue est un **livre** — il ne se projette dans aucun
23
+ outil, ne s'instancie pas, et rien ne trace qui l'a repris.
24
+
25
+ ### 1.2 · La syntaxe contrainte — EARS
26
+
27
+ **EARS** (*Easy Approach to Requirements Syntax*, Mavin et al., Rolls-Royce, 2009) impose cinq
28
+ formes de phrase (ubiquitaire, événementielle, d'état, optionnelle, indésirable). Adopté largement
29
+ en aéronautique et automobile.
30
+
31
+ **Ce qu'il apporte** : une exigence ambiguë est un défaut, et la forme réduit l'ambiguïté.
32
+ **Ce qui lui manque** : EARS contraint l'**énoncé** et rien d'autre — ni épreuve, ni mode de
33
+ défaillance, ni réemploi.
34
+
35
+ ### 1.3 · Les normes de spécification
36
+
37
+ **ISO/IEC/IEEE 29148** (ingénierie des exigences) fixe le contenu d'une spécification et les
38
+ attributs d'une exigence (identifiant, priorité, vérifiabilité, traçabilité).
39
+ **ISO/IEC/IEEE 29119** fait de même pour la documentation de test.
40
+
41
+ **Ce qu'elles apportent** : l'attribut **vérifiabilité** — une exigence non vérifiable n'en est pas
42
+ une. C'est exactement notre champ `test`.
43
+ **Ce qui leur manque** : elles normalisent la **forme d'un document**, pas un **corpus partagé**.
44
+
45
+ ### 1.4 · Les catalogues d'erreurs connues — le modèle le plus proche
46
+
47
+ | catalogue | ce qu'il range | ce qu'il prouve |
48
+ |---|---|---|
49
+ | **CWE** (MITRE) | des **faiblesses** logicielles, chacune avec conséquence et détection | un catalogue de façons de se tromper est réutilisable **mondialement** |
50
+ | **CAPEC** (MITRE) | des schémas d'attaque | la même chose, côté attaquant |
51
+ | **ATT&CK** (MITRE) | tactiques et techniques observées | un catalogue **vit** s'il est nourri par des faits, pas par des suppositions |
52
+ | **OWASP Top 10** | les dix risques les plus répandus | un catalogue **court** est plus lu qu'un catalogue exhaustif |
53
+
54
+ **C'est le modèle du champ `erreurs`** — et il enseigne trois choses : chaque entrée porte sa
55
+ **conséquence** (pas seulement son nom), le catalogue est **nourri par des incidents réels**, et
56
+ la brièveté fait la lecture.
57
+
58
+ ### 1.5 · Les décisions d'architecture — ADR
59
+
60
+ **Michael Nygard, *Documenting Architecture Decisions*** (2011) : un fichier court par décision —
61
+ contexte, décision, conséquences — **versionné avec le code**.
62
+
63
+ **Ce qu'il apporte** : la démonstration que le bon support d'un document qui se **relit** est un
64
+ **fichier versionné**, pas une base de données. C'est l'argument central de notre §3 (stockage).
65
+
66
+ ### 1.6 · Les catalogues de problèmes de recherche opérationnelle
67
+
68
+ **OR-Library** (Beasley), **MIPLIB**, **DIMACS**, **TSPLIB** : des jeux d'épreuve catalogués
69
+ auxquels tout nouveau solveur se confronte.
70
+
71
+ **Ce qu'ils apportent** : un catalogue **d'épreuves** est ce qui rend deux implémentations
72
+ comparables. Sans lui, chaque équipe déclare que son solveur est bon sur ses propres données.
73
+
74
+ ---
75
+
76
+ ## 2 · Horizontal — par usage : la même logique dans d'autres métiers
77
+
78
+ | métier | l'objet catalogué | l'enseignement pour nous |
79
+ |---|---|---|
80
+ | **Sécurité applicative** | CWE, OWASP | les erreurs se cataloguent, avec leur conséquence |
81
+ | **Aéronautique** (ARP4761) | modes de défaillance | on **part** d'une liste connue, on ne la réinvente pas |
82
+ | **Médical** (ISO 14971) | risques et mesures de maîtrise | la maîtrise est tracée jusqu'à l'épreuve |
83
+ | **Agronomie** | itinéraires techniques par culture et par terroir | **réutiliser ou affiner** : la fiche nationale est adaptée localement, et l'écart est ce qui fait progresser la fiche |
84
+ | **Électronique** | *design rules* et *application notes* du fondeur | des contraintes réutilisables, avec leurs pièges, **par technologie** |
85
+ | **BTP** | DTU, CCTG/CCTP, Eurocodes | une clause type que chaque marché reprend et **amende par dérogation écrite** |
86
+ | **Alimentaire** | **HACCP** : dangers, points critiques, limites, surveillance, actions correctives | le catalogue de dangers **le plus proche de notre champ `erreurs`** — chaque danger porte sa conséquence et sa mesure |
87
+ | **Élevage** | plans de rationnement, protocoles de prophylaxie, schémas d'allotement | des fiches nationales **adaptées au troupeau**, avec l'écart relevé — comme l'itinéraire agronomique |
88
+ | **Apiculture** | guides de bonnes pratiques, calendriers de miellées par région | le catalogue y est **le savoir de l'ancien** : quelques observations par an, transmises comme règles — c'est le cas où le catalogue vaut PLUS que la donnée |
89
+ | **IA / apprentissage** | Case-Based Reasoning (Aamodt & Plaza, 1994) | la mémoire par cas : retrouver, réutiliser, **réviser**, retenir — le cycle **exactement** demandé |
90
+ | **Sélection d'algorithme** | Rice (1976), portfolios type SATzilla | choisir le moteur d'après la **signature** du problème, pas d'après l'habitude |
91
+
92
+ ---
93
+
94
+ ## 3 · Ce qui n'existe nulle part
95
+
96
+ Chacun de ces corpus catalogue **une seule** des faces :
97
+
98
+ - Withall catalogue l'**exigence**, sans son épreuve ni ses erreurs ;
99
+ - CWE catalogue les **erreurs**, sans l'exigence qui les rendrait inutiles ;
100
+ - OR-Library catalogue les **épreuves**, sans le métier qui les motive ;
101
+ - ADR catalogue les **décisions**, sans réemploi entre projets ;
102
+ - CBR catalogue les **cas résolus**, sans dire si la question méritait d'être posée.
103
+
104
+ **Aucun ne porte les cinq ensemble, et aucun ne se projette dans l'outil de suivi du projet.**
105
+
106
+ C'est l'écart que `kind-catalog` occupe : une fiche qui tient l'**énoncé**, ses **besoins**, son
107
+ **épreuve**, ses **critères de succès** et ses **erreurs connues**, et qui se **projette** en
108
+ `mostajs-devtest/1` pour que qatrax la lise sans rien apprendre de nouveau.
109
+
110
+ ---
111
+
112
+ ## 3.bis · COMMENT ILS S'Y PRENNENT, concrètement
113
+
114
+ L'important n'est pas qui catalogue, mais **par quel mécanisme** — c'est là que se prennent les
115
+ décisions que nous devons prendre aussi.
116
+
117
+ ### a) La forme de l'entrée : un GABARIT À TROUS, jamais du texte libre
118
+
119
+ | corpus | les cases de l'entrée |
120
+ |---|---|
121
+ | **CWE** | identifiant · description · **conséquences** · exemples de code · détection · mitigations · relations (parent/enfant) |
122
+ | **Withall** | identifiant · description · **considérations** (les pièges) · gabarit d'énoncé · exemples · exigences liées |
123
+ | **ADR** | contexte · décision · statut · **conséquences** |
124
+ | **Model cards** | usage prévu · **usages hors périmètre** · métriques · **limites** |
125
+
126
+ | **HACCP** (alimentaire) | danger · **gravité et probabilité** · point critique · **limite critique** · surveillance · **action corrective** · vérification |
127
+
128
+ **Le point commun** : toutes réservent une case aux **conséquences** ou aux **limites**. Aucune ne
129
+ se contente de décrire ce qui marche. HACCP va plus loin encore — il exige, pour chaque danger,
130
+ **ce qu'on fait quand la limite est franchie** : c'est un catalogue d'erreurs **actionnable**. C'est ce qui justifie que `erreurs` soit **exigé** chez nous,
131
+ et que chaque erreur porte sa conséquence.
132
+
133
+ ### b) L'identité : un identifiant STABLE et opaque, jamais un titre
134
+
135
+ `CWE-79`, `T1059` (ATT&CK), `A01:2021` (OWASP). Le titre change, l'identifiant non — c'est ce qui
136
+ permet à mille projets de citer la même chose pendant dix ans. D'où notre `ref: 'KIND-…'`, stable
137
+ et distincte de l'énoncé.
138
+
139
+ ### c) Les relations : un GRAPHE, pas une liste plate
140
+
141
+ CWE relie ses entrées (`ChildOf`, `CanPrecede`) ; ATT&CK relie techniques et sous-techniques ;
142
+ Withall relie ses patrons. **Ce que cela évite** : la duplication. Une entrée trop proche d'une
143
+ autre devient un enfant, au lieu d'un doublon qui divergera.
144
+
145
+ > Nous ne le faisons **pas en 0.1.0** — un graphe sur cinq fiches est une complication sans
146
+ > bénéfice. Le champ `origine` en tient lieu, et la question se rouvre au-delà de quinze fiches.
147
+
148
+ ### d) L'alimentation : par INCIDENTS, jamais par idées
149
+
150
+ ATT&CK ne consigne que des techniques **observées** ; CWE naît de vulnérabilités **réelles** ;
151
+ OR-Library de problèmes **posés**. Un catalogue nourri d'idées grossit vite et ne sert jamais.
152
+
153
+ **C'est la règle la plus importante que nous reprenons** : les cinq fiches de la 0.1.0 sont toutes
154
+ tirées d'un défaut **trouvé en recette**, avec la date et le fichier.
155
+
156
+ ### e) La brièveté : le corpus court est lu, l'exhaustif est consulté par personne
157
+
158
+ CWE compte plus de mille entrées — et ce que les équipes lisent, c'est **l'OWASP Top 10**. Les
159
+ grands catalogues finissent par produire des **vues courtes** (Top 10, Top 25) parce que
160
+ l'exhaustivité tue la lecture.
161
+
162
+ ### f) La projection dans l'outillage : le catalogue n'est utile que branché
163
+
164
+ C'est là que la plupart s'arrêtent — et c'est notre écart. CWE est branché aux scanners ; Withall
165
+ ne l'est à rien, et c'est pourquoi son catalogue est resté un livre. **Une fiche qui ne descend pas
166
+ dans le plan de test du projet ne sera pas appliquée**, quelle que soit sa qualité.
167
+
168
+ ### g) Le réemploi : instancier avec ÉCART TRACÉ
169
+
170
+ - **Agronomie** : l'itinéraire technique national est **adapté** au terroir, et l'écart est relevé
171
+ — c'est l'écart qui fait progresser la fiche l'année suivante.
172
+ - **Bâtiment** : le DTU est repris par le marché, qui **amende** par clause dérogatoire — la
173
+ dérogation est écrite, jamais implicite.
174
+ - **CBR** (Aamodt & Plaza) : retrouver → réutiliser → **réviser** → retenir. La révision est une
175
+ **étape du cycle**, pas un accident.
176
+
177
+ **Les trois disent la même chose** : ce qui fait vivre un catalogue, ce n'est pas la réutilisation
178
+ à l'identique — c'est **l'écart tracé**. D'où `instantiate(…, { affine })` et `diffInstance()`.
179
+
180
+ ---
181
+
182
+ ## 4 · Veille — ce qui bouge
183
+
184
+ - Les **agents de codage** popularisent les *skills* et les *rules files* : des fiches de consigne
185
+ réutilisables, versionnées, chargées à la demande. C'est la même intuition que celle formulée
186
+ le 02/09/2026 — *« à l'image des skills déjà implémentés »* — et l'écosystème en porte déjà une
187
+ implémentation, `@mostajs/skill-library`.
188
+ - Les **cartes de modèle** (*model cards*) et **fiches de données** (*datasheets for datasets*)
189
+ imposent depuis 2018-2019 de documenter usage prévu, limites et modes de défaillance. La forme
190
+ demandée pour un `kind` en est proche parente.
191
+
192
+ ## 5 · Conclusion — ce que nous reprenons, ce que nous refusons
193
+
194
+ | nous reprenons | de qui | pourquoi |
195
+ |---|---|---|
196
+ | le **patron** d'exigence réutilisable | Withall | c'est la brique |
197
+ | la **conséquence** attachée à chaque erreur | CWE/OWASP | un avertissement sans conséquence ne se retient pas |
198
+ | la **vérifiabilité** obligatoire | ISO 29148 | une exigence sans épreuve n'en est pas une |
199
+ | le **fichier versionné** comme support | ADR | un document qui se relit ne va pas en base |
200
+ | le cycle **réutiliser / réviser** | CBR | c'est le geste demandé |
201
+
202
+ | nous refusons | pourquoi |
203
+ |---|---|
204
+ | une **syntaxe contrainte** à la EARS | elle contraindrait l'énoncé sans rien apporter à l'épreuve ni aux erreurs — et elle rebuterait l'écriture, donc le catalogue resterait vide |
205
+ | un **format propre** au catalogue | qatrax devrait l'apprendre ; le jour où les deux divergent, le catalogue aurait raison contre les faits |
206
+ | une **base de données** pour les fiches | elles se relisent et se discutent : leur historique est celui d'un fichier |
207
+ | un catalogue **exhaustif** d'emblée | OWASP l'enseigne : un catalogue court est lu, un catalogue exhaustif est consulté par personne |