@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,140 @@
1
+ # Un conseiller qui sait aussi dire « pas encore »
2
+
3
+ **Livrable #10** — document commercial · **Auteur** : Dr Hamid MADANI <drmdh@msn.com>
4
+ **Date** : 2026-09-02 · *Document non technique, destiné au client et à l'investisseur.*
5
+
6
+ ---
7
+
8
+ ## 1 · Le cas type — et notre réponse, mot pour mot
9
+
10
+ > *« Nous avons des implantations agricoles au sud. Nous voulons des conseils d'optimisation et
11
+ > d'évitement des problèmes, au fur et à mesure que nos plantes poussent. »*
12
+
13
+ **Notre réponse tient en trois temps, et le troisième est celui qui nous distingue.**
14
+
15
+ ### Temps 1 — Ce que nous vous rendons dès la première semaine, sans aucun historique
16
+
17
+ Ces conseils ne demandent **rien d'autre que ce que vous savez déjà** : vos parcelles, vos
18
+ cultures, vos moyens, vos prix.
19
+
20
+ | votre question | ce que nous rendons | ce qu'il nous faut de vous |
21
+ |---|---|---|
22
+ | Quelle culture sur quelle parcelle ? | une affectation qui respecte **tous** vos délais de retour | vos parcelles, leur historique cultural, vos règles de rotation |
23
+ | Comment fertiliser au moindre coût ? | la formule la moins chère respectant **tous** vos seuils | analyses de sol, prix des intrants, besoins de la culture |
24
+ | Quand faire quoi, avec mes engins ? | un calendrier qui tient compte de vos **moyens réels**, pas d'un monde à moyens infinis | vos tâches, leurs enchaînements, vos machines et vos équipes |
25
+ | Comment répartir l'eau ? | une allocation sous contrainte de débit, avec le **goulot nommé** | votre réseau, vos droits d'eau |
26
+ | Rendement, eau, intrants : que privilégier ? | l'éventail des compromis, **et non un chiffre unique** — parce qu'il n'y en a pas | vos objectifs, dans votre ordre |
27
+
28
+ **Aucun de ces conseils n'attend une récolte.** Ils portent sur ce que vous décidez aujourd'hui.
29
+
30
+ ### Temps 2 — L'évitement des problèmes : ce que nous savons **avant** vous
31
+
32
+ C'est le cœur du produit, et c'est ce qui n'existe pas ailleurs. Nous tenons un **catalogue des
33
+ façons connues de se tromper**, chacune avec **sa conséquence**. Trois exemples, sur votre métier :
34
+
35
+ > **L'assolement optimisé campagne par campagne** → *chaque année est optimale et la rotation est
36
+ > ruinée : l'optimum local sur trois ans coûte plus que ce qu'il a rapporté sur un.*
37
+ >
38
+ > **L'historique de parcelle incomplet** → *un délai de retour est calculé sur ce qu'on sait — et
39
+ > le pathogène, lui, se souvient de tout.*
40
+ >
41
+ > **Le coût seul optimisé, sans borne haute** → *la solution mathématique concentre un intrant bon
42
+ > marché à une dose que la culture ne supporte pas. Le calcul ne connaît pas la physiologie.*
43
+
44
+ Ces avertissements se déclenchent **au moment où vous décidez**, pas dans un rapport annuel.
45
+
46
+ ### Temps 3 — Ce que nous **refusons** de vous dire, et pourquoi c'est la meilleure nouvelle
47
+
48
+ Vous nous demanderez, très vite : *« quel rendement vais-je faire ? »*
49
+
50
+ **Sur une première campagne, nous refuserons de répondre** — et nous vous dirons exactement ce qui
51
+ manque : *« il faut deux cycles complets pour distinguer une tendance d'un accident de saison ;
52
+ vous en avez un. »*
53
+
54
+ Un outil qui répond toujours vous donnera un chiffre. Il aura l'air sérieux. Vous le présenterez à
55
+ votre banque. Et il sera tiré de rien.
56
+
57
+ > Nous mesurons les cycles, pas les jours. Deux saisons font deux semaines en restauration —
58
+ > **deux ans** en grande culture. Un outil qui l'ignore vous répond dès la première récolte, avec
59
+ > aplomb.
60
+
61
+ **Au fur et à mesure que vos plantes poussent**, les questions s'ouvrent d'elles-mêmes : chacune
62
+ affiche ce qui lui manque, le compte diminue à mesure que vous saisissez, et **c'est vous qui
63
+ décidez de l'activer** quand elle devient disponible. Rien ne se déclenche tout seul.
64
+
65
+ ---
66
+
67
+ ## 2 · Comment cela marche, sans un mot de technique
68
+
69
+ **Trois pièces.**
70
+
71
+ **Le catalogue** — des fiches. Une fiche = une question que votre métier se pose, ce qu'il faut
72
+ pour y répondre, comment on vérifie que la réponse tient, et **les erreurs connues avec leur
73
+ conséquence**. Aujourd'hui : **12 fiches, 39 erreurs cataloguées, 10 domaines**.
74
+
75
+ **Les moteurs** — 23 algorithmes éprouvés (affectation, ordonnancement, flux, programmation
76
+ linéaire, files d'attente, simulation…). Ce sont eux qui calculent. Ils sont connus, publiés,
77
+ vérifiables — nous ne prétendons pas les avoir inventés.
78
+
79
+ **Le conseiller** — il tient chaque question dans l'un de trois états : *en attente* (il manque
80
+ ceci, chiffré), *disponible* (la donnée porte la question, à vous de décider), *active*. **Et une
81
+ question active dont les données se vident cesse de répondre, et le dit.**
82
+
83
+ ### Ce que nous ne faisons pas, et que nous ne ferons pas
84
+
85
+ - **Nous n'agissons jamais.** Aucun conseil ne commande, n'achète, ne sème, ne traite. La machine
86
+ propose ; vous disposez. C'est vérifié par un contrôle automatique à chaque livraison.
87
+ - **Nous ne devinons pas vos données.** Ce que vous ne saisissez pas, nous ne l'inventons pas.
88
+ - **Nous ne promettons pas d'intelligence artificielle.** Ce sont des mathématiques publiées depuis
89
+ cinquante ans, appliquées correctement — ce qui est déjà rare.
90
+
91
+ ---
92
+
93
+ ## 3 · Pourquoi nous, plutôt qu'un tableur ou un logiciel généraliste
94
+
95
+ | | tableur | logiciel métier généraliste | nous |
96
+ |---|---|---|---|
97
+ | donne un chiffre | oui | oui | oui |
98
+ | **dit quand il ne faut pas y croire** | non | rarement | **oui, chiffré** |
99
+ | **prévient des erreurs connues du métier** | non | non | **oui, 39 à ce jour** |
100
+ | s'appuie sur les corpus établis (HACCP, DTU, itinéraires techniques) | non | parfois | **oui, et il les cite** |
101
+ | **s'enrichit de chaque client** | non | non | **oui — voir §4** |
102
+
103
+ ## 4 · L'argument qui compte pour un investisseur
104
+
105
+ **Un solveur se copie en un trimestre. Un catalogue d'erreurs, non.**
106
+
107
+ Nos 39 erreurs documentées sont sorties de la production, avec leur date et leur fichier. Elles ne
108
+ se devinent pas : elles se paient en incidents. C'est du temps calendaire, et le temps calendaire
109
+ ne se rattrape pas avec des moyens.
110
+
111
+ **Chaque client enrichit le catalogue au lieu de le consommer.** Quand une exploitation nous dit
112
+ « chez nous, la règle est différente parce que… », cet écart est **enregistré avec son motif**, et
113
+ il nourrit la fiche pour tous les suivants. C'est le contraire d'une prestation : c'est un actif
114
+ qui se compose.
115
+
116
+ **Nous publions notre taux d'honnêteté.** Sur 12 fiches, **6 sont éprouvées** — issues d'un défaut
117
+ constaté — et 6 sont **proposées**, tirées de corpus reconnus (le problème du régime de Stigler,
118
+ 1945 ; HACCP ; CPM/PERT ; les guides de bonnes pratiques apicoles). Nous affichons les deux
119
+ colonnes. Un catalogue qui annoncerait 100 % d'éprouvé mentirait ; celui qui annoncerait 0 % ne
120
+ vaudrait rien.
121
+
122
+ ### La preuve la plus convaincante est un refus
123
+
124
+ Notre fiche apicole dit ceci, noir sur blanc :
125
+
126
+ > *Dix ans d'exploitation font DIX points, dont aucun n'est comparable à l'autre — floraison, météo
127
+ > et état du cheptel changent tout. Un chiffre y est plus faux qu'ailleurs, et plus crédible.*
128
+
129
+ Montrez cela à un homme du métier. Il saura immédiatement que quelqu'un a compris son travail.
130
+
131
+ ---
132
+
133
+ ## 5 · Ce que nous demandons pour commencer
134
+
135
+ **Une campagne d'observation, et vos référentiels.** Pas de capteurs, pas de matériel, pas de
136
+ refonte de vos habitudes. Vos parcelles, votre historique cultural, vos moyens, vos prix — ce que
137
+ vous avez déjà, souvent sur papier ou sur tableur.
138
+
139
+ **Les conseils du temps 1 arrivent en semaine 1.** Ceux du temps 3 arrivent au rythme de vos
140
+ cycles, et nous vous dirons à chaque instant **combien il en reste**.
@@ -0,0 +1,154 @@
1
+ # Un conseiller qui sait dire « pas encore »
2
+
3
+ `@mostajs/kind-catalog` — catalogue de kinds
4
+ Dr Hamid MADANI · septembre 2026
5
+
6
+ ---
7
+
8
+ ## Le problème, en une phrase
9
+
10
+ Les logiciels d'aide à la décision **répondent toujours**.
11
+
12
+ Y compris quand la donnée ne porte pas la réponse.
13
+
14
+ ---
15
+
16
+ ## Ce que cela coûte
17
+
18
+ Un chiffre tiré de trois points **a l'air sérieux**.
19
+
20
+ Il est présenté au conseil.
21
+ Il est porté à la banque.
22
+
23
+ Et il ne décrit rien.
24
+
25
+ ---
26
+
27
+ ## Notre parti pris
28
+
29
+ > Un outil qui sait **refuser** vaut mieux
30
+ > qu'un outil qui répond toujours.
31
+
32
+ « Pas disponible » n'apprend rien.
33
+ **« Il manque onze jours »** se corrige.
34
+
35
+ ---
36
+
37
+ ## Trois pièces
38
+
39
+ **Le catalogue** — les questions d'un métier, et **les erreurs connues**
40
+
41
+ **Les moteurs** — 23 algorithmes éprouvés, publiés, vérifiables
42
+
43
+ **Le conseiller** — il ouvre une question quand la donnée la porte,
44
+ et **il vous laisse décider de l'activer**
45
+
46
+ ---
47
+
48
+ ## Le catalogue, aujourd'hui
49
+
50
+ | | |
51
+ |---|---|
52
+ | fiches | **12** |
53
+ | **erreurs cataloguées** | **39** |
54
+ | domaines | **10** |
55
+ | taux éprouvé | **50 %** |
56
+
57
+ Nous affichons les deux colonnes.
58
+ 100 % serait un mensonge. 0 % ne vaudrait rien.
59
+
60
+ ---
61
+
62
+ ## Une fiche, en vrai
63
+
64
+ **Question** — *une permission ouvre une capacité, jamais un périmètre*
65
+
66
+ **Erreur connue** →
67
+ *un enseignant pointe la séance d'un collègue,
68
+ un parent lit le dossier d'un autre enfant —
69
+ avec exactement les mêmes droits,
70
+ et l'écran ne montre rien d'anormal.*
71
+
72
+ ---
73
+
74
+ ## Dix domaines
75
+
76
+ Accès · Données · Apprentissage · Décision
77
+
78
+ **BTP** · **Alimentaire** · **Élevage**
79
+ **Apiculture** · **Agronomie** · **Électronique**
80
+
81
+ Chacun a son corpus depuis des décennies :
82
+ DTU, HACCP, itinéraires techniques, *design rules*.
83
+
84
+ Nous nous y adossons. Nous les citons.
85
+
86
+ ---
87
+
88
+ ## Ce que le métier nous a appris
89
+
90
+ **HACCP** va plus loin que les catalogues informatiques :
91
+ pour chaque danger, **ce qu'on fait quand la limite est franchie**.
92
+
93
+ **L'apiculture** nous a appris à refuser :
94
+ dix ans d'exploitation font **dix points**,
95
+ dont aucun n'est comparable à l'autre.
96
+
97
+ ---
98
+
99
+ ## La règle qui en est sortie
100
+
101
+ > Un seuil de données s'exprime en **CYCLES**,
102
+ > jamais en jours.
103
+
104
+ Deux saisons font **deux semaines** en restauration.
105
+ **Deux ans** en grande culture.
106
+ **Quelques jours par an** en apiculture.
107
+
108
+ ---
109
+
110
+ ## Ce que nous ne faisons pas
111
+
112
+ **Nous n'agissons jamais** — aucun conseil ne commande, n'achète, ne traite.
113
+ *Vérifié automatiquement à chaque livraison.*
114
+
115
+ **Nous ne devinons pas vos données.**
116
+
117
+ **Nous ne promettons pas d'intelligence artificielle.**
118
+ Ce sont des mathématiques publiées depuis cinquante ans,
119
+ appliquées correctement — ce qui est déjà rare.
120
+
121
+ ---
122
+
123
+ ## L'actif qui se compose
124
+
125
+ Un solveur se copie en un trimestre.
126
+
127
+ **39 erreurs sorties de la production, avec leur date
128
+ et leur fichier, ne se copient pas.**
129
+
130
+ C'est du temps calendaire.
131
+ Le temps calendaire ne se rattrape pas avec des moyens.
132
+
133
+ ---
134
+
135
+ ## Chaque client enrichit le catalogue
136
+
137
+ « Chez nous, la règle est différente parce que… »
138
+
139
+ → l'écart est **enregistré avec son motif**
140
+ → il nourrit la fiche **pour tous les suivants**
141
+
142
+ Le contraire d'une prestation.
143
+
144
+ ---
145
+
146
+ ## Pour commencer
147
+
148
+ Vos référentiels. Souvent sur papier.
149
+
150
+ **Pas de capteurs. Pas de matériel. Pas de refonte.**
151
+
152
+ Les premiers conseils : **semaine 1**.
153
+ Les prévisions : au rythme de vos cycles —
154
+ et nous vous dirons combien il en reste.
@@ -0,0 +1,164 @@
1
+ # Document technique — `@mostajs/kind-catalog`
2
+
3
+ **Livrable #12** (DEVRULES §9) · **Auteur** : Dr Hamid MADANI <drmdh@msn.com> · **Date** : 2026-09-02
4
+ **Version** : 0.1.0 · **Couche** : N1 · **Licence** : AGPL-3.0-or-later
5
+
6
+ ---
7
+
8
+ ## 1 · En une page
9
+
10
+ Le module **décrit**, **valide** et **projette** des fiches d'exigence réutilisables. Il
11
+ **n'exécute rien** et **ne stocke rien** — un essai le compte contre un dépôt piégé (`T-KC-12`).
12
+
13
+ ```
14
+ kinds/*.kind.mjs LE CORPUS — une fiche = un fichier versionné
15
+ │ defineKind()
16
+
17
+ src/kind.js cœur pur — définir, valider
18
+ src/projection.js fiche(s) ──► mostajs-devtest/1 (parsé par qa-engine, importé par qatrax)
19
+ src/instance.js fiche + application ──► instance TRACÉE
20
+ src/catalogue.js charger (seule I/O), chercher, auditer, compter
21
+ src/index.js surface publique
22
+ ```
23
+
24
+ ## 2 · Installation
25
+
26
+ ```bash
27
+ npm i @mostajs/kind-catalog
28
+ ```
29
+
30
+ Aucune dépendance de production. `@mostajs/qa-engine` n'est requis qu'en **développement**, pour
31
+ prouver que ce qui est projeté est accepté par le parseur officiel.
32
+
33
+ ## 3 · Écrire une fiche
34
+
35
+ ```js
36
+ import { defineKind } from '@mostajs/kind-catalog';
37
+
38
+ export default defineKind({
39
+ ref: 'KIND-ROTATION-CULTURALE-01', // identité STABLE, citable, distincte du titre
40
+ domaine: 'agronomie', // doit figurer dans DOMAINES
41
+ enonce: 'Affecter les cultures aux parcelles dans le respect des rotations pluriannuelles.',
42
+ utilisation: 'Assolement d’une exploitation, sur plusieurs campagnes.',
43
+ besoins: [{ nom: 'parcelles', forme: '[{ id, surface, historique }]' }],
44
+
45
+ succes: ['aucun délai de retour n’est enfreint'], // REQUIS
46
+ erreurs: [{ // REQUIS
47
+ titre: 'l’assolement est optimisé campagne par campagne',
48
+ consequence: 'chaque année est optimale et la rotation est ruinée', // REQUIS
49
+ }],
50
+ test: [{ action: 'proposer un assolement sur trois campagnes', attendu: 'aucun délai enfreint' }],
51
+
52
+ verdict: 'propose',
53
+ origine: [{ type: 'reference', source: 'Itinéraires techniques — délais de retour' }], // REQUIS
54
+ });
55
+ ```
56
+
57
+ ### Les champs
58
+
59
+ | champ | requis | notes |
60
+ |---|---|---|
61
+ | `ref` | ✔ | `KIND-…`, majuscules et tirets. Stable : c'est elle qu'on cite |
62
+ | `enonce` | ✔ | la question, dans les mots du métier |
63
+ | `succes` | ✔ | sans critère écrit, tout résultat paraît bon |
64
+ | `erreurs[].titre` / `.consequence` | ✔ | la conséquence distingue l'avertissement de la consigne |
65
+ | `origine[].type` / `.source` | ✔ | `reference` \| `terrain` \| `incident` |
66
+ | `domaine` | — | défaut `decision` ; doit figurer dans `DOMAINES` |
67
+ | `version` | — | défaut `'1'` ; une instance dit contre quelle version elle est écrite |
68
+ | `test` | — | projeté en essais |
69
+ | `verdict` | — | `propose` (défaut) \| `eprouve` \| `retenu` \| `ecarte` |
70
+ | `motif` | conditionnel | **requis** si `verdict: 'ecarte'` |
71
+ | `seProsePose` | — | quand la question se pose ailleurs qu'où elle se calcule (chantier, embarqué) |
72
+ | `efficacite` / `evaluation` | — | **renvois** vers `@mostajs/skill-library` — jamais recalculés ici |
73
+
74
+ ⚠️ **La règle de provenance.** Une `reference` suffit à entrer au catalogue en `propose`.
75
+ `eprouve` et `retenu` exigent un `incident` ou un `terrain` : **on ne se décerne pas l'expérience.**
76
+ La contrainte porte sur le galon, jamais sur l'entrée.
77
+
78
+ ## 4 · Projeter vers qatrax
79
+
80
+ ```js
81
+ import { loadCatalogue, toDevtest } from '@mostajs/kind-catalog';
82
+
83
+ const kinds = await loadCatalogue('./node_modules/@mostajs/kind-catalog/kinds');
84
+ const plan = toDevtest(kinds, { project: { key: 'atc', name: 'ATC' }, prefix: 'ATC' });
85
+ // → { plan: 'mostajs-devtest/1', project, specs[], realisations[], tests[] }
86
+ ```
87
+
88
+ - `prefix` **isole** deux applications reprenant la même fiche dans le même qatrax.
89
+ - une fiche `propose` se projette en `status: 'draft'` — jamais `verified`.
90
+ - **l'exigence projetée porte les erreurs connues** dans sa description : c'est là que le catalogue
91
+ devient utile.
92
+
93
+ Le plan est ensuite fusionné au plan DEVTEST de l'application et poussé comme d'habitude.
94
+
95
+ ## 5 · Instancier — réutiliser ou affiner
96
+
97
+ ```js
98
+ import { instantiate, diffInstance, emplois } from '@mostajs/kind-catalog';
99
+
100
+ const i = instantiate(kind, {
101
+ app: 'ATC', prefix: 'ATC',
102
+ affine: {
103
+ succes: { valeur: [...kind.succes, 'et la trace est conservée'],
104
+ motif: 'le centre est soumis à un contrôle annuel' }, // MOTIF REQUIS
105
+ },
106
+ });
107
+
108
+ diffInstance(i); // ['succes : le centre est soumis à un contrôle annuel']
109
+ emplois([i, …]); // qui emploie quoi, et ce que chacun a affiné
110
+ ```
111
+
112
+ **Affinables** : `enonce`, `besoins`, `utilisation`, `succes`, `erreurs`, `test`, `seProsePose`.
113
+ Le reste appartient à la fiche.
114
+
115
+ ⚠️ Un affinage **sans motif est refusé**. Sans lui, « réutiliser » se dégrade en « recopier ».
116
+ ⚠️ Un affinage qui **casse la fiche** (vider `erreurs`, par exemple) est refusé.
117
+
118
+ ## 6 · Contrôler un corpus
119
+
120
+ ```js
121
+ auditCatalogue(kinds); // [] si tout va bien — sinon la liste des reproches
122
+ statsCatalogue(kinds); // { total, eprouvees, tauxEprouve, parVerdict, parDomaine,
123
+ // parProvenance, erreursCataloguees }
124
+ findKinds(kinds, { domaine: 'btp' });
125
+ findKinds(kinds, { texte: 'périmètre' }); // cherche aussi dans les erreurs
126
+ ```
127
+
128
+ À brancher en intégration continue : `auditCatalogue()` non vide est **bloquant**.
129
+
130
+ ## 7 · Frontières — ce que le module NE fait pas, et où cela vit
131
+
132
+ | besoin | module |
133
+ |---|---|
134
+ | résoudre | `@mostajs/ro-pla` — 23 dialectes, 12 familles |
135
+ | valider le plan projeté | `@mostajs/qa-engine` (`./devtest`) |
136
+ | mémoriser l'efficacité, le retour d'usage | `@mostajs/skill-library` |
137
+ | activer une question sous condition de données | `@mostajs/assistant-pilote` |
138
+ | **persister les fiches** | **personne** — ce sont des fichiers versionnés |
139
+
140
+ ## 8 · Pourquoi les fiches ne vont pas en base
141
+
142
+ Une fiche est un **document éditorial** : elle se lit, se discute, se relit six mois plus tard, et
143
+ son historique est celui d'un fichier — c'est le modèle des ADR.
144
+
145
+ Ce qui va en base, c'est ce que produit son **usage** : exécutions, indices, retours. Cela
146
+ appartient à `skill-library` et au journal d'`assistant-pilote`.
147
+
148
+ **Les deux ne se rangent pas au même endroit parce qu'ils n'ont pas la même durée de vie : la fiche
149
+ se relit, le journal s'entasse.**
150
+
151
+ ## 9 · Pièges
152
+
153
+ - `succes` **et** `erreurs` sont requis — ce sont les champs qu'on omet, et ceux qui servent.
154
+ - Chaque erreur porte sa **conséquence**.
155
+ - `eprouve` sans `incident` ni `terrain` est **refusé**.
156
+ - `ecarte` exige un `motif` et **reste** au catalogue : celle qui disparaît sera réinventée.
157
+ - Le `prefix` isole les applications ; sans lui, leurs plans se marchent dessus.
158
+ - Une fiche `propose` ne doit jamais apparaître comme vérifiée dans le suivi.
159
+ - **Aucun format nouveau** : la projection produit du `mostajs-devtest/1`.
160
+
161
+ ## 10 · Essais
162
+
163
+ `npm test` → **21 essais**, plan `docs/DEVTEST-PLAN.kind-catalog.json`, trois trous qatrax à zéro.
164
+ `T-KC-5` et `T-CORP-3` soumettent la projection au **parseur officiel** — le seul juge qui compte.
@@ -0,0 +1,162 @@
1
+ # `@mostajs/kind-catalog`
2
+
3
+ Décrire · Valider · **Projeter**
4
+ N1 · zéro dépendance de production · AGPL-3.0-or-later
5
+
6
+ ---
7
+
8
+ ## Le module en une phrase
9
+
10
+ Un **catalogue de fiches d'exigence réutilisables**,
11
+ qui se **projette** dans le plan de test du projet.
12
+
13
+ Il n'exécute rien. Il ne stocke rien.
14
+
15
+ ---
16
+
17
+ ## Pourquoi projeter, et pas inventer un format
18
+
19
+ `@mostajs/qa-engine` parse déjà `mostajs-devtest/1`.
20
+ qatrax l'importe déjà.
21
+
22
+ Un second format aurait demandé
23
+ un second validateur, un second import, un second écran.
24
+
25
+ **Et le jour où les deux divergent,
26
+ le catalogue aurait raison contre les faits.**
27
+
28
+ ---
29
+
30
+ ## Le précédent qui tranche
31
+
32
+ **CWE** est branché aux scanners → il s'applique.
33
+
34
+ **Le catalogue de patrons d'exigences de Withall (2007)**
35
+ n'est branché à rien → il est resté un livre.
36
+
37
+ > Une fiche qui ne descend pas dans le plan de test
38
+ > ne sera pas appliquée, quelle que soit sa qualité.
39
+
40
+ ---
41
+
42
+ ## Architecture
43
+
44
+ ```
45
+ kinds/*.kind.mjs le corpus — fichiers versionnés
46
+
47
+ src/kind.js cœur pur : définir, valider
48
+ src/projection.js ──► mostajs-devtest/1
49
+ src/instance.js ──► instance tracée
50
+ src/catalogue.js seule I/O — et elle reçoit son chemin
51
+ ```
52
+
53
+ ---
54
+
55
+ ## La fiche
56
+
57
+ ```js
58
+ defineKind({
59
+ ref: 'KIND-PERIMETRE-01',
60
+ enonce: 'Une permission ouvre une CAPACITÉ, jamais un PÉRIMÈTRE.',
61
+ succes: [...], // REQUIS
62
+ erreurs: [{ titre, consequence }], // REQUIS
63
+ origine: [{ type: 'incident', source, date }], // REQUIS
64
+ verdict: 'eprouve',
65
+ })
66
+ ```
67
+
68
+ Trois champs requis en plus de l'énoncé.
69
+ **Ce sont ceux qu'on omet, et ceux qui servent.**
70
+
71
+ ---
72
+
73
+ ## La conséquence n'est pas un ornement
74
+
75
+ ❌ « ne pas oublier le périmètre »
76
+
77
+ ✅ *« sans lui, un parent lit le dossier de tous les élèves —
78
+ avec exactement les mêmes droits,
79
+ et l'écran ne montre rien d'anormal »*
80
+
81
+ Leçon de CWE et d'OWASP : **le premier ne se retient pas.**
82
+
83
+ ---
84
+
85
+ ## La provenance — la règle qui remplit au lieu de vider
86
+
87
+ | type | autorise |
88
+ |---|---|
89
+ | `reference` | entrer au catalogue en `propose` |
90
+ | `terrain` | se dire `eprouve` |
91
+ | `incident` | se dire `eprouve` |
92
+
93
+ **La contrainte porte sur le galon, jamais sur l'entrée.**
94
+
95
+ `T-KC-4b` la tient.
96
+
97
+ ---
98
+
99
+ ## L'affinage tracé
100
+
101
+ ```js
102
+ instantiate(kind, { app: 'ATC', affine: {
103
+ succes: { valeur: [...], motif: 'contrôle annuel' }, // MOTIF REQUIS
104
+ }})
105
+ ```
106
+
107
+ Sans motif → **refus**.
108
+
109
+ Sans cela, « réutiliser » se dégrade en « recopier »,
110
+ et l'on revient à des plans qui se ressemblent
111
+ sans jamais se parler.
112
+
113
+ ---
114
+
115
+ ## L'index inverse
116
+
117
+ ```js
118
+ emplois(instances)
119
+ // → qui emploie quoi, et ce que chacun a affiné
120
+ ```
121
+
122
+ **Vers l'avant** : qui prévenir quand la fiche change.
123
+ **Vers l'arrière** : ce que le terrain lui a fait dire —
124
+ la matière de la version suivante.
125
+
126
+ ---
127
+
128
+ ## Ce que le module NE fait pas
129
+
130
+ | besoin | où |
131
+ |---|---|
132
+ | résoudre | `ro-pla` (23 dialectes) |
133
+ | valider le plan | `qa-engine` |
134
+ | efficacité, retour d'usage | `skill-library` |
135
+ | activer sous condition | `assistant-pilote` |
136
+ | **persister les fiches** | **personne** — fichiers versionnés |
137
+
138
+ ---
139
+
140
+ ## Les essais
141
+
142
+ **21 verts**, trois trous qatrax à zéro.
143
+
144
+ `T-KC-5` soumet la projection au **parseur officiel** —
145
+ une vérification maison prouverait seulement
146
+ que nous sommes d'accord avec nous-mêmes.
147
+
148
+ `T-KC-12` compte les écritures contre un dépôt piégé :
149
+ une garantie tenue par la seule intention
150
+ se perd à la version suivante.
151
+
152
+ ---
153
+
154
+ ## Pour l'intégrer
155
+
156
+ ```js
157
+ const kinds = await loadCatalogue('…/kind-catalog/kinds');
158
+ const plan = toDevtest(kinds, { project, prefix: 'ATC' });
159
+ // fusionner au plan DEVTEST de l'application, pousser à qatrax
160
+ ```
161
+
162
+ `auditCatalogue()` non vide → **bloquant en CI**.