
# Сумісність

Phasis перевіряється за трьома незалежними еталонами:

1. **test262** — офіційний набір тестів на відповідність ECMAScript від TC39. **100 %** від версії, зафіксованої в репозиторії.
2. **Web Platform Tests** — офіційний набір WHATWG / W3C для веб-API поза ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, кодування, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** імпортованого корпусу.
3. **Популярні бібліотеки** — 204 широко вживаних пакетів npm (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator тощо) виконуються з побайтовим збігом із Node.js.

## Порівняння з іншими рушіями

| Рушій | test262 | Примітки |
|---|---:|---|
| **Phasis** | **100 %** | Чиста PHP. Підтримує ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Еталонний рушій на C++. |
| SpiderMonkey (Firefox) | 99.6 % | Еталонний рушій на C++. |
| JavaScriptCore (Safari) | 99.4 % | Еталонний рушій на C++. |
| QuickJS | ~97 % | Легкий рушій на C, який можна вбудовувати. |
| Hermes (React Native) | ~95 % | Вбудовуваний рушій, оптимізований для мобільних пристроїв. |

Дані з [test262.fyi](https://test262.fyi). Phasis належить до провідної групи разом із браузерними рушіями, що використовуються у виробничому середовищі.

## Сторінки

- **[test262 покриття](https://phasis.inline0.dev/uk/docs/compatibility/test262)** — що тестується, як працює набір і чому важливий показник 100%.
- **[Веб-API (WPT)](https://phasis.inline0.dev/uk/docs/compatibility/web-apis)** — Web Platform Pack і Fetch Pack: URL, кодування, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, а також crypto, WebSocket і XMLHttpRequest.
- **[Потоки](https://phasis.inline0.dev/uk/docs/compatibility/streams)** — повний стандарт WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, стратегії постановки в чергу, асинхронний перебір.
- **[Популярні пакети](https://phasis.inline0.dev/uk/docs/compatibility/popular-packages)** — контрольований CI побайтовий збіг із Node.js для 204 пакетів npm у сферах розбору, шаблонізації, перевірки даних, роботи з датою та часом, математики, хешування, пошуку й порівняння, кольорів, обробки URL тощо.
- **[Специфікація](https://phasis.inline0.dev/uk/docs/compatibility/spec-surface)** — усі вбудовані елементи ECMAScript, синтаксичні можливості та об’єкти стандартної бібліотеки, які постачаються з Phasis.
- **[Відомі обмеження](https://phasis.inline0.dev/uk/docs/compatibility/limitations)** — у чому Phasis навмисно відрізняється від V8: межа продуктивності, паралельність кількох агентів, Wasm, веб-API лише для браузерів.

## Як вимірюються результати

- **test262** — `bin/test262` запускає набір локально. Повна матриця запускається вручну в робочому процесі `compat-matrix.yml`, а не після кожного надсилання змін; після успішного запуску знімок додається до [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) із датою та комітом, для якого його створено. Використовується версія набору, зафіксована підмодулем `test262` git.
- **Web Platform Tests** — `bin/wpt` запускає імпортовані фікстури. Робочий процес `wpt.yml` запускає їх після надсилання змін у `main` і для запитів на злиття, що змінюють `src/`, фікстури або файли Composer.
- **Популярні бібліотеки** — `composer test` запускає PHPUnit, зокрема набір тестів на побайтовий збіг популярних бібліотек у `tests/Popular/`. Робочий процес `popular.yml` запускає його з тим самим фільтром шляхів і повторно генерує всі еталонні результати у справжньому Node, щоб виявляти застарілі результати після оновлення сторонньої бібліотеки.

Помилка в WPT або популярному пакеті зриває запит на злиття, який її спричинив. Регресія test262 виявляється під час наступного запуску матриці.
