devmethod-ai 0.1.0 → 0.3.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/.agents/skills/decision-architecture/SKILL.md +10 -0
- package/.agents/skills/decision-architecture/assets/ADR.md +6 -3
- package/.agents/skills/design-to-code/SKILL.md +7 -1
- package/.agents/skills/design-to-code/references/visual-creation.md +37 -0
- package/.agents/skills/project-foundation/SKILL.md +3 -1
- package/.agents/skills/project-foundation/assets/CADRAGE.md +11 -0
- package/.agents/skills/project-foundation/assets/EXISTANT.md +14 -0
- package/.agents/skills/project-foundation/assets/OPPORTUNITES.md +10 -0
- package/.agents/skills/project-foundation/assets/PROJECT_PROFILE.md +4 -2
- package/.agents/skills/project-foundation/assets/REGLES.md +6 -0
- package/.agents/skills/project-foundation/assets/START_HERE.md +2 -0
- package/.agents/skills/project-foundation/references/delivery-planning.md +11 -0
- package/.agents/skills/project-foundation/references/exploration.md +11 -0
- package/.agents/skills/project-foundation/references/mission-context.md +37 -0
- package/.agents/skills/project-foundation/references/operating-commands.md +26 -6
- package/.agents/skills/project-foundation/references/work-sizing.md +1 -1
- package/.agents/skills/scoped-delivery/SKILL.md +6 -0
- package/.agents/skills/scoped-delivery/assets/MISSION.md +18 -1
- package/.agents/skills/scoped-delivery/assets/PLAN.md +20 -0
- package/.agents/skills/scoped-delivery/assets/REPRISE.md +10 -0
- package/.agents/skills/scoped-delivery/assets/REVIEW.md +34 -0
- package/.agents/skills/scoped-delivery/assets/SLICE.md +5 -0
- package/.agents/skills/scoped-delivery/assets/TICKET.md +21 -0
- package/.agents/skills/scoped-delivery/references/review-workflow.md +29 -0
- package/COMPATIBILITY.md +1 -1
- package/README.md +46 -17
- package/START_HERE.md +2 -0
- package/dist/cli.js +122 -90
- package/dist/review-app.js +462 -0
- package/dist/review-browser.js +567 -0
- package/dist/review-cli.js +68 -0
- package/dist/review-model.js +101 -0
- package/dist/review-open.js +19 -0
- package/dist/review-ui.css +782 -0
- package/dist/review.js +13 -0
- package/docs/ADR-007-conversation-and-mission-ownership.md +13 -0
- package/docs/ADR-008-review-presentation.md +13 -0
- package/docs/MISSIONS.md +2 -0
- package/docs/RELEASE-0.1.0.md +14 -3
- package/docs/RELEASE-0.2.0.md +48 -0
- package/docs/RELEASE-0.3.0.md +24 -0
- package/docs/REVIEW-SOURCES.md +13 -0
- package/docs/REVIEW-VALIDATION.md +34 -0
- package/docs/REVIEWS.md +75 -0
- package/docs/ROADMAP.md +2 -0
- package/docs/VISUAL-CREATION-PROPOSAL.md +21 -0
- package/docs/VISUAL-WORKFLOW.md +75 -0
- package/docs/WORKFLOW-0.3-VALIDATION.md +32 -0
- package/docs/WORKFLOW-0.3.md +34 -0
- package/docs/images/devmethod-delivery.svg +10 -0
- package/docs/images/devmethod-flow.svg +13 -26
- package/docs/images/review-interface-desktop.jpg +0 -0
- package/docs/images/review-interface-mobile.jpg +0 -0
- package/docs/media/from-zero/README.md +17 -0
- package/docs/media/from-zero/devmethod-demo.fr.srt +59 -0
- package/docs/media/from-zero/scenes.json +50 -0
- package/docs/media/full-chain-4k/README.md +37 -0
- package/docs/media/full-chain-4k/devmethod-chaine-complete.fr.srt +435 -0
- package/docs/media/full-chain-4k/scenes.json +173 -0
- package/docs/media/full-chain-4k/transcripts.fr.md +315 -0
- package/docs/media/visual-chain/README.md +44 -0
- package/docs/media/visual-chain/assets/add-book-v1.png +0 -0
- package/docs/media/visual-chain/assets/completed-v1.png +0 -0
- package/docs/media/visual-chain/devmethod-du-besoin-au-produit.fr.srt +147 -0
- package/docs/media/visual-chain/execution.fr.md +30 -0
- package/docs/media/visual-chain/image-prompts.json +9 -0
- package/docs/media/visual-chain/reference-hashes.json +5 -0
- package/docs/media/visual-chain/scenes.json +232 -0
- package/docs/media/visual-chain/video-preview.jpg +0 -0
- package/docs/missions/visual-workflow.md +46 -0
- package/docs/missions/workflow-0.3-reviews/interface/REVIEW.md +109 -0
- package/docs/missions/workflow-0.3-reviews/interface/review.json +255 -0
- package/docs/missions/workflow-0.3.md +17 -0
- package/examples/clair-from-zero/AGENT-EVALUATION.md +15 -0
- package/examples/clair-from-zero/MISSION.md +41 -0
- package/examples/clair-from-zero/README.md +24 -0
- package/examples/clair-from-zero/app/app.mjs +69 -0
- package/examples/clair-from-zero/app/domain.mjs +30 -0
- package/examples/clair-from-zero/app/index.html +20 -0
- package/examples/clair-from-zero/app/storage.mjs +4 -0
- package/examples/clair-from-zero/app/styles.css +128 -0
- package/examples/clair-from-zero/browser-check.cjs +2 -0
- package/examples/clair-from-zero/tests/domain.test.mjs +37 -0
- package/examples/mission-dialogue/PROJECT_PROFILE.md +9 -0
- package/examples/mission-dialogue/architecture/decisions/001-storage.md +7 -0
- package/examples/mission-dialogue/docs/missions/first-save/PLAN.md +13 -0
- package/examples/mission-dialogue/docs/missions/first-save/REPRISE.md +6 -0
- package/examples/mission-dialogue/docs/missions/first-save/tickets/SAVE-1.md +14 -0
- package/examples/mission-dialogue/docs/missions/legacy-copy.md +9 -0
- package/examples/mission-dialogue/docs/produit/REGLES.md +5 -0
- package/examples/review/review.json +199 -0
- package/examples/visual-pilot/README.md +11 -0
- package/examples/visual-pilot/app/app.js +10 -0
- package/examples/visual-pilot/app/index.html +1 -0
- package/examples/visual-pilot/app/reference.png +0 -0
- package/examples/visual-pilot/app/style.css +3 -0
- package/examples/visual-pilot/browser-check.cjs +3 -0
- package/examples/visual-pilot/desktop-actual.png +0 -0
- package/examples/visual-pilot/directions-prompt.txt +1 -0
- package/examples/visual-pilot/directions-v1.png +0 -0
- package/examples/visual-pilot/editorial-mockup-prompt.txt +1 -0
- package/examples/visual-pilot/editorial-mockup-v1.png +0 -0
- package/examples/visual-pilot/mismatch-probe.png +0 -0
- package/examples/visual-pilot/mobile-actual.png +0 -0
- package/examples/visual-pilot/quick-filter/AGENT-RESULT.md +25 -0
- package/examples/visual-pilot/quick-filter/baseline.log +42 -0
- package/examples/visual-pilot/quick-filter/filter.mjs +3 -0
- package/examples/visual-pilot/quick-filter/filter.test.mjs +9 -0
- package/package.json +3 -3
- package/scripts/build-review.mjs +8 -0
- package/scripts/media/demo-actions.cjs +16 -0
- package/scripts/media/encode-demo.py +22 -0
- package/scripts/media/record-demo.cjs +30 -0
- package/scripts/media/visual-short/check.cjs +1 -0
- package/scripts/media/visual-short/encode.py +16 -0
- package/scripts/media/visual-short/record.cjs +4 -0
- package/scripts/media/visual-short/story.py +34 -0
- package/scripts/package-smoke.mjs +16 -3
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
1
|
|
2
|
+
00:00:00,000 --> 00:00:03,789
|
|
3
|
+
Du besoin au design, des choix techniques au produit vérifié.
|
|
4
|
+
|
|
5
|
+
2
|
|
6
|
+
00:00:03,789 --> 00:00:06,211
|
|
7
|
+
Voici Dev Method sur un projet concret.
|
|
8
|
+
|
|
9
|
+
3
|
|
10
|
+
00:00:06,917 --> 00:00:11,573
|
|
11
|
+
D’abord, décrivez le produit et ce que son utilisateur doit pouvoir faire.
|
|
12
|
+
|
|
13
|
+
4
|
|
14
|
+
00:00:12,924 --> 00:00:19,739
|
|
15
|
+
Frame fixe le périmètre : une bibliothèque personnelle, trois statuts, et une sauvegarde sur cet appareil.
|
|
16
|
+
|
|
17
|
+
5
|
|
18
|
+
00:00:20,596 --> 00:00:24,253
|
|
19
|
+
Avec design, demandez trois directions pour le même écran.
|
|
20
|
+
|
|
21
|
+
6
|
|
22
|
+
00:00:26,712 --> 00:00:29,024
|
|
23
|
+
Éditorial, Atelier ou Botanique.
|
|
24
|
+
|
|
25
|
+
7
|
|
26
|
+
00:00:29,024 --> 00:00:32,204
|
|
27
|
+
Même contenu, trois personnalités visuelles.
|
|
28
|
+
|
|
29
|
+
8
|
|
30
|
+
00:00:33,056 --> 00:00:34,278
|
|
31
|
+
Ici, le choix est A.
|
|
32
|
+
|
|
33
|
+
9
|
|
34
|
+
00:00:34,278 --> 00:00:37,270
|
|
35
|
+
Codex développe cette direction en master screen.
|
|
36
|
+
|
|
37
|
+
10
|
|
38
|
+
00:00:40,166 --> 00:00:44,773
|
|
39
|
+
Le master précise la typographie, les couleurs, les cartes et les boutons.
|
|
40
|
+
|
|
41
|
+
11
|
|
42
|
+
00:00:44,773 --> 00:00:46,702
|
|
43
|
+
Il est approuvé avant la suite.
|
|
44
|
+
|
|
45
|
+
12
|
|
46
|
+
00:00:48,594 --> 00:00:53,610
|
|
47
|
+
La commande suivante reste design : génère les écrans à partir de ce master.
|
|
48
|
+
|
|
49
|
+
13
|
|
50
|
+
00:00:56,045 --> 00:01:00,852
|
|
51
|
+
Voici le formulaire d’ajout, généré avec le master comme référence visuelle.
|
|
52
|
+
|
|
53
|
+
14
|
|
54
|
+
00:01:02,182 --> 00:01:04,090
|
|
55
|
+
Puis la vue des lectures terminées.
|
|
56
|
+
|
|
57
|
+
15
|
|
58
|
+
00:01:04,090 --> 00:01:07,035
|
|
59
|
+
La même direction accompagne un autre état du produit.
|
|
60
|
+
|
|
61
|
+
16
|
|
62
|
+
00:01:09,191 --> 00:01:14,650
|
|
63
|
+
Architecture compare les options selon les besoins, le coût et la maintenance.
|
|
64
|
+
|
|
65
|
+
17
|
|
66
|
+
00:01:14,650 --> 00:01:19,199
|
|
67
|
+
Pour ce petit prototype local, HTML, CSS et JavaScript suffisent.
|
|
68
|
+
|
|
69
|
+
18
|
|
70
|
+
00:01:20,165 --> 00:01:23,065
|
|
71
|
+
Les règles des livres restent séparées de l’interface.
|
|
72
|
+
|
|
73
|
+
19
|
|
74
|
+
00:01:23,065 --> 00:01:25,160
|
|
75
|
+
Les données sauvegardées sont validées.
|
|
76
|
+
|
|
77
|
+
20
|
|
78
|
+
00:01:25,160 --> 00:01:28,919
|
|
79
|
+
Une synchronisation entre appareils demanderait une nouvelle décision.
|
|
80
|
+
|
|
81
|
+
21
|
|
82
|
+
00:01:30,028 --> 00:01:34,242
|
|
83
|
+
Le plan relie ces écrans aux actions à réaliser et aux vérifications attendues.
|
|
84
|
+
|
|
85
|
+
22
|
|
86
|
+
00:01:36,041 --> 00:01:40,848
|
|
87
|
+
Ready vérifie le périmètre, les dépendances et les critères de réussite avant de coder.
|
|
88
|
+
|
|
89
|
+
23
|
|
90
|
+
00:01:42,046 --> 00:01:46,678
|
|
91
|
+
Implement construit l’interface et ses vrais comportements à partir des références.
|
|
92
|
+
|
|
93
|
+
24
|
|
94
|
+
00:01:48,086 --> 00:01:49,361
|
|
95
|
+
Passons au résultat.
|
|
96
|
+
|
|
97
|
+
25
|
|
98
|
+
00:01:49,361 --> 00:01:51,019
|
|
99
|
+
On filtre la bibliothèque.
|
|
100
|
+
|
|
101
|
+
26
|
|
102
|
+
00:01:51,019 --> 00:01:52,230
|
|
103
|
+
On ajoute un livre.
|
|
104
|
+
|
|
105
|
+
27
|
|
106
|
+
00:01:52,230 --> 00:01:55,418
|
|
107
|
+
On commence sa lecture, puis on le marque terminé.
|
|
108
|
+
|
|
109
|
+
28
|
|
110
|
+
00:01:55,418 --> 00:01:58,988
|
|
111
|
+
Après rechargement, les données sont toujours présentes.
|
|
112
|
+
|
|
113
|
+
29
|
|
114
|
+
00:02:08,202 --> 00:02:12,927
|
|
115
|
+
Sur mobile, les mêmes actions restent accessibles dans une disposition adaptée.
|
|
116
|
+
|
|
117
|
+
30
|
|
118
|
+
00:02:14,208 --> 00:02:16,536
|
|
119
|
+
Review examine le code et les risques.
|
|
120
|
+
|
|
121
|
+
31
|
|
122
|
+
00:02:16,536 --> 00:02:21,313
|
|
123
|
+
Ici, la revue a conduit à corriger une alerte masquée et le maintien du focus.
|
|
124
|
+
|
|
125
|
+
32
|
|
126
|
+
00:02:22,443 --> 00:02:25,926
|
|
127
|
+
Verify contrôle les parcours utiles et les résultats des tests.
|
|
128
|
+
|
|
129
|
+
33
|
|
130
|
+
00:02:28,639 --> 00:02:33,596
|
|
131
|
+
On compare ensuite le navigateur aux références, puis on corrige les écarts importants.
|
|
132
|
+
|
|
133
|
+
34
|
|
134
|
+
00:02:36,378 --> 00:02:40,128
|
|
135
|
+
La livraison locale conserve le résultat et son état de reprise.
|
|
136
|
+
|
|
137
|
+
35
|
|
138
|
+
00:02:42,393 --> 00:02:45,861
|
|
139
|
+
Handoff conserve les décisions, les preuves et les limites.
|
|
140
|
+
|
|
141
|
+
36
|
|
142
|
+
00:02:45,861 --> 00:02:50,799
|
|
143
|
+
Next retrouve ensuite la suite pertinente, ou constate que le périmètre est terminé.
|
|
144
|
+
|
|
145
|
+
37
|
|
146
|
+
00:02:51,507 --> 00:02:55,280
|
|
147
|
+
Découvrez Dev Method sur GitHub et essayez cette chaîne sur votre projet.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Exécution réelle après génération des images
|
|
2
|
+
|
|
3
|
+
Le master approuvé et les deux images dérivées étaient présents avant le code. Le dossier neuf ne contenait pas l’ancien prototype. Les étapes d’architecture, plan et préparation sont regroupées dans cette instruction.
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
$project-foundation implement VISUAL-1
|
|
7
|
+
Lis BRIEF.md et inspecte réellement les trois images de references/. Réalise le prototype décrit à partir de ces images, sans ancien code fourni. Fais la préparation et le plan proportionnés inline, implémente, teste puis relis et corrige les défauts locaux. Pas de navigateur : le parent le vérifie. Garde une mission compacte, pas un document par étape. Respecte la typographie légère et le master approuvé. Réponse finale française150 mots maximum avec preuves et prochaine commande.
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Sortie Codex CLI
|
|
11
|
+
|
|
12
|
+
VISUAL-1 est implémenté dans [app/](<projet>/app) avec :
|
|
13
|
+
|
|
14
|
+
- bibliothèque responsive fidèle au master ;
|
|
15
|
+
- couvertures recadrées depuis `master.png` ;
|
|
16
|
+
- filtres, transitions d’état et ajout par dialogue accessible ;
|
|
17
|
+
- persistance `localStorage` protégeant les données invalides ;
|
|
18
|
+
- état vide et erreurs visibles.
|
|
19
|
+
|
|
20
|
+
Preuves : 6/6 tests Node réussis dans [domain.test.mjs](<projet>/tests/domain.test.mjs), contrôles syntaxiques réussis, aucune requête externe. Relecture effectuée et recadrage responsive corrigé. `CONTRIBUTING.md` est absent, sans blocage. Le rendu navigateur reste volontairement non vérifié par cette mission.
|
|
21
|
+
|
|
22
|
+
Prochaine commande : `$project-foundation verify VISUAL-1`
|
|
23
|
+
|
|
24
|
+
## Vérification parent postérieure
|
|
25
|
+
|
|
26
|
+
Après correction CSS de hidden et conservation du focus lors des transitions : 6 tests Node réussis. Chrome confirme 3 livres initiaux, alerte masquée normalement, filtre terminé, rouvrir et état vide, dialogue, ajout, persistance après reload, mobile390px sans débordement, données locales illisibles non écrasées. Aucun pageerror dans le parcours normal. Captures inspected desktop/mobile/modal.
|
|
27
|
+
|
|
28
|
+
Livraison locale seulement. La scène integrate est une commande type associée à cette livraison, pas une preuve de déploiement.
|
|
29
|
+
|
|
30
|
+
Le CLI a omis le document de mission demandé. Le parent a créé le checkpoint MISSION.md après vérification ; ce test supervisé ne prouve pas une tenue autonome parfaite du contexte.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tool": "image_gen",
|
|
3
|
+
"master": "../../../examples/visual-pilot/editorial-mockup-v1.png",
|
|
4
|
+
"prompts": [
|
|
5
|
+
"Use case: ui-mockup. Generate a high fidelity French Lisière desktop screen derived from the attached APPROVED MASTER, not a new artistic direction. Output a single flat browser UI canvas, landscape 1536x1024, no device frame, no headings outside UI. Exact same ivory background, elegant regular-weight serif typography, thin rules, rust red primary button, book cover artwork and library header as master. Show the ADD BOOK state: center an elegant compact modal titled 'Ajouter un livre' over the dimmed existing library. Fields labeled 'Titre' and 'Auteur', filled 'Les heures claires' and 'Camille Laurent'. Footer actions 'Annuler' outlined and 'Ajouter' solid rust. Close × upper right. Main library stays subtly visible behind, no new navigation or functionality. Match reference identity and practical interface geometry. Crisp legible French text, consistent controls, no invented product features.",
|
|
6
|
+
"Use case: ui-mockup. Generate a high fidelity French Lisière desktop screen derived from the attached APPROVED MASTER, not a new artistic direction. Output single flat UI canvas landscape1536x1024 no devices or external titles. Preserve ivory, regular serif type, rust accents, thin separators, header 'Lisière' and 'Bibliothèque personnelle', heading 'Mes lectures', subtitle, upper right '+ Ajouter un livre', exact filters 'Tous', 'À lire', 'En cours', 'Terminés'. Show TERMINÉS selected with rust underline. A single completed book card uses the same 'Les jours tranquilles' cover artwork, title 'Les jours tranquilles', author 'Élise Martin', status pill 'Terminé', outlined action 'Rouvrir'. Spacious editorial layout aligned to master desktop grid, no new navigation or other content. Footer 'Lire, c’est habiter un peu plus grand.' and 'Démonstration · Livres fictifs'. Make this an obvious consistent derivative screen of the reference."
|
|
7
|
+
],
|
|
8
|
+
"correction": "Add-book initial result duplicated the mobile panel; corrected with image_gen to retain a single desktop background. Final add-book-v1.png was visually inspected."
|
|
9
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"kind": "intro",
|
|
4
|
+
"title": "De l’idée à l’application",
|
|
5
|
+
"voice": "Du besoin au design, des choix techniques au produit vérifié. Voici Dev Method sur un projet concret.",
|
|
6
|
+
"duration": 6.911338,
|
|
7
|
+
"command": "",
|
|
8
|
+
"request": "",
|
|
9
|
+
"asset": "",
|
|
10
|
+
"output": ""
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"kind": "text",
|
|
14
|
+
"title": "Décrire le produit",
|
|
15
|
+
"voice": "D’abord, décrivez le produit et ce que son utilisateur doit pouvoir faire.",
|
|
16
|
+
"duration": 6,
|
|
17
|
+
"command": "$project-foundation explore",
|
|
18
|
+
"request": "Une bibliothèque personnelle pour suivre mes lectures.",
|
|
19
|
+
"asset": "",
|
|
20
|
+
"output": "Ajouter un livre · Suivre sa lecture · Retrouver ses données"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"kind": "text",
|
|
24
|
+
"title": "Cadrer une première version",
|
|
25
|
+
"voice": "Frame fixe le périmètre : une bibliothèque personnelle, trois statuts, et une sauvegarde sur cet appareil.",
|
|
26
|
+
"duration": 7.5150570000000005,
|
|
27
|
+
"command": "$project-foundation frame",
|
|
28
|
+
"request": "Définis une première version utile et ses limites.",
|
|
29
|
+
"asset": "",
|
|
30
|
+
"output": "Ajouter · Filtrer · Changer de statut · Conserver les livres localement"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"kind": "image",
|
|
34
|
+
"title": "Demander trois directions",
|
|
35
|
+
"voice": "Avec design, demandez trois directions pour le même écran.",
|
|
36
|
+
"duration": 6,
|
|
37
|
+
"command": "$project-foundation design",
|
|
38
|
+
"request": "Propose trois directions visuelles comparables.",
|
|
39
|
+
"asset": "directions",
|
|
40
|
+
"output": ""
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"kind": "options",
|
|
44
|
+
"title": "Comparer, puis choisir",
|
|
45
|
+
"voice": "Éditorial, Atelier ou Botanique. Même contenu, trois personnalités visuelles.",
|
|
46
|
+
"duration": 6.191519,
|
|
47
|
+
"command": "",
|
|
48
|
+
"request": "",
|
|
49
|
+
"asset": "directions",
|
|
50
|
+
"output": ""
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"kind": "choice",
|
|
54
|
+
"title": "Choisir A — Éditorial",
|
|
55
|
+
"voice": "Ici, le choix est A. Codex développe cette direction en master screen.",
|
|
56
|
+
"duration": 7,
|
|
57
|
+
"command": "$project-foundation design",
|
|
58
|
+
"request": "Je choisis A. Finalise le master screen.",
|
|
59
|
+
"asset": "master",
|
|
60
|
+
"output": ""
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"kind": "image",
|
|
64
|
+
"title": "Le master fixe la référence",
|
|
65
|
+
"voice": "Le master précise la typographie, les couleurs, les cartes et les boutons. Il est approuvé avant la suite.",
|
|
66
|
+
"duration": 8,
|
|
67
|
+
"command": "",
|
|
68
|
+
"request": "",
|
|
69
|
+
"asset": "master",
|
|
70
|
+
"output": ""
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"kind": "derive",
|
|
74
|
+
"title": "Décliner le master",
|
|
75
|
+
"voice": "La commande suivante reste design : génère les écrans à partir de ce master.",
|
|
76
|
+
"duration": 7,
|
|
77
|
+
"command": "$project-foundation design",
|
|
78
|
+
"request": "Décline ce master : bibliothèque, ajout et lectures terminées.",
|
|
79
|
+
"asset": "master",
|
|
80
|
+
"output": ""
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"kind": "image",
|
|
84
|
+
"title": "Écran 02 — Ajouter un livre",
|
|
85
|
+
"voice": "Voici le formulaire d’ajout, généré avec le master comme référence visuelle.",
|
|
86
|
+
"duration": 6,
|
|
87
|
+
"command": "",
|
|
88
|
+
"request": "",
|
|
89
|
+
"asset": "add",
|
|
90
|
+
"output": ""
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"kind": "image",
|
|
94
|
+
"title": "Écran 03 — Lectures terminées",
|
|
95
|
+
"voice": "Puis la vue des lectures terminées. La même direction accompagne un autre état du produit.",
|
|
96
|
+
"duration": 7,
|
|
97
|
+
"command": "",
|
|
98
|
+
"request": "",
|
|
99
|
+
"asset": "completed",
|
|
100
|
+
"output": ""
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"kind": "text",
|
|
104
|
+
"title": "Choisir les technologies",
|
|
105
|
+
"voice": "Architecture compare les options selon les besoins, le coût et la maintenance. Pour ce petit prototype local, HTML, CSS et JavaScript suffisent.",
|
|
106
|
+
"duration": 10.707799999999999,
|
|
107
|
+
"command": "$project-foundation architecture",
|
|
108
|
+
"request": "Compare les options techniques adaptées à ce périmètre.",
|
|
109
|
+
"asset": "",
|
|
110
|
+
"output": "Prototype retenu : HTML + CSS + JavaScript · Stockage local au navigateur"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"kind": "text",
|
|
114
|
+
"title": "Organiser le code",
|
|
115
|
+
"voice": "Les règles des livres restent séparées de l’interface. Les données sauvegardées sont validées. Une synchronisation entre appareils demanderait une nouvelle décision.",
|
|
116
|
+
"duration": 9.453923,
|
|
117
|
+
"command": "$project-foundation architecture",
|
|
118
|
+
"request": "Définis les responsabilités, les risques et les compromis.",
|
|
119
|
+
"asset": "",
|
|
120
|
+
"output": "Interface ↔ Règles métier ↔ Sauvegarde locale · Limite : un appareil"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"kind": "text",
|
|
124
|
+
"title": "Préparer la réalisation",
|
|
125
|
+
"voice": "Le plan relie ces écrans aux actions à réaliser et aux vérifications attendues.",
|
|
126
|
+
"duration": 6,
|
|
127
|
+
"command": "$project-foundation plan",
|
|
128
|
+
"request": "Prépare une première tranche à partir des écrans.",
|
|
129
|
+
"asset": "",
|
|
130
|
+
"output": "Bibliothèque + filtres → Formulaire → Statuts + sauvegarde"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"kind": "text",
|
|
134
|
+
"title": "Vérifier que la tranche est prête",
|
|
135
|
+
"voice": "Ready vérifie le périmètre, les dépendances et les critères de réussite avant de coder.",
|
|
136
|
+
"duration": 6,
|
|
137
|
+
"command": "$project-foundation ready VISUAL-1",
|
|
138
|
+
"request": "Vérifie que cette tranche est prête.",
|
|
139
|
+
"asset": "",
|
|
140
|
+
"output": "Références disponibles · Interactions définies · Tests attendus"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"kind": "text",
|
|
144
|
+
"title": "Transformer les images en code",
|
|
145
|
+
"voice": "Implement construit l’interface et ses vrais comportements à partir des références.",
|
|
146
|
+
"duration": 6,
|
|
147
|
+
"command": "$project-foundation implement VISUAL-1",
|
|
148
|
+
"request": "Implémente les écrans et leurs interactions.",
|
|
149
|
+
"asset": "",
|
|
150
|
+
"output": "Nouvelle implémentation à partir du master et des images dérivées"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"kind": "app",
|
|
154
|
+
"title": "L’application fonctionne",
|
|
155
|
+
"voice": "Passons au résultat. On filtre la bibliothèque. On ajoute un livre. On commence sa lecture, puis on le marque terminé. Après rechargement, les données sont toujours présentes.",
|
|
156
|
+
"duration": 20,
|
|
157
|
+
"command": "",
|
|
158
|
+
"request": "",
|
|
159
|
+
"asset": "",
|
|
160
|
+
"output": ""
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"kind": "image",
|
|
164
|
+
"title": "Aussi sur mobile",
|
|
165
|
+
"voice": "Sur mobile, les mêmes actions restent accessibles dans une disposition adaptée.",
|
|
166
|
+
"duration": 6,
|
|
167
|
+
"command": "",
|
|
168
|
+
"request": "",
|
|
169
|
+
"asset": "mobile",
|
|
170
|
+
"output": ""
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"kind": "text",
|
|
174
|
+
"title": "Relire et corriger",
|
|
175
|
+
"voice": "Review examine le code et les risques. Ici, la revue a conduit à corriger une alerte masquée et le maintien du focus.",
|
|
176
|
+
"duration": 8,
|
|
177
|
+
"command": "$project-foundation review VISUAL-1",
|
|
178
|
+
"request": "Relis la tranche et signale les défauts à corriger.",
|
|
179
|
+
"asset": "",
|
|
180
|
+
"output": "Corrections réelles : affichage de l’alerte · Focus après changement de statut"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"kind": "text",
|
|
184
|
+
"title": "Vérifier le résultat",
|
|
185
|
+
"voice": "Verify contrôle les parcours utiles et les résultats des tests.",
|
|
186
|
+
"duration": 6,
|
|
187
|
+
"command": "$project-foundation verify VISUAL-1",
|
|
188
|
+
"request": "Vérifie les parcours, les erreurs et le rendu.",
|
|
189
|
+
"asset": "",
|
|
190
|
+
"output": "6 tests Node réussis · Parcours Chrome · Sauvegarde · Mobile"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"kind": "compare",
|
|
194
|
+
"title": "Comparer au design",
|
|
195
|
+
"voice": "On compare ensuite le navigateur aux références, puis on corrige les écarts importants.",
|
|
196
|
+
"duration": 7,
|
|
197
|
+
"command": "",
|
|
198
|
+
"request": "",
|
|
199
|
+
"asset": "desktop",
|
|
200
|
+
"output": ""
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"kind": "text",
|
|
204
|
+
"title": "Livrer une tranche terminée",
|
|
205
|
+
"voice": "La livraison locale conserve le résultat et son état de reprise.",
|
|
206
|
+
"duration": 6,
|
|
207
|
+
"command": "$project-foundation integrate VISUAL-1",
|
|
208
|
+
"request": "Consigne la livraison locale et la reprise.",
|
|
209
|
+
"asset": "",
|
|
210
|
+
"output": "Prototype local · Parcours vérifiés · Références conservées"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"kind": "text",
|
|
214
|
+
"title": "Reprendre sans repartir de zéro",
|
|
215
|
+
"voice": "Handoff conserve les décisions, les preuves et les limites. Next retrouve ensuite la suite pertinente, ou constate que le périmètre est terminé.",
|
|
216
|
+
"duration": 9.105623999999999,
|
|
217
|
+
"command": "$project-foundation handoff",
|
|
218
|
+
"request": "Prépare un point de reprise fidèle à la livraison.",
|
|
219
|
+
"asset": "",
|
|
220
|
+
"output": "Décisions + résultat + limites → $project-foundation next"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"kind": "end",
|
|
224
|
+
"title": "Votre idée. Une chaîne visible.",
|
|
225
|
+
"voice": "Découvrez Dev Method sur GitHub et essayez cette chaîne sur votre projet.",
|
|
226
|
+
"duration": 6,
|
|
227
|
+
"command": "",
|
|
228
|
+
"request": "",
|
|
229
|
+
"asset": "",
|
|
230
|
+
"output": ""
|
|
231
|
+
}
|
|
232
|
+
]
|
|
Binary file
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Visual workflow and proportionate delivery pilot
|
|
2
|
+
|
|
3
|
+
Canonical local mission record. Scope: incorporate the previously reviewed mission-tracking change; implement the reusable visual-creation procedure; forward-test a small change with an agent; demonstrate visual direction through implementation with a user-selected reference. No Rolevidence changes, merge, deployment or npm publication.
|
|
4
|
+
|
|
5
|
+
## Criteria and evidence
|
|
6
|
+
|
|
7
|
+
| ID | Criterion | Current evidence | Status |
|
|
8
|
+
| --- | --- | --- | --- |
|
|
9
|
+
| V1 | Existing design command routes new directions and preserves approved references | design-to-code/references/visual-creation.md; project-foundation routing | Implemented; linked resources resolve and installation includes procedure |
|
|
10
|
+
| V2 | Visible comparable directions and actual user selection | examples/visual-pilot/directions-v1.png generated with built-in image tool | A selected explicitly by user |
|
|
11
|
+
| V3 | Selected image mockup with approval/version | examples/visual-pilot/editorial-mockup-v1.png generated and inspected | Approved explicitly by user |
|
|
12
|
+
| V4 | Interactive implementation, desktop/mobile captures and mismatch detection | app/ implemented; browser-check.cjs passed in Chrome; desktop-actual.png and mobile-actual.png inspected; color mismatch detected and restored | Passed with disclosed fidelity limits |
|
|
13
|
+
| P1 | Agent completes a small fix without per-stage documents or redundant checks | Actual subagent fixed one predicate; 2/2 tests pass in one run; only requested report created, no stage documents. See examples/visual-pilot/quick-filter/AGENT-RESULT.md | Passed for this case |
|
|
14
|
+
| P2 | Updated kit installs with valid resources and regression checks pass | npm ci (cached), npm test 72/72, check:docs, pack --dry-run; fresh Codex install 44 files, doctor ok | Passed |
|
|
15
|
+
|
|
16
|
+
## Visual brief
|
|
17
|
+
|
|
18
|
+
Fictional Lisière personal reading library, for readers tracking books and next reading actions. No accounts, backend, purchases or external data. One main library screen with status filters, adding a book and changing reading status. Desktop and mobile. The visible board proposes A editorial ivory/ink/rust with serif hierarchy, B compact cobalt utilitarian geometry, C airy sage/forest botanical illustration. A was selected explicitly by the user.
|
|
19
|
+
|
|
20
|
+
Generated board v1 contains presentation additions (navigation, author names, decorative copy) that are proposals, not approved scope. Its “Lire” label must be resolved in the final contract: the demo tracks reading and does not supply book content. Final controls will use truthful tracking actions unless scope is changed. Book metadata is fictional.
|
|
21
|
+
|
|
22
|
+
## Asset provenance
|
|
23
|
+
|
|
24
|
+
Direction board: built-in image generation, 2026-09-13. No supplied visual reference. Prompt asked for three equal panels of the same French library screen and mobile previews, titled Éditorial, Atelier and Botanique; same three fictional books, status filters and add action; different typography, density and imagery. Saved asset: ../../examples/visual-pilot/directions-v1.png. This is a selection board, not an approved implementation reference. Detailed prompt is stored beside the asset.
|
|
25
|
+
|
|
26
|
+
## Resume
|
|
27
|
+
|
|
28
|
+
The user selected A and approved detailed mockup v1. The supervised pilot is complete locally. A future independent visual test must use a fresh agent/session; this pilot does not establish autonomous or cross-host reliability. GitHub branch push is now authorized; merge and npm publication are not.
|
|
29
|
+
|
|
30
|
+
## Verification limits
|
|
31
|
+
|
|
32
|
+
The generic skill-creator Python validator could not run because PyYAML is absent in both available Python runtimes. Repository installation/regression tests and Markdown link checks passed; these are not equivalent to behavioral validation of the entire visual procedure. The first npm ci attempt could not complete with the isolated cache/network constraints; retry using the existing npm cache offline succeeded without changing the lockfile. No npm publication, merge or new product deployment. Current evidence applies to this local change set with the approved editorial mockup.
|
|
33
|
+
|
|
34
|
+
## Selected mockup v1
|
|
35
|
+
|
|
36
|
+
Built-in image tool, reference directions-v1.png panel A. Preserves ivory/ink/rust and serif hierarchy. Removes speculative navigation and changes Lire to Commencer / Marquer terminé. Desktop three columns; mobile stacked cover/detail rows. Image inspected: controls and labels are present; mobile font sizing and header spacing require browser checks, not inferred accessibility. Generated cover lettering has minor raster artifacts and is not authoritative metadata. Final text comes from semantic HTML. The user subsequently approved this exact mockup before implementation.
|
|
37
|
+
|
|
38
|
+
## Completed browser pilot
|
|
39
|
+
|
|
40
|
+
The user explicitly approved editorial-mockup-v1.png. Vanilla HTML/CSS/JS prototype implemented under examples/visual-pilot/app, no added runtime dependencies. Real localStorage persistence, add dialog, status transitions and filters. No loading spinner: synchronous local operation; storage failure has a visible warning; empty filters have recovery guidance. No book reading content is implied.
|
|
41
|
+
|
|
42
|
+
Chrome headless test passed: initial three books, empty completed filter, starting then completing a book, adding, persistence across reload, Escape and focus return, no mobile overflow at 390px, no JS page errors. Intentional rust-to-blue mismatch detected by a targeted color assertion then removed by reload. This is a bounded mismatch probe, not an independent general visual reviewer. Desktop 1100x1000 and mobile 390x844 captures inspected against the approved board. Three-column/stacked hierarchy, rust/ivory palette and approved covers retained; cover images render from the approved image as CSS sprites. System Georgia rendering, heading size and spacing differ from the raster; no pixel-perfect claim. Full-page mobile capture scrolls beyond 844px as expected. Keyboard test covers dialog close/focus, not a full accessibility audit.
|
|
43
|
+
|
|
44
|
+
Prototype and implementation are one artifact. To run: python3 -m http.server 8765 --bind 127.0.0.1 --directory examples/visual-pilot/app. Tests require an externally available Playwright and Chrome; run node examples/visual-pilot/browser-check.cjs with PLAYWRIGHT_MODULE if necessary. No package dependency or host configuration was changed. Development server remains on loopback for user preview.
|
|
45
|
+
|
|
46
|
+
Scope complete locally: procedure, simple agent test, actual image generation, user choice, approved detailed mockup, interactive browser prototype and comparison. No publication or merge. This one supervised Codex pilot does not prove cross-host operation, general quality improvement or BMAD superiority.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Review de l’interface DevMethod
|
|
2
|
+
|
|
3
|
+
DevMethod · workflow-0.3 · 2026-09-13
|
|
4
|
+
Revision: 8d7cd3584c891c04d983f85279e14a2070ab621d + working changes; uncommitted changes: src/review-app.ts, src/review-model.ts, src/review-cli.ts, src/review.ts, src/review-ui.css, src/cli.ts
|
|
5
|
+
|
|
6
|
+
Conclusion: **Vérification bloquée**
|
|
7
|
+
Le défaut de focus observé a été corrigé et revérifié. La validation de livraison reste incomplète, avec ses limites explicites.
|
|
8
|
+
Policy: Corriger les défauts confirmés affectant le parcours et vérifier les contrôles de livraison avant publication.
|
|
9
|
+
|
|
10
|
+
## Scope
|
|
11
|
+
- Format de review, rendu sécurisé, navigation clavier/mobile et exports du candidat en cours.
|
|
12
|
+
|
|
13
|
+
## Exclusions and limits
|
|
14
|
+
- Audit exhaustif WCAG avec lecteur d’écran
|
|
15
|
+
- Exécution native du workflow conversationnel sur les trois hôtes
|
|
16
|
+
- La réouverture directe file:// est bloquée par la politique du navigateur de test ; elle n’est pas annoncée comme vérifiée.
|
|
17
|
+
- Les tests de format ne prouvent ni la vérité des preuves fournies ni le comportement d’un agent de review.
|
|
18
|
+
- Le mode d’ouverture final reste à choisir avant publication.
|
|
19
|
+
|
|
20
|
+
## Counts (whole review)
|
|
21
|
+
- Critique: 0
|
|
22
|
+
- Majeur: 1
|
|
23
|
+
- Modéré: 1
|
|
24
|
+
- Mineur: 0
|
|
25
|
+
- À vérifier: 0
|
|
26
|
+
- Réussi: 3
|
|
27
|
+
- En échec: 0
|
|
28
|
+
- Non exécuté: 0
|
|
29
|
+
- Bloqué: 1
|
|
30
|
+
- Hors périmètre: 0
|
|
31
|
+
|
|
32
|
+
## Coverage
|
|
33
|
+
- **UI-KEYBOARD — Clavier et retour mobile** (Interface, manual): Réussi. Focus après correction et conservation des filtres observés. Revision: 8d7cd3584c891c04d983f85279e14a2070ab621d + working changes. Evidence: E-FOCUS-AFTER
|
|
34
|
+
- **UI-EXPORT — Contenu de l’export HTML** (Interface, manual): Réussi. Résultats, état de sélection et empreinte CSP vérifiés dans le dernier export Chrome. Revision: 8d7cd3584c891c04d983f85279e14a2070ab621d + working changes. Evidence: E-EXPORT
|
|
35
|
+
- **UI-REOPEN — Réouverture file://** (Interface, manual): Bloqué. Non vérifiée dans le navigateur automatisé. Reason: La politique de l’outil interdit cette navigation ; aucun contournement effectué. Revision: 8d7cd3584c891c04d983f85279e14a2070ab621d + working changes. Evidence: none
|
|
36
|
+
- **SEC-REDACTION — Masquage des formats courants** (Confidentialité, automated): Réussi. Régression Bearer, variable préfixée et valeur entre guillemets réussie. Revision: fa84208 + redaction working changes. Evidence: E-REDACTION
|
|
37
|
+
|
|
38
|
+
## Findings
|
|
39
|
+
|
|
40
|
+
### FOCUS-01 — La sélection d’un constat perdait le focus clavier
|
|
41
|
+
Modéré / Confirmé / Résolu et vérifié
|
|
42
|
+
Severity rationale: La navigation clavier quittait le contenu attendu et rendait la poursuite du parcours difficile.
|
|
43
|
+
Location: src/review-app.ts
|
|
44
|
+
Impact: L’utilisateur au clavier perdait son point de navigation.
|
|
45
|
+
Trigger: Activer un constat avec Enter quand le fragment de lien doit changer.
|
|
46
|
+
Expected: Le focus arrive sur le titre du détail et permet de poursuivre au clavier.
|
|
47
|
+
Observed: Avant correction, le rendu immédiat était suivi d’un deuxième rendu lors de hashchange ; le titre focalisé était remplacé.
|
|
48
|
+
Reproduction:
|
|
49
|
+
- Activer R-01 avec Enter depuis la liste.
|
|
50
|
+
- Inspecter le focus après le changement du fragment.
|
|
51
|
+
Evidence: E-FOCUS-BEFORE
|
|
52
|
+
Correction: Mettre à jour le fragment avec history.pushState, rendre une seule fois, puis focaliser le titre. Restaurer aussi le focus après un changement d’onglet.
|
|
53
|
+
Trade-offs: Écouter popstate séparément pour les navigations historiques.
|
|
54
|
+
Resolution verification: Enter conserve le focus sur detail-title ; ArrowRight cible Correction ; le retour mobile restaure la liste filtrée.
|
|
55
|
+
Resolution evidence: E-FOCUS-AFTER
|
|
56
|
+
Sources: WAI-TABS
|
|
57
|
+
Tickets: PR-19
|
|
58
|
+
|
|
59
|
+
### REDACT-01 — Certains formats courants d’identifiants étaient partiellement masqués
|
|
60
|
+
Majeur / Confirmé / Résolu et vérifié
|
|
61
|
+
Severity rationale: Un rapport distribué pouvait conserver une valeur sensible dans un header standard ou un champ entre guillemets. Aucun identifiant réel n’a été exposé dans ce test.
|
|
62
|
+
Location: src/review-model.ts
|
|
63
|
+
Impact: Risque de divulguer une valeur sensible dans une copie de rapport si la revue de confidentialité ne la détecte pas.
|
|
64
|
+
Trigger: Importer une preuve contenant un header Bearer ou une valeur sensible avec espaces.
|
|
65
|
+
Expected: Masquer la valeur complète des formats courants pris en charge.
|
|
66
|
+
Observed: La première règle arrêtait le masquage au premier espace et ne reconnaissait pas certains préfixes de variables.
|
|
67
|
+
Reproduction:
|
|
68
|
+
- Utiliser exclusivement les cas synthétiques du test de régression du masquage.
|
|
69
|
+
Evidence: E-REDACTION
|
|
70
|
+
Correction: Reconnaître les schémas Bearer/Basic, les valeurs entre guillemets et les clés préfixées avant de produire la copie distribuée.
|
|
71
|
+
Trade-offs: Le masquage reste heuristique ; la confidentialité des images et des formats inconnus exige une inspection avant partage.
|
|
72
|
+
Resolution verification: Les valeurs synthétiques de ces trois formats sont absentes de sanitizedReview ; le document original reste inchangé.
|
|
73
|
+
Resolution evidence: E-REDACTION
|
|
74
|
+
Sources: none
|
|
75
|
+
Tickets: PR-19
|
|
76
|
+
|
|
77
|
+
## Evidence
|
|
78
|
+
|
|
79
|
+
### E-FOCUS-BEFORE — Observation réelle avant correction
|
|
80
|
+
log
|
|
81
|
+
Navigateur intégré, 2026-09-13 : activation clavier du constat R-01 puis lecture du focus. Résultat observé : document.activeElement.id vide après le second rendu déclenché par hashchange. Le lien direct devenait \#finding=R-01. Observation manuelle de cette session, pas un journal de test CI.
|
|
82
|
+
No external evidence destination.
|
|
83
|
+
|
|
84
|
+
### E-FOCUS-AFTER — Vérification réelle après correction
|
|
85
|
+
log
|
|
86
|
+
Navigateur intégré, 2026-09-13 : Enter sur le constat =\> focus detail-title. ArrowRight sur Preuve =\> focus detail-content-correction. En mobile 390x844, retour =\> focus sur le constat choisi ; query=silencieux et confidence=confirmed conservés ; aucun débordement horizontal.
|
|
87
|
+
No external evidence destination.
|
|
88
|
+
|
|
89
|
+
### E-EXPORT — Export Chrome inspecté sur disque
|
|
90
|
+
text
|
|
91
|
+
Le dernier export Chrome possède review format 1, uiState.selected=R-01, filters.query=silencieux et section=correction. Les données ont été validées et l’empreinte SHA-256 du programme correspond à la CSP. Réouverture navigateur file:// non exécutée : politique de l’outil.
|
|
92
|
+
No external evidence destination.
|
|
93
|
+
|
|
94
|
+
### E-REDACTION — Régression automatisée du masquage des identifiants
|
|
95
|
+
log
|
|
96
|
+
Cas synthétiques : header Authorization avec Bearer, variable NPM\_TOKEN et mot de passe entre guillemets contenant des espaces. Avant correction, la règle masquait seulement une partie de certaines valeurs. Le test dédié vérifie maintenant que les trois valeurs synthétiques sont totalement absentes de la source distribuée. Exécuté dans npm test : réussite.
|
|
97
|
+
No external evidence destination.
|
|
98
|
+
|
|
99
|
+
## Sources
|
|
100
|
+
- WAI-TABS: Tabs Pattern — W3C WAI; ARIA / DOM APG consulted 2026-09-13; consulted; 2026-09-13; https://www.w3.org/WAI/ARIA/apg/patterns/tabs/. Clavier, focus et association des onglets/panneaux. Compatibility: Guide de conception ; ne certifie pas une conformité WCAG complète. Provenance: Page du site officiel W3C consultée pendant cette session.
|
|
101
|
+
|
|
102
|
+
## Technologies
|
|
103
|
+
- TypeScript 5.9.3 (package-lock.json)
|
|
104
|
+
- Node.js 24.18.0 local / \>=22 package (node --version / package.json)
|
|
105
|
+
|
|
106
|
+
## Tickets
|
|
107
|
+
- PR-19 — Livraison du workflow et de la review: https://github.com/montassarkhalloufi/DevMethod/pull/19
|
|
108
|
+
|
|
109
|
+
Generated from review format 1. Counts describe the whole review. Historical evidence does not certify a later revision.
|