@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
package/CHANGELOG.md ADDED
@@ -0,0 +1,136 @@
1
+ # @mostajs/kind-catalog — Journal des versions
2
+
3
+ **Auteur** : Dr Hamid MADANI <drmdh@msn.com>
4
+
5
+ ## Non publié — 2026-09-02 (soir) · le corpus double par EXPLORATION du parc
6
+
7
+ Sept applications du parc ont été relues — CRM/TRADING, LabTrax, CollabTrax, LabTraxAdmin, SofTrax,
8
+ analytics, qatrax — en croisant leurs **plans DEVTEST** sur les motifs du catalogue.
9
+
10
+ ### Le corpus
11
+
12
+ | | avant | après |
13
+ |---|---|---|
14
+ | fiches | 12 | **19** |
15
+ | éprouvées | 6 (50 %) | **13 (68 %)** |
16
+ | erreurs cataloguées | 39 | **76** |
17
+ | domaines | 10 | **11** (`integration`) |
18
+
19
+ ### Sept fiches nouvelles, toutes issues d'incidents
20
+
21
+ `KIND-ECRITURE-GARDEE-01` · `KIND-SORTIE-GENEREE-01` · `KIND-ECHEC-FOURNISSEUR-01` (CRM/TRADING) —
22
+ `KIND-SUPPRESSION-DATEE-01` · `KIND-CHIFFRE-SANS-SOURCE-01` · `KIND-REFUS-LISIBLE-01` ·
23
+ `KIND-DEPENDANCE-DISTANTE-01` (LabTrax, CollabTrax, SofTrax, qatrax).
24
+
25
+ **Chacune est portée par deux à trois projets indépendants.** Aucune fiche n'a été créée sur un
26
+ motif vu une seule fois : celles-là attendent un second projet.
27
+
28
+ ### Ce que l'exploration a démontré, et qui vaut plus que le compte
29
+
30
+ **`KIND-PERIMETRE-01` atteint TROIS projets indépendants** — ATC, CRM/TRADING, LabTrax — qui ont
31
+ tous écrit la même règle sans se consulter. `T-CORP-5` porte la barre à trois, **parce que le fait
32
+ existe** : elle ne monte jamais par anticipation.
33
+
34
+ **CollabTrax avait déjà inventé le quatrième état** que le plan d'`assistant-pilote` présentait
35
+ comme une évolution à faire : *« trois états et trois seulement — non branché / branché sans
36
+ données / branché réel »*. Le même besoin, résolu deux fois, sans que les deux se parlent. C'est
37
+ exactement ce que le catalogue existe pour empêcher, et sa première démonstration.
38
+
39
+ **La « pierre tombale » était écrite trois fois** — LabTrax, qatrax, `assistant-pilote`.
40
+
41
+ ### Une TENSION portée par une fiche, plutôt que tranchée
42
+
43
+ `KIND-REFUS-LISIBLE-01` tient deux exigences contraires, toutes deux vraies :
44
+
45
+ - LabTrax : *« DIRE LA VRAIE RAISON D'UN REFUS, et offrir une issue »* ;
46
+ - ATC : le refus ne doit **ni nommer** l'élève **ni citer** son identifiant — le confirmer
47
+ renseigne déjà.
48
+
49
+ La fiche ne tranche pas : elle énonce la règle **et** son exception, avec la conséquence de chaque
50
+ côté. Une fiche qui aurait choisi sans le dire aurait été pire qu'aucune fiche.
51
+
52
+ ### Deux fiches de plus — et une erreur de comptage corrigée
53
+
54
+ `KIND-FORMULAIRE-ROUTE-01` et `KIND-CONSIGNER-APRES-SUCCES-01` avaient d'abord été écartées comme
55
+ « un seul projet ». **C'était faux, et la vérification l'a montré** : les deux en portent deux.
56
+
57
+ - *le formulaire rendu doit être accepté par sa route* → **LabTrax** (exigence) **+ ATC**
58
+ (l'écran de notation appelait `noter()` avec la seule séance ; le certificat répondait « aucun
59
+ niveau atteint » douze écrans plus loin) ;
60
+ - *ne dater, numéroter et annoncer qu'après le succès* → **LabTrax** (exigence) **+ ATC**, deux
61
+ fois : le numéro de certificat non attendu qui valait `{}`, puis un certificat annoncé
62
+ (`CERT-2026-0001`) qui n'avait jamais été persisté.
63
+
64
+ **La règle n'a pas été assouplie : le comptage était mauvais.** C'est précisément l'écart entre
65
+ « je crois que c'est isolé » et « je l'ai vérifié » que le champ `origine` sert à fermer.
66
+
67
+ ### Ce qui reste ÉCARTÉ
68
+
69
+ « Avertir avant de dépouiller », « n'afficher que ce que l'on peut faire », « aucune permission
70
+ orpheline » — un seul projet chacun, vérifié cette fois. Ils attendent. Convertir tous les motifs
71
+ aurait dilué le corpus : c'est la leçon d'OWASP, inscrite au plan (#3, risques).
72
+
73
+ ### Le corpus, au terme de l'exploration
74
+
75
+ **21 fiches · 15 éprouvées (71 %) · 84 erreurs cataloguées · 35 incidents · 11 domaines.**
76
+
77
+ ## 0.1.0 — 2026-09-02
78
+
79
+ Premier jet. Livrables DEVRULES §9 produits **avant** le code : étape inaugurale (§⓪, 5 questions),
80
+ #1 état de l'art, #2 audit de l'existant (cas C), #3 plan de développement, #3.bis image de
81
+ l'OBJECTIF, #4 plan de test.
82
+
83
+ ### La fiche
84
+
85
+ `enonce`, `besoins`, `utilisation`, `succes`, `erreurs`, `test`, `verdict`, `origine`.
86
+ **Seuls `enonce`, `succes`, `erreurs` et `origine` sont requis** — ce sont ceux qu'on omet, et ceux
87
+ qui servent. Chaque erreur porte sa **conséquence** : « ne pas oublier le périmètre » ne se retient
88
+ pas ; « sans lui, tout parent lit le dossier de tous » se retient.
89
+
90
+ ### La provenance — la règle qui remplit le catalogue au lieu de le vider
91
+
92
+ Une première formulation disait « aucune fiche avant un cas réel ». Elle aurait produit un
93
+ catalogue vide dans tous les métiers où le savoir existe pourtant depuis des décennies.
94
+
95
+ La règle réelle est ailleurs : **toute fiche déclare d'où elle vient**, et c'est le **verdict** qui
96
+ dit ce qu'elle a traversé. Une `reference` — norme, guide de bonnes pratiques, problème classique —
97
+ suffit à entrer au catalogue en `propose`. Se dire `eprouve` exige un `incident` ou un `terrain`.
98
+ **La contrainte porte sur le galon, jamais sur l'entrée.**
99
+
100
+ ### La projection — aucun format nouveau
101
+
102
+ `toDevtest()` produit du `mostajs-devtest/1`, et l'essai le soumet au **parseur officiel** de
103
+ `@mostajs/qa-engine`. C'est le seul juge qui compte : une vérification maison prouverait seulement
104
+ que nous sommes d'accord avec nous-mêmes.
105
+
106
+ L'exigence projetée **porte les erreurs connues** : qui la lit dans qatrax reçoit aussi ce qui a
107
+ mal tourné ailleurs. C'est là que le catalogue devient utile — CWE est branché aux scanners et
108
+ s'applique ; le catalogue de patrons d'exigences de Withall n'est branché à rien et est resté un
109
+ livre.
110
+
111
+ ### L'affinage tracé
112
+
113
+ `instantiate()` **refuse** un affinage sans motif. Sans lui, « réutiliser » se dégrade en
114
+ « recopier », et l'on revient à des plans qui se ressemblent sans jamais se parler. `emplois()`
115
+ donne l'index inverse : qui emploie quoi, et ce que chacun a dû changer.
116
+
117
+ ### Le corpus initial — 12 fiches, 39 erreurs cataloguées, 10 domaines
118
+
119
+ **6 éprouvées** (50 %), toutes tirées de défauts **constatés** cette semaine avec leur date et leur
120
+ fichier : périmètre pris pour capacité, écriture hors schéma, mise à jour partielle par `undefined`,
121
+ acquis effacé par consultation, écriture hors application sur stockage à image mémoire, calcul sur
122
+ données insuffisantes.
123
+
124
+ **6 proposées**, tirées de corpus établis : formulation au moindre coût (problème du régime,
125
+ Stigler 1945), transhumance apicole, ordonnancement de chantier sous ressources, traçabilité de lot
126
+ (HACCP), rotation culturale, diagnostic séquentiel de panne.
127
+
128
+ Deux enseignements que les domaines métier ont imposés, et qu'aucun domaine transverse n'aurait
129
+ donnés :
130
+
131
+ - **le seuil de données insuffisantes s'exprime en CYCLES, jamais en jours** — deux saisons font
132
+ deux semaines en restauration, deux ans en grande culture, et quelques jours par an en apiculture ;
133
+ - **BTP et électronique posent leurs questions là où le module ne tourne pas** (chantier, embarqué),
134
+ d'où le champ `seProsePose`.
135
+
136
+ Suite : **21 essais verts**, plan DEVTEST valide, trois trous qatrax à zéro.
package/README.md ADDED
@@ -0,0 +1,103 @@
1
+ # @mostajs/kind-catalog
2
+
3
+ **Auteur** : Dr Hamid MADANI <drmdh@msn.com> · AGPL-3.0-or-later · couche **N1**
4
+
5
+ Un **catalogue de fiches d'exigence réutilisables**, qui se **projette** dans le plan de test du
6
+ projet. Chaque fiche porte la question d'un métier, ses critères de succès, **ses erreurs connues
7
+ avec leur conséquence**, et ses épreuves.
8
+
9
+ **Le module n'exécute rien et ne stocke rien.** Il décrit, valide et projette.
10
+
11
+ ```bash
12
+ npm i @mostajs/kind-catalog
13
+ ```
14
+
15
+ ## Pourquoi
16
+
17
+ Un défaut coûte deux fois : la première pour le trouver, la seconde pour le **retrouver** dans le
18
+ projet suivant. La sécurité applicative a réglé cela il y a vingt ans avec CWE — un catalogue
19
+ d'erreurs connues, chacune portant **sa conséquence**, nourri par des faits, et **branché aux
20
+ outils**. L'ingénierie des exigences n'avait pas son équivalent : le meilleur catalogue de patrons
21
+ d'exigences existant n'est branché à rien, et il est resté un livre.
22
+
23
+ > **Une fiche qui ne descend pas dans le plan de test du projet ne sera pas appliquée**, quelle que
24
+ > soit sa qualité.
25
+
26
+ ## En trente lignes
27
+
28
+ ```js
29
+ import { defineKind, loadCatalogue, toDevtest, instantiate, statsCatalogue } from '@mostajs/kind-catalog';
30
+
31
+ // 1 · écrire une fiche
32
+ export default defineKind({
33
+ ref: 'KIND-PERIMETRE-01',
34
+ domaine: 'acces',
35
+ enonce: 'Une permission ouvre une CAPACITÉ, jamais un PÉRIMÈTRE.',
36
+ succes: ['le porteur agit sur les instances qui lui reviennent'], // REQUIS
37
+ erreurs: [{ // REQUIS
38
+ titre: 'la capacité est prise pour le périmètre',
39
+ consequence: 'un parent lit le dossier d’un autre enfant — mêmes droits, rien d’anormal à l’écran',
40
+ }],
41
+ test: [{ action: 'agir sur l’instance d’un autre', attendu: 'refus, sans nommer l’instance' }],
42
+ verdict: 'eprouve',
43
+ origine: [{ type: 'incident', source: 'ATC — presence.mjs, portail.mjs', date: '2026-09-01' }], // REQUIS
44
+ });
45
+
46
+ // 2 · la projeter vers l'outil de suivi — AUCUN format nouveau
47
+ const kinds = await loadCatalogue('./node_modules/@mostajs/kind-catalog/kinds');
48
+ const plan = toDevtest(kinds, { project: { key: 'atc', name: 'ATC' }, prefix: 'ATC' });
49
+ // → { plan: 'mostajs-devtest/1', specs[], realisations[], tests[] } lu par @mostajs/qa-engine
50
+
51
+ // 3 · la reprendre, telle quelle ou AFFINÉE — l'écart est tracé
52
+ instantiate(kinds[0], { app: 'ATC', affine: {
53
+ succes: { valeur: [...], motif: 'le centre est soumis à un contrôle annuel' }, // MOTIF REQUIS
54
+ }});
55
+ ```
56
+
57
+ ## Ce qu'il garantit
58
+
59
+ | | |
60
+ |---|---|
61
+ | **`succes` et `erreurs` sont requis** | ce sont les champs qu'on omet, et ceux qui servent |
62
+ | **chaque erreur porte sa conséquence** | « ne pas oublier X » ne se retient pas ; « sans X, tout parent lit le dossier de tous » se retient |
63
+ | **on ne se décerne pas l'expérience** | `eprouve` exige une origine `incident` ou `terrain`. Une `reference` suffit pour entrer en `propose` — la contrainte porte sur le galon, jamais sur l'entrée |
64
+ | **un affinage sans motif est refusé** | sans lui, « réutiliser » se dégrade en « recopier » |
65
+ | **une fiche écartée reste** | avec son motif : celle qui disparaît sera réinventée |
66
+ | **aucun format nouveau** | la projection est validée par le parseur **officiel** de `@mostajs/qa-engine` |
67
+ | **il n'écrit rien** | vérifié contre un dépôt piégé (`T-KC-12`) |
68
+
69
+ ## Le corpus livré
70
+
71
+ **21 fiches · 15 éprouvées (71 %) · 84 erreurs cataloguées · 35 incidents · 11 domaines.**
72
+
73
+ Transverses — `acces` · `donnees` · `apprentissage` · `decision` · `integration` — toutes issues de
74
+ défauts **constatés en production**, avec leur date et leur fichier.
75
+
76
+ Métier — `btp` · `alimentaire` · `elevage` · `apiculture` · `agronomie` · `electronique` — adossées
77
+ aux corpus établis de chaque profession (HACCP, itinéraires techniques, problème du régime de
78
+ Stigler 1945, CPM/PERT), en `propose`.
79
+
80
+ > Nous affichons les deux colonnes. Un catalogue qui annoncerait 100 % d'éprouvé mentirait ; celui
81
+ > qui annoncerait 0 % ne vaudrait rien.
82
+
83
+ ## Où il s'arrête
84
+
85
+ | besoin | module |
86
+ |---|---|
87
+ | résoudre | [`@mostajs/ro-pla`](https://npmjs.com/package/@mostajs/ro-pla) — 23 dialectes, 12 familles |
88
+ | valider le plan projeté | [`@mostajs/qa-engine`](https://npmjs.com/package/@mostajs/qa-engine) |
89
+ | mémoriser l'efficacité et le retour d'usage | [`@mostajs/skill-library`](https://npmjs.com/package/@mostajs/skill-library) |
90
+ | activer une question sous condition de données | [`@mostajs/assistant-pilote`](https://npmjs.com/package/@mostajs/assistant-pilote) |
91
+ | **persister les fiches** | **personne** — ce sont des fichiers versionnés |
92
+
93
+ **Pourquoi pas une base ?** Une fiche est un document éditorial : elle se lit, se discute, se relit
94
+ six mois plus tard. Son historique est celui d'un fichier. Ce qui va en base, c'est ce que produit
95
+ son **usage** — et la fiche se relit quand le journal, lui, s'entasse.
96
+
97
+ ## Documentation
98
+
99
+ `docs/` porte les 17 livrables DEVRULES : état de l'art, audit, plan de développement, plan de test,
100
+ revue de sécurité, DPIA, matrice de sourcing, documents et présentations.
101
+
102
+ ⚠️ **Charger un corpus, c'est exécuter du code** : une fiche est un module JavaScript. Une fiche se
103
+ revoit **comme du code**, jamais comme un document — voir `docs/15-REVUE-SECURITE-KIND-CATALOG.md`.
@@ -0,0 +1,105 @@
1
+ # `@mostajs/kind-catalog` — Étape inaugurale (DEVRULES §⓪)
2
+
3
+ **Auteur** : Dr Hamid MADANI <drmdh@msn.com> · **Date** : 2026-09-02
4
+
5
+ > *Tant que ces 5 questions n'ont pas de réponse écrite, la spécification n'est pas réputée lue et
6
+ > aucun code métier ne démarre.* — DEVRULES §⓪.A
7
+
8
+ ---
9
+
10
+ ## ⓪.A · Les 5 questions
11
+
12
+ ### 1 · Quel est le problème métier exact ?
13
+
14
+ **Les exigences se réécrivent à chaque projet, et les erreurs se réapprennent à chaque projet.**
15
+
16
+ Constat mesuré dans cette seule session (01-02/09/2026), sur ATC et RestoTrax :
17
+
18
+ | défaut trouvé | où il vivait | est-il propre à l'application ? |
19
+ |---|---|---|
20
+ | une permission ouvrait une capacité, jamais un périmètre | ATC (3 écrans), RestoTrax | **non** — tout logiciel à rôles |
21
+ | une note enregistrée sans son niveau, découverte 12 écrans plus loin | ATC | **non** — toute chaîne écran → service |
22
+ | relire un acquis l'effaçait | `@mostajs/elearning` | **non** — toute progression |
23
+ | une écriture hors application, écrasée sans erreur (sqljs) | ATC | **non** — tout stockage à image mémoire |
24
+ | corriger un champ en écrasait un autre par `undefined` | `@mostajs/coaching` | **non** — toute mise à jour partielle |
25
+
26
+ Chacun a coûté une recette. Aucun n'était nouveau. **Rien ne les attendait dans le projet suivant.**
27
+
28
+ Le besoin est donc : **un catalogue de fiches d'exigence réutilisables**, portant la question, ce
29
+ qu'il faut pour y répondre, comment on l'éprouve, à quoi on reconnaît une bonne réponse, et
30
+ **surtout les façons connues de se tromper** — réutilisables ou affinables par toute application,
31
+ passée comme future, et **lisibles par qatrax**.
32
+
33
+ ### 2 · Quelles sont les meilleures solutions mondiales ?
34
+
35
+ Développé au livrable **#1** (`ETUDE-ETAT-ART-KIND-CATALOG-02092026.md`). En résumé : le domaine
36
+ existe et il est mûr — patrons d'exigences (Withall), syntaxe contrainte (EARS), norme de
37
+ spécification (ISO/IEC/IEEE 29148), catalogues d'erreurs connues (CWE, OWASP, ATT&CK), décisions
38
+ d'architecture (ADR), raisonnement à partir de cas (Aamodt & Plaza), sélection d'algorithme (Rice).
39
+ **Ce qui n'existe nulle part, c'est leur JOINTURE** : un catalogue qui porte à la fois l'exigence,
40
+ son épreuve et son mode de défaillance, et qui se PROJETTE dans l'outil de suivi.
41
+
42
+ ### 3 · Quels autres métiers utilisent déjà cette logique ?
43
+
44
+ - **Sécurité** : CWE/CAPEC/ATT&CK — des catalogues de **façons de se tromper**, avec conséquence,
45
+ réutilisés par tous les projets du monde. C'est le modèle le plus proche du champ `erreurs`.
46
+ - **Aéronautique et médical** : ARP4761, ISO 14971 — l'analyse de risque est **cataloguée**, pas
47
+ refaite ; on part d'une liste de modes de défaillance connus.
48
+ - **Recherche opérationnelle** : OR-Library, MIPLIB — des **jeux d'épreuve** catalogués auxquels
49
+ on confronte tout nouveau solveur.
50
+ - **Agronomie** : les itinéraires techniques sont des fiches réutilisées d'une parcelle à l'autre,
51
+ affinées localement — **exactement** le geste « réutiliser ou affiner » demandé.
52
+ - **Électronique** : les *application notes* et les *design rules* d'un fondeur sont un catalogue
53
+ de contraintes réutilisables, avec leurs pièges nommés.
54
+
55
+ ### 4 · Quels modules MostaJS couvrent déjà le besoin ?
56
+
57
+ Développé au livrable **#2**. Aucun ne le couvre ; deux le bordent :
58
+
59
+ | module | ce qu'il porte | frontière |
60
+ |---|---|---|
61
+ | `@mostajs/qa-engine` | le format `mostajs-devtest/1`, sa validation, son import | **plan d'une application**, pas catalogue partagé |
62
+ | `@mostajs/skill-library` | recettes de résolution, indice d'efficacité, retour humain | *comment bien résoudre*, pas *si la question mérite d'être posée* |
63
+ | `@mostajs/ro-pla` | 23 dialectes, 12 `kind` **techniques** | type de problème mathématique, pas exigence métier |
64
+
65
+ ### 5 · Quels sont les véritables écarts à développer ?
66
+
67
+ 1. La **fiche** elle-même : `enonce`, `besoins`, `utilisation`, `test`, `succes`, `erreurs`,
68
+ `efficacite`, `evaluation`, `verdict`.
69
+ 2. La **projection** vers `mostajs-devtest/1` — pour que qatrax lise sans rien apprendre.
70
+ 3. L'**instanciation tracée** — réutiliser ou affiner, en sachant qui a affiné quoi.
71
+
72
+ Tout le reste est **composé** : la conformité du plan projeté vient de `qa-engine`, l'efficacité et
73
+ le retour d'usage viennent de `skill-library`, les moteurs viennent de `ro-pla`.
74
+
75
+ ---
76
+
77
+ ## ⓪.1 · Décomposition en besoins précis
78
+
79
+ | # | Besoin précis | Cas | Couverture |
80
+ |---|---|---|---|
81
+ | B1 | Décrire une exigence réutilisable, indépendante d'une application | **C** | à créer |
82
+ | B2 | Refuser une fiche inutilisable (sans critère de succès, sans erreur connue) | **C** | à créer |
83
+ | B3 | Projeter une fiche en exigences + essais lisibles par qatrax | **A** | `@mostajs/qa-engine` (`./devtest`) — on produit sa forme, il la valide |
84
+ | B4 | Instancier une fiche dans une application, en traçant l'affinage | **C** | à créer |
85
+ | B5 | Savoir quelles applications emploient une fiche | **C** | à créer (dérivé de B4) |
86
+ | B6 | Mémoriser l'efficacité d'une résolution et le retour d'usage | **A** | `@mostajs/skill-library` |
87
+ | B7 | Choisir le moteur qui répond à une question | **A** | `@mostajs/ro-pla` (`pickBest`) |
88
+ | B8 | Activer une question sous condition de données | **A** | `@mostajs/assistant-pilote` |
89
+ | B9 | Persister les fiches | — | **hors périmètre** : ce sont des fichiers versionnés (cf. #3) |
90
+
91
+ ## ⓪.2 · Modules existants réutilisables (cas A/B)
92
+
93
+ `qa-engine` (B3) · `skill-library` (B6) · `ro-pla` (B7) · `assistant-pilote` (B8). **Aucun n'est
94
+ étendu** : tous sont composés en l'état.
95
+
96
+ ## ⓪.3 · Modules à créer (cas C)
97
+
98
+ **Un seul** : `@mostajs/kind-catalog` — B1, B2, B4, B5.
99
+
100
+ **Emplacement** : `mostajs/mosta-optimization-stack/`, aux côtés de `ro-pla`
101
+ *(décision du 02/09/2026 : « sa place est avec les ro-pla »)*.
102
+
103
+ **Couche** : **N1** — générique transverse. Il ne dépend que de `qa-engine` (N1) pour la conformité
104
+ de ce qu'il projette. Aucun domaine, aucune UI, aucun stockage : la règle de dépendance
105
+ descendante (§5.bis) est respectée.
@@ -0,0 +1,99 @@
1
+ # Prompt d'image — l'OBJECTIF de `@mostajs/kind-catalog`
2
+
3
+ **Livrable #3.bis** (DEVRULES §9) · **Auteur** : Dr Hamid MADANI <drmdh@msn.com> · **Date** : 2026-09-02
4
+
5
+ > Le **#3.bis** illustre la **cible planifiée**, et se valide **avant d'écrire le code**. Le **#14**
6
+ > illustrera le **résultat livré**. Les deux se comparent en fin de cycle : l'écart entre les deux
7
+ > images est la mesure honnête de ce qui a dérivé.
8
+
9
+ ---
10
+
11
+ ## 1 · Ce que l'image doit faire comprendre en dix secondes
12
+
13
+ Un lecteur qui ne connaît pas le module doit sortir de l'image avec **quatre idées** :
14
+
15
+ 1. **Une fiche naît d'un incident**, pas d'une idée.
16
+ 2. **Elle se réutilise ou s'affine** — et l'affinage est **tracé**, jamais implicite.
17
+ 3. **Elle descend dans le plan de test du projet** : sans cela elle ne serait jamais appliquée.
18
+ 4. **Le module ne calcule rien et ne range rien** — il décrit, valide, projette.
19
+
20
+ Si l'image laisse croire que le module *exécute* ou *stocke*, elle est ratée.
21
+
22
+ ## 2 · La composition
23
+
24
+ **Format** : 16:9, paysage, fond clair, style schéma technique sobre — **pas** d'illustration
25
+ métaphorique, pas de robot, pas de cerveau, pas d'ampoule.
26
+
27
+ **Un flux de gauche à droite, en quatre stations reliées par des flèches pleines :**
28
+
29
+ | station | ce qu'on voit | libellé |
30
+ |---|---|---|
31
+ | **1. L'INCIDENT** | un extrait de journal d'exécution avec une ligne en rouge sombre | « un défaut trouvé en recette » |
32
+ | **2. LA FICHE** | une carte-document à cases visibles : énoncé · besoins · succès · **erreurs** (case plus haute, mise en évidence) · épreuve · verdict | « KIND-… — écrite une fois » |
33
+ | **3. LA PROJECTION** | la fiche se dédouble en deux blocs — `exigences` et `essais` — portant la marque `mostajs-devtest/1` | « lue par qatrax, sans rien lui apprendre » |
34
+ | **4. LES APPLICATIONS** | trois écrans distincts (ATC, RestoTrax, un troisième vierge marqué « le prochain ») recevant chacun la même fiche | « réutilisée » |
35
+
36
+ **Sous la station 4**, une flèche de RETOUR remonte vers la station 2, plus fine, en pointillés,
37
+ portant le libellé : **« l'écart tracé — ce que cette application a dû affiner »**. C'est la boucle
38
+ qui fait vivre le catalogue ; elle doit être visible mais secondaire.
39
+
40
+ **En bas, une bande de domaines** (pastilles) : `acces` · `donnees` · `apprentissage` · `decision`
41
+ · `btp` · `alimentaire` · `elevage` · `agronomie` · `electronique`. Les quatre premières pleines
42
+ (éprouvées), les cinq dernières en contour seul (déclarées, à instruire) — **la distinction doit
43
+ se voir**.
44
+
45
+ **En marge droite, deux boîtes grisées, hors du flux**, reliées par des traits fins :
46
+ `@mostajs/ro-pla` (« les moteurs ») et `@mostajs/skill-library` (« l'efficacité mesurée »), avec la
47
+ mention **« composés — pas réécrits »**.
48
+
49
+ ## 3 · Ce que l'image ne doit PAS montrer
50
+
51
+ - **Aucune base de données** en station 2 : les fiches sont des **fichiers versionnés**. Un cylindre
52
+ de base à cet endroit contredirait la décision structurante du plan (#3 §3).
53
+ - **Aucun engrenage ni flèche circulaire** autour du module : il **n'exécute rien**.
54
+ - **Aucun classement hiérarchique** des fiches (arbre, taxonomie) : le graphe de relations est
55
+ explicitement **hors périmètre de la 0.1.0**.
56
+ - **Aucun logo, aucune marque, aucun visage.**
57
+
58
+ ## 4 · Le prompt
59
+
60
+ ```
61
+ Schéma technique 16:9, fond blanc cassé, style diagramme d'architecture logicielle sobre,
62
+ traits fins, palette restreinte : gris ardoise, un bleu profond pour le flux principal,
63
+ un rouge sombre réservé aux erreurs. Typographie sans-serif, étiquettes courtes.
64
+
65
+ Flux horizontal de gauche à droite en quatre stations reliées par des flèches pleines :
66
+ (1) un extrait de journal d'exécution, une ligne surlignée en rouge sombre, légende
67
+ « un défaut trouvé en recette » ;
68
+ (2) une carte-document aux cases visibles — énoncé, besoins, succès, ERREURS (case plus
69
+ haute et bordée de rouge sombre), épreuve, verdict — légende « KIND — écrite une fois » ;
70
+ (3) la carte se dédouble en deux blocs étiquetés « exigences » et « essais », marqués
71
+ « mostajs-devtest/1 », légende « lue par l'outil de suivi, sans rien lui apprendre » ;
72
+ (4) trois fenêtres d'application alignées, la troisième vide et marquée « le prochain »,
73
+ recevant chacune la même carte, légende « réutilisée ».
74
+
75
+ Une flèche de retour fine, en pointillés, remonte de (4) vers (2), étiquetée
76
+ « l'écart tracé — ce que cette application a affiné ».
77
+
78
+ Bande inférieure de pastilles de domaines : quatre pleines (accès, données, apprentissage,
79
+ décision) puis cinq en contour seul (BTP, alimentaire, élevage, agronomie, électronique).
80
+
81
+ Marge droite, hors du flux, deux boîtes grisées reliées par des traits fins :
82
+ « ro-pla — les moteurs » et « skill-library — l'efficacité mesurée », sous-titre
83
+ « composés, pas réécrits ».
84
+
85
+ Pas de cylindre de base de données, pas d'engrenage, pas de flèche circulaire autour du
86
+ module, pas d'arbre de classement, pas de logo, pas de visage, pas de métaphore.
87
+ ```
88
+
89
+ ## 5 · Critère de validation
90
+
91
+ L'image est acceptée si un lecteur qui ne connaît pas le module répond juste à ces trois
92
+ questions, sans autre indication :
93
+
94
+ 1. *D'où vient une fiche ?* → d'un incident.
95
+ 2. *Que devient-elle quand une application s'en sert ?* → elle descend dans son plan de test, et ce
96
+ qu'on affine remonte.
97
+ 3. *Le module calcule-t-il quelque chose ?* → non.
98
+
99
+ Si la troisième réponse est « oui » ou « je ne sais pas », **l'image est refaite**.
@@ -0,0 +1,176 @@
1
+ # Matrice de sourcing — d'où vient le contenu du catalogue
2
+
3
+ **Annexe au livrable #9** (plan de publication) · **Auteur** : Dr Hamid MADANI <drmdh@msn.com>
4
+ **Date** : 2026-09-02 · **Module** : `@mostajs/kind-catalog` 0.1.0
5
+
6
+ > **À quoi sert ce document.** Un catalogue publié sous licence libre expose son contenu au monde
7
+ > entier, de façon permanente. La question « d'où vient votre contenu ? » sera posée — par un
8
+ > investisseur, par un client, éventuellement par un ayant droit. Ce document y répond **avant**
9
+ > qu'elle soit posée, corpus par corpus.
10
+ >
11
+ > ⚠️ **Ce n'est pas un avis juridique.** L'auteur n'est pas juriste. Les régimes indiqués sont ceux
12
+ > que l'on croit applicables ; ils sont marqués **à vérifier** tant qu'ils ne l'ont pas été auprès
13
+ > d'un conseil, dans la juridiction de l'éditeur. Le module exige une provenance déclarée pour
14
+ > chaque fiche ; ce document s'applique à lui-même la même exigence.
15
+
16
+ ---
17
+
18
+ ## 1 · Le principe qui commande tout le reste
19
+
20
+ **Le droit d'auteur protège l'EXPRESSION, pas les IDÉES ni les FAITS.**
21
+
22
+ | on peut | on ne peut pas |
23
+ |---|---|
24
+ | lire un ouvrage et écrire **ses** fiches ensuite | reprendre ses formulations, même reformulées de près |
25
+ | traiter des **mêmes sujets** — le territoire est commun | recopier gabarits, tableaux, exemples |
26
+ | **citer** l'ouvrage comme antériorité | reproduire la **sélection et l'agencement** de son catalogue |
27
+ | s'appuyer sur un **résultat** scientifique (c'est un fait) | recopier le **texte** ou les **figures** qui l'exposent |
28
+
29
+ ⚠️ **Le piège réel est la compilation.** Un catalogue est protégé *en tant que liste et ordre*.
30
+ « Nous couvrons le même terrain parce que le terrain est le même » se défend. « Une fiche par
31
+ patron de l'ouvrage X, dans son ordre » ne se défend pas.
32
+
33
+ ⚠️ **Notre exposition est maximale** : AGPL, publié sur npm, mondial et permanent. Ce n'est pas le
34
+ contexte où l'on prend une marge d'appréciation.
35
+
36
+ ---
37
+
38
+ ## 2 · La matrice
39
+
40
+ ### A · Corpus LIBRES — le gisement principal
41
+
42
+ | corpus | régime **présumé** | ce qu'on en tire | attribution exigée | statut |
43
+ |---|---|---|---|---|
44
+ | **CWE** (MITRE) | libre avec attribution | le **gabarit** de notre champ `erreurs` : une faiblesse, sa **conséquence**, sa détection. Le modèle le plus proche de notre besoin | « CWE™ — MITRE Corporation », mention de la version | **à vérifier** |
45
+ | **CAPEC** (MITRE) | idem CWE | schémas d'abus, côté attaquant | idem | **à vérifier** |
46
+ | **ATT&CK** (MITRE) | idem CWE | la **méthode** : ne consigner que l'observé | idem | **à vérifier** |
47
+ | **OWASP** | Creative Commons — souvent **BY-SA** | erreurs les plus fréquentes, déjà hiérarchisées | attribution **+ partage à l'identique** | ⚠️ **à vérifier — voir §3** |
48
+ | **NIST** (publications fédérales US) | domaine public aux États-Unis pour les œuvres du gouvernement | méthode, vocabulaire, RBAC | mention de la publication | **à vérifier** |
49
+ | **Codex Alimentarius / HACCP** (FAO-OMS) | diffusion large voulue ; conditions FAO à confirmer | dangers, limites critiques, **actions correctives** — un catalogue d'erreurs **actionnable** | « Codex Alimentarius, FAO/OMS » | **à vérifier** |
50
+
51
+ ### B · Littérature scientifique — les FAITS sont libres, le texte ne l'est pas
52
+
53
+ | source | ce qu'on prend | ce qu'on ne prend pas |
54
+ |---|---|---|
55
+ | Stigler 1945 — *The Cost of Subsistence* | **le problème** (composer une ration au moindre coût sous contraintes) et ses pièges connus | le texte, les tableaux, les chiffres de l'article |
56
+ | Dantzig — simplexe | **la méthode**, publiée et enseignée | toute rédaction empruntée |
57
+ | Rice 1976 — sélection d'algorithme | **le cadre** : choisir d'après la signature du problème | idem |
58
+ | Aamodt & Plaza 1994 — raisonnement par cas | **le cycle** retrouver/réutiliser/réviser/retenir | idem |
59
+ | Mavin *et al.* — EARS | **l'idée** d'une syntaxe contrainte (que nous avons d'ailleurs **écartée**) | les cinq gabarits, mot pour mot |
60
+
61
+ > Une méthode mathématique publiée n'appartient à personne. Sa **rédaction**, si.
62
+
63
+ ### C · Ouvrages commerciaux — lecture, jamais matière
64
+
65
+ | ouvrage | usage autorisé | usage interdit | statut |
66
+ |---|---|---|---|
67
+ | **Withall, *Software Requirement Patterns*, Microsoft Press, 2007** | **le lire**. Le citer comme antériorité. **Contrôler notre couverture** : s'il traite une catégorie que nos dix domaines ignorent, c'est une information gratuite | recopier ou paraphraser de près ses patrons, ses gabarits, ses « considérations » ; publier une correspondance 1:1 avec son catalogue | **achat, puis lecture — aucune reprise** |
68
+
69
+ ⚠️ **Règle d'écriture, et elle est plus efficace que toute précaution juridique** :
70
+ **ne jamais ouvrir le livre en écrivant une fiche.** On paraphrase sans s'en apercevoir. Lire
71
+ d'abord, refermer, écrire ensuite depuis nos incidents et nos sources libres.
72
+
73
+ > **Ce qui nous protège le mieux est structurel** : notre fiche exige `succes`, `erreurs` **avec
74
+ > conséquence**, `origine` et `verdict`, et elle **se projette** en plan de test. **Aucune de ces
75
+ > quatre choses n'existe chez lui.** Le dérivé ne ressemble pas à la source, et cela se voit à
76
+ > l'œil nu.
77
+
78
+ ### D · Normes et documents professionnels PAYANTS
79
+
80
+ | corpus | régime | usage | statut |
81
+ |---|---|---|---|
82
+ | **ISO/IEC/IEEE 29148, 29119** | payant, protégé | **citer par numéro et par clause**. Jamais reproduire le texte | **acquis nécessaire si l'on veut s'y conformer** |
83
+ | **NF DTU** (AFNOR) | payant, protégé | idem : citer la référence, jamais le contenu | **à vérifier avant toute fiche `btp`** |
84
+ | **CCTG / CCTP** (marchés) | selon l'émetteur | souvent publics ; **vérifier au cas par cas** | **à vérifier** |
85
+ | **ISO 14971, ARP4761** | payant | citation de référence seulement | **à vérifier** |
86
+
87
+ ⚠️ **Le domaine `btp` est le plus exposé** : son corpus de référence est majoritairement payant et
88
+ protégé. Les fiches BTP doivent donc être écrites **depuis le terrain**, pas depuis les documents.
89
+
90
+ ### E · Documentation technique de fabricants — au cas par cas
91
+
92
+ *Design rules*, notes d'application, tables de rationnement, guides de bonnes pratiques :
93
+ **chacun porte ses propres conditions**. Beaucoup autorisent la citation, peu la reproduction.
94
+ **À vérifier fiche par fiche**, et à défaut de certitude : **écrire depuis le terrain**.
95
+
96
+ ### F · NOS incidents — le seul gisement qui ne se copie pas
97
+
98
+ | source | régime | valeur |
99
+ |---|---|---|
100
+ | défauts constatés en production (ATC, RestoTrax) | **nôtre** | les **6 fiches éprouvées** du corpus |
101
+ | entretiens de praticiens (`terrain`) | **nôtre**, sous réserve du #16 | à venir |
102
+
103
+ > **C'est l'actif.** Un solveur se copie en un trimestre ; une erreur payée en incident, non.
104
+ > Et c'est le seul gisement dont la réutilisation ne pose aucune question.
105
+
106
+ ---
107
+
108
+ ## 3 · ⚠️ Le cas OWASP — le partage à l'identique
109
+
110
+ Une bonne partie du contenu OWASP est diffusée sous **Creative Commons BY-SA**. La clause de
111
+ **partage à l'identique** est contaminante pour les **œuvres dérivées** : un document qui reprend
112
+ substantiellement du contenu BY-SA doit être rediffusé sous la même licence.
113
+
114
+ | ce qu'on fait | risque |
115
+ |---|---|
116
+ | s'inspirer de la **méthode** (hiérarchiser par fréquence) | **nul** — une méthode n'est pas une œuvre |
117
+ | citer une entrée du Top 10 par son identifiant | **nul** — citation courte, attribuée |
118
+ | **reprendre le texte descriptif** d'une entrée dans une fiche | **réel** — la fiche, voire le corpus, deviendrait BY-SA |
119
+
120
+ **Décision retenue : aucun texte OWASP n'entre dans une fiche.** On y puise des sujets et une
121
+ méthode, jamais des phrases. Le code reste AGPL, la documentation reste nôtre.
122
+
123
+ ---
124
+
125
+ ## 4 · Comment écrire l'`origine` selon la source
126
+
127
+ Le module exige une provenance déclarée. Voici la forme, par cas :
128
+
129
+ ```js
130
+ // corpus libre — nommer le corpus ET la version
131
+ origine: [{ type: 'reference', source: 'CWE-639 (MITRE, CWE 4.x) — contrôle d’accès par référence d’objet' }]
132
+
133
+ // littérature — le FAIT, avec sa paternité
134
+ origine: [{ type: 'reference', source: 'Problème du régime (Stigler 1945 ; résolu par le simplexe de Dantzig)' }]
135
+
136
+ // norme payante — référence SEULE, jamais le contenu
137
+ origine: [{ type: 'reference', source: 'ISO/IEC/IEEE 29148 — attribut de vérifiabilité (référencé, non reproduit)' }]
138
+
139
+ // ouvrage commercial — antériorité, sans reprise
140
+ origine: [{ type: 'reference', source: 'Withall, Software Requirement Patterns (2007) — antériorité, aucune reprise de texte' }]
141
+
142
+ // terrain — RÔLE et organisation, JAMAIS le nom (cf. #16 DPIA)
143
+ origine: [{ type: 'terrain', source: 'chef de culture, exploitation X, entretien du 12/09/2026' }]
144
+
145
+ // incident — fichier et date VÉRIFIABLES dans le dépôt
146
+ origine: [{ type: 'incident', source: 'ATC — presence.mjs, portail.mjs (3 emplois)', date: '2026-09-01' }]
147
+ ```
148
+
149
+ ---
150
+
151
+ ## 5 · Contrôle de revue — à passer sur toute fiche nouvelle
152
+
153
+ | # | question | si non |
154
+ |---|---|---|
155
+ | 1 | La fiche a-t-elle été écrite **livre fermé** ? | réécrire de mémoire, sans la source ouverte |
156
+ | 2 | Une phrase pourrait-elle être retrouvée dans la source par recherche textuelle ? | reformuler entièrement |
157
+ | 3 | L'`origine` nomme-t-elle le corpus **et sa version** ? | compléter |
158
+ | 4 | Un `terrain` cite-t-il un **rôle**, pas un nom ? | anonymiser (#16) |
159
+ | 5 | Un `incident` cite-t-il un fichier et une date **vérifiables** ? | compléter — sinon rétrograder en `propose` |
160
+ | 6 | La source est-elle **payante ou protégée** ? | ne garder que la **référence**, écrire depuis le terrain |
161
+ | 7 | Le corpus reprend-il la **liste et l'ordre** d'un catalogue existant ? | **arrêter** — c'est le risque de compilation |
162
+
163
+ ---
164
+
165
+ ## 6 · Ce qui reste à faire, et qui bloque quoi
166
+
167
+ | # | action | bloque |
168
+ |---|---|---|
169
+ | 1 | **Vérifier les conditions d'utilisation** de CWE/CAPEC/ATT&CK, OWASP, Codex, NIST | l'usage de ces corpus comme matière |
170
+ | 2 | **Vérifier les sources** citées dans #1 et #17 (titres, années, éditeurs) | la **diffusion de l'article** #17 |
171
+ | 3 | Faire relire la question de la **compilation** par un conseil, dans la juridiction de l'éditeur | rien aujourd'hui ; **à faire avant une levée** |
172
+ | 4 | Décider pour le domaine `btp` : acquérir les DTU, ou écrire depuis le terrain | les fiches `btp` au-delà de la première |
173
+
174
+ > **Aucun de ces points ne bloque la publication du paquet** : les 12 fiches actuelles sont soit
175
+ > issues de nos incidents, soit adossées à des faits scientifiques ou à des corpus dont la
176
+ > réutilisation est largement admise, et **aucune ne reprend de texte**.