@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.
- package/CHANGELOG.md +136 -0
- package/README.md +103 -0
- package/docs/00-ETAPE-INAUGURALE-KIND-CATALOG.md +105 -0
- package/docs/03bis-PROMPT-IMAGE-OBJECTIF-KIND-CATALOG.md +99 -0
- package/docs/09bis-MATRICE-SOURCING-KIND-CATALOG.md +176 -0
- package/docs/10-PRESENTATION-COMMERCIALE-KIND-CATALOG.md +140 -0
- package/docs/11-SLIDES-COMMERCIAL-KIND-CATALOG.md +154 -0
- package/docs/12-DOC-TECHNIQUE-KIND-CATALOG.md +164 -0
- package/docs/13-SLIDES-DEV-KIND-CATALOG.md +162 -0
- package/docs/14-PROMPT-IMAGE-KIND-CATALOG.md +88 -0
- package/docs/15-REVUE-SECURITE-KIND-CATALOG.md +98 -0
- package/docs/16-DPIA-CONFORMITE-KIND-CATALOG.md +100 -0
- package/docs/ARTICLE-SEO-KIND-CATALOG.md +96 -0
- package/docs/AUDIT-EXISTANT-KIND-CATALOG.md +127 -0
- package/docs/DEVTEST-PLAN.kind-catalog.json +412 -0
- package/docs/ETUDE-ETAT-ART-KIND-CATALOG-02092026.md +207 -0
- package/docs/PLAN-DEV-KIND-CATALOG.md +186 -0
- package/docs/PLAN-PUBLICATION-KIND-CATALOG.md +80 -0
- package/docs/PLAN-SUIVI-MONITORING.md +66 -0
- package/docs/PLAN-TESTS.md +79 -0
- package/docs/SEO-KEYWORDS-KIND-CATALOG.md +46 -0
- package/docs/articles/01-ARTICLE-KIND-CATALOG.md +229 -0
- package/kinds/acces.kind.mjs +48 -0
- package/kinds/apprentissage.kind.mjs +25 -0
- package/kinds/chiffres.kind.mjs +80 -0
- package/kinds/decision.kind.mjs +88 -0
- package/kinds/donnees.kind.mjs +108 -0
- package/kinds/ecran-service.kind.mjs +71 -0
- package/kinds/integration.kind.mjs +83 -0
- package/kinds/metier-optimisation.kind.mjs +210 -0
- package/kinds/traces.kind.mjs +39 -0
- package/llms.txt +34 -0
- package/package.json +46 -0
- package/src/catalogue.js +98 -0
- package/src/index.js +4 -0
- package/src/instance.js +85 -0
- package/src/kind.js +152 -0
- 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**.
|