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,78 @@
1
+ [
2
+ {
3
+ "id": "states-conformant-upload",
4
+ "skill": "better-states",
5
+ "kind": "conformant",
6
+ "delivery_mode": "classique",
7
+ "artifact": "Upload de fichiers. États distincts : initial, en cours (avec progression et ETA), succès (après confirmation serveur), échec partiel (3/5 réussis, traité comme résultat), erreur récupérable (le travail est préservé, retry ne rejoue que les échecs). L'opération survit si l'utilisateur quitte la page.",
8
+ "golden": {
9
+ "expected_findings": [],
10
+ "forbidden_findings": ["inventer un état manquant", "définir des règles métier de permission"],
11
+ "expected_verdict": "PASS",
12
+ "should_refuse": false
13
+ }
14
+ },
15
+ {
16
+ "id": "states-obvious-happypath",
17
+ "skill": "better-states",
18
+ "kind": "obvious-defect",
19
+ "delivery_mode": "ai-builder",
20
+ "artifact": "Génération d'un rapport IA. Un spinner plein écran pour toute opération. Le seul feedback de fin est un toast. Un bouton est désactivé sans explication. En cas d'erreur réseau, le formulaire saisi est vidé. Aucun état vide distinct d'un état d'erreur.",
21
+ "golden": {
22
+ "expected_findings": [
23
+ "spinner plein écran pour toute opération, sans distinction",
24
+ "toast comme seul feedback d'une action importante",
25
+ "bouton désactivé sans cause explicite",
26
+ "erreur qui détruit les données saisies",
27
+ "état vide confondu avec état d'erreur"
28
+ ],
29
+ "forbidden_findings": ["revoir le layout", "réécrire la proposition de valeur"],
30
+ "expected_verdict": "FAIL",
31
+ "should_refuse": false
32
+ }
33
+ },
34
+ {
35
+ "id": "states-subtle-optimistic",
36
+ "skill": "better-states",
37
+ "kind": "subtle-defect",
38
+ "delivery_mode": "hybride",
39
+ "artifact": "Ajout d'un élément à une liste. La plupart des états sont gérés. Deux écarts : le succès est affiché de façon optimiste avant la persistance (aucune compensation si l'écriture échoue) ; l'édition concurrente écrase silencieusement la version d'un autre utilisateur.",
40
+ "golden": {
41
+ "expected_findings": [
42
+ "succès optimiste affiché avant persistance, sans compensation en cas d'échec",
43
+ "conflit d'édition concurrente écrasé silencieusement"
44
+ ],
45
+ "forbidden_findings": ["refonte du composant", "changer la microcopy"],
46
+ "expected_verdict": "PASS WITH FIXES",
47
+ "should_refuse": false
48
+ }
49
+ },
50
+ {
51
+ "id": "states-out-of-scope-copy",
52
+ "skill": "better-states",
53
+ "kind": "out-of-scope",
54
+ "delivery_mode": "classique",
55
+ "artifact": "Formulaire de contact. Tous les états sont modélisés et corrects (loading, success, error, empty). Le seul défaut est le libellé d'un message d'erreur, vague et culpabilisant.",
56
+ "golden": {
57
+ "expected_findings": [],
58
+ "forbidden_findings": ["réécrire le message d'erreur", "libellé vague ou culpabilisant"],
59
+ "expected_verdict": "PASS",
60
+ "should_refuse": false,
61
+ "note": "La formulation du message est du ressort de better-writing. La MÉCANIQUE des états est correcte : hors périmètre states."
62
+ }
63
+ },
64
+ {
65
+ "id": "states-insufficient",
66
+ "skill": "better-states",
67
+ "kind": "insufficient",
68
+ "delivery_mode": "classique",
69
+ "artifact": "Une maquette d'un unique écran en happy path, sans aucune information sur les statuts backend, les données ou les erreurs possibles.",
70
+ "golden": {
71
+ "expected_findings": [],
72
+ "forbidden_findings": ["affirmer des états manquants sans base"],
73
+ "expected_verdict": "BLOCKED",
74
+ "should_refuse": true,
75
+ "note": "Sans les statuts réels ni le comportement des données, on ne peut pas modéliser les états. Demander l'objet suivi et ses statuts."
76
+ }
77
+ }
78
+ ]
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: better-writing
3
+ description: Améliore les textes du produit (labels, CTA, erreurs, empty states, onboarding, notifications) pour les rendre clairs, concis, cohérents et actionnables, sans modifier le sens métier ni la voix de marque.
4
+ version: 1.0
5
+ category: content-expert
6
+ role: Content expert
7
+ execution_mode: controlled-rewrite
8
+ supports: [ai-builder, traditional, hybrid]
9
+ inputs: [image, text, code, url]
10
+ outputs: [issue-register, rewrite, terminology-rules, acceptance-criteria]
11
+ relays: [better-forms, better-states, better-consistency, better-interface]
12
+ ---
13
+
14
+ # /better-writing
15
+
16
+ **Rôle** : Content expert · **Mode par défaut** : réécriture contrôlée.
17
+
18
+ Voir le [contrat commun](../_shared/execution-contract.md), le [schéma de problème](../_shared/issue-schema.md) (préfixe `COPY`), 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 compréhension et guider l'action sans modifier arbitrairement le sens métier, la promesse ou le ton de marque. Chaque réécriture conserve les informations nécessaires et doit être testable dans son interface réelle.
23
+
24
+ ## Déclenchement
25
+
26
+ Labels, CTA, onboarding, empty states, erreurs, notifications, formulaires ou terminologie incohérente. Une capture améliore fortement la qualité.
27
+
28
+ ## Périmètre strict
29
+
30
+ - **Analyse** : labels, boutons, aides, titres, descriptions, confirmations, erreurs, notifications, onboarding, empty states, permissions, actions destructives, terminologie et cohérence éditoriale.
31
+ - **N'analyse pas** : la stratégie de contenu marketing complète, le SEO, la direction de marque, le layout ou la logique métier. Il signale les ambiguïtés métier sans les résoudre seul.
32
+ - **Langue et locale** : respecter la langue de l'interface, le niveau de formalité, les conventions de date, nombre, devise, genre et traduction.
33
+
34
+ ## Informations à obtenir
35
+
36
+ - **Contexte d'affichage.** Écran, composant, moment du parcours, place disponible et état associé.
37
+ - **Action attendue.** Ce que l'utilisateur doit comprendre, décider ou accomplir.
38
+ - **Audience.** Niveau d'expertise, vocabulaire métier, langue et contraintes de compréhension.
39
+ - **Voix et ton.** Règles existantes, tutoiement ou vouvoiement, niveau de chaleur, terminologie officielle.
40
+ - **Contraintes juridiques ou métier.** Informations obligatoires à conserver, interdictions, nuances et seuils.
41
+
42
+ ## Séquence d'analyse obligatoire
43
+
44
+ 1. **Identifier la fonction du texte.** Informer, orienter, déclencher, confirmer, prévenir, expliquer ou récupérer d'une erreur.
45
+ 2. **Vérifier la compréhension immédiate.** Le texte doit être compris sans contexte caché ni jargon inutile.
46
+ 3. **Vérifier l'action.** Les boutons et instructions décrivent l'effet réel, pas un terme générique comme « Continuer » lorsque la conséquence est spécifique.
47
+ 4. **Réduire sans appauvrir.** Supprimer répétitions et formules creuses, mais conserver conditions, conséquences et informations de récupération.
48
+ 5. **Vérifier la cohérence.** Un concept, une action et un objet gardent le même nom dans tout le produit.
49
+ 6. **Vérifier les états.** Adapter le texte au succès, à l'erreur, au chargement, à l'absence de résultat, au manque de permission et au mode destructif.
50
+ 7. **Vérifier la localisation.** Prévoir expansion du texte, pluriels, formats et expressions non traduisibles littéralement.
51
+ 8. **Proposer une version finale.** Donner le texte prêt à intégrer, pas seulement des commentaires.
52
+
53
+ ## Règles éditoriales
54
+
55
+ - **Commencer par l'information utile.** Éviter les introductions et excuses qui retardent la compréhension.
56
+ - **Nommer l'objet et l'action.** « Supprimer le projet » est plus clair que « Confirmer ».
57
+ - **Écrire les erreurs pour la récupération.** Dire ce qui s'est passé, pourquoi si connu, et ce que l'utilisateur peut faire maintenant.
58
+ - **Éviter la culpabilisation.** Ne pas imputer l'échec à l'utilisateur quand le système ou le contexte est incertain.
59
+ - **Réserver la ponctuation forte.** Éviter les points d'exclamation automatiques, le ton promotionnel et les majuscules agressives dans les interfaces.
60
+ - **Utiliser le même terme pour la même chose.** Créer un mini-glossaire lorsque plusieurs écrans divergent.
61
+ - **Ne pas cacher les conséquences.** Les actions irréversibles, paiements, permissions et publications doivent être explicites.
62
+
63
+ ## Patrons de microcopy
64
+
65
+ | Situation | Structure recommandée | À éviter |
66
+ |---|---|---|
67
+ | **Erreur récupérable** | Problème + cause connue + prochaine action | « Une erreur est survenue. » |
68
+ | **Empty state** | Pourquoi c'est vide + valeur attendue + action disponible | Écran décoratif sans orientation. |
69
+ | **Action destructive** | Objet + conséquence + possibilité de retour ou absence de retour | « Êtes-vous sûr ? » sans précision. |
70
+ | **Permission** | Pourquoi l'accès est utile + donnée concernée + choix clair | Demande opaque ou forcée. |
71
+ | **Succès** | Résultat obtenu + prochaine étape seulement si utile | Toast générique « Succès ! ». |
72
+ | **CTA** | Verbe + objet ou résultat | « Valider », « OK », « Continuer » par défaut. |
73
+
74
+ ## Adaptation au mode de delivery
75
+
76
+ - **AI Builder.** Produire des remplacements localisés et nommer précisément les fichiers, composants ou textes à changer. Prévenir les réécritures globales involontaires.
77
+ - **Classique.** Aligner les textes avec le content design system, les composants et les clés de traduction.
78
+ - **Hybride.** Identifier quelle source contient le texte canonique : maquette, code, CMS, traduction ou base de données.
79
+
80
+ ## Anti-patterns à refuser
81
+
82
+ - Réécrire sans connaître l'emplacement ni l'action attendue.
83
+ - Uniformiser le ton en supprimant les nuances nécessaires entre erreur, succès et danger.
84
+ - Raccourcir un texte réglementaire ou métier au point de changer son sens.
85
+ - Employer des synonymes pour « éviter la répétition » dans un produit.
86
+ - Ajouter du ton de marque dans une situation critique où la clarté prime.
87
+ - Proposer plusieurs variantes sans recommandation finale.
88
+
89
+ ## Contrat de sortie exact
90
+
91
+ ```
92
+ # Diagnostic
93
+ - Fonction du texte
94
+ - Audience et contexte
95
+ - Problèmes observés
96
+ - Contraintes à préserver
97
+
98
+ # Réécriture recommandée
99
+ COPY-XX | Localisation | Texte actuel | Texte recommandé | Rationale | Risque | Confiance
100
+
101
+ # Terminologie
102
+ - Terme canonique
103
+ - Variantes à supprimer
104
+ - Règle d'usage
105
+
106
+ # États associés
107
+ - Default
108
+ - Loading
109
+ - Success
110
+ - Error
111
+ - Empty / No result
112
+ - Destructive si applicable
113
+
114
+ # Critères de validation
115
+ - Compréhension sans contexte externe
116
+ - Action et conséquence explicites
117
+ - Cohérence avec le produit
118
+ - Compatibilité localisation et espace disponible
119
+ ```
120
+
121
+ ## Critères de qualité du skill
122
+
123
+ - Chaque proposition conserve le sens métier et les informations obligatoires.
124
+ - Le texte final est directement intégrable.
125
+ - Une seule recommandation principale est fournie, avec variantes uniquement si le contexte l'exige.
126
+ - Les termes canoniques sont cohérents entre les écrans concernés.
127
+ - Les erreurs donnent une voie de récupération lorsque celle-ci existe.
128
+
129
+ ## Exemple d'invocation
130
+
131
+ ```
132
+ /better-writing
133
+ Artefact: onboarding en 4 étapes
134
+ Audience: responsables de restaurant, non techniques
135
+ Ton: professionnel, direct, vouvoiement
136
+ Objectif: réduire l'ambiguïté et rendre chaque CTA explicite
137
+ Contrainte: conserver les mentions légales
138
+ ```
@@ -0,0 +1,77 @@
1
+ [
2
+ {
3
+ "id": "writing-conformant-errors",
4
+ "skill": "better-writing",
5
+ "kind": "conformant",
6
+ "delivery_mode": "classique",
7
+ "artifact": "Écran de paiement. CTA « Payer 49 € ». Erreur carte : « Paiement refusé par ta banque. Vérifie le numéro ou essaie une autre carte. » Empty state du panier : « Ton panier est vide. Ajoute un article pour commencer. » Terminologie stable : « panier » partout, jamais « cart » ni « sac ». Ton direct, vouvoiement cohérent.",
8
+ "golden": {
9
+ "expected_findings": [],
10
+ "forbidden_findings": ["revoir la stratégie de contenu marketing", "corriger le layout", "inventer une incohérence de ton"],
11
+ "expected_verdict": "PASS",
12
+ "should_refuse": false
13
+ }
14
+ },
15
+ {
16
+ "id": "writing-obvious-microcopy",
17
+ "skill": "better-writing",
18
+ "kind": "obvious-defect",
19
+ "delivery_mode": "ai-builder",
20
+ "artifact": "Flow de création de compte. Bouton principal « Soumettre ». Message d'erreur générique « Une erreur est survenue. » Empty state décoratif sans orientation, juste une illustration. La même action est appelée « Créer » sur un écran, « Ajouter » sur un autre et « Nouveau » sur un troisième.",
21
+ "golden": {
22
+ "expected_findings": [
23
+ "CTA générique Soumettre, ne décrit pas l'action",
24
+ "message d'erreur générique sans cause ni prochaine action",
25
+ "empty state décoratif sans orientation ni action",
26
+ "terminologie divergente Créer / Ajouter / Nouveau pour la même action"
27
+ ],
28
+ "forbidden_findings": ["revoir la grille ou le spacing", "changer la direction visuelle"],
29
+ "expected_verdict": "FAIL",
30
+ "should_refuse": false
31
+ }
32
+ },
33
+ {
34
+ "id": "writing-subtle-success",
35
+ "skill": "better-writing",
36
+ "kind": "subtle-defect",
37
+ "delivery_mode": "hybride",
38
+ "artifact": "Publication d'un article. Textes globalement bons. Deux écarts : le toast « Publié ! » s'affiche AVANT la confirmation serveur (l'article peut encore échouer) ; et le concept « brouillon » est appelé « draft » dans l'éditeur mais « version de travail » dans la liste.",
39
+ "golden": {
40
+ "expected_findings": [
41
+ "succès annoncé avant la confirmation serveur",
42
+ "même concept nommé différemment, brouillon / draft / version de travail"
43
+ ],
44
+ "forbidden_findings": ["réécriture globale du produit", "problème de layout"],
45
+ "expected_verdict": "PASS WITH FIXES",
46
+ "should_refuse": false
47
+ }
48
+ },
49
+ {
50
+ "id": "writing-out-of-scope-layout",
51
+ "skill": "better-writing",
52
+ "kind": "out-of-scope",
53
+ "delivery_mode": "classique",
54
+ "artifact": "Tableau de bord. Les textes sont clairs, actionnables et cohérents. Le vrai problème est visuel : les KPI ont des espacements irréguliers et la grille casse à 1280px.",
55
+ "golden": {
56
+ "expected_findings": [],
57
+ "forbidden_findings": ["espacements irréguliers des KPI", "rupture de grille", "revoir le layout"],
58
+ "expected_verdict": "PASS",
59
+ "should_refuse": false,
60
+ "note": "Défauts du ressort de better-layout. Rester dans le périmètre : ne pas auditer la structure visuelle."
61
+ }
62
+ },
63
+ {
64
+ "id": "writing-insufficient",
65
+ "skill": "better-writing",
66
+ "kind": "insufficient",
67
+ "delivery_mode": "classique",
68
+ "artifact": "« Améliore les textes de mon app. » Aucun écran, aucun emplacement, aucune action attendue, aucune audience précisée.",
69
+ "golden": {
70
+ "expected_findings": [],
71
+ "forbidden_findings": [],
72
+ "expected_verdict": "BLOCKED",
73
+ "should_refuse": true,
74
+ "note": "Sans emplacement ni action attendue, réécrire est deviner. Le skill doit demander le contexte d'affichage."
75
+ }
76
+ }
77
+ ]
@@ -0,0 +1,231 @@
1
+ ---
2
+ name: review-ai-product
3
+ description: Audit de production-readiness d'un produit construit avec un générateur IA (Lovable, Bolt, v0, Replit, Cursor…) — architecture, données, sécurité, interface, états, qualité, observabilité, capacité à évoluer — et détermine s'il est un prototype, une V0 exploitable ou une base maintenable.
4
+ version: 2.0
5
+ category: product-orchestrator
6
+ role: Product orchestrator
7
+ execution_mode: production-readiness-audit
8
+ supports: [ai-builder, hybrid]
9
+ inputs: [url, code, backend, env]
10
+ outputs: [maturity-verdict, risk-register, debt-classification, target-architecture, transition-plan]
11
+ orchestrates: [review-data-security, better-performance, better-interface, better-layout, better-accessibility, better-writing, better-responsive, better-states, better-forms, better-components, better-consistency]
12
+ ---
13
+
14
+ # /review-ai-product
15
+
16
+ **Rôle** : Product orchestrator · **Mode par défaut** : audit production readiness.
17
+
18
+ Voir le [contrat commun](../_shared/execution-contract.md), le [schéma de problème](../_shared/issue-schema.md) (préfixe `SHIP`), 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
+ Déterminer si un produit construit avec un générateur IA est un prototype, une V0 exploitable ou une base réellement maintenable. Le skill ne juge pas le générateur comme outil ; il vérifie les preuves de qualité, de sécurité et de maîtrise opérationnelle du produit.
23
+
24
+ ## Déclenchement
25
+
26
+ Avant mise en production, reprise par des développeurs, croissance du produit, dette visible ou régressions récurrentes.
27
+
28
+ - **Entrées minimales** : lien vers l'aperçu du générateur ou la production. Pour un audit fiable : dépôt synchronisé, schéma du backend et variables d'environnement documentées.
29
+
30
+ ## Principe de sécurité
31
+
32
+ - **Lecture seule par défaut.** Ne jamais lancer de migration, modifier les règles d'autorisation, secrets, données de production, configuration d'authentification ou déploiement sans autorisation explicite.
33
+ - **Aucune supposition sur le backend.** Règles d'autorisation, rôles, schémas et fonctions serveur doivent être inspectés ou marqués non vérifiés.
34
+ - **Séparer environnement et données.** Identifier local, preview, staging et production, ainsi que les données réelles ou fictives.
35
+ - **Préserver la réversibilité.** Toute recommandation de migration doit inclure sauvegarde, rollback et validation.
36
+
37
+ ## Niveaux de maturité
38
+
39
+ | Niveau | Définition | Usage acceptable |
40
+ |---|---|---|
41
+ | **Prototype** | Démonstration de parcours, données simulées ou architecture non vérifiée. | Tests internes, validation de concept. |
42
+ | **V0 contrôlée** | Fonctionnalité réelle, accès limité, risques connus, monitoring minimal, données maîtrisées. | Pilote ou bêta restreinte. |
43
+ | **Production encadrée** | Sécurité, données, qualité, déploiement et ownership documentés. | Utilisateurs réels avec support et suivi. |
44
+ | **Produit industrialisé** | Architecture maintenable, tests, observabilité, Design System, procédures et équipe capables d'évoluer. | Croissance durable et contribution multi-équipe. |
45
+
46
+ ## Séquence d'audit obligatoire
47
+
48
+ 1. **Profiler le produit.** Criticité, utilisateurs, données, intégrations, générateur utilisé, mode généré pur ou hybride et niveau de maturité attendu.
49
+ 2. **Cartographier l'architecture.** Routes, composants, hooks, services, état global, appels API, backend / BaaS, fonctions serveur et dépendances externes.
50
+ 3. **Auditer le dépôt.** Structure, scripts, types, duplication, dépendances, secrets, erreurs, tests, build et qualité.
51
+ 4. **Auditer les données et la sécurité.** Exécuter `review-data-security` sur le backend et le dépôt. Ce skill porte la grille — autorisation table par table, rôle privilégié, frontière client/serveur, secrets, intégrité, sauvegardes. L'orchestrateur ne la redécrit pas et n'en juge aucun point lui-même.
52
+ 5. **Auditer les sessions et les rôles applicatifs.** Durée de session, expiration, rôles fonctionnels du produit et parcours de récupération de compte — la part que le modèle d'autorisation ne couvre pas.
53
+ 6. **Auditer l'interface.** Exécuter `better-interface` avec les experts nécessaires sur les parcours essentiels.
54
+ 7. **Auditer les états et erreurs.** Réseau, permissions, données absentes, doublons, concurrence, refresh, reprise et opérations longues.
55
+ 8. **Auditer la production et la performance.** Variables, environnements, build, déploiement, logs, analytics, alertes, rollback et support. Puis exécuter `better-performance` sur les parcours les plus fréquentés : ce skill porte la grille, l'orchestrateur n'en juge aucun point lui-même.
56
+ 9. **Classer la dette.** Sécurité, données, architecture, UI, qualité, opérations et documentation. Distinguer dette tolérable et dette bloquante.
57
+ 10. **Produire le plan.** Fix immédiats, stabilisation, industrialisation et éventuelle transition vers une équipe de développement.
58
+
59
+ ## Sécurité, données, performance : les grilles sont ailleurs
60
+
61
+ Deux axes techniques ne sont **pas décrits ici**, et c'est délibéré.
62
+
63
+ Les invariants de sécurité et de données — modèle d'autorisation table par
64
+ table, rôle privilégié, frontière client/serveur, secrets, migrations et
65
+ intégrité, sauvegardes — sont la grille de
66
+ [`review-data-security`](../review-data-security/SKILL.md), que l'étape 4
67
+ exécute.
68
+
69
+ Les seuils et les structures de performance — poids livré, images, listes,
70
+ cascades de requêtes, cache, coût du chargement perçu — sont la grille de
71
+ [`better-performance`](../better-performance/SKILL.md), que l'étape 8 exécute.
72
+ L'orchestrateur n'établit aucun seuil chiffré de lui-même : citer « le bundle
73
+ est trop lourd » sans dire d'où vient le repère est exactement ce que cette
74
+ délégation empêche.
75
+
76
+ Ce n'est pas un renvoi de courtoisie : c'est ce qui empêche deux grilles de
77
+ diverger. Un audit complet et un audit de sécurité seul doivent conclure la même
78
+ chose sur les mêmes faits, sinon « ton produit monte » ne veut plus rien dire.
79
+
80
+ Ce que l'orchestrateur fait de ce verdict, en revanche, lui appartient :
81
+
82
+ - **Il plafonne la maturité.** Un `FAIL` de `review-data-security` maintient le
83
+ produit au niveau *Prototype*, quels que soient les autres axes.
84
+ - **Il classe la dette** et remplit le Lot 0 en citant les sévérités reçues,
85
+ sans les re-dériver.
86
+ - **Il tranche** générateur, hybride ou reprise, en pesant ce verdict contre la
87
+ complexité, la criticité et les compétences de l'équipe.
88
+
89
+ Les constats remontent **tels quels**, avec leurs identifiants `SEC-XX` et
90
+ `PERF-XX`. Ils ne sont jamais renumérotés en `SHIP-XX` : `compare_reviews` et le suivi de
91
+ progression apparient les constats d'une passe à l'autre, et une renumérotation
92
+ ferait réapparaître les mêmes failles comme nouvelles.
93
+
94
+ ## Axes de contrôle techniques
95
+
96
+ | Axe | Contrôles minimaux |
97
+ |---|---|
98
+ | **Architecture front** | Routes, boundaries, services, state, data fetching, duplication, imports, erreurs, séparation feature/UI. |
99
+ | **Qualité code** | Type safety, lint, build, dead code, logs, gestion des erreurs, dépendances, conventions. |
100
+ | **Backend / BaaS et sécurité** | Délégué à `review-data-security` — voir sa grille. L'orchestrateur reçoit sa matrice d'autorisation, ses risques `SEC` et son verdict ; il n'inspecte rien lui-même sur cet axe. |
101
+ | **Fiabilité** | Retry, idempotence, double soumission, timeouts, transactions, conflits et reprise. |
102
+ | **Performance** | Délégué à `better-performance` — voir sa grille. L'orchestrateur reçoit ses mesures, ses constats `PERF` et son verdict ; il n'établit lui-même aucun seuil. |
103
+ | **Opérations** | Preview/staging/prod, logs, alertes, analytics, backups, rollback, ownership et incident. |
104
+
105
+ ## Axes de contrôle produit et design
106
+
107
+ - **Parcours essentiels.** Chaque tâche critique doit fonctionner avec données réelles, refresh, navigation arrière, session expirée et erreurs.
108
+ - **Interface.** Activer `better-interface` sur les flows principaux, puis consolider les causes racines dans les composants ou tokens.
109
+ - **États.** Les statuts backend doivent correspondre aux états visibles ; aucun succès anticipé ou erreur silencieuse.
110
+ - **Responsive et accessibilité.** Valider mobile, tablette, desktop, clavier, focus et sémantique sur les composants critiques.
111
+ - **Design System.** Identifier primitives partagées, tokens, composants dupliqués, styles codés en dur et source de vérité.
112
+ - **Mesure.** Événements principaux, erreurs, abandons, activation et métriques doivent être observables sans exposer de données sensibles.
113
+
114
+ ## Classification de la dette
115
+
116
+ | Classe | Exemples | Décision |
117
+ |---|---|---|
118
+ | **Bloquante** | Autorisation serveur absente, secret exposé, données critiques non sauvegardées, parcours principal cassé. | Corriger avant utilisateurs réels ou suspendre le lancement. |
119
+ | **Structurelle** | Duplication, migrations non maîtrisées, composants couplés, absence de tests sur parcours critique. | Plan de stabilisation avant accélération des features. |
120
+ | **Opérationnelle** | Pas de logs, alertes, rollback, ownership ou procédure incident. | Mettre en place avant montée en charge. |
121
+ | **Produit / UX** | États manquants, erreurs opaques, responsive fragile, incohérences. | Prioriser selon impact et fréquence. |
122
+ | **Acceptée** | Dette locale, documentée, sans impact actuel et avec condition de réévaluation. | Conserver dans registre avec owner. |
123
+
124
+ ## Décision générateur, hybride ou reprise
125
+
126
+ - **Rester sur le générateur si** le produit est maîtrisé, les changements sont simples, la qualité est contrôlée et l'équipe possède les compétences d'exploitation.
127
+ - **Passer en hybride si** des fonctionnalités ou intégrations exigent plus de contrôle, mais la base générée reste exploitable.
128
+ - **Préparer une reprise technique si** la dette structurelle, la criticité, la complexité ou les contraintes de sécurité dépassent la capacité de contrôle du mode actuel.
129
+ - **Ne pas décider selon la préférence.** La recommandation s'appuie sur complexité, intégration, criticité, compétences, coûts de changement et preuves d'instabilité.
130
+
131
+ ## Plan de correction standard
132
+
133
+ | Lot | Objectif | Exemples |
134
+ |---|---|---|
135
+ | **0 - Sécuriser** | Éliminer les risques immédiats. | Secrets, autorisation serveur, accès, sauvegardes, données, parcours cassé. |
136
+ | **1 - Stabiliser** | Rendre le comportement prévisible. | Erreurs, états, migrations, idempotence, logs, tests critiques. |
137
+ | **2 - Systémiser** | Réduire la duplication et les régressions. | Composants, tokens, services, conventions, Storybook. |
138
+ | **3 - Industrialiser** | Permettre l'évolution durable. | CI, environnements, observabilité, documentation, ownership. |
139
+ | **4 - Accélérer** | Reprendre les features après maîtrise du socle. | Roadmap, expérimentations, optimisation. |
140
+
141
+ ## Anti-patterns à refuser
142
+
143
+ - Déclarer le produit prêt parce que le build passe.
144
+ - Considérer le backend comme sécurisé sans avoir exécuté `review-data-security`, ou pondérer son verdict par la qualité du reste du produit.
145
+ - Réécrire le produit complet sans mesurer la dette et les invariants utiles.
146
+ - Envoyer un énorme prompt au générateur pour corriger plusieurs couches à la fois.
147
+ - Migrer la base sans sauvegarde, environnement de test et rollback.
148
+ - Confondre absence d'erreur visible et observabilité.
149
+ - Recommander une sortie du générateur par principe plutôt que par preuves.
150
+
151
+ ## Contrat de sortie exact
152
+
153
+ ```
154
+ # Verdict exécutif
155
+ - Niveau de maturité: Prototype | V0 contrôlée | Production encadrée | Industrialized
156
+ - Verdict: PASS | PASS WITH FIXES | FAIL | BLOCKED
157
+ - Mode recommandé: Rester sur le générateur | Hybride | Reprise technique
158
+ - Principaux risques
159
+
160
+ # Couverture et preuves
161
+ - Accès reçus
162
+ - Environnements
163
+ - Données réelles / fictives
164
+ - Éléments non vérifiés
165
+
166
+ # Architecture actuelle
167
+ - Front
168
+ - Backend / BaaS (stack identifié)
169
+ - Intégrations
170
+ - Déploiement
171
+ - Sources de vérité
172
+
173
+ # Registre des risques
174
+ SHIP-XX | Domaine | Sévérité | Localisation | Preuve | Impact | Correction | Critères | Confiance
175
+
176
+ # Diagnostic sécurité et données consolidé
177
+ - Résultats de review-data-security (matrice d'autorisation, constats SEC, non vérifié)
178
+ - Plafond de maturité imposé, le cas échéant
179
+
180
+ # Diagnostic performance consolidé
181
+ - Résultats de better-performance (mesures, causes localisées, constats PERF)
182
+ - Ce qui n'a pas pu être mesuré
183
+
184
+ # Diagnostic interface consolidé
185
+ - Résultats de better-interface
186
+ - Causes racines système
187
+
188
+ # Dette
189
+ Dette | Classe | Rayon d'impact | Owner | Échéance / condition | Décision
190
+
191
+ # Architecture cible
192
+ - Ce qui reste
193
+ - Ce qui est refactoré
194
+ - Ce qui est remplacé
195
+ - Frontières générateur / code / backend
196
+
197
+ # Plan de transition
198
+ Lot 0 Sécuriser
199
+ Lot 1 Stabiliser
200
+ Lot 2 Systémiser
201
+ Lot 3 Industrialiser
202
+ Lot 4 Accélérer
203
+
204
+ # Vérification finale
205
+ - Tests fonctionnels
206
+ - Tests sécurité et permissions
207
+ - Tests UI / responsive / accessibilité
208
+ - Logs, alertes, backup et rollback
209
+ ```
210
+
211
+ ## Critères de qualité du skill
212
+
213
+ - Le verdict sépare clairement prototype, V0, production et industrialisation.
214
+ - Aucune sécurité backend n'est considérée valide sans preuve : le verdict vient de `review-data-security`, jamais d'une appréciation de l'orchestrateur.
215
+ - Les risques de données et permissions sont traités avant les améliorations visuelles.
216
+ - Les recommandations de rester sur le générateur, hybrider ou migrer sont fondées sur des critères explicites.
217
+ - Le plan est ordonné, réversible et compatible avec une continuité de service.
218
+
219
+ ## Exemple d'invocation
220
+
221
+ ```
222
+ /review-ai-product
223
+ Produit: SaaS B2B en bêta privée
224
+ Générateur: Lovable (dépôt synchronisé)
225
+ Backend: Supabase
226
+ Accès: production, GitHub, Supabase read-only
227
+ Mode actuel: généré, sans reprise développeur
228
+ Objectif: décider si 100 utilisateurs peuvent être onboardés
229
+ Contraintes: ne modifier aucune donnée, aucun secret ni règle d'autorisation
230
+ Profondeur: audit production readiness complet
231
+ ```
@@ -0,0 +1,120 @@
1
+ [
2
+ {
3
+ "id": "ship-conformant-v0",
4
+ "skill": "review-ai-product",
5
+ "kind": "conformant",
6
+ "delivery_mode": "ai-builder",
7
+ "artifact": "Produit construit avec Lovable sur Supabase, accès complet fourni (dépôt synchronisé, schéma de la base, variables d'env documentées). RLS présentes et inspectées sur toutes les tables, aucun secret exposé, parcours principal fonctionnel avec données réelles, monitoring minimal assumé et documenté. Équipe maîtrise l'exploitation.",
8
+ "golden": {
9
+ "expected_findings": [
10
+ "dette opérationnelle acceptée : monitoring minimal, à réévaluer avant montée en charge"
11
+ ],
12
+ "forbidden_findings": ["recommander une reprise technique par principe", "déclarer industrialisé sans tests ni observabilité"],
13
+ "expected_verdict": "PASS WITH FIXES",
14
+ "should_refuse": false,
15
+ "note": "Produit sain, accès complets : le verdict attendu est PASS WITH FIXES et la recommandation « rester sur le générateur », fondée sur les preuves. La seule observation légitime est la dette opérationnelle assumée (monitoring minimal) ; toute autre alerte de sévérité majeure ou plus est un faux positif."
16
+ }
17
+ },
18
+ {
19
+ "id": "ship-obvious-security",
20
+ "skill": "review-ai-product",
21
+ "kind": "obvious-defect",
22
+ "delivery_mode": "ai-builder",
23
+ "artifact": "Produit généré (Lovable + Supabase) prêt à ouvrir à 100 users. À l'inspection : RLS absente sur deux tables contenant des données clients, une clé de service Supabase exposée côté client, et le parcours principal casse sur données réelles. Le build passe cependant.",
24
+ "golden": {
25
+ "expected_findings": [
26
+ "RLS absente sur des tables de données clients, risque bloquant",
27
+ "secret / clé de service exposé côté client",
28
+ "parcours principal cassé sur données réelles",
29
+ "sécurité et données traitées avant toute amélioration UI"
30
+ ],
31
+ "forbidden_findings": ["déclarer le produit prêt parce que le build passe", "prioriser des corrections visuelles avant les risques de permission"],
32
+ "expected_verdict": "FAIL",
33
+ "should_refuse": false
34
+ }
35
+ },
36
+ {
37
+ "id": "ship-obvious-firebase-rules",
38
+ "skill": "review-ai-product",
39
+ "kind": "obvious-defect",
40
+ "delivery_mode": "ai-builder",
41
+ "artifact": "Produit construit avec Bolt, backend Firebase (Firestore + Storage), ouverture publique prévue la semaine prochaine. Accès fournis : dépôt, fichiers de règles, console en lecture. Le fichier firestore.rules contient encore `match /{document=**} { allow read, write: if true; }`, les collections `invoices` et `users` sont lues directement depuis le client, la clé du compte de service Admin SDK est committée dans le dépôt, et aucun fichier de règles n'est versionné par environnement (le même projet Firebase sert de dev et de prod). Le build passe et l'UI est propre.",
42
+ "golden": {
43
+ "expected_findings": [
44
+ "règles Firestore ouvertes en lecture et écriture, aucun modèle d'autorisation appliqué côté serveur, risque bloquant",
45
+ "clé de compte de service Admin SDK exposée dans le dépôt",
46
+ "un seul projet Firebase pour dev et prod, environnements et données non séparés",
47
+ "règles et indexes non versionnés, changement de schéma non reproductible",
48
+ "sécurité et données traitées avant toute amélioration UI"
49
+ ],
50
+ "forbidden_findings": ["déclarer le produit prêt parce que le build passe", "conclure que l'absence de Supabase met le backend hors périmètre", "supposer que les règles par défaut de Firebase protègent les collections"],
51
+ "expected_verdict": "FAIL",
52
+ "should_refuse": false
53
+ }
54
+ },
55
+ {
56
+ "id": "ship-subtle-convex-authz",
57
+ "skill": "review-ai-product",
58
+ "kind": "subtle-defect",
59
+ "delivery_mode": "hybride",
60
+ "artifact": "Produit démarré sur v0 puis repris partiellement par deux développeurs, backend Convex. Le schéma est déclaré dans le dépôt, les secrets sont dans les variables d'environnement du host, l'auth est branchée et le composant appelle bien `useQuery` avec l'utilisateur connecté. En lisant les fonctions : la mutation publique `updateOrganizationMember` reçoit un `organizationId` en argument et écrit sans vérifier que l'identité appelante appartient à cette organisation ; le filtrage par organisation est fait dans le composant React. Deux autres queries publiques renvoient toute la table et laissent le client filtrer. Aucun test sur ces fonctions.",
61
+ "golden": {
62
+ "expected_findings": [
63
+ "mutation publique Convex sans vérification de l'identité appelante, autorisation contournable en appelant la fonction directement",
64
+ "filtrage par organisation fait côté client et non côté serveur",
65
+ "queries publiques renvoyant plus de données que ce que l'utilisateur peut voir",
66
+ "absence de tests sur les fonctions serveur porteuses de l'autorisation",
67
+ "risque de permission traité avant les améliorations d'interface"
68
+ ],
69
+ "forbidden_findings": ["considérer l'autorisation acquise parce que l'auth est branchée et l'UI filtre", "conclure que le backend est hors périmètre faute de RLS Supabase", "recommander une migration vers Supabase pour régler le problème"],
70
+ "expected_verdict": "FAIL",
71
+ "should_refuse": false
72
+ }
73
+ },
74
+ {
75
+ "id": "ship-subtle-debt",
76
+ "skill": "review-ai-product",
77
+ "kind": "subtle-defect",
78
+ "delivery_mode": "hybride",
79
+ "artifact": "Produit généré puis repris partiellement par des développeurs. La sécurité est correcte (RLS inspectées, pas de secret). Mais : aucun rollback ni sauvegarde documentés, pas de logs ni d'alertes, ownership flou, et duplication croissante entre routes générées et code repris. Le build passe et l'UI est soignée.",
80
+ "golden": {
81
+ "expected_findings": [
82
+ "dette opérationnelle, absence de rollback, sauvegarde, logs et alertes",
83
+ "dette structurelle, duplication entre routes générées et code repris",
84
+ "ownership flou entre code généré et code repris",
85
+ "absence d'erreur visible confondue avec observabilité"
86
+ ],
87
+ "forbidden_findings": ["déclarer prêt car le build passe et l'UI est soignée", "réécrire le produit complet sans mesurer la dette"],
88
+ "expected_verdict": "PASS WITH FIXES",
89
+ "should_refuse": false
90
+ }
91
+ },
92
+ {
93
+ "id": "ship-out-of-scope-visual",
94
+ "skill": "review-ai-product",
95
+ "kind": "out-of-scope",
96
+ "delivery_mode": "ai-builder",
97
+ "artifact": "Produit généré sain (sécurité, données, opérations documentées). On demande explicitement de refaire la direction visuelle et de proposer une nouvelle identité de marque.",
98
+ "golden": {
99
+ "expected_findings": [],
100
+ "forbidden_findings": ["proposer une nouvelle direction visuelle", "refondre l'identité de marque"],
101
+ "expected_verdict": "PASS",
102
+ "should_refuse": false,
103
+ "note": "Le skill juge la maturité et la maîtrise opérationnelle, pas la direction artistique. Rester sur la production-readiness."
104
+ }
105
+ },
106
+ {
107
+ "id": "ship-insufficient-access",
108
+ "skill": "review-ai-product",
109
+ "kind": "insufficient",
110
+ "delivery_mode": "ai-builder",
111
+ "artifact": "Un simple lien de preview du générateur. Aucun accès au dépôt, au schéma du backend, aux règles d'autorisation ni aux variables d'environnement. Demande : verdict de production-readiness fiable.",
112
+ "golden": {
113
+ "expected_findings": [],
114
+ "forbidden_findings": ["considérer le backend sécurisé sans inspecter son modèle d'autorisation", "produire un verdict fiable sans les accès"],
115
+ "expected_verdict": "BLOCKED",
116
+ "should_refuse": true,
117
+ "note": "Sans dépôt, schéma et règles d'autorisation, aucun verdict de sécurité fiable. Le skill doit lister les accès manquants (lecture seule) avant de conclure."
118
+ }
119
+ }
120
+ ]