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.
- package/README.md +153 -0
- package/dist/connectors.js +76 -0
- package/dist/decisions.js +67 -0
- package/dist/embeddings.js +98 -0
- package/dist/evals.js +172 -0
- package/dist/finding-identity.js +229 -0
- package/dist/handbook.js +98 -0
- package/dist/paths.js +62 -0
- package/dist/profile.js +79 -0
- package/dist/reviews.js +99 -0
- package/dist/server.js +1136 -0
- package/dist/skills.js +57 -0
- package/dist/state.js +48 -0
- package/handbook-embeddings.json +1 -0
- package/package.json +46 -0
- package/skills/EVALS.md +122 -0
- package/skills/README.md +59 -0
- package/skills/_shared/delivery-modes.md +12 -0
- package/skills/_shared/execution-contract.md +43 -0
- package/skills/_shared/issue-schema.md +25 -0
- package/skills/_shared/severity-model.md +16 -0
- package/skills/analyze-figma/evals/cases.json +140 -0
- package/skills/analyze-url/evals/cases.json +136 -0
- package/skills/better-accessibility/SKILL.md +141 -0
- package/skills/better-accessibility/evals/cases.json +83 -0
- package/skills/better-components/SKILL.md +125 -0
- package/skills/better-components/evals/cases.json +77 -0
- package/skills/better-consistency/SKILL.md +125 -0
- package/skills/better-consistency/evals/cases.json +77 -0
- package/skills/better-forms/SKILL.md +135 -0
- package/skills/better-forms/evals/cases.json +78 -0
- package/skills/better-interface/SKILL.md +143 -0
- package/skills/better-interface/evals/cases.json +80 -0
- package/skills/better-layout/SKILL.md +132 -0
- package/skills/better-layout/evals/cases.json +81 -0
- package/skills/better-navigation/SKILL.md +170 -0
- package/skills/better-navigation/evals/cases.json +131 -0
- package/skills/better-performance/SKILL.md +195 -0
- package/skills/better-performance/evals/cases.json +114 -0
- package/skills/better-responsive/SKILL.md +123 -0
- package/skills/better-responsive/evals/cases.json +77 -0
- package/skills/better-states/SKILL.md +129 -0
- package/skills/better-states/evals/cases.json +78 -0
- package/skills/better-writing/SKILL.md +138 -0
- package/skills/better-writing/evals/cases.json +77 -0
- package/skills/review-ai-product/SKILL.md +231 -0
- package/skills/review-ai-product/evals/cases.json +120 -0
- package/skills/review-data-security/SKILL.md +210 -0
- package/skills/review-data-security/evals/cases.json +138 -0
- package/skills/review-figma-hygiene/SKILL.md +186 -0
- package/skills/review-figma-hygiene/evals/cases.json +158 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: better-layout
|
|
3
|
+
description: Détecte et corrige les problèmes de composition, alignement, spacing, hiérarchie, densité et regroupement visuel d'un écran, page ou composant.
|
|
4
|
+
version: 1.0
|
|
5
|
+
category: design-expert
|
|
6
|
+
role: Design expert
|
|
7
|
+
execution_mode: diagnose-first
|
|
8
|
+
supports: [ai-builder, traditional, hybrid]
|
|
9
|
+
inputs: [image, url, figma, code]
|
|
10
|
+
outputs: [issue-register, correction-plan, acceptance-criteria]
|
|
11
|
+
relays: [better-responsive, better-consistency, better-components, better-accessibility]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# /better-layout
|
|
15
|
+
|
|
16
|
+
**Rôle** : Design expert · **Mode par défaut** : diagnostic puis correction ciblée.
|
|
17
|
+
|
|
18
|
+
Voir le [contrat commun](../_shared/execution-contract.md), le [schéma de problème](../_shared/issue-schema.md) (préfixe `LAYOUT`), 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 la structure visuelle lisible, stable et intentionnelle sans redessiner arbitrairement le produit. Le skill explique la logique de chaque correction et préserve les patterns existants lorsqu'ils sont cohérents.
|
|
23
|
+
|
|
24
|
+
## Déclenchement
|
|
25
|
+
|
|
26
|
+
Écran, page, composant ou parcours dont la structure visuelle semble confuse, déséquilibrée ou fragile.
|
|
27
|
+
|
|
28
|
+
- **Utiliser pour** : espacements irréguliers, alignements cassés, densité excessive, contenus flottants, groupes mal définis, grilles incohérentes, CTA noyés, sections sans rythme.
|
|
29
|
+
- **Utiliser aussi pour** : un écran généré par IA qui semble « presque correct » mais manque de structure ; une interface dont le responsive a révélé une architecture de layout fragile.
|
|
30
|
+
- **Ne pas utiliser seul pour** : contenu, navigation, accessibilité complète, logique produit ou composants. Transmettre la dépendance au skill adapté.
|
|
31
|
+
|
|
32
|
+
## Périmètre strict
|
|
33
|
+
|
|
34
|
+
- **Analyse** : grille, conteneurs, largeur de lecture, alignements, espacements, proximités, groupements, hiérarchie visuelle, poids relatif, densité, équilibre, rythme vertical, usage de l'espace blanc, stabilité des zones.
|
|
35
|
+
- **N'analyse pas** : la pertinence métier, la justesse des textes, la stratégie de marque, la sécurité, le modèle de données ou la qualité globale des composants.
|
|
36
|
+
- **Tolérance** : un écart peut être intentionnel. Distinguer exception expressive et incohérence accidentelle.
|
|
37
|
+
|
|
38
|
+
## Informations à identifier avant l'audit
|
|
39
|
+
|
|
40
|
+
1. **Nature de l'artefact** : capture isolée, page complète, prototype, code, production ou composant.
|
|
41
|
+
2. **Viewport** : dimensions exactes ou catégorie (mobile, tablette, desktop, large desktop).
|
|
42
|
+
3. **Source de vérité** : Figma, code, Design System, Storybook, générateur IA ou production.
|
|
43
|
+
4. **Objectif principal de l'écran** : action ou compréhension que la hiérarchie doit favoriser.
|
|
44
|
+
5. **Contraintes** : grille existante, tokens, framework, contenu dynamique, localisation, densité imposée.
|
|
45
|
+
|
|
46
|
+
## Séquence d'analyse obligatoire
|
|
47
|
+
|
|
48
|
+
1. **Lire la page sans zoomer.** Identifier ce qui attire l'œil en premier, deuxième et troisième. Comparer avec l'objectif principal.
|
|
49
|
+
2. **Cartographier les zones.** Conteneur principal, colonnes, sections, groupes, barres fixes, overlays et ruptures.
|
|
50
|
+
3. **Vérifier la grille.** Largeurs, marges, colonnes, alignements verticaux et horizontaux, points d'ancrage, débordements.
|
|
51
|
+
4. **Auditer le spacing.** Espacements récurrents, écarts isolés, ruptures de rythme, logique de proximité.
|
|
52
|
+
5. **Auditer la hiérarchie.** Taille, poids, contraste, position, espace et ordre de lecture. Éviter de corriger uniquement par la taille de police.
|
|
53
|
+
6. **Auditer la densité.** Surcharge, grands vides non intentionnels, zones trop compactes, répétitions visuelles.
|
|
54
|
+
7. **Tester la robustesse.** Contenu plus long, données absentes, traduction, erreurs, changement de viewport. Signaler les layouts qui ne survivront pas.
|
|
55
|
+
8. **Proposer le minimum cohérent.** Conteneurs, groupements et spacing avant les détails décoratifs.
|
|
56
|
+
|
|
57
|
+
## Règles de décision
|
|
58
|
+
|
|
59
|
+
- **La proximité doit traduire la relation.** Des éléments liés fonctionnellement sont plus proches que des groupes voisins.
|
|
60
|
+
- **Les alignements doivent créer des axes.** Éviter les micro-décalages qui empêchent l'œil de scanner.
|
|
61
|
+
- **La hiérarchie doit être observable.** L'utilisateur comprend la priorité sans lire tous les textes.
|
|
62
|
+
- **Le spacing doit suivre une logique.** Privilégier les tokens ; sinon proposer une échelle limitée, pas une valeur unique partout.
|
|
63
|
+
- **Le contenu dynamique est la règle.** Ne jamais valider un layout uniquement avec le contenu idéal de la maquette.
|
|
64
|
+
- **La correction la plus simple prévaut.** Ne pas ajouter de cartes, séparateurs ou ombres pour résoudre un problème de mauvais groupement.
|
|
65
|
+
|
|
66
|
+
## Adaptation au mode de delivery
|
|
67
|
+
|
|
68
|
+
| Mode | Contrôles supplémentaires | Mode de correction |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| **AI Builder** | Valeurs codées en dur, wrappers inutiles, styles recréés, régressions après prompt, dépendance à un contenu fixe. | Prompts courts, une zone à la fois, comparaison avant/après, vérification des routes adjacentes. |
|
|
71
|
+
| **Développement classique** | Correspondance avec Figma, tokens de spacing, grid utilitaire, conteneurs partagés, composants de layout. | Correction dans les primitives ou tokens avant les écrans individuels. |
|
|
72
|
+
| **Hybride** | Divergences entre Figma, la sortie du générateur et le code repris par les développeurs. | Définir la source canonique par couche avant de corriger. |
|
|
73
|
+
|
|
74
|
+
## Anti-patterns à refuser
|
|
75
|
+
|
|
76
|
+
- Appliquer uniformément 8 px partout sans comprendre la hiérarchie des groupes.
|
|
77
|
+
- Recentrer tous les éléments pour « faire propre ».
|
|
78
|
+
- Ajouter des conteneurs, cards ou bordures sans besoin fonctionnel.
|
|
79
|
+
- Réduire la taille des contenus pour les faire tenir au lieu de corriger l'architecture.
|
|
80
|
+
- Proposer une nouvelle direction visuelle alors qu'un ajustement de structure suffit.
|
|
81
|
+
- Qualifier un écran de « déséquilibré » sans localisation ni preuve.
|
|
82
|
+
|
|
83
|
+
## Contrat de sortie exact
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
# Résumé exécutif
|
|
87
|
+
- Verdict: PASS | PASS WITH FIXES | FAIL | BLOCKED
|
|
88
|
+
- Objectif visuel supposé ou confirmé
|
|
89
|
+
- Principaux risques de layout
|
|
90
|
+
|
|
91
|
+
# Cartographie
|
|
92
|
+
- Viewports analysés
|
|
93
|
+
- Zones et axes structurants
|
|
94
|
+
- Source de vérité
|
|
95
|
+
|
|
96
|
+
# Problèmes priorisés
|
|
97
|
+
LAYOUT-XX | Sévérité | Localisation | Preuve | Impact | Correction | Critères d'acceptation | Confiance
|
|
98
|
+
|
|
99
|
+
# Système recommandé
|
|
100
|
+
- Grille et conteneurs
|
|
101
|
+
- Échelle de spacing ou tokens existants à utiliser
|
|
102
|
+
- Règles de groupement et d'alignement
|
|
103
|
+
|
|
104
|
+
# Plan de correction
|
|
105
|
+
1. Fondations
|
|
106
|
+
2. Structure
|
|
107
|
+
3. Hiérarchie
|
|
108
|
+
4. Détails
|
|
109
|
+
|
|
110
|
+
# Vérification
|
|
111
|
+
- Viewports et scénarios à retester
|
|
112
|
+
- Régressions adjacentes à contrôler
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Critères de qualité du skill
|
|
116
|
+
|
|
117
|
+
- Chaque problème est visible ou reproductible.
|
|
118
|
+
- Les corrections sont compatibles avec la source de vérité identifiée.
|
|
119
|
+
- Les recommandations traitent d'abord la structure, puis la décoration.
|
|
120
|
+
- Le skill ne remplace pas `better-responsive` lorsqu'un comportement multi-viewport doit être spécifié.
|
|
121
|
+
- Aucun changement n'est proposé sans critère d'acceptation observable.
|
|
122
|
+
|
|
123
|
+
## Exemple d'invocation
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
/better-layout
|
|
127
|
+
Artefact: page dashboard desktop + mobile
|
|
128
|
+
Objectif: rendre les KPI et la prochaine action immédiatement lisibles
|
|
129
|
+
Source de vérité: production
|
|
130
|
+
Contraintes: conserver les composants et la palette actuels
|
|
131
|
+
Mode: diagnostic uniquement
|
|
132
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "layout-conformant-pricing",
|
|
4
|
+
"skill": "better-layout",
|
|
5
|
+
"kind": "conformant",
|
|
6
|
+
"delivery_mode": "classique",
|
|
7
|
+
"artifact": "Page pricing, desktop 1440px. Trois cartes de prix alignées sur une grille 12 colonnes, gouttières 24px constantes. Titres 32px, prix 48px, features 16px — hiérarchie claire. CTA primaire (violet plein) une seule fois par carte, aligné en bas. Espacements verticaux multiples de 8. Marges latérales 96px. Testé avec un plan au nom long : aucun débordement.",
|
|
8
|
+
"golden": {
|
|
9
|
+
"expected_findings": [],
|
|
10
|
+
"forbidden_findings": ["réécrire la stratégie de pricing", "changer la direction visuelle", "inventer un problème de hiérarchie"],
|
|
11
|
+
"expected_verdict": "PASS",
|
|
12
|
+
"should_refuse": false
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "layout-obvious-dashboard",
|
|
17
|
+
"skill": "better-layout",
|
|
18
|
+
"kind": "obvious-defect",
|
|
19
|
+
"delivery_mode": "ai-builder",
|
|
20
|
+
"artifact": "Dashboard desktop généré. 4 KPI en haut avec des espacements irréguliers (12px, 31px, 8px, 24px entre eux). Le CTA principal 'Créer une alerte' est un lien texte gris clair noyé au milieu de 9 autres liens gris identiques. Grille cassée : la colonne de droite déborde de 40px hors du conteneur à 1280px. Titres et sous-titres à la même taille (18px), hiérarchie indistinguable.",
|
|
21
|
+
"golden": {
|
|
22
|
+
"expected_findings": [
|
|
23
|
+
"espacements irréguliers entre les KPI",
|
|
24
|
+
"CTA principal noyé, manque de contraste d'importance",
|
|
25
|
+
"rupture de grille, débordement du conteneur",
|
|
26
|
+
"hiérarchie typographique absente entre titre et sous-titre"
|
|
27
|
+
],
|
|
28
|
+
"forbidden_findings": ["revoir la stratégie produit", "réécrire les libellés"],
|
|
29
|
+
"expected_verdict": "FAIL",
|
|
30
|
+
"should_refuse": false
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "layout-subtle-form",
|
|
35
|
+
"skill": "better-layout",
|
|
36
|
+
"kind": "subtle-defect",
|
|
37
|
+
"delivery_mode": "classique",
|
|
38
|
+
"artifact": "Formulaire de création de compte, desktop. Globalement propre : grille respectée, tokens de spacing cohérents (8/16/24). Un seul écart : le groupe 'Adresse' (rue, ville, code postal) a le même espacement vertical (24px) entre ses champs qu'entre les groupes distincts — la proximité ne traduit plus le regroupement. Le bouton 'Créer' et le lien 'Annuler' ont le même poids visuel.",
|
|
39
|
+
"golden": {
|
|
40
|
+
"expected_findings": [
|
|
41
|
+
"proximité ne traduit pas le regroupement dans le bloc adresse",
|
|
42
|
+
"action primaire et secondaire de poids visuel équivalent"
|
|
43
|
+
],
|
|
44
|
+
"forbidden_findings": ["refonte complète", "changer la palette"],
|
|
45
|
+
"expected_verdict": "PASS WITH FIXES",
|
|
46
|
+
"should_refuse": false
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "layout-out-of-scope-copy",
|
|
51
|
+
"skill": "better-layout",
|
|
52
|
+
"kind": "out-of-scope",
|
|
53
|
+
"delivery_mode": "classique",
|
|
54
|
+
"artifact": "Écran d'onboarding, layout impeccable (grille, spacing, hiérarchie tous corrects). Le seul vrai problème est le texte : le titre 'Optimisez votre synergie' est du jargon vide, et le bouton dit 'Soumettre' au lieu de décrire l'action.",
|
|
55
|
+
"golden": {
|
|
56
|
+
"expected_findings": [],
|
|
57
|
+
"forbidden_findings": [
|
|
58
|
+
"jargon du titre optimisez votre synergie",
|
|
59
|
+
"bouton Soumettre microcopy",
|
|
60
|
+
"réécrire le texte"
|
|
61
|
+
],
|
|
62
|
+
"expected_verdict": "PASS",
|
|
63
|
+
"should_refuse": false,
|
|
64
|
+
"note": "Défauts du ressort de better-writing. Rester dans le périmètre = NE PAS les auditer (les signaler en dépendance est toléré, pas les traiter)."
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "layout-insufficient",
|
|
69
|
+
"skill": "better-layout",
|
|
70
|
+
"kind": "insufficient",
|
|
71
|
+
"delivery_mode": "classique",
|
|
72
|
+
"artifact": "« Améliore le layout de mon app. » Aucune capture, aucun écran, aucune URL, aucun viewport, aucun composant.",
|
|
73
|
+
"golden": {
|
|
74
|
+
"expected_findings": [],
|
|
75
|
+
"forbidden_findings": [],
|
|
76
|
+
"expected_verdict": "BLOCKED",
|
|
77
|
+
"should_refuse": true,
|
|
78
|
+
"note": "Sans artefact localisable, le skill doit refuser et lister les preuves manquantes, pas produire un audit."
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
]
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: better-navigation
|
|
3
|
+
description: Juge le chemin ENTRE les écrans — architecture de l'information, cohérence de la navigation, profondeur d'accès aux tâches fréquentes, étiquettes, écrans orphelins, retours impossibles et indication de position. Ne juge aucun écran isolément.
|
|
4
|
+
version: 1.0
|
|
5
|
+
category: navigation-expert
|
|
6
|
+
role: Navigation & IA expert
|
|
7
|
+
execution_mode: path-and-structure-audit
|
|
8
|
+
supports: [ai-builder, traditional, hybrid]
|
|
9
|
+
inputs: [sitemap, screen-list, routes, prototype, url]
|
|
10
|
+
outputs: [path-map, task-access-matrix, orphan-list, risk-register]
|
|
11
|
+
invoked_by: [better-interface]
|
|
12
|
+
relays: [better-writing, better-consistency, better-states]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# /better-navigation
|
|
16
|
+
|
|
17
|
+
**Rôle** : Navigation & IA expert · **Mode par défaut** : audit des chemins et de la structure.
|
|
18
|
+
|
|
19
|
+
Voir le [contrat commun](../_shared/execution-contract.md), le [schéma de problème](../_shared/issue-schema.md) (préfixe `NAV`), le [modèle de sévérité](../_shared/severity-model.md) et la [matrice des modes](../_shared/delivery-modes.md).
|
|
20
|
+
|
|
21
|
+
## Mission
|
|
22
|
+
|
|
23
|
+
Neuf skills jugent les écrans un par un. Aucun ne juge **ce qui se passe entre eux** — et c'est là que vivent les produits où chaque écran est correct et où personne ne trouve rien.
|
|
24
|
+
|
|
25
|
+
Ce skill ne regarde pas un écran. Il regarde la **carte** : ce qui mène où, ce qu'on atteint en combien de pas, ce qu'on ne peut plus quitter, et ce que les étiquettes promettent. Un écran parfait au bout d'un chemin introuvable est un écran mort.
|
|
26
|
+
|
|
27
|
+
## Périmètre strict
|
|
28
|
+
|
|
29
|
+
**Analyse** : le rangement de l'information contre les tâches réelles, les étiquettes de navigation, la profondeur d'accès, la cohérence des schémas de navigation d'une section à l'autre, les écrans orphelins, les impasses et retours impossibles, l'indication de position.
|
|
30
|
+
|
|
31
|
+
**N'analyse pas** : la mise en page d'un écran (`better-layout`), la formulation d'un message (`better-writing`), les états d'un écran donné (`better-states`), la cohérence visuelle des composants (`better-consistency`). Une étiquette de navigation est du ressort de ce skill ; un texte d'aide dans un écran ne l'est pas.
|
|
32
|
+
|
|
33
|
+
## Ce que le skill reçoit, et ce qui le fait refuser
|
|
34
|
+
|
|
35
|
+
**Le skill a besoin de voir des CHEMINS.** Une image d'écran n'en montre aucun.
|
|
36
|
+
|
|
37
|
+
| Entrée | Ce qui devient jugeable |
|
|
38
|
+
|---|---|
|
|
39
|
+
| **Plan de site** ou arborescence | Rangement, profondeur, étiquettes, orphelins. |
|
|
40
|
+
| **Liste d'écrans avec leurs liens** (qui mène où) | Tout, y compris impasses et chemins multiples. |
|
|
41
|
+
| **Arbre de routes** (code) | Structure et profondeur réelles, y compris les écrans jamais liés. |
|
|
42
|
+
| **Prototype cliquable** ou parcours enregistré | Les chemins réellement empruntables, retours compris. |
|
|
43
|
+
| **Captures d'écran, plusieurs, avec leur enchaînement déclaré** | Les chemins déclarés, à traiter comme une déclaration et non comme une preuve. |
|
|
44
|
+
|
|
45
|
+
> **Une capture isolée ne dit rien d'un parcours.** Un écran, deux écrans sans lien déclaré entre eux, une image de maquette : le skill rend `BLOCKED` et demande ce qui manque. Juger une navigation sur un écran, c'est deviner le plan d'un bâtiment en regardant une porte.
|
|
46
|
+
|
|
47
|
+
## La règle de l'absence — le garde-fou de cet axe
|
|
48
|
+
|
|
49
|
+
**Un écran non fourni n'est pas un écran manquant. Le périmètre reçu fait foi.**
|
|
50
|
+
|
|
51
|
+
- Ne jamais écrire qu'un écran, une section ou une fonctionnalité « manque » : elle est peut-être simplement hors du périmètre transmis. Ce qui se juge, c'est ce qui est **là et mal relié**, pas ce qui n'a pas été montré.
|
|
52
|
+
- **Un orphelin ne se déclare que sur un périmètre déclaré complet.** Sur un extrait, un écran sans lien entrant signifie « son entrée n'est pas dans ce que j'ai reçu », pas « personne ne peut y arriver ». La différence entre les deux est tout ce skill.
|
|
53
|
+
- **Une impasse se prouve par ce qui est écrit**, pas par ce qui n'y est pas : un écran dont la liste de liens sortants est fournie et vide est une impasse ; un écran dont les liens ne sont pas documentés est un non-vérifié.
|
|
54
|
+
- Écrire en tête du rapport si le périmètre est **complet ou partiel**. Tout le reste en dépend.
|
|
55
|
+
|
|
56
|
+
## La grille
|
|
57
|
+
|
|
58
|
+
### 1. Le rangement suit-il les tâches ?
|
|
59
|
+
|
|
60
|
+
- La navigation reflète-t-elle ce que les gens viennent **faire**, ou l'organigramme de l'équipe et les tables de la base ? Un menu qui liste « Utilisateurs, Rôles, Permissions, Journaux » range des tables ; un menu qui liste « Inviter quelqu'un, Gérer les accès » range des tâches.
|
|
61
|
+
- Un objet ne se nomme pas comme une page. *« Les problèmes de nommage sont presque toujours des problèmes de modèle conceptuel »* — quand une étiquette se discute sans fin, c'est le modèle qu'il faut regarder.
|
|
62
|
+
- Deux entrées pour ce qui est en réalité **un seul objet vu deux fois** (« Recherche » et « Résultats », « Projets » et « Espaces ») : c'est un défaut de modèle, pas de menu.
|
|
63
|
+
- La taxonomie retenue porte un **risque assumé** : hiérarchique enferme dans une seule branche, facettée noie sous des facettes non discriminantes, orientée audience crée des silos. Le défaut n'est pas d'avoir choisi ; c'est que le risque du choix se réalise sans que personne l'ait vu venir.
|
|
64
|
+
|
|
65
|
+
### 2. Les étiquettes
|
|
66
|
+
|
|
67
|
+
- Une étiquette qui a besoin d'être expliquée doit être changée, pas documentée.
|
|
68
|
+
- Vocabulaire de fabrication en façade : noms de modules internes, sigles maison, noms de tables.
|
|
69
|
+
- Une même chose nommée différemment selon l'endroit d'où on la regarde.
|
|
70
|
+
- Une étiquette qui promet autre chose que ce qu'on trouve derrière — le défaut le plus coûteux du lot, parce qu'il détruit la confiance dans toute la navigation.
|
|
71
|
+
|
|
72
|
+
### 3. La profondeur, et le point d'entrée réel
|
|
73
|
+
|
|
74
|
+
- Les tâches fréquentes s'atteignent en peu de pas depuis là où les gens sont, pas depuis l'accueil. **Les gens n'arrivent pas par la home** : ils arrivent par un lien partagé, un signet, une notification, un retour arrière. Une navigation qui ne fonctionne qu'en partant de l'accueil décrit un produit que personne n'utilise.
|
|
75
|
+
- Plat plutôt que profond. Une hiérarchie qui dépasse deux niveaux réclame des repères de position à chaque niveau.
|
|
76
|
+
- Le nombre de pas compte moins que leur évidence : trois pas évidents valent mieux qu'un pas ambigu. Ne jamais compter les clics sans dire s'ils se devinent.
|
|
77
|
+
- Un groupe de navigation qui dépasse une dizaine d'entrées ne se lit plus : il se parcourt.
|
|
78
|
+
|
|
79
|
+
### 4. La cohérence entre les écrans
|
|
80
|
+
|
|
81
|
+
- Le même schéma de navigation d'une section à l'autre : ce qui est un onglet ici n'est pas un menu latéral là pour le même type de contenu.
|
|
82
|
+
- Le même objet atteint par deux chemins doit arriver dans le **même état**. Deux chemins qui mènent à deux versions du même écran sont un défaut de navigation, pas un détail.
|
|
83
|
+
- Le retour arrière fait ce qu'il annonce, et ne perd pas le travail en cours.
|
|
84
|
+
|
|
85
|
+
### 5. Orphelins, impasses et retours
|
|
86
|
+
|
|
87
|
+
- **Orphelin** : un écran qu'aucun lien du périmètre ne désigne. À ne déclarer que sur périmètre complet (voir la règle de l'absence).
|
|
88
|
+
- **Impasse** : un écran d'où l'on ne peut aller nulle part, sinon en rechargeant ou en revenant par le navigateur.
|
|
89
|
+
- **Retour impossible** : une étape qu'on ne peut pas défaire, un tunnel sans sortie déclarée, une confirmation sans chemin de retour.
|
|
90
|
+
- **Sortie non nommée** : une action qui aboutit sans dire où l'on est arrivé ni ce qu'on peut faire ensuite.
|
|
91
|
+
|
|
92
|
+
### 6. Où suis-je ?
|
|
93
|
+
|
|
94
|
+
- La section courante est indiquée dans la navigation.
|
|
95
|
+
- Au-delà de deux niveaux, le chemin parcouru est visible.
|
|
96
|
+
- Un écran atteint par un lien direct dit à quoi il appartient — c'est le corollaire du point d'entrée réel.
|
|
97
|
+
|
|
98
|
+
## Sévérité sur cet axe
|
|
99
|
+
|
|
100
|
+
| Sévérité | Sur cet axe |
|
|
101
|
+
|---|---|
|
|
102
|
+
| **Bloquant** | Une tâche essentielle n'a aucun chemin d'accès depuis le produit. Un écran dont on ne peut pas sortir sans recharger. |
|
|
103
|
+
| **Critique** | Une tâche fréquente n'est atteignable que par un chemin non découvrable. Un retour arrière qui détruit le travail en cours. Deux chemins vers le même objet qui aboutissent à deux états différents. Une étiquette qui promet autre chose que ce qu'elle ouvre. |
|
|
104
|
+
| **Majeur** | Profondeur excessive sur une tâche fréquente. Rangement calqué sur l'organigramme ou sur les tables. Schéma de navigation qui change d'une section à l'autre. Aucune indication de section courante au-delà de deux niveaux. |
|
|
105
|
+
| **Mineur** | Un orphelin isolé et sans enjeu. Un groupe de navigation un peu long. Une étiquette perfectible mais comprise. |
|
|
106
|
+
| **Note** | Choix de taxonomie dont le risque est assumé et documenté. |
|
|
107
|
+
|
|
108
|
+
## Séquence d'audit obligatoire
|
|
109
|
+
|
|
110
|
+
1. **Déclarer le périmètre et sa complétude.** Ce qui a été reçu, et si l'ensemble des écrans et des liens est là. Refuser si aucun chemin n'est visible.
|
|
111
|
+
2. **Reconstituer la carte.** Écrans, liens entrants et sortants, points d'entrée hors accueil.
|
|
112
|
+
3. **Nommer les tâches fréquentes.** Trois à cinq, tirées de ce que le produit dit faire — pas inventées.
|
|
113
|
+
4. **Tracer chaque tâche** depuis un point d'entrée réel jusqu'à sa fin : pas, décisions, alternatives, retour, sortie.
|
|
114
|
+
5. **Juger le rangement** contre ces tâches, puis les étiquettes.
|
|
115
|
+
6. **Chercher les orphelins et les impasses**, en respectant la règle de l'absence.
|
|
116
|
+
7. **Vérifier la position** : section courante, profondeur, arrivée par lien direct.
|
|
117
|
+
8. **Signaler les dépendances** vers `better-writing`, `better-consistency` ou `better-states` sans développer leur audit.
|
|
118
|
+
|
|
119
|
+
## Anti-patterns à refuser
|
|
120
|
+
|
|
121
|
+
- Juger une navigation sur une capture d'écran.
|
|
122
|
+
- Déclarer un écran orphelin sur un périmètre partiel.
|
|
123
|
+
- Compter les clics sans dire s'ils se devinent.
|
|
124
|
+
- Proposer une refonte de l'architecture quand un renommage suffit.
|
|
125
|
+
- Reprocher l'absence d'un écran qui n'était pas dans le périmètre.
|
|
126
|
+
- Recommander un schéma de navigation par préférence (« mettre une sidebar ») plutôt que par la tâche et le nombre d'entrées.
|
|
127
|
+
- Traiter un problème d'étiquette comme un problème de texte : ici, l'étiquette est de l'architecture.
|
|
128
|
+
|
|
129
|
+
## Contrat de sortie exact
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
# Verdict
|
|
133
|
+
- Verdict: PASS | PASS WITH FIXES | FAIL | BLOCKED
|
|
134
|
+
- Périmètre reçu: complet | partiel (et ce qui manque)
|
|
135
|
+
- Entrée: plan de site | liste d'écrans et liens | routes | prototype | captures déclarées
|
|
136
|
+
|
|
137
|
+
# Carte des chemins
|
|
138
|
+
Écran | Liens entrants | Liens sortants | Point d'entrée réel possible
|
|
139
|
+
|
|
140
|
+
# Accès aux tâches fréquentes
|
|
141
|
+
Tâche | Point d'entrée | Pas | Évidence du chemin | Retour possible | Sortie
|
|
142
|
+
|
|
143
|
+
# Problèmes priorisés
|
|
144
|
+
NAV-XX | Sévérité | Écran ou lien concerné | Preuve | Impact | Correction | Critères | Confiance
|
|
145
|
+
|
|
146
|
+
# Orphelins et impasses
|
|
147
|
+
- Écran -> orphelin confirmé | non vérifié (périmètre partiel) | impasse
|
|
148
|
+
|
|
149
|
+
# À passer à un autre skill
|
|
150
|
+
- Constat pressenti -> skill concerné (sans le développer)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Critères de qualité du skill
|
|
154
|
+
|
|
155
|
+
- Le périmètre et sa complétude sont déclarés avant tout constat.
|
|
156
|
+
- Chaque tâche tracée part d'un point d'entrée réel, pas de l'accueil par défaut.
|
|
157
|
+
- Aucun orphelin n'est déclaré sur un périmètre partiel.
|
|
158
|
+
- Chaque constat cite un écran, un lien ou une étiquette, jamais une impression de confusion.
|
|
159
|
+
- Les corrections proposées sont proportionnées : renommer avant de restructurer.
|
|
160
|
+
- Aucun jugement sur un écran isolé n'a franchi la frontière.
|
|
161
|
+
|
|
162
|
+
## Exemple d'invocation
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
/better-navigation
|
|
166
|
+
Produit: outil de gestion de dossiers, 18 écrans
|
|
167
|
+
Entrée: liste des écrans avec leurs liens entrants et sortants (périmètre complet)
|
|
168
|
+
Tâches fréquentes: ouvrir un dossier reçu par lien, ajouter une pièce, partager
|
|
169
|
+
Objectif: comprendre pourquoi le support reçoit « je ne trouve pas mes dossiers partagés »
|
|
170
|
+
```
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "nav-conformant-releves",
|
|
4
|
+
"skill": "better-navigation",
|
|
5
|
+
"kind": "conformant",
|
|
6
|
+
"delivery_mode": "classique",
|
|
7
|
+
"artifact": "ENTRÉE : liste des écrans avec leurs liens entrants et sortants.\nPÉRIMÈTRE : complet — les 14 écrans du produit, tous les liens documentés.\n\nPRODUIT : outil de suivi de relevés de compteurs, pour des particuliers.\nTÂCHES FRÉQUENTES DÉCLARÉES : ajouter un relevé · retrouver un relevé passé ·\najouter un compteur.\n\nNAVIGATION PRINCIPALE (4 entrées, visibles sur tous les écrans)\n Mes relevés · Mes compteurs · Ma consommation · Mon compte\n\nÉCRANS\n\n Accueil (/)\n entrants : navigation principale (logo), lien externe partagé\n sortants : Mes relevés, Mes compteurs, Ma consommation, Mon compte, Aide\n\n Mes relevés (/releves)\n entrants : navigation principale, Accueil, Ajouter un relevé (après envoi),\n Détail d'un relevé (retour)\n sortants : Ajouter un relevé, Détail d'un relevé, Mes compteurs\n\n Ajouter un relevé (/releves/nouveau)\n entrants : Mes relevés, Accueil, Détail d'un compteur\n sortants : Mes relevés (après envoi), Mes relevés (annuler)\n\n Détail d'un relevé (/releves/[id])\n entrants : Mes relevés, lien partagé direct\n sortants : Mes relevés, Modifier ce relevé, Détail d'un compteur\n indique : « Mes relevés › Relevé du 12/03/2026 »\n\n Modifier ce relevé (/releves/[id]/modifier)\n entrants : Détail d'un relevé\n sortants : Détail d'un relevé (après envoi), Détail d'un relevé (annuler)\n\n Mes compteurs (/compteurs)\n entrants : navigation principale, Accueil, Mes relevés, Détail d'un compteur\n sortants : Ajouter un compteur, Détail d'un compteur\n\n Ajouter un compteur (/compteurs/nouveau)\n entrants : Mes compteurs\n sortants : Mes compteurs (après envoi), Mes compteurs (annuler)\n\n Détail d'un compteur (/compteurs/[id])\n entrants : Mes compteurs, Détail d'un relevé, lien partagé direct\n sortants : Mes compteurs, Ajouter un relevé, Modifier ce compteur\n indique : « Mes compteurs › Compteur cuisine »\n\n Modifier ce compteur (/compteurs/[id]/modifier)\n entrants : Détail d'un compteur\n sortants : Détail d'un compteur (après envoi), Détail d'un compteur (annuler)\n\n Ma consommation (/consommation)\n entrants : navigation principale, Accueil\n sortants : Mes relevés\n\n Mon compte (/compte)\n entrants : navigation principale, Accueil\n sortants : Accueil, Aide, Se déconnecter\n\n Aide (/aide)\n entrants : Accueil, Mon compte, pied de page de tous les écrans\n sortants : Accueil, Nous écrire\n\n Nous écrire (/aide/contact)\n entrants : Aide\n sortants : Aide (après envoi), Aide (annuler)\n\n Se déconnecter (/deconnexion)\n entrants : Mon compte\n sortants : Accueil\n\nINDICATION DE POSITION\n L'entrée de navigation correspondant à la section courante est marquée sur les\n 14 écrans. Les écrans de détail affichent leur chemin.\n\nACCÈS AUX TÂCHES DÉCLARÉES, depuis un lien partagé vers Détail d'un relevé\n ajouter un relevé : Détail d'un relevé -> Détail d'un compteur -> Ajouter (2 pas)\n ou navigation principale -> Mes relevés -> Ajouter (2 pas)\n retrouver un relevé : navigation principale -> Mes relevés (1 pas)\n ajouter un compteur : navigation principale -> Mes compteurs -> Ajouter (2 pas)",
|
|
8
|
+
"golden": {
|
|
9
|
+
"expected_findings": [],
|
|
10
|
+
"forbidden_findings": [
|
|
11
|
+
"reprocher l'absence d'un écran de recherche",
|
|
12
|
+
"aucun fil d'ariane sur les écrans de premier niveau",
|
|
13
|
+
"la navigation principale gagnerait une barre latérale",
|
|
14
|
+
"l'écran de déconnexion est une impasse",
|
|
15
|
+
"trop peu d'entrées dans la navigation principale"
|
|
16
|
+
],
|
|
17
|
+
"expected_verdict": "PASS",
|
|
18
|
+
"should_refuse": false,
|
|
19
|
+
"note": "Navigation saine et jugeable : périmètre complet, quatre entrées nommées par ce qu'on vient faire, chaque écran atteignable par au moins une entrée, chaque formulaire avec sa sortie et son annulation, position marquée partout, chemin affiché sur les écrans de détail. Les trois tâches déclarées s'atteignent en deux pas depuis un lien partagé — pas depuis l'accueil, c'est le test qui compte. Deux pièges : « Se déconnecter » a bien une sortie (Accueil), et l'absence d'écran de recherche n'est pas un défaut de navigation, c'est un choix de produit hors périmètre de ce juge."
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "nav-conformant-routes",
|
|
24
|
+
"skill": "better-navigation",
|
|
25
|
+
"kind": "conformant",
|
|
26
|
+
"delivery_mode": "ai-builder",
|
|
27
|
+
"artifact": "ENTRÉE : arbre des routes du dépôt (Next.js, app router).\nPÉRIMÈTRE : complet — toutes les routes du produit, plus les liens sortants\nrelevés par recherche des composants Link dans le code.\n\napp/\n page.tsx Accueil\n dossiers/page.tsx Mes dossiers\n dossiers/[id]/page.tsx Détail d'un dossier\n dossiers/[id]/pieces/page.tsx Pièces du dossier\n dossiers/nouveau/page.tsx Nouveau dossier\n partages/page.tsx Partagés avec moi\n partages/[id]/page.tsx Détail d'un dossier partagé\n recherche/page.tsx Recherche\n compte/page.tsx Mon compte\n aide/page.tsx Aide\n\nNAVIGATION PRINCIPALE (4 entrées)\n Mes dossiers · Partagés avec moi · Recherche · Mon compte\n\nLIENS SORTANTS RELEVÉS DANS LE CODE\n\n / -> /dossiers, /partages, /recherche, /aide\n /dossiers -> /dossiers/nouveau, /dossiers/[id], /recherche\n /dossiers/[id] -> /dossiers, /dossiers/[id]/pieces, /partages\n /dossiers/[id]/pieces-> /dossiers/[id]\n /dossiers/nouveau -> /dossiers (après envoi), /dossiers (annuler)\n /partages -> /partages/[id]\n /partages/[id] -> /partages, /dossiers/[id]/pieces\n /recherche -> /dossiers/[id], /partages/[id]\n /compte -> /, /aide\n /aide -> /\n\nLIENS ENTRANTS RELEVÉS\n /compte : navigation principale uniquement\n toutes les autres routes : au moins deux entrées, listées ci-dessus\n\nINDICATION DE POSITION\n Section courante marquée dans la navigation principale sur les 10 routes.\n Chemin affiché sur /dossiers/[id] et /dossiers/[id]/pieces.\n\nTÂCHES FRÉQUENTES DÉCLARÉES\n ouvrir un dossier reçu par lien · ajouter une pièce · retrouver un dossier partagé",
|
|
28
|
+
"golden": {
|
|
29
|
+
"expected_findings": [],
|
|
30
|
+
"forbidden_findings": [
|
|
31
|
+
"l'écran du compte est orphelin faute de lien entrant",
|
|
32
|
+
"reprocher l'absence d'un écran de notifications",
|
|
33
|
+
"la profondeur des routes imbriquées est excessive",
|
|
34
|
+
"aucun fil d'ariane sur la page d'accueil"
|
|
35
|
+
],
|
|
36
|
+
"expected_verdict": "PASS",
|
|
37
|
+
"should_refuse": false,
|
|
38
|
+
"note": "Même verdict sur une AUTRE ENTRÉE : un arbre de routes, pas un plan de site. La grille doit tenir quelle que soit la forme du matériau, c'est l'objet de ce cas. Le piège est /compte : son seul lien entrant est la navigation principale — et c'est suffisant, une entrée permanente visible sur toutes les routes n'est pas une absence d'entrée. Le déclarer orphelin serait compter les liens sans regarder ce qu'ils sont."
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "nav-obvious-organigramme",
|
|
43
|
+
"skill": "better-navigation",
|
|
44
|
+
"kind": "obvious-defect",
|
|
45
|
+
"delivery_mode": "classique",
|
|
46
|
+
"artifact": "ENTRÉE : plan de site fourni par l'équipe, avec les liens entre écrans.\nPÉRIMÈTRE : complet — les 21 écrans du produit et tous leurs liens.\n\nPRODUIT : plateforme interne de gestion des demandes clients.\nTÂCHES FRÉQUENTES DÉCLARÉES : traiter une demande entrante · répondre à un\nclient · voir l'état de ses demandes en cours.\n\nNAVIGATION PRINCIPALE (7 entrées)\n Direction Commerciale · Direction Support · Direction Qualité ·\n Référentiel · Administration · Reporting · Outils\n\nARBORESCENCE\n Direction Commerciale\n > Entités\n > Comptes clients\n > Fiche compte\n > Demandes rattachées\n > Détail demande <- traiter une demande se fait ICI\n Direction Support\n > Files\n > File générale\n > Éléments de file\n > Détail élément <- même objet que Détail demande\n Direction Qualité\n > Indicateurs\n > Tableau SLA\n Référentiel\n > Nomenclatures\n > Motifs de clôture\n > Table CRM_STATUS\n Administration\n > Utilisateurs\n > Rôles\n > Habilitations\n > Journaux d'audit\n Reporting\n > Extractions\n Outils\n > Import CSV\n > Purge\n\nLIENS ENTRANTS ET SORTANTS\n\n Détail demande\n entrants : Demandes rattachées\n sortants : Répondre au client\n Répondre au client\n entrants : Détail demande\n sortants : (aucun)\n Détail élément\n entrants : Éléments de file\n sortants : Détail demande\n Confirmation d'envoi\n entrants : (aucun lien déclaré depuis un autre écran)\n sortants : (aucun)\n Mes demandes en cours\n entrants : (aucun lien déclaré depuis un autre écran)\n sortants : Détail demande\n Tous les autres écrans : liens parent/enfant de l'arborescence uniquement.\n\nINDICATION DE POSITION\n Aucune. La navigation principale ne marque pas l'entrée courante, et aucun\n écran n'affiche le chemin parcouru.\n\nACCÈS AUX TÂCHES DÉCLARÉES, depuis un lien partagé vers Détail demande\n traiter une demande : atteignable, 6 niveaux depuis l'accueil\n répondre à un client : Détail demande -> Répondre au client (1 pas),\n puis plus aucun lien sortant\n voir ses demandes en cours : écran « Mes demandes en cours » présent dans le\n produit, aucun lien n'y mène",
|
|
47
|
+
"golden": {
|
|
48
|
+
"expected_findings": [
|
|
49
|
+
"la navigation principale reprend l'organigramme des directions au lieu des tâches",
|
|
50
|
+
"des entrées nomment des tables internes, Table CRM_STATUS et Habilitations",
|
|
51
|
+
"traiter une demande réclame de descendre six niveaux d'arborescence",
|
|
52
|
+
"le même objet apparaît sous deux noms, Détail demande et Détail élément",
|
|
53
|
+
"l'écran Répondre au client est une impasse, aucun lien n'en sort",
|
|
54
|
+
"l'écran Mes demandes en cours n'est atteint par aucun lien",
|
|
55
|
+
"aucune indication de la section courante ni du chemin parcouru"
|
|
56
|
+
],
|
|
57
|
+
"forbidden_findings": [
|
|
58
|
+
"revoir la mise en page du tableau de bord",
|
|
59
|
+
"les libellés des boutons manquent de clarté",
|
|
60
|
+
"reprocher l'absence d'un moteur de recherche",
|
|
61
|
+
"restructurer entièrement le produit avant toute autre correction"
|
|
62
|
+
],
|
|
63
|
+
"expected_verdict": "FAIL",
|
|
64
|
+
"should_refuse": false,
|
|
65
|
+
"note": "Le produit interne dans son état typique : la navigation range l'organigramme et les tables, pas ce que les gens viennent faire. Le périmètre est déclaré COMPLET — c'est ce qui autorise à déclarer l'orphelin et l'impasse, et nulle part ailleurs. Deux constats sont bloquants : une tâche fréquente déclarée dont l'écran existe et que rien ne relie, et un écran d'où l'on ne peut plus rien faire après avoir répondu à un client. D'où FAIL. Le piège de proportion est dans la correction : le premier geste est de renommer et de relier, pas de restructurer."
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "nav-subtle-deux-chemins",
|
|
70
|
+
"skill": "better-navigation",
|
|
71
|
+
"kind": "subtle-defect",
|
|
72
|
+
"delivery_mode": "hybride",
|
|
73
|
+
"artifact": "ENTRÉE : liste des écrans avec leurs liens, plus le parcours enregistré\nde deux personnes en test.\nPÉRIMÈTRE : complet — les 12 écrans du produit et tous leurs liens.\n\nPRODUIT : outil de facturation pour indépendants.\nTÂCHES FRÉQUENTES DÉCLARÉES : créer une facture · relancer un impayé ·\nretrouver une facture envoyée.\n\nNAVIGATION PRINCIPALE (4 entrées)\n Factures · Clients · Relances · Mon compte\n\nÉCRANS ET LIENS\n\n Accueil (/)\n sortants : Factures, Clients, Relances, Mon compte\n\n Factures (/factures)\n entrants : navigation principale, Accueil, Nouvelle facture (après envoi)\n sortants : Nouvelle facture, Facture (/factures/[id])\n\n Facture (/factures/[id])\n entrants : Factures, Recherche, lien partagé direct\n sortants : Factures, Modifier, Relancer cette facture\n affiche : le détail complet, avec l'historique des relances\n\n Nouvelle facture (/factures/nouvelle)\n entrants : Factures, Client (/clients/[id])\n sortants : Factures (après envoi)\n NOTE DU TEST : le bouton « Précédent » du navigateur, depuis l'étape 2 du\n formulaire, ramène à l'étape 1 vidée de ce qui avait été saisi.\n\n Modifier (/factures/[id]/modifier)\n entrants : Facture\n sortants : Facture (après envoi), Facture (annuler)\n\n Clients (/clients)\n entrants : navigation principale, Accueil\n sortants : Client (/clients/[id]), Nouveau client\n\n Client (/clients/[id])\n entrants : Clients, Facture\n sortants : Clients, Nouvelle facture, Factures de ce client\n\n Factures de ce client (/clients/[id]/factures)\n entrants : Client\n sortants : Facture (/factures/[id])\n\n Nouveau client (/clients/nouveau)\n entrants : Clients\n sortants : Clients (après envoi), Clients (annuler)\n\n Relances (/relances)\n entrants : navigation principale, Accueil\n sortants : Suivi de relance (/relances/[id])\n\n Suivi de relance (/relances/[id])\n entrants : Relances\n sortants : Relances\n affiche : le détail de la facture concernée, SANS son historique de relances,\n et sans lien vers /factures/[id]\n NOTE DU TEST : les deux personnes ont cru consulter deux factures\n différentes.\n\n Mon compte (/compte)\n entrants : navigation principale, Accueil\n sortants : Accueil, Aide\n\nINDICATION DE POSITION\n Section courante marquée sur les 12 écrans. Aucun écran n'affiche le chemin.\n\nACCÈS AUX TÂCHES DÉCLARÉES, depuis un lien partagé vers Facture\n créer une facture : navigation principale -> Factures -> Nouvelle (2 pas)\n retrouver une facture : navigation principale -> Factures (1 pas)\n relancer un impayé : navigation principale -> Relances -> Suivi (2 pas)\n ou Facture -> Relancer cette facture (1 pas)",
|
|
74
|
+
"golden": {
|
|
75
|
+
"expected_findings": [
|
|
76
|
+
"deux chemins mènent à la même facture et aboutissent à deux états différents",
|
|
77
|
+
"le suivi de relance ne renvoie pas vers la facture qu'il décrit",
|
|
78
|
+
"le retour arrière depuis la deuxième étape vide ce qui avait été saisi",
|
|
79
|
+
"aucun écran n'affiche le chemin parcouru"
|
|
80
|
+
],
|
|
81
|
+
"forbidden_findings": [
|
|
82
|
+
"recommander de fusionner les sections Factures et Relances",
|
|
83
|
+
"reprocher l'absence d'un tableau de bord de synthèse",
|
|
84
|
+
"les libellés de la navigation principale sont trop courts",
|
|
85
|
+
"restructurer entièrement le produit avant toute autre correction"
|
|
86
|
+
],
|
|
87
|
+
"expected_verdict": "PASS WITH FIXES",
|
|
88
|
+
"should_refuse": false,
|
|
89
|
+
"note": "Navigation qui paraît saine — quatre entrées claires, tâches en deux pas, position marquée — et dont le défaut ne se voit qu'en suivant DEUX chemins jusqu'au même objet. La facture atteinte par Relances n'affiche pas son historique de relances et ne renvoie pas vers elle-même : deux personnes en test ont cru consulter deux factures. C'est le constat que ce cas existe pour attraper, et il est invisible écran par écran — donc invisible aux neuf autres skills. Une sévérité critique, d'où PASS WITH FIXES."
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "nav-out-of-scope-atelier",
|
|
94
|
+
"skill": "better-navigation",
|
|
95
|
+
"kind": "out-of-scope",
|
|
96
|
+
"delivery_mode": "classique",
|
|
97
|
+
"artifact": "ENTRÉE : liste des écrans avec leurs liens, plus les captures des\ntrois écrans principaux et leurs textes.\nPÉRIMÈTRE : complet — les 9 écrans du produit et tous leurs liens.\n\nPRODUIT : réservation de créneaux dans un atelier partagé.\nTÂCHES FRÉQUENTES DÉCLARÉES : réserver un créneau · annuler une réservation ·\nvoir ses réservations.\n\nNAVIGATION PRINCIPALE (3 entrées)\n Réserver · Mes réservations · Mon compte\n\nÉCRANS ET LIENS\n\n Accueil (/) sortants : Réserver, Mes réservations, Mon compte, Aide\n Réserver (/reserver) entrants : navigation principale, Accueil, Mes réservations\n sortants : Choisir un créneau\n Choisir un créneau (/reserver/[date])\n entrants : Réserver\n sortants : Confirmer, Réserver (retour)\n Confirmer (/reserver/[date]/confirmer)\n entrants : Choisir un créneau\n sortants : Mes réservations (après envoi), Choisir un créneau (retour)\n Mes réservations (/reservations)\n entrants : navigation principale, Accueil, Confirmer\n sortants : Réservation, Réserver\n Réservation (/reservations/[id])\n entrants : Mes réservations, lien partagé direct\n sortants : Mes réservations, Annuler cette réservation\n Annuler cette réservation (/reservations/[id]/annuler)\n entrants : Réservation\n sortants : Mes réservations (après envoi), Réservation (retour)\n Mon compte (/compte) entrants : navigation principale, Accueil\n sortants : Accueil, Aide\n Aide (/aide) entrants : Accueil, Mon compte, pied de page\n sortants : Accueil\n\nINDICATION DE POSITION\n Section courante marquée sur les 9 écrans. Chemin affiché sur les écrans de\n réservation.\n\nACCÈS AUX TÂCHES DÉCLARÉES, depuis un lien partagé vers Réservation\n réserver un créneau : navigation principale -> Réserver -> Choisir (2 pas)\n annuler : Réservation -> Annuler (1 pas)\n voir ses réservations : navigation principale -> Mes réservations (1 pas)\n\nCE QUE MONTRENT LES CAPTURES\n Écran « Choisir un créneau » : les créneaux disponibles et indisponibles sont\n distingués par la seule couleur, sans autre marque.\n Écran « Confirmer » : le bouton principal porte le libellé « Valider ».\n Écran « Mes réservations » : quand la liste est vide, l'écran affiche\n « Aucun résultat » sans indiquer quoi faire ensuite.\n Les trois écrans emploient trois styles de bouton différents.",
|
|
98
|
+
"golden": {
|
|
99
|
+
"expected_findings": [],
|
|
100
|
+
"forbidden_findings": [
|
|
101
|
+
"les créneaux se distinguent par la seule couleur",
|
|
102
|
+
"le bouton principal porte un libellé vague",
|
|
103
|
+
"la liste vide ne dit pas quoi faire ensuite",
|
|
104
|
+
"trois styles de bouton cohabitent sur les écrans"
|
|
105
|
+
],
|
|
106
|
+
"expected_verdict": "PASS",
|
|
107
|
+
"should_refuse": false,
|
|
108
|
+
"note": "Les chemins sont bons : neuf écrans, chacun relié, chaque tunnel avec son retour, position et chemin affichés, trois tâches en un ou deux pas. Le matériau ajoute des captures, et elles portent quatre vrais défauts qui appartiennent à d'autres : la couleur comme seul signal (better-accessibility), un libellé vague (better-writing), un état vide muet (better-states), trois styles de bouton (better-consistency). Les SIGNALER en dépendance est prévu par le contrat de sortie ; en faire des constats échoue le cas. C'est la tentation la plus forte de ce skill : on lui montre des écrans, il doit continuer à ne regarder que les chemins."
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "nav-insufficient-capture-seule",
|
|
113
|
+
"skill": "better-navigation",
|
|
114
|
+
"kind": "insufficient",
|
|
115
|
+
"delivery_mode": "classique",
|
|
116
|
+
"artifact": "ENTRÉE : une capture d'écran.\nPÉRIMÈTRE : un seul écran, aucun lien déclaré.\n\nCE QUI A ÉTÉ FOURNI\n Une image de l'écran « Tableau de bord » d'une application de gestion.\n On y distingue une barre latérale portant sept entrées : Vue d'ensemble,\n Projets, Équipe, Rapports, Intégrations, Facturation, Paramètres.\n Le contenu central montre quatre cartes de synthèse et un tableau.\n\nCE QUI N'A PAS ÉTÉ FOURNI\n Aucun autre écran. Aucune indication de ce que chaque entrée de la barre\n latérale ouvre. Aucun lien entrant vers cet écran. Aucune liste de routes.\n Aucun parcours enregistré. Le nombre total d'écrans du produit n'est pas connu.\n\nDEMANDE INITIALE\n « Est-ce que ma navigation est claire ? Les gens me disent qu'ils se perdent. »",
|
|
117
|
+
"golden": {
|
|
118
|
+
"expected_findings": [],
|
|
119
|
+
"forbidden_findings": [
|
|
120
|
+
"sept entrées dans la barre latérale, c'est trop",
|
|
121
|
+
"les entrées de la barre latérale ne sont pas regroupées",
|
|
122
|
+
"aucun fil d'ariane sur cet écran",
|
|
123
|
+
"la navigation de ce produit est claire et bien rangée",
|
|
124
|
+
"reprocher l'absence d'un écran de recherche"
|
|
125
|
+
],
|
|
126
|
+
"expected_verdict": "BLOCKED",
|
|
127
|
+
"should_refuse": true,
|
|
128
|
+
"note": "Une capture, et une vraie question derrière : les gens se perdent. Il n'empêche qu'aucun chemin n'est visible — on ignore ce que chaque entrée ouvre, comment on arrive sur cet écran, et combien le produit compte d'écrans. Juger une navigation là-dessus, c'est deviner le plan d'un bâtiment en regardant une porte. Les deux trahisons sont piégées : le reproche (« sept entrées, c'est trop » — on ne sait pas ce qu'elles recouvrent) et la rassurance (« c'est bien rangé »). La sortie attendue demande ce qui manque : la liste des écrans et de leurs liens, ou l'arbre des routes."
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
]
|