# Recette de la V1 — 4 octobre 2026

Application/moteur 1.0.0, méthode 1.0.0, profil `journal-demo` 1.0.0. Observations logicielles automatisées ; aucune validation indépendante ni conformité globale d’accessibilité revendiquée.

## Rejouer

```sh
npm ci
npm test
npm run check
npx playwright install chromium firefox
npm run test:browser
```

`test:browser` démarre un serveur local isolé sur 4186, sous `/jsonld-content-consistency-demo/`. Il s’arrête à la fin. Pour un serveur déjà ouvert :

```sh
BASE_URL=http://127.0.0.1:4185/jsonld-content-consistency-demo/ npm run test:browser
```

Zoom natif, serveur `npm run preview` ouvert dans un autre terminal :

```sh
npm run test:zoom
```

Le test crée un profil Chromium temporaire et une petite extension **de recette**, limitée à localhost, qui applique `chrome.tabs.setZoom(2)`. Elle n’est ni distribuée avec la démo, ni installée dans votre navigateur personnel. Le facteur réel est relu via `chrome.tabs.getZoom`. Il ne s’agit pas d’un agrandissement CSS ni d’une émulation de pincement. Les captures utilisent le protocole Chromium pour conserver la surface complète au zoom natif.

## Résultats observés

- **42 tests Node** : S0–S7, identifiants et règles exacts du corpus, dates/offsets/heure d’été, ambiguïtés, plusieurs scripts, références locales/externes, descriptions répétées et concurrentes, contextes hors périmètre, exemples inertes, FAQ/fil/URL, limites, empreintes, CSV et CLI.
- **20 groupes de parcours par moteur** : Chromium via Google Chrome 154.0.8037.93 et Firefox 155.0, Playwright 1.63.0, macOS ARM64, Node 22.12.0.
- Imports, création/aperçu/réimport du profil, analyse, preuves, filtres/tri/pagination, JSON/CSV, invalidation, arrêt réel du worker, remise à zéro.
- Zéro requête issue des URL sentinelles après chargement des assets. HTML avec img/srcset, iframe/srcdoc, CSS/import/background, preload, object, formulaires, scripts inline/distants, contexte, @id, sameAs et liens. Analyse et exports répétés hors connexion. Test distinct **sans CSP** : zéro requête également.
- Fixture JavaScript : aucun script JSON-LD dans le HTML initial ; DOM sauvegardé après `data-jsonld-ready=true`, analysable avec `dom_snapshot`. Observation locale uniquement.
- Axe 4.10.2 : aucune violation détectée dans l’état testé, avec preuve ouverte. Parcours clavier, évitement, focus de la preuve et retour au déclencheur vérifiés.
- Largeurs 390 et 320 px sans débordement de page ; table et code peuvent défiler dans leur zone. Mouvement réduit vérifié. Captures bureau, mobile, erreur et preuves longues examinées.
- Zoom natif 200 % dans Chrome for Testing 153.0.8010.12 : largeur intérieure 720 CSS px pour une fenêtre de 1440 px, DPR 2, largeur de document 720 ; analyse et preuve utilisables.
- Sans JavaScript : explication, méthode, deux résultats de référence S1 calculés au build et téléchargements disponibles sous le sous-répertoire.

Les durées sont des observations ponctuelles, pas des garanties : environ **0,4 s en Node**, **1,2 s dans Chrome** et **0,2–0,3 s dans Firefox** pour 200 pages fictives, soit 713 067 octets HTML. Le temps navigateur est mesuré entre la commande d’analyse et le rapport à jour ; le téléchargement est exclu. L’environnement, les documents et la charge peuvent modifier ces chiffres.

Le corpus produit **2 000 constats** : 12 pages avec écart, 188 pages concordantes, aucun contrôle incomplet. Les trois noms d’auteur mutés produisent aussi une différence des paires nom/URL : **15 constats en écart** au total. Les identifiants, catégories 4 dates / 3 auteurs / 3 FAQ / 2 fils et règles attendues proviennent de l’oracle écrit indépendamment. La CLI et le navigateur produisent les mêmes constats et empreintes pour chaque fichier de ce corpus.

## Preuves et échecs conservés

Les commandes créent `test-results/` (non versionné) : métriques du corpus, parcours/versions, résultats axe, observation source/DOM, captures et zoom natif. La recette datée Edikka conserve ces pièces sous l’action 577. La CI rejoue les unités et parcours navigateur ; les versions installées par Playwright sur Linux peuvent différer du Chrome local et sont consignées par le script.

Défauts détectés puis corrigés : regroupement prématuré des questions FAQ identiques ; attente d’un panneau JSON fermé dans la recette ; état d’import asynchrone pouvant laisser un ancien lot disponible ; absence optionnelle masquant du JSON-LD encore présent ; initialisation trop précoce du zoom de test ; annulation testée sur un lot alourdi car le petit corpus pouvait finir avant le clic automatique. Un premier type de capture au zoom était tronqué par le viewport de Playwright : remplacé par une capture native complète. Les constats ci-dessus portent sur les contrôles réussis après correction.

Non exécuté : session VoiceOver/NVDA, audit humain exhaustif RGAA/WCAG, Safari, collecte de sites clients ou d’URL distantes. Aucun rendu distant n’est fourni en V1. La limite maximale de 500 fichiers / 30 Mo est un garde-fou logiciel ; la capacité mesurée ici est celle du corpus de 200 pages. Le moteur reste un lecteur compact et conservateur, pas une implémentation JSON-LD 1.1 complète.

## Livraison

Le build ne copie que les assets publics, profils, corpus fictifs et documents du projet. Les preuves locales d’audit, archives tierces, journaux privés et fichiers importés sont exclus. Le workflow déploie `dist/` après succès du build et des tests. L’état effectif de publication et le commit déployé sont vérifiés séparément dans la livraison.
