devmethod-ai 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/.agents/skills/decision-architecture/SKILL.md +10 -0
  2. package/.agents/skills/decision-architecture/assets/ADR.md +6 -3
  3. package/.agents/skills/project-foundation/SKILL.md +2 -0
  4. package/.agents/skills/project-foundation/assets/CADRAGE.md +11 -0
  5. package/.agents/skills/project-foundation/assets/EXISTANT.md +14 -0
  6. package/.agents/skills/project-foundation/assets/OPPORTUNITES.md +10 -0
  7. package/.agents/skills/project-foundation/assets/PROJECT_PROFILE.md +3 -2
  8. package/.agents/skills/project-foundation/assets/REGLES.md +6 -0
  9. package/.agents/skills/project-foundation/assets/START_HERE.md +2 -0
  10. package/.agents/skills/project-foundation/references/delivery-planning.md +11 -0
  11. package/.agents/skills/project-foundation/references/exploration.md +11 -0
  12. package/.agents/skills/project-foundation/references/mission-context.md +31 -4
  13. package/.agents/skills/project-foundation/references/operating-commands.md +12 -4
  14. package/.agents/skills/project-foundation/references/work-sizing.md +1 -1
  15. package/.agents/skills/scoped-delivery/SKILL.md +5 -1
  16. package/.agents/skills/scoped-delivery/assets/MISSION.md +1 -1
  17. package/.agents/skills/scoped-delivery/assets/PLAN.md +20 -0
  18. package/.agents/skills/scoped-delivery/assets/REPRISE.md +10 -0
  19. package/.agents/skills/scoped-delivery/assets/REVIEW.md +34 -0
  20. package/.agents/skills/scoped-delivery/assets/SLICE.md +5 -0
  21. package/.agents/skills/scoped-delivery/assets/TICKET.md +21 -0
  22. package/.agents/skills/scoped-delivery/references/review-workflow.md +29 -0
  23. package/COMPATIBILITY.md +1 -1
  24. package/README.md +35 -14
  25. package/START_HERE.md +2 -0
  26. package/dist/cli.js +122 -90
  27. package/dist/review-app.js +462 -0
  28. package/dist/review-browser.js +567 -0
  29. package/dist/review-cli.js +68 -0
  30. package/dist/review-model.js +101 -0
  31. package/dist/review-open.js +19 -0
  32. package/dist/review-ui.css +782 -0
  33. package/dist/review.js +13 -0
  34. package/docs/ADR-007-conversation-and-mission-ownership.md +13 -0
  35. package/docs/ADR-008-review-presentation.md +13 -0
  36. package/docs/MISSIONS.md +1 -1
  37. package/docs/RELEASE-0.2.0.md +14 -3
  38. package/docs/RELEASE-0.3.0.md +24 -0
  39. package/docs/RELEASE-0.3.1.md +15 -0
  40. package/docs/REVIEW-GUIDE.md +68 -0
  41. package/docs/REVIEW-SOURCES.md +13 -0
  42. package/docs/REVIEW-VALIDATION.md +34 -0
  43. package/docs/REVIEWS.md +75 -0
  44. package/docs/VISUAL-WORKFLOW.md +1 -1
  45. package/docs/WORKFLOW-0.3-VALIDATION.md +32 -0
  46. package/docs/WORKFLOW-0.3.md +34 -0
  47. package/docs/images/devmethod-delivery.svg +1 -1
  48. package/docs/images/devmethod-flow.svg +1 -1
  49. package/docs/images/review-correction.jpg +0 -0
  50. package/docs/images/review-coverage.jpg +0 -0
  51. package/docs/images/review-interface-desktop.jpg +0 -0
  52. package/docs/images/review-interface-mobile.jpg +0 -0
  53. package/docs/media/review-extension/README.md +21 -0
  54. package/docs/media/review-extension/scenes.json +70 -0
  55. package/docs/media/visual-chain/README.md +8 -2
  56. package/docs/media/visual-chain/devmethod-du-besoin-au-produit.fr.srt +65 -1
  57. package/docs/media/visual-chain/video-preview.jpg +0 -0
  58. package/docs/missions/review-media-0.3.1.md +11 -0
  59. package/docs/missions/workflow-0.3-reviews/interface/REVIEW.md +109 -0
  60. package/docs/missions/workflow-0.3-reviews/interface/review.json +255 -0
  61. package/docs/missions/workflow-0.3.md +19 -0
  62. package/examples/mission-dialogue/PROJECT_PROFILE.md +9 -0
  63. package/examples/mission-dialogue/architecture/decisions/001-storage.md +7 -0
  64. package/examples/mission-dialogue/docs/missions/first-save/PLAN.md +13 -0
  65. package/examples/mission-dialogue/docs/missions/first-save/REPRISE.md +6 -0
  66. package/examples/mission-dialogue/docs/missions/first-save/tickets/SAVE-1.md +14 -0
  67. package/examples/mission-dialogue/docs/missions/legacy-copy.md +9 -0
  68. package/examples/mission-dialogue/docs/produit/REGLES.md +5 -0
  69. package/examples/review/README.md +14 -0
  70. package/examples/review/REVIEW.md +98 -0
  71. package/examples/review/review-demo.html +1351 -0
  72. package/examples/review/review.json +199 -0
  73. package/package.json +2 -2
  74. package/scripts/build-review.mjs +8 -0
  75. package/scripts/media/review-extension/extend.py +100 -0
  76. package/scripts/package-smoke.mjs +20 -5
@@ -2,7 +2,9 @@
2
2
 
3
3
  [Voir le film 4K](https://github.com/montassarkhalloufi/DevMethod/raw/refs/heads/main/docs/media/visual-chain/devmethod-du-besoin-au-produit-4k.fr.mp4) · [Sous-titres](devmethod-du-besoin-au-produit.fr.srt) · [Prototype source](https://github.com/montassarkhalloufi/DevMethod/raw/refs/heads/main/docs/media/visual-chain/lisiere-visual-source.zip)
4
4
 
5
- **2 min 58 s · 3840 × 2160 · 23 séquences · voix française.**
5
+ **4 min 03 s · 3840 × 2160 · 23 séquences originales + 6 séquences review · voix française.**
6
+
7
+ La version 0.3.1 enrichit le film existant : les séquences et la voix de Lisière restent présentes. Un chapitre sur l’interface de review est inséré à **2 min 51 s**, avant la conclusion originale. [Détails, captures et provenance du complément](../review-extension/README.md).
6
8
 
7
9
  Le film remplace le long documentaire comme démonstration principale : un seul projet, Lisière, une commande et son résultat visuel, puis l'étape suivante. Narration française courte, commandes tapées, apparitions successives, mouvements doux et interaction réelle. Le cadrage, les choix techniques, les responsabilités du code, la préparation, la revue et la reprise complètent le parcours des maquettes. GitHub garde la prononciation « guit-hub » demandée.
8
10
 
@@ -41,4 +43,8 @@ Les scripts sont dans [scripts/media/visual-short](../../../scripts/media/visual
41
43
 
42
44
  Le montage est en 4K ; les images source générées sont en 1536×1024. Le texte et les transitions sont rendus dans Chrome à 3840×2160.
43
45
 
44
- Vérifications du média : MP4 H.264, AAC, sous-titres français mov_text ; 177.509 secondes. Plans explicatifs de 6 à 10 secondes environ, transitions et apparitions animées ; séquence navigateur de 20 secondes avec plusieurs actions. Images du master, des déclinaisons, de la comparaison et de la persistance encodée inspectées. Les sous-titres ont un timing proportionnel par phrase. Pas de revendication d’écoute humaine complète.
46
+ Vérifications du média original : MP4 H.264, AAC, sous-titres français mov_text ; 177.509 secondes. Le montage enrichi mesure environ 243 secondes ; sa durée exacte et ses points de montage sont consignés dans [le manifeste du complément](../review-extension/scenes.json). Plans explicatifs de 6 à 10 secondes environ, transitions et apparitions animées ; séquence navigateur de 20 secondes avec plusieurs actions. Images du master, des déclinaisons, de la comparaison et de la persistance encodée inspectées. Les sous-titres ont un timing proportionnel par phrase. Pas de revendication d’écoute humaine complète.
47
+
48
+ ## Chapitre review ajouté
49
+
50
+ Le [guide de review](../../REVIEW-GUIDE.md) accompagne les six nouveaux plans : ouvrir, filtrer, comprendre/corriger, couverture, sources, exporter/reprendre. Il utilise **Atelier de lecture**, une fixture fictive distincte de Lisière. Les captures sont réelles ; les constats ne sont pas des résultats de test du pilote. La nouvelle vignette montre cette interface et le lien du film demeure identique pour les lecteurs de GitHub et npm.
@@ -143,5 +143,69 @@ Handoff conserve les décisions, les preuves et les limites.
143
143
  Next retrouve ensuite la suite pertinente, ou constate que le périmètre est terminé.
144
144
 
145
145
  37
146
- 00:02:51,507 --> 00:02:55,280
146
+ 00:02:51,520 --> 00:02:54,787
147
+ Dev Method ajoute maintenant une interface de review.
148
+
149
+ 38
150
+ 00:02:54,787 --> 00:02:59,719
151
+ Voici sa démonstration fictive, distincte des résultats réels du pilote Lisière.
152
+
153
+ 39
154
+ 00:02:59,719 --> 00:03:02,062
155
+ Cette commande ouvre un rapport local.
156
+
157
+ 40
158
+ 00:03:02,880 --> 00:03:04,840
159
+ La recherche isole un constat.
160
+
161
+ 41
162
+ 00:03:04,840 --> 00:03:09,152
163
+ Les filtres distinguent domaine, gravité, confiance et résolution.
164
+
165
+ 42
166
+ 00:03:09,152 --> 00:03:13,399
167
+ Un risque à vérifier reste une hypothèse, pas un défaut confirmé.
168
+
169
+ 43
170
+ 00:03:14,200 --> 00:03:17,849
171
+ Chaque constat relie scénario, preuve, impact et correction.
172
+
173
+ 44
174
+ 00:03:17,849 --> 00:03:21,376
175
+ La vérification attendue et le ticket restent accessibles.
176
+
177
+ 45
178
+ 00:03:21,376 --> 00:03:24,417
179
+ Masquer un résultat ne le marque pas comme résolu.
180
+
181
+ 46
182
+ 00:03:25,240 --> 00:03:29,460
183
+ La couverture sépare les contrôles réussis, en échec et non exécutés.
184
+
185
+ 47
186
+ 00:03:29,460 --> 00:03:33,007
187
+ L’absence de constat ne prouve pas que tout a été vérifié.
188
+
189
+ 48
190
+ 00:03:33,840 --> 00:03:37,956
191
+ Les sources indiquent technologie, version, provenance et usage.
192
+
193
+ 49
194
+ 00:03:37,956 --> 00:03:44,452
195
+ Ici, la référence est clairement non vérifiée : cette démonstration ne prétend pas l’avoir consultée.
196
+
197
+ 50
198
+ 00:03:45,280 --> 00:03:48,564
199
+ Exportez la même review en HTML, Markdown ou JSON.
200
+
201
+ 51
202
+ 00:03:48,564 --> 00:03:51,388
203
+ Les résultats partagent une source commune.
204
+
205
+ 52
206
+ 00:03:51,388 --> 00:03:56,379
207
+ Le rapport conserve la révision, les preuves et les limites pour la reprise.
208
+
209
+ 53
210
+ 00:03:57,187 --> 00:04:00,960
147
211
  Découvrez Dev Method sur GitHub et essayez cette chaîne sur votre projet.
@@ -0,0 +1,11 @@
1
+ # Review documentation and media — 0.3.1
2
+
3
+ Scope authorized in conversation on 2026-09-13: update GitHub/npm documentation, images and the existing video to demonstrate review and its interface; extend the existing film rather than starting over. Version 0.3.0 was already published and verified, so this is a new patch release.
4
+
5
+ Outputs: the README, review walkthrough, actual UI screenshots, the packaged fictional JSON/Markdown/HTML example and six review scenes inserted before the existing film's conclusion. CLI runtime behavior and the accepted offline HTML decision are unchanged. The video remains on GitHub; the package distributes the guide, screenshots and example.
6
+
7
+ Validation: 89 core tests, local Markdown links, generated example equality against its JSON source, full MP4 decode, visual inspection of all added scenes and the retained ending, and actual tarball installation/update smoke. The smoke expectation distinguishes an unchanged upstream skill in 0.3.0→0.3.1 from an upstream/local conflict in 0.2.0→0.3.1; both preserve user content. Exact archive and platform/fullstack results belong to the associated PR/release.
8
+
9
+ Limits: the added video chapter is a narrated montage of real screenshots with fictional findings, not a continuous recording or a real review of Lisière. Direct file:// reopening remains unverified under the browser tool policy. No independent human audiovisual review is claimed.
10
+
11
+ Next: await final PR checks, integrate under existing authorization, create the new tag/release, publish the exact verified npm archive and verify registry integrity/readme/resources. npm may require another maintainer authentication. Never replace v0.3.0 or its published tarball.
@@ -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.
@@ -0,0 +1,255 @@
1
+ {
2
+ "format": 1,
3
+ "id": "REVIEW-UI-1",
4
+ "title": "Review de l’interface DevMethod",
5
+ "project": "DevMethod",
6
+ "mission": "workflow-0.3",
7
+ "tickets": [
8
+ {
9
+ "id": "PR-19",
10
+ "title": "Livraison du workflow et de la review",
11
+ "url": "https://github.com/montassarkhalloufi/DevMethod/pull/19"
12
+ }
13
+ ],
14
+ "date": "2026-09-13",
15
+ "scope": [
16
+ "Format de review, rendu sécurisé, navigation clavier/mobile et exports du candidat en cours."
17
+ ],
18
+ "exclusions": [
19
+ "Audit exhaustif WCAG avec lecteur d’écran",
20
+ "Exécution native du workflow conversationnel sur les trois hôtes"
21
+ ],
22
+ "revision": {
23
+ "commit": "8d7cd3584c891c04d983f85279e14a2070ab621d + working changes",
24
+ "dirty": [
25
+ "src/review-app.ts",
26
+ "src/review-model.ts",
27
+ "src/review-cli.ts",
28
+ "src/review.ts",
29
+ "src/review-ui.css",
30
+ "src/cli.ts"
31
+ ]
32
+ },
33
+ "technologies": [
34
+ {
35
+ "name": "TypeScript",
36
+ "version": "5.9.3",
37
+ "detectedFrom": "package-lock.json"
38
+ },
39
+ {
40
+ "name": "Node.js",
41
+ "version": "24.18.0 local / >=22 package",
42
+ "detectedFrom": "node --version / package.json"
43
+ }
44
+ ],
45
+ "sources": [
46
+ {
47
+ "id": "WAI-TABS",
48
+ "title": "Tabs Pattern",
49
+ "kind": "documentation",
50
+ "publisher": "W3C WAI",
51
+ "technology": "ARIA / DOM",
52
+ "version": "APG consulted 2026-09-13",
53
+ "url": "https://www.w3.org/WAI/ARIA/apg/patterns/tabs/",
54
+ "consultedAt": "2026-09-13",
55
+ "access": "consulted",
56
+ "usage": "Clavier, focus et association des onglets/panneaux.",
57
+ "compatibility": "Guide de conception ; ne certifie pas une conformité WCAG complète.",
58
+ "provenance": "Page du site officiel W3C consultée pendant cette session."
59
+ }
60
+ ],
61
+ "checks": [
62
+ {
63
+ "id": "UI-KEYBOARD",
64
+ "title": "Clavier et retour mobile",
65
+ "domain": "Interface",
66
+ "kind": "manual",
67
+ "status": "passed",
68
+ "result": "Focus après correction et conservation des filtres observés.",
69
+ "reason": null,
70
+ "evidenceIds": [
71
+ "E-FOCUS-AFTER"
72
+ ],
73
+ "revision": "8d7cd3584c891c04d983f85279e14a2070ab621d + working changes",
74
+ "targets": [
75
+ "finding-selection",
76
+ "tabs"
77
+ ]
78
+ },
79
+ {
80
+ "id": "UI-EXPORT",
81
+ "title": "Contenu de l’export HTML",
82
+ "domain": "Interface",
83
+ "kind": "manual",
84
+ "status": "passed",
85
+ "result": "Résultats, état de sélection et empreinte CSP vérifiés dans le dernier export Chrome.",
86
+ "reason": null,
87
+ "evidenceIds": [
88
+ "E-EXPORT"
89
+ ],
90
+ "revision": "8d7cd3584c891c04d983f85279e14a2070ab621d + working changes",
91
+ "targets": [
92
+ "export"
93
+ ]
94
+ },
95
+ {
96
+ "id": "UI-REOPEN",
97
+ "title": "Réouverture file://",
98
+ "domain": "Interface",
99
+ "kind": "manual",
100
+ "status": "blocked",
101
+ "result": "Non vérifiée dans le navigateur automatisé.",
102
+ "reason": "La politique de l’outil interdit cette navigation ; aucun contournement effectué.",
103
+ "evidenceIds": [],
104
+ "revision": "8d7cd3584c891c04d983f85279e14a2070ab621d + working changes",
105
+ "targets": [
106
+ "export"
107
+ ]
108
+ },
109
+ {
110
+ "id": "SEC-REDACTION",
111
+ "title": "Masquage des formats courants",
112
+ "domain": "Confidentialité",
113
+ "kind": "automated",
114
+ "status": "passed",
115
+ "result": "Régression Bearer, variable préfixée et valeur entre guillemets réussie.",
116
+ "reason": null,
117
+ "evidenceIds": [
118
+ "E-REDACTION"
119
+ ],
120
+ "revision": "fa84208 + redaction working changes",
121
+ "targets": [
122
+ "review-redaction"
123
+ ]
124
+ }
125
+ ],
126
+ "findings": [
127
+ {
128
+ "id": "FOCUS-01",
129
+ "title": "La sélection d’un constat perdait le focus clavier",
130
+ "domain": "Accessibilité",
131
+ "severity": "moderate",
132
+ "severityReason": "La navigation clavier quittait le contenu attendu et rendait la poursuite du parcours difficile.",
133
+ "confidence": "confirmed",
134
+ "resolution": "resolved",
135
+ "location": {
136
+ "path": "src/review-app.ts",
137
+ "line": null,
138
+ "component": "Sélection du constat et gestion de hashchange"
139
+ },
140
+ "trigger": "Activer un constat avec Enter quand le fragment de lien doit changer.",
141
+ "expected": "Le focus arrive sur le titre du détail et permet de poursuivre au clavier.",
142
+ "observed": "Avant correction, le rendu immédiat était suivi d’un deuxième rendu lors de hashchange ; le titre focalisé était remplacé.",
143
+ "impact": "L’utilisateur au clavier perdait son point de navigation.",
144
+ "reproduction": [
145
+ "Activer R-01 avec Enter depuis la liste.",
146
+ "Inspecter le focus après le changement du fragment."
147
+ ],
148
+ "evidenceIds": [
149
+ "E-FOCUS-BEFORE"
150
+ ],
151
+ "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.",
152
+ "tradeoffs": "Écouter popstate séparément pour les navigations historiques.",
153
+ "sourceIds": [
154
+ "WAI-TABS"
155
+ ],
156
+ "ticketIds": [
157
+ "PR-19"
158
+ ],
159
+ "verification": "Enter conserve le focus sur detail-title ; ArrowRight cible Correction ; le retour mobile restaure la liste filtrée.",
160
+ "resolutionEvidenceIds": [
161
+ "E-FOCUS-AFTER"
162
+ ],
163
+ "targets": [
164
+ "finding-selection",
165
+ "tabs"
166
+ ]
167
+ },
168
+ {
169
+ "id": "REDACT-01",
170
+ "title": "Certains formats courants d’identifiants étaient partiellement masqués",
171
+ "domain": "Confidentialité",
172
+ "severity": "major",
173
+ "severityReason": "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.",
174
+ "confidence": "confirmed",
175
+ "resolution": "resolved",
176
+ "location": {
177
+ "path": "src/review-model.ts",
178
+ "line": null,
179
+ "component": "redactReviewText"
180
+ },
181
+ "trigger": "Importer une preuve contenant un header Bearer ou une valeur sensible avec espaces.",
182
+ "expected": "Masquer la valeur complète des formats courants pris en charge.",
183
+ "observed": "La première règle arrêtait le masquage au premier espace et ne reconnaissait pas certains préfixes de variables.",
184
+ "impact": "Risque de divulguer une valeur sensible dans une copie de rapport si la revue de confidentialité ne la détecte pas.",
185
+ "reproduction": [
186
+ "Utiliser exclusivement les cas synthétiques du test de régression du masquage."
187
+ ],
188
+ "evidenceIds": [
189
+ "E-REDACTION"
190
+ ],
191
+ "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.",
192
+ "tradeoffs": "Le masquage reste heuristique ; la confidentialité des images et des formats inconnus exige une inspection avant partage.",
193
+ "sourceIds": [],
194
+ "ticketIds": [
195
+ "PR-19"
196
+ ],
197
+ "verification": "Les valeurs synthétiques de ces trois formats sont absentes de sanitizedReview ; le document original reste inchangé.",
198
+ "resolutionEvidenceIds": [
199
+ "E-REDACTION"
200
+ ],
201
+ "targets": [
202
+ "review-redaction"
203
+ ]
204
+ }
205
+ ],
206
+ "evidence": [
207
+ {
208
+ "id": "E-FOCUS-BEFORE",
209
+ "title": "Observation réelle avant correction",
210
+ "kind": "log",
211
+ "content": "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.",
212
+ "url": null,
213
+ "image": null
214
+ },
215
+ {
216
+ "id": "E-FOCUS-AFTER",
217
+ "title": "Vérification réelle après correction",
218
+ "kind": "log",
219
+ "content": "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.",
220
+ "url": null,
221
+ "image": null
222
+ },
223
+ {
224
+ "id": "E-EXPORT",
225
+ "title": "Export Chrome inspecté sur disque",
226
+ "kind": "text",
227
+ "content": "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.",
228
+ "url": null,
229
+ "image": null
230
+ },
231
+ {
232
+ "id": "E-REDACTION",
233
+ "title": "Régression automatisée du masquage des identifiants",
234
+ "kind": "log",
235
+ "content": "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.",
236
+ "url": null,
237
+ "image": null
238
+ }
239
+ ],
240
+ "limits": [
241
+ "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.",
242
+ "Les tests de format ne prouvent ni la vérité des preuves fournies ni le comportement d’un agent de review.",
243
+ "Le mode d’ouverture final reste à choisir avant publication."
244
+ ],
245
+ "policy": {
246
+ "blockingSeverities": [
247
+ "critical",
248
+ "major",
249
+ "moderate"
250
+ ],
251
+ "requireAllChecks": true,
252
+ "rationale": "Corriger les défauts confirmés affectant le parcours et vérifier les contrôles de livraison avant publication."
253
+ },
254
+ "summary": "Le défaut de focus observé a été corrigé et revérifié. La validation de livraison reste incomplète, avec ses limites explicites."
255
+ }
@@ -0,0 +1,19 @@
1
+ # Workflow and review delivery — 0.3.0
2
+
3
+ Owner: current implementation session. Authorized scope: improve explore, architecture, plan, mission ownership and review; deliver a functional browser review interface, package, PR, merge after checks, GitHub release and npm publication. Preserve approved design behavior, existing project conventions and user files. The user supplied a validated visual direction for the review screen; its example findings are not real evidence.
4
+
5
+ This repository already uses single-file mission records, so retain that convention for this delivery. The user added the review scope before publication; PR #19 remains the same delivery. Existing checks for the earlier commit are historical, not validation of the added interface.
6
+
7
+ ## Executable scope and ownership
8
+
9
+ - Workflow guidance and mission templates: implemented; evidence and migration details in [workflow validation](../WORKFLOW-0.3-VALIDATION.md) and [migration](../WORKFLOW-0.3.md).
10
+ - Review record, derived report, browser interface and CLI: active. Acceptance: validated versioned records; consistent counters/filters; finding/check separation; evidence and official-source provenance; safe rendering; list/detail and direct links; export/reopen; explicit empty/invalid/partial/historical states; responsive keyboard use; distribution independent of the source checkout.
11
+ - Delivery: [PR #19](https://github.com/montassarkhalloufi/DevMethod/pull/19). CI/package proofs belong in the PR and release record. The actual review results are owned by [review.json](workflow-0.3-reviews/interface/review.json), with a generated report; do not duplicate finding status here.
12
+
13
+ Exclusions: whole-project dashboard, remote hosting, automatic discovery/installation/execution of third-party skills, automatic code review execution, arbitrary filesystem browsing, destructive migration, changes to the approved design workflow.
14
+
15
+ Current architecture question: static self-contained HTML versus loopback server; recommended static report under the dependency-free offline contract, presented to the user before dependent implementation. Preserve their forthcoming choice/delegation in the relevant ADR.
16
+
17
+ Delivered as v0.3.0: PR #19 merged at `2bea8ec47cbb1d085819ba05e64f9d3816e91af8`; GitHub release and npm `latest` publication verified. Registry tarball bytes matched the inspected archive and package smoke passed. The installed published package generated its review HTML and Markdown from a canonical temporary directory without this checkout. Direct file:// reopening remains unverified under browser tool policy.
18
+
19
+ The user subsequently requested expanded documentation, images and an extension of the existing film. That follow-up is owned by [review-media-0.3.1](review-media-0.3.1.md); the 0.3.0 tag and npm artifact remain immutable.
@@ -0,0 +1,9 @@
1
+ # Reading list — fictional workflow fixture
2
+
3
+ Outcome: let a reader save a title and retrieve it later. This is an illustrative authored fixture, not a delivered product or a real conversation transcript.
4
+ Cross-cutting constraints: one maintainer, modest operating budget, hosting undecided.
5
+ Active mission: [first save](docs/missions/first-save/PLAN.md).
6
+ Product rules: [rules](docs/produit/REGLES.md).
7
+ Open architecture: [storage](architecture/decisions/001-storage.md).
8
+ Research: not executed; no market or price claims are made.
9
+ Read the mission, then the active ticket and only its linked rules/decision. A legacy record is also [illustrated](docs/missions/legacy-copy.md); it is a separate mission, not another tracker of first-save.
@@ -0,0 +1,7 @@
1
+ # Storage decision
2
+
3
+ Status: PROPOSED. No choice or delegation has been received in this fixture.
4
+ Constraints: single maintainer; hosting and multi-device requirement unresolved.
5
+ Conversation brief to present: local storage offers a small single-device slice; server persistence can support multiple devices but adds hosting and operation. Recommendation depends on the multi-device requirement and data-loss tolerance. No current price claim.
6
+ Ask the user to challenge, offer an alternative, choose or delegate. Evaluate any alternative against the same durability, operations, cost and access criteria.
7
+ Dependent architecture stays open. Revisit after the requirement or budget changes. Record the actual choice/delegation and rationale here before detailing dependent architecture.
@@ -0,0 +1,13 @@
1
+ # First useful save
2
+
3
+ Owner: fictional maintainer. Outcome: save one title and find it again. Learning: whether this smallest journey is useful enough to extend.
4
+ Proposed scope: one title field and retrieval; exclude accounts, tagging and sharing. No artificial second delivery option is needed until a real competing priority emerges.
5
+ Effort: not estimated until runtime and persistence are chosen; main uncertainty is multi-device storage and deployment.
6
+ Scope conversation pending: invite the user to add, remove, move or split scope. No priorities have been accepted in this authored fixture.
7
+ Conditional dependency: [storage decision](../../../architecture/decisions/001-storage.md).
8
+
9
+ | Milestone | Demonstration | Exit criteria | Continuation conditions | Ordered tickets |
10
+ |---|---|---|---|---|
11
+ | First useful save | Save and retrieve one title; reject blank input | Ticket criteria pass on the selected persistence contract | Continue only agreed scope; reassess after a changed storage decision | [SAVE-1](tickets/SAVE-1.md) |
12
+
13
+ Ticket owns current execution state and evidence. [Latest handoff](REPRISE.md).
@@ -0,0 +1,6 @@
1
+ # Latest handoff
2
+
3
+ Captured: 2026-09-13, authored fixture, no implementation revision.
4
+ Read [profile](../../../PROJECT_PROFILE.md), [mission](PLAN.md), then [active ticket](tickets/SAVE-1.md).
5
+ Last action: prepared a conditional milestone and acceptance examples; no tests executed.
6
+ Next action: resume the [storage exchange](../../../architecture/decisions/001-storage.md). Ticket owns the blocker; reconcile it before dependent implementation. This snapshot grants no new authorization.
@@ -0,0 +1,14 @@
1
+ # SAVE-1
2
+
3
+ Owner: fictional maintainer. [Milestone](../PLAN.md).
4
+ Outcome/value: retain a title for later retrieval.
5
+ Included: save and retrieve a title. Excluded: accounts, tags, sharing.
6
+ Status: conditional.
7
+ Dependencies/blocker: [storage choice](../../../../architecture/decisions/001-storage.md), owned by the maintainer, unresolved.
8
+ Rule: [R-01](../../../produit/REGLES.md#r-01--save-a-title).
9
+ Screen: no approved screen required by this nonvisual fixture; resolve design if visual scope is added.
10
+ Contract: persistence contract awaits the storage decision.
11
+ Acceptance AC-01: a valid saved title is retrievable. AC-02: whitespace-only input is rejected.
12
+ Verification: not run; there is no implementation or inspected code revision. Proposed check is a save/retrieve and blank-input test under the selected contract.
13
+ Review/integration/deployment: not performed.
14
+ Next action: resume the storage decision exchange in architecture; independent work may refine input examples.
@@ -0,0 +1,9 @@
1
+ # Legacy mission — improve copy
2
+
3
+ This separate, fictional single-file mission remains usable without moving it into a directory.
4
+ Outcome/scope: clarify one empty-state message; exclude behavior changes.
5
+ Task COPY-1 / owner: maintainer / status: proposed.
6
+ Criterion COPY-AC1: the message explains the next available action.
7
+ Evidence: not run, no implementation revision.
8
+ Next action: inspect the current wording and apply the authorized text edit.
9
+ Latest handoff: 2026-09-13, fixture prepared; this section references the task above rather than duplicating its status.
@@ -0,0 +1,5 @@
1
+ # Reading list rules
2
+
3
+ ## R-01 — Save a title
4
+
5
+ A non-empty title can be saved and retrieved; whitespace-only input is rejected. This is an assumed fixture requirement, not user research.
@@ -0,0 +1,14 @@
1
+ # Fictional review example
2
+
3
+ This is a demonstration of the review format and viewer, not a review of a real product. It is separate from the Lisière video pilot.
4
+
5
+ - [review.json](review.json) owns the illustrative results.
6
+ - [REVIEW.md](REVIEW.md) is generated from that JSON.
7
+ - [review-demo.html](review-demo.html) is the same standalone interactive viewer. Download it to open locally; GitHub's file page displays source.
8
+ - [Step-by-step guide](../../docs/REVIEW-GUIDE.md) explains filters, evidence, coverage, sources and exports.
9
+
10
+ ```sh
11
+ npx --yes devmethod-ai@0.3.1 review --demo --output review-demo.html --open
12
+ ```
13
+
14
+ Choose a fresh output path. This works from the distributed package without this source checkout. The packaged generated HTML is illustrative; your real results belong in your own mission's review record.