
# Compatibilité

Phasis est vérifié à l’aide de trois références indépendantes :

1. **test262** — la suite officielle de conformité ECMAScript de TC39. **100 %** de la révision épinglée dans le dépôt.
2. **Web Platform Tests** — la suite officielle WHATWG / W3C pour les API Web hors ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, encodage, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** sur le corpus importé.
3. **Bibliothèques populaires** — 204 packages npm largement utilisés (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) produisent un résultat identique octet par octet à Node.js.

## Comparaison avec d’autres moteurs

| Moteur | test262 | Remarques |
|---|---:|---|
| **Phasis** | **100 %** | PHP pur. Cible ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Moteur de référence en C++. |
| SpiderMonkey (Firefox) | 99.6 % | Moteur de référence en C++. |
| JavaScriptCore (Safari) | 99.4 % | Moteur de référence en C++. |
| QuickJS | ~97 % | Moteur léger intégrable écrit en C. |
| Hermes (React natif) | ~95 % | Moteur intégrable optimisé pour les appareils mobiles. |

Chiffres tirés de [test262.fyi](https://test262.fyi). Phasis se situe parmi les meilleurs moteurs de navigateur de production.

## Pages

- **[Couverture test262](https://phasis.inline0.dev/fr/docs/compatibility/test262)** — tests exécutés, fonctionnement de la suite et importance du chiffre de 100 %.
- **[API Web (WPT)](https://phasis.inline0.dev/fr/docs/compatibility/web-apis)** — Web Platform Pack et Fetch Pack : URL, encodage, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, ainsi que crypto, WebSocket et XMLHttpRequest.
- **[Flux](https://phasis.inline0.dev/fr/docs/compatibility/streams)** — norme complète WHATWG Streams : ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, stratégies de mise en file, itération asynchrone.
- **[Packages populaires](https://phasis.inline0.dev/fr/docs/compatibility/popular-packages)** — égalité octet par octet vérifiée par CI avec Node.js pour 204 packages npm couvrant l’analyse syntaxique, les modèles, la validation, les dates et heures, les mathématiques, le hachage, la recherche et les différences, les couleurs, la gestion URL et bien plus.
- **[Fonctionnalités de la spécification](https://phasis.inline0.dev/fr/docs/compatibility/spec-surface)** — chaque fonctionnalité intégrée, syntaxique et objet de bibliothèque standard fourni par Phasis.
- **[Limites connues](https://phasis.inline0.dev/fr/docs/compatibility/limitations)** — domaines où Phasis diverge volontairement de V8 : plafond de performances, concurrence multi-agent, Wasm et API Web réservées au navigateur.

## Méthode de mesure

- **test262** — `bin/test262` exécute la suite en local. La matrice complète s’exécute dans le workflow `compat-matrix.yml`, lancé manuellement plutôt qu’à chaque push ; une exécution réussie enregistre son instantané dans [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), avec la date de création et le commit correspondant. La révision de la suite est celle épinglée par le sous-module git `test262`.
- **Web Platform Tests** — `bin/wpt` exécute les tests importés. Le workflow `wpt.yml` les lance à chaque push vers `main` et pour les demandes de fusion qui modifient `src/`, les tests ou les fichiers Composer.
- **Bibliothèques populaires** — `composer test` exécute PHPUnit, notamment la suite d’égalité octet par octet des bibliothèques populaires sous `tests/Popular/`. Le workflow `popular.yml` l’exécute avec le même filtre de chemins et régénère aussi chaque référence sous Node réel, afin de détecter toute référence obsolète lors de la mise à jour d’une bibliothèque intégrée.

Une régression WPT ou dans un package populaire fait échouer la demande de fusion qui l’introduit. Une régression test262 apparaît à la prochaine exécution de la matrice.
