designwithai-mcp 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 (51) hide show
  1. package/README.md +153 -0
  2. package/dist/connectors.js +76 -0
  3. package/dist/decisions.js +67 -0
  4. package/dist/embeddings.js +98 -0
  5. package/dist/evals.js +172 -0
  6. package/dist/finding-identity.js +229 -0
  7. package/dist/handbook.js +98 -0
  8. package/dist/paths.js +62 -0
  9. package/dist/profile.js +79 -0
  10. package/dist/reviews.js +99 -0
  11. package/dist/server.js +1136 -0
  12. package/dist/skills.js +57 -0
  13. package/dist/state.js +48 -0
  14. package/handbook-embeddings.json +1 -0
  15. package/package.json +46 -0
  16. package/skills/EVALS.md +122 -0
  17. package/skills/README.md +59 -0
  18. package/skills/_shared/delivery-modes.md +12 -0
  19. package/skills/_shared/execution-contract.md +43 -0
  20. package/skills/_shared/issue-schema.md +25 -0
  21. package/skills/_shared/severity-model.md +16 -0
  22. package/skills/analyze-figma/evals/cases.json +140 -0
  23. package/skills/analyze-url/evals/cases.json +136 -0
  24. package/skills/better-accessibility/SKILL.md +141 -0
  25. package/skills/better-accessibility/evals/cases.json +83 -0
  26. package/skills/better-components/SKILL.md +125 -0
  27. package/skills/better-components/evals/cases.json +77 -0
  28. package/skills/better-consistency/SKILL.md +125 -0
  29. package/skills/better-consistency/evals/cases.json +77 -0
  30. package/skills/better-forms/SKILL.md +135 -0
  31. package/skills/better-forms/evals/cases.json +78 -0
  32. package/skills/better-interface/SKILL.md +143 -0
  33. package/skills/better-interface/evals/cases.json +80 -0
  34. package/skills/better-layout/SKILL.md +132 -0
  35. package/skills/better-layout/evals/cases.json +81 -0
  36. package/skills/better-navigation/SKILL.md +170 -0
  37. package/skills/better-navigation/evals/cases.json +131 -0
  38. package/skills/better-performance/SKILL.md +195 -0
  39. package/skills/better-performance/evals/cases.json +114 -0
  40. package/skills/better-responsive/SKILL.md +123 -0
  41. package/skills/better-responsive/evals/cases.json +77 -0
  42. package/skills/better-states/SKILL.md +129 -0
  43. package/skills/better-states/evals/cases.json +78 -0
  44. package/skills/better-writing/SKILL.md +138 -0
  45. package/skills/better-writing/evals/cases.json +77 -0
  46. package/skills/review-ai-product/SKILL.md +231 -0
  47. package/skills/review-ai-product/evals/cases.json +120 -0
  48. package/skills/review-data-security/SKILL.md +210 -0
  49. package/skills/review-data-security/evals/cases.json +138 -0
  50. package/skills/review-figma-hygiene/SKILL.md +186 -0
  51. package/skills/review-figma-hygiene/evals/cases.json +158 -0
@@ -0,0 +1,125 @@
1
+ ---
2
+ name: better-consistency
3
+ description: Détecte les divergences accidentelles de termes, composants, comportements, états et règles visuelles à l'échelle du produit, et définit une règle canonique par pattern sans uniformiser aveuglément.
4
+ version: 1.0
5
+ category: system-expert
6
+ role: System expert
7
+ execution_mode: cross-product-audit
8
+ supports: [ai-builder, traditional, hybrid]
9
+ inputs: [code, storybook, figma, url, inventory]
10
+ outputs: [divergence-map, canonical-registry, exceptions, normalization-plan]
11
+ relays: [better-components, better-writing, better-states, better-layout]
12
+ ---
13
+
14
+ # /better-consistency
15
+
16
+ **Rôle** : System expert · **Mode par défaut** : audit transversal.
17
+
18
+ Voir le [contrat commun](../_shared/execution-contract.md), le [schéma de problème](../_shared/issue-schema.md) (préfixe `CONS`), le [modèle de sévérité](../_shared/severity-model.md) et la [matrice des modes](../_shared/delivery-modes.md).
19
+
20
+ ## Mission
21
+
22
+ Rendre le produit prévisible sans l'uniformiser aveuglément. Le skill distingue les incohérences accidentelles des variations justifiées par le contexte, puis définit une règle canonique par pattern.
23
+
24
+ ## Déclenchement
25
+
26
+ Produit construit rapidement, plusieurs contributeurs, routes hétérogènes, migrations partielles ou duplication issue d'un AI Builder.
27
+
28
+ - **Entrées minimales** : plusieurs écrans, routes ou composants comparables. Une capture isolée ne suffit pas.
29
+
30
+ ## Dimensions analysées
31
+
32
+ | Dimension | Exemples de divergences |
33
+ |---|---|
34
+ | **Terminologie** | Créer/Ajouter/Nouveau pour la même action ; projet/espace/workspace pour le même objet. |
35
+ | **Composants** | Plusieurs boutons, modals, cards, inputs ou tables pour le même usage. |
36
+ | **Comportement** | Retour, sauvegarde, filtres, fermeture, confirmation ou navigation différents selon les routes. |
37
+ | **États** | Loading, empty, error et success traités différemment sans raison. |
38
+ | **Visuel** | Spacing, radius, ombres, couleurs, icônes, typographies ou densité divergents. |
39
+ | **Données** | Formats de date, nombre, devise, unités, labels et ordre de colonnes. |
40
+ | **Accessibilité** | Focus, labels, noms accessibles et clavier variables selon les implémentations. |
41
+
42
+ ## Séquence d'analyse obligatoire
43
+
44
+ 1. **Définir l'échantillon.** Routes, écrans, composants, périodes et plateformes comparés.
45
+ 2. **Créer la matrice des patterns.** Lister chaque besoin récurrent et les implémentations existantes.
46
+ 3. **Identifier les divergences.** Comparer visuel, texte, comportement, états, données et accessibilité.
47
+ 4. **Qualifier l'intention.** Variation légitime, expérimentation, legacy, contrainte locale ou incohérence accidentelle.
48
+ 5. **Choisir le canonique.** S'appuyer sur source de vérité, fréquence, qualité, accessibilité, maintenabilité et contexte.
49
+ 6. **Définir les exceptions.** Une exception doit avoir une raison, un owner et une durée ou condition de réévaluation.
50
+ 7. **Planifier la normalisation.** Corriger d'abord les fondations et composants les plus diffusés.
51
+ 8. **Prévenir la récidive.** Tokens, composants, documentation, lint, tests visuels ou règles de contribution.
52
+
53
+ ## Règles de décision
54
+
55
+ - **Même besoin, même pattern par défaut.** La variation doit être justifiée par une différence de tâche ou de contexte.
56
+ - **Canonique ne signifie pas le plus ancien.** Choisir la meilleure implémentation, puis migrer les autres.
57
+ - **Ne pas uniformiser les cas différents.** Une action destructive ne doit pas reprendre le pattern d'une action secondaire simplement pour être cohérente.
58
+ - **Corriger à la racine.** Quand une divergence vient d'un token ou composant, ne pas patcher chaque écran.
59
+ - **Stabiliser le vocabulaire.** Un terme produit doit posséder une définition et des contextes autorisés.
60
+ - **Mesurer le rayon d'impact.** Prioriser les incohérences fréquentes et visibles sur les parcours principaux.
61
+
62
+ ## Adaptation au mode de delivery
63
+
64
+ - **AI Builder.** Comparer les routes générées à des moments différents, les composants copiés, les styles locaux, les termes modifiés par prompt et les patterns recréés.
65
+ - **Classique.** Comparer produit, Figma, Design System, documentation et Storybook. Identifier les versions obsolètes encore consommées.
66
+ - **Hybride.** Créer un registre de décisions canoniques par couche et désigner la source de vérité après migration.
67
+
68
+ ## Anti-patterns à refuser
69
+
70
+ - Uniformiser tout écart sans vérifier son intention.
71
+ - Choisir comme canonique la version la plus fréquente même si elle est défectueuse.
72
+ - Créer un nouveau composant « final » sans plan de retrait des anciens.
73
+ - Se limiter aux couleurs et espacements en ignorant le comportement et le vocabulaire.
74
+ - Produire un audit sur une capture unique.
75
+ - Accepter des exceptions sans owner ni justification.
76
+
77
+ ## Contrat de sortie exact
78
+
79
+ ```
80
+ # Échantillon
81
+ - Routes / écrans / composants
82
+ - Sources comparées
83
+ - Limites
84
+
85
+ # Matrice des patterns
86
+ Pattern | Implémentations | Différences | Intention | Canonique | Exceptions
87
+
88
+ # Problèmes priorisés
89
+ CONS-XX | Sévérité | Pattern | Localisations | Preuve | Impact | Décision | Critères | Confiance
90
+
91
+ # Registre canonique
92
+ - Terme
93
+ - Composant
94
+ - Comportement
95
+ - État
96
+ - Format de données
97
+ - Source de vérité
98
+
99
+ # Plan de normalisation
100
+ Lot | Racine | Consommateurs | Migration | Test | Dépréciation
101
+
102
+ # Prévention
103
+ - Tokens
104
+ - Documentation
105
+ - Tests / lint
106
+ - Règles de contribution
107
+ ```
108
+
109
+ ## Critères de qualité du skill
110
+
111
+ - Le skill compare plusieurs occurrences du même besoin.
112
+ - Chaque variation est qualifiée comme légitime, temporaire ou accidentelle.
113
+ - Le canonique est choisi selon des critères explicites.
114
+ - Les corrections ciblent la racine lorsque possible.
115
+ - Les exceptions sont documentées et gouvernées.
116
+
117
+ ## Exemple d'invocation
118
+
119
+ ```
120
+ /better-consistency
121
+ Échantillon: onboarding, dashboard, settings, billing
122
+ Objectif: unifier actions, modals, empty states et vocabulaire
123
+ Sources: production + Storybook
124
+ Mode: audit transversal
125
+ ```
@@ -0,0 +1,77 @@
1
+ [
2
+ {
3
+ "id": "consistency-conformant-product",
4
+ "skill": "better-consistency",
5
+ "kind": "conformant",
6
+ "delivery_mode": "classique",
7
+ "artifact": "Onboarding, dashboard et settings comparés. Même pattern de confirmation partout, même vocabulaire (« projet » partout), mêmes traitements de loading/empty/error, formats de date identiques. Les rares variations sont justifiées par la tâche (une action destructive a un pattern distinct, à raison).",
8
+ "golden": {
9
+ "expected_findings": [],
10
+ "forbidden_findings": ["uniformiser une variation justifiée", "auditer un défaut d'un seul écran"],
11
+ "expected_verdict": "PASS",
12
+ "should_refuse": false
13
+ }
14
+ },
15
+ {
16
+ "id": "consistency-obvious-divergence",
17
+ "skill": "better-consistency",
18
+ "kind": "obvious-defect",
19
+ "delivery_mode": "ai-builder",
20
+ "artifact": "Produit construit vite, plusieurs routes générées à des moments différents. La même confirmation de suppression utilise trois modals différentes selon l'écran. La même action est nommée « Créer », « Ajouter » et « Nouveau ». Les dates sont au format JJ/MM/AAAA à un endroit, MM/DD/YYYY ailleurs. Les empty states sont traités différemment sans raison.",
21
+ "golden": {
22
+ "expected_findings": [
23
+ "trois composants de modal différents pour la même confirmation",
24
+ "terminologie divergente Créer / Ajouter / Nouveau pour la même action",
25
+ "formats de date incohérents entre écrans",
26
+ "empty states traités différemment sans raison"
27
+ ],
28
+ "forbidden_findings": ["revoir la stratégie produit", "auditer l'accessibilité d'un écran"],
29
+ "expected_verdict": "FAIL",
30
+ "should_refuse": false
31
+ }
32
+ },
33
+ {
34
+ "id": "consistency-subtle-drift",
35
+ "skill": "better-consistency",
36
+ "kind": "subtle-defect",
37
+ "delivery_mode": "hybride",
38
+ "artifact": "Deux parcours proches. Le comportement de « retour » diffère subtilement : sur l'un il sauvegarde le brouillon, sur l'autre il l'abandonne sans avertissement — divergence accidentelle, pas une décision. Un même terme, « espace », désigne un workspace sur une route et un projet sur une autre.",
39
+ "golden": {
40
+ "expected_findings": [
41
+ "comportement de retour divergent, sauvegarde vs abandon sans raison",
42
+ "même terme espace utilisé pour deux objets différents"
43
+ ],
44
+ "forbidden_findings": ["uniformiser les cas réellement différents", "refonte visuelle"],
45
+ "expected_verdict": "PASS WITH FIXES",
46
+ "should_refuse": false
47
+ }
48
+ },
49
+ {
50
+ "id": "consistency-out-of-scope-single",
51
+ "skill": "better-consistency",
52
+ "kind": "out-of-scope",
53
+ "delivery_mode": "classique",
54
+ "artifact": "Trois écrans parfaitement cohérents entre eux (vocabulaire, composants, comportements alignés). Le seul défaut est isolé à un écran : un bouton icône-seule sans nom accessible.",
55
+ "golden": {
56
+ "expected_findings": [],
57
+ "forbidden_findings": ["bouton icône-seule sans nom accessible", "auditer l'accessibilité de l'écran"],
58
+ "expected_verdict": "PASS",
59
+ "should_refuse": false,
60
+ "note": "Un défaut isolé d'un seul écran relève des skills experts (ici better-accessibility). La cohérence transversale est bonne : hors périmètre consistency."
61
+ }
62
+ },
63
+ {
64
+ "id": "consistency-insufficient",
65
+ "skill": "better-consistency",
66
+ "kind": "insufficient",
67
+ "delivery_mode": "classique",
68
+ "artifact": "Une capture d'un seul écran, sans autre route, écran ni composant comparable.",
69
+ "golden": {
70
+ "expected_findings": [],
71
+ "forbidden_findings": ["conclure à une incohérence sur un seul écran"],
72
+ "expected_verdict": "BLOCKED",
73
+ "should_refuse": true,
74
+ "note": "La cohérence se mesure entre plusieurs occurrences. Une capture isolée ne suffit pas : demander plusieurs écrans ou routes."
75
+ }
76
+ }
77
+ ]
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: better-forms
3
+ description: Améliore la collecte de données, la compréhension, la validation, la progression et la récupération dans les formulaires, en traitant le formulaire comme un parcours complet.
4
+ version: 1.0
5
+ category: ux-expert
6
+ role: UX expert
7
+ execution_mode: field-by-field-audit
8
+ supports: [ai-builder, traditional, hybrid]
9
+ inputs: [image, prototype, code, url]
10
+ outputs: [field-audit, target-structure, validation-rules, states, acceptance-criteria]
11
+ relays: [better-writing, better-states, better-accessibility, better-responsive]
12
+ ---
13
+
14
+ # /better-forms
15
+
16
+ **Rôle** : UX expert · **Mode par défaut** : audit champ par champ.
17
+
18
+ Voir le [contrat commun](../_shared/execution-contract.md), le [schéma de problème](../_shared/issue-schema.md) (préfixe `FORM`), le [modèle de sévérité](../_shared/severity-model.md) et la [matrice des modes](../_shared/delivery-modes.md).
19
+
20
+ ## Mission
21
+
22
+ Réduire l'effort de saisie et les erreurs tout en collectant uniquement les données réellement nécessaires. Le skill traite le formulaire comme un parcours complet, pas comme une suite de champs.
23
+
24
+ ## Déclenchement
25
+
26
+ Formulaire long, abandons, erreurs fréquentes, champs ambigus, validation tardive, multi-step ou données sensibles.
27
+
28
+ - **Entrées minimales** : capture, prototype ou code du formulaire avec objectif, audience et contraintes de données.
29
+ - **N'analyse pas** la légitimité juridique de la collecte ou le modèle de données complet. Il signale les questions de conformité ou minimisation à valider.
30
+ - **Principe** : chaque champ doit avoir une raison produit ou opérationnelle explicite.
31
+
32
+ ## Séquence d'analyse obligatoire
33
+
34
+ 1. **Définir le résultat.** Création de compte, paiement, configuration, recherche, publication, demande ou autre objectif.
35
+ 2. **Inventorier les données.** Champ, source, caractère obligatoire, usage, sensibilité, format, dépendance et possibilité de préremplissage.
36
+ 3. **Supprimer ou différer.** Identifier les champs non nécessaires à cette étape, déjà connus ou collectables plus tard.
37
+ 4. **Structurer.** Ordre logique, groupes, étapes, progression, dépendances et visibilité conditionnelle.
38
+ 5. **Choisir les contrôles.** Type natif ou composant approprié, options, recherche, date, montant, téléphone, upload, adresse ou autre donnée.
39
+ 6. **Définir la validation.** Moment, message, emplacement, format accepté, serveur, conflit, doublon et correction.
40
+ 7. **Définir la persistance.** Autosave, brouillon, retour arrière, refresh, reconnexion et reprise après erreur.
41
+ 8. **Tester la soumission.** Double clic, latence, échec, succès partiel, confirmation et prochaine étape.
42
+
43
+ ## Règles de conception
44
+
45
+ - **Label toujours explicite.** Le placeholder ne remplace pas le label et disparaît pendant la saisie.
46
+ - **Aide au bon moment.** Placer format, exemple ou contrainte avant l'erreur lorsque l'utilisateur peut l'anticiper.
47
+ - **Validation proportionnée.** Valider tôt ce qui peut être corrigé immédiatement, sans interrompre chaque frappe ni afficher des erreurs prématurées.
48
+ - **Erreur proche et résumée.** Associer l'erreur au champ ; pour les longs formulaires, proposer un résumé navigable.
49
+ - **Préremplir sans surprendre.** Afficher les valeurs connues, permettre la modification et expliquer les données sensibles.
50
+ - **Préserver le travail.** Ne jamais perdre une saisie importante après erreur réseau, expiration ou navigation accidentelle sans avertissement.
51
+ - **Un seul choix principal par étape.** La soumission doit être claire ; les actions secondaires ne doivent pas concurrencer.
52
+ - **Mobile réel.** Clavier adapté, autocomplete, champs de date et montant utilisables, CTA non masqué.
53
+
54
+ ## Audit champ par champ
55
+
56
+ | Dimension | Questions |
57
+ |---|---|
58
+ | **Nécessité** | Pourquoi ce champ est-il demandé maintenant ? Peut-il être supprimé, prérempli ou différé ? |
59
+ | **Compréhension** | Le label et l'aide permettent-ils de savoir quoi saisir et pourquoi ? |
60
+ | **Contrôle** | Le type de champ correspond-il à la donnée et aux usages mobile/clavier ? |
61
+ | **Validation** | Quand l'erreur apparaît-elle ? Est-elle précise et corrigeable ? |
62
+ | **Accessibilité** | Nom, relation label/erreur, ordre, focus, annonce et cible interactive. |
63
+ | **Persistance** | La valeur est-elle conservée lors des transitions et erreurs ? |
64
+ | **Confidentialité** | La sensibilité est-elle signalée et la collecte minimisée ? |
65
+
66
+ ## Adaptation au mode de delivery
67
+
68
+ - **AI Builder.** Contrôler les validations uniquement côté client, les mutations Supabase, les erreurs silencieuses, les données non persistées, les valeurs par défaut dangereuses et les schémas divergents.
69
+ - **Classique.** Aligner le formulaire avec les contrats API, composants du Design System, schémas de validation partagés et tracking d'abandon.
70
+ - **Hybride.** Identifier où vivent la validation, la normalisation et les règles métier afin d'éviter les doublons contradictoires.
71
+
72
+ ## Anti-patterns à refuser
73
+
74
+ - Demander toutes les informations « au cas où ».
75
+ - Utiliser le placeholder comme label.
76
+ - Afficher les erreurs seulement après une soumission longue.
77
+ - Réinitialiser le formulaire après une erreur serveur.
78
+ - Utiliser un select pour une liste très longue sans recherche.
79
+ - Masquer des champs obligatoires dans des sections repliées sans signalement.
80
+
81
+ ## Contrat de sortie exact
82
+
83
+ ```
84
+ # Objectif du formulaire
85
+ - Résultat utilisateur
86
+ - Données réellement nécessaires
87
+ - Contraintes et risques
88
+
89
+ # Audit champ par champ
90
+ FORM-XX | Champ | Nécessité | Problème | Sévérité | Correction | Validation | Critères | Confiance
91
+
92
+ # Structure cible
93
+ - Groupes
94
+ - Ordre
95
+ - Étapes
96
+ - Champs conditionnels
97
+ - Préremplissage
98
+
99
+ # Règles de validation
100
+ - Client
101
+ - Serveur
102
+ - Messages
103
+ - Focus et résumé d'erreurs
104
+
105
+ # États et persistance
106
+ - Loading
107
+ - Draft / autosave
108
+ - Error
109
+ - Success
110
+ - Reprise
111
+
112
+ # Plan de mesure
113
+ - Début
114
+ - Abandon par étape
115
+ - Erreurs fréquentes
116
+ - Soumission réussie
117
+ ```
118
+
119
+ ## Critères de qualité du skill
120
+
121
+ - Chaque champ possède une justification ou une recommandation de suppression/différé.
122
+ - Les règles de validation sont compatibles avec le backend réel.
123
+ - Les données saisies sont préservées lors des erreurs récupérables.
124
+ - Le formulaire est utilisable au clavier et sur mobile.
125
+ - Les messages d'erreur indiquent comment corriger.
126
+
127
+ ## Exemple d'invocation
128
+
129
+ ```
130
+ /better-forms
131
+ Artefact: formulaire de création d'établissement, 18 champs
132
+ Audience: gérant de restaurant sur mobile
133
+ Objectif: réduire l'abandon sans perdre les données nécessaires à la facturation
134
+ Mode: audit + structure cible
135
+ ```
@@ -0,0 +1,78 @@
1
+ [
2
+ {
3
+ "id": "forms-conformant-signup",
4
+ "skill": "better-forms",
5
+ "kind": "conformant",
6
+ "delivery_mode": "classique",
7
+ "artifact": "Création de compte. Trois champs seulement (email, mot de passe, nom), chacun justifié. Labels explicites au-dessus des champs. Validation au blur, message précis à côté du champ. Autosave du brouillon. Clavier adapté sur mobile (email → clavier email). Le travail est préservé après une erreur réseau.",
8
+ "golden": {
9
+ "expected_findings": [],
10
+ "forbidden_findings": ["juger la légitimité juridique de la collecte", "revoir le layout de la page"],
11
+ "expected_verdict": "PASS",
12
+ "should_refuse": false
13
+ }
14
+ },
15
+ {
16
+ "id": "forms-obvious-onboarding",
17
+ "skill": "better-forms",
18
+ "kind": "obvious-defect",
19
+ "delivery_mode": "ai-builder",
20
+ "artifact": "Formulaire d'inscription de 18 champs, dont beaucoup « au cas où ». Les labels sont des placeholders qui disparaissent à la saisie. La validation n'apparaît qu'après une soumission longue. En cas d'erreur serveur, le formulaire est réinitialisé. Un pays est choisi via un select de 200 entrées sans recherche.",
21
+ "golden": {
22
+ "expected_findings": [
23
+ "champs demandés au cas où, sans nécessité, à supprimer ou différer",
24
+ "placeholder utilisé comme label, disparaît à la saisie",
25
+ "validation seulement après une soumission longue",
26
+ "formulaire réinitialisé après une erreur serveur, travail perdu",
27
+ "select très long sans recherche"
28
+ ],
29
+ "forbidden_findings": ["revoir la grille", "réécrire la stratégie produit"],
30
+ "expected_verdict": "FAIL",
31
+ "should_refuse": false
32
+ }
33
+ },
34
+ {
35
+ "id": "forms-subtle-address",
36
+ "skill": "better-forms",
37
+ "kind": "subtle-defect",
38
+ "delivery_mode": "classique",
39
+ "artifact": "Formulaire de facturation, globalement soigné. Deux écarts : un champ obligatoire (TVA intracommunautaire) est masqué dans une section repliée sans signalement ; et la validation du code postal est déclenchée à chaque frappe, affichant une erreur prématurée avant que le champ soit complet.",
40
+ "golden": {
41
+ "expected_findings": [
42
+ "champ obligatoire masqué dans une section repliée sans signalement",
43
+ "validation à chaque frappe, erreur prématurée avant la fin de la saisie"
44
+ ],
45
+ "forbidden_findings": ["refonte complète du formulaire", "changer la palette"],
46
+ "expected_verdict": "PASS WITH FIXES",
47
+ "should_refuse": false
48
+ }
49
+ },
50
+ {
51
+ "id": "forms-out-of-scope-layout",
52
+ "skill": "better-forms",
53
+ "kind": "out-of-scope",
54
+ "delivery_mode": "classique",
55
+ "artifact": "Formulaire de recherche avancée. Les champs, la validation, la persistance et la progression sont tous corrects. Le seul souci est visuel : le formulaire est collé au bord de la page et manque de marges, avec un rythme vertical irrégulier.",
56
+ "golden": {
57
+ "expected_findings": [],
58
+ "forbidden_findings": ["marges insuffisantes", "rythme vertical irrégulier", "revoir le layout"],
59
+ "expected_verdict": "PASS",
60
+ "should_refuse": false,
61
+ "note": "Spacing et rythme = better-layout. La logique de saisie est correcte : hors périmètre forms."
62
+ }
63
+ },
64
+ {
65
+ "id": "forms-insufficient",
66
+ "skill": "better-forms",
67
+ "kind": "insufficient",
68
+ "delivery_mode": "classique",
69
+ "artifact": "« Améliore mon formulaire. » Aucun champ listé, aucun objectif, aucune audience, aucune contrainte de données.",
70
+ "golden": {
71
+ "expected_findings": [],
72
+ "forbidden_findings": [],
73
+ "expected_verdict": "BLOCKED",
74
+ "should_refuse": true,
75
+ "note": "Sans les champs ni l'objectif, on ne peut pas juger la nécessité des données. Demander le résultat visé et l'inventaire des champs."
76
+ }
77
+ }
78
+ ]
@@ -0,0 +1,143 @@
1
+ ---
2
+ name: better-interface
3
+ description: Orchestrateur de revue d'interface — sélectionne les experts nécessaires, agrège leurs diagnostics et produit une vision priorisée sans mélanger leurs périmètres.
4
+ version: 1.0
5
+ category: orchestrator
6
+ role: Orchestrator
7
+ execution_mode: multi-skill-diagnostic
8
+ supports: [ai-builder, traditional, hybrid]
9
+ inputs: [image, url, code, figma, prototype]
10
+ outputs: [orchestration-plan, consolidated-diagnostic, arbitrations, correction-plan, global-verdict]
11
+ orchestrates: [better-layout, better-accessibility, better-writing, better-responsive, better-states, better-forms, better-components, better-consistency, better-navigation]
12
+ ---
13
+
14
+ # /better-interface
15
+
16
+ **Rôle** : Orchestrator · **Mode par défaut** : diagnostic multi-skill.
17
+
18
+ Voir le [contrat commun](../_shared/execution-contract.md), le [schéma de problème](../_shared/issue-schema.md) (préfixe `UI`), le [modèle de sévérité](../_shared/severity-model.md) et la [matrice des modes](../_shared/delivery-modes.md).
19
+
20
+ ## Mission
21
+
22
+ Fournir une revue holistique sans créer un « super prompt » vague. L'orchestrateur choisit les experts utiles, leur transmet le contexte, déduplique les résultats et arbitre les conflits. Il ne remplace pas leur analyse spécialisée.
23
+
24
+ ## Déclenchement
25
+
26
+ Revue globale d'un écran, d'un flow ou d'une feature sans savoir quel skill spécialisé appeler.
27
+
28
+ - **Entrées minimales** : artefact, objectif utilisateur, mode de delivery et périmètre de revue.
29
+
30
+ ## Responsabilités de l'orchestrateur
31
+
32
+ - **Qualifier la demande.** Identifier artefact, objectif, parcours, audience, mode de delivery, source de vérité, contraintes et niveau de profondeur.
33
+ - **Sélectionner les experts.** Appeler uniquement les experts nécessaires. Une page sans formulaire ne déclenche pas `better-forms`.
34
+ - **Distinguer l'écran du chemin.** Huit experts jugent un écran ; `better-navigation` est le seul à juger ce qui se passe ENTRE les écrans. Il ne s'active que si le périmètre en montre plusieurs et leurs liens — sur un écran isolé, l'orchestrateur ne l'appelle pas et le dit dans les skills exclus.
35
+ - **Préparer le contexte commun.** Fournir à chaque expert les mêmes hypothèses, viewports, contraintes et exclusions.
36
+ - **Agréger sans écraser.** Conserver l'origine de chaque problème et les preuves spécifiques.
37
+ - **Dédupliquer.** Fusionner les constats identiques tout en conservant les impacts complémentaires.
38
+ - **Arbitrer.** Résoudre les recommandations incompatibles selon priorité utilisateur, source de vérité, accessibilité, cohérence et coût de régression.
39
+ - **Planifier.** Ordonner les correctifs par racine, dépendance et risque plutôt que par skill.
40
+
41
+ ## Matrice de sélection
42
+
43
+ | Signal observé | Skill principal | Skills complémentaires |
44
+ |---|---|---|
45
+ | Structure confuse, alignements, densité | `better-layout` | `better-responsive`, `better-consistency` |
46
+ | Barrières clavier, contraste, labels | `better-accessibility` | `better-components`, `better-forms` |
47
+ | Textes vagues, erreurs, terminologie | `better-writing` | `better-states`, `better-consistency` |
48
+ | Débordements, tablette, mobile | `better-responsive` | `better-layout`, `better-components` |
49
+ | Loading, empty, error, permissions | `better-states` | `better-writing`, `better-accessibility` |
50
+ | Saisie, validation, progression | `better-forms` | `better-writing`, `better-states` |
51
+ | Duplication, props, variants | `better-components` | `better-consistency`, `better-accessibility` |
52
+ | Routes hétérogènes, patterns divergents | `better-consistency` | `better-components`, `better-writing` |
53
+ | Rangement, étiquettes de menu, profondeur, écrans qu'on ne trouve pas | `better-navigation` | `better-writing`, `better-consistency` |
54
+
55
+ ## Séquence d'orchestration
56
+
57
+ 1. **Cadrer.** Résumer la tâche utilisateur et le périmètre. Signaler immédiatement les accès manquants.
58
+ 2. **Échantillonner.** Choisir les écrans, états, viewports et composants nécessaires. Ne pas prétendre auditer tout un produit à partir d'un écran. Noter si le périmètre est complet : `better-navigation` en dépend pour déclarer un orphelin.
59
+ 3. **Sélectionner.** Nommer les skills activés et ceux volontairement exclus.
60
+ 4. **Exécuter les fondations.** Commencer par composants, cohérence et structure lorsque les défauts sont systémiques. Quand le périmètre couvre un parcours, exécuter `better-navigation` AVANT les dimensions locales : un écran qu'on n'atteint pas ne mérite pas qu'on discute sa mise en page.
61
+ 5. **Exécuter les dimensions locales.** Layout, writing, forms, states, responsive et accessibilité selon le besoin.
62
+ 6. **Consolider.** Regrouper les problèmes par cause racine : token, composant, pattern, écran, contenu ou backend.
63
+ 7. **Arbitrer les conflits.** Documenter la décision et le compromis. Ne pas masquer les désaccords.
64
+ 8. **Produire le plan.** Lot 1 bloquants, lot 2 fondations, lot 3 parcours, lot 4 polish et prévention.
65
+
66
+ ## Règles d'arbitrage
67
+
68
+ - **Tâche utilisateur avant préférence esthétique.** Une correction ne doit pas réduire la compréhension ou l'accès pour gagner en minimalisme.
69
+ - **Fondation avant occurrence.** Corriger le composant ou token quand plusieurs problèmes partagent la même cause.
70
+ - **Accessibilité comme contrainte.** Une recommandation de layout ou writing ne peut pas supprimer un nom, un focus ou une information nécessaire.
71
+ - **Source canonique explicite.** En cas de divergence Figma / code / sortie du générateur, décider ce qui fait foi avant la correction.
72
+ - **Moindre régression.** Choisir le lot le plus petit capable d'améliorer réellement la qualité.
73
+ - **Confiance visible.** Une recommandation issue d'une capture ne doit pas être présentée comme un défaut de code confirmé.
74
+
75
+ ## Modes d'exécution
76
+
77
+ | Mode | Comportement |
78
+ |---|---|
79
+ | **Quick review** | 2 à 4 skills, parcours principal, problèmes bloquants/majeurs, pas de couverture exhaustive. |
80
+ | **Deep review** | Tous les skills pertinents, états, viewports, code et composants, registre complet. |
81
+ | **Pre-release gate** | Focus bloquants, accessibilité, états, responsive, forms et non-régression. |
82
+ | **Repair plan** | Aucun nouvel audit large ; transforme un diagnostic existant en lots de correction. |
83
+ | **Patch supervision** | Autorise des modifications ciblées, puis réexécute les skills concernés pour vérifier. |
84
+
85
+ ## Anti-patterns à refuser
86
+
87
+ - Exécuter tous les skills par défaut, même hors contexte.
88
+ - Produire une liste unique sans indiquer l'expert ou la cause.
89
+ - Fusionner deux problèmes proches au point de perdre les critères spécifiques.
90
+ - Faire une refonte complète avant de corriger les bloquants.
91
+ - Masquer les conflits entre recommandations.
92
+ - Déclarer l'ensemble du produit validé à partir d'un échantillon limité.
93
+
94
+ ## Contrat de sortie exact
95
+
96
+ ```
97
+ # Cadrage
98
+ - Artefact et tâche utilisateur
99
+ - Périmètre / échantillon
100
+ - Source de vérité
101
+ - Mode de delivery
102
+ - Niveau de profondeur
103
+
104
+ # Plan d'orchestration
105
+ Skill | Motif d'activation | Artefacts transmis | Limites
106
+
107
+ # Diagnostic consolidé
108
+ UI-XX | Cause racine | Skills sources | Sévérité | Localisations | Preuves | Impact | Correction | Critères | Confiance
109
+
110
+ # Arbitrages
111
+ Conflit | Options | Décision | Compromis | Validation
112
+
113
+ # Plan de correction
114
+ Lot 1 - Blocants
115
+ Lot 2 - Fondations
116
+ Lot 3 - Parcours et états
117
+ Lot 4 - Polish et prévention
118
+
119
+ # Verdict
120
+ - PASS | PASS WITH FIXES | FAIL | BLOCKED
121
+ - Couverture réelle
122
+ - Risques résiduels
123
+ ```
124
+
125
+ ## Critères de qualité du skill
126
+
127
+ - Les skills activés sont justifiés par le contenu de l'artefact.
128
+ - Chaque problème conserve ses preuves et son origine.
129
+ - Les doublons sont fusionnés par cause racine, pas simplement supprimés.
130
+ - Les conflits sont arbitrés explicitement.
131
+ - Le verdict indique clairement la couverture et les limites.
132
+
133
+ ## Exemple d'invocation
134
+
135
+ ```
136
+ /better-interface
137
+ Artefact: nouveau parcours de création d'alerte
138
+ Mode: deep review
139
+ Delivery: Lovable + Supabase
140
+ Sources: production, repo, captures mobile/desktop
141
+ Objectif: décider si la feature est prête pour la bêta
142
+ Exclusions: stratégie produit et pricing
143
+ ```
@@ -0,0 +1,80 @@
1
+ [
2
+ {
3
+ "id": "interface-single-dimension",
4
+ "skill": "better-interface",
5
+ "kind": "conformant",
6
+ "delivery_mode": "classique",
7
+ "artifact": "Un écran statique dont le seul problème est la structure visuelle (grille, spacing, hiérarchie). Pas de formulaire, pas d'état complexe, pas de tableau. On demande une revue d'interface.",
8
+ "golden": {
9
+ "expected_findings": [
10
+ "structure visuelle de l'écran : grille, spacing et hiérarchie, relevé par better-layout"
11
+ ],
12
+ "forbidden_findings": ["exécuter tous les skills par défaut", "produire une liste sans indiquer l'expert ou la cause"],
13
+ "expected_verdict": "PASS",
14
+ "should_refuse": false,
15
+ "note": "L'orchestrateur doit sélectionner uniquement les experts utiles (ici better-layout), pas tout lancer : better-forms et better-states n'ont rien à auditer sur cet écran. Les findings attendus portent sur la structure visuelle ; un problème de formulaire ou d'état signalé ici en sévérité majeure ou plus est un faux positif."
16
+ }
17
+ },
18
+ {
19
+ "id": "interface-multi-expert",
20
+ "skill": "better-interface",
21
+ "kind": "obvious-defect",
22
+ "delivery_mode": "ai-builder",
23
+ "artifact": "Un parcours de création d'alerte avec plusieurs problèmes : structure confuse, boutons icône-seule sans nom, et états d'erreur génériques. Aucun formulaire de saisie complexe.",
24
+ "golden": {
25
+ "expected_findings": [
26
+ "sélectionne better-layout, better-accessibility et better-states",
27
+ "consolide les problèmes par cause racine plutôt que par skill",
28
+ "arbitre en gardant l'accessibilité comme contrainte, pas sacrifiée à l'esthétique",
29
+ "produit un plan par lots, bloquants d'abord"
30
+ ],
31
+ "forbidden_findings": ["exécuter better-forms alors qu'il n'y a pas de formulaire", "fusionner deux problèmes distincts au point de perdre leurs critères"],
32
+ "expected_verdict": "FAIL",
33
+ "should_refuse": false
34
+ }
35
+ },
36
+ {
37
+ "id": "interface-shared-root-cause",
38
+ "skill": "better-interface",
39
+ "kind": "subtle-defect",
40
+ "delivery_mode": "hybride",
41
+ "artifact": "Deux écrans où un même token de spacing mal défini produit à la fois un défaut de layout et une incohérence entre les écrans. Deux experts (better-layout, better-consistency) signaleraient chacun un symptôme.",
42
+ "golden": {
43
+ "expected_findings": [
44
+ "consolide les deux symptômes en une seule cause racine, le token de spacing",
45
+ "corrige la fondation avant les occurrences"
46
+ ],
47
+ "forbidden_findings": ["créer deux tickets distincts pour la même cause racine", "masquer le conflit entre recommandations"],
48
+ "expected_verdict": "PASS WITH FIXES",
49
+ "should_refuse": false
50
+ }
51
+ },
52
+ {
53
+ "id": "interface-out-of-scope-strategy",
54
+ "skill": "better-interface",
55
+ "kind": "out-of-scope",
56
+ "delivery_mode": "classique",
57
+ "artifact": "On demande à l'orchestrateur de trancher si la proposition de valeur du produit est la bonne et quel pricing adopter.",
58
+ "golden": {
59
+ "expected_findings": [],
60
+ "forbidden_findings": ["se prononcer sur la proposition de valeur", "recommander un pricing"],
61
+ "expected_verdict": "PASS",
62
+ "should_refuse": false,
63
+ "note": "La stratégie produit et le pricing sont hors du périmètre de la revue d'interface. L'orchestrateur reste sur l'interface."
64
+ }
65
+ },
66
+ {
67
+ "id": "interface-insufficient",
68
+ "skill": "better-interface",
69
+ "kind": "insufficient",
70
+ "delivery_mode": "classique",
71
+ "artifact": "« Fais une revue complète de mon produit. » Aucun écran, aucun artefact, aucun périmètre fourni.",
72
+ "golden": {
73
+ "expected_findings": [],
74
+ "forbidden_findings": ["déclarer le produit validé à partir de rien"],
75
+ "expected_verdict": "BLOCKED",
76
+ "should_refuse": true,
77
+ "note": "Sans artefact ni périmètre, l'orchestrateur ne peut pas cadrer. Il doit signaler les accès manquants avant toute revue."
78
+ }
79
+ }
80
+ ]