
# Съвместимост

Phasis е проверен спрямо три независими източника:

1. **test262** — официалният тестов пакет за съответствие с ECMAScript на TC39. **100 %** от версията, фиксирана в хранилището.
2. **Web Platform Tests** — официалният пакет на WHATWG / W3C за Web API извън ECMAScript (Fetch, XHR, WebSocket, Streams, Headers, Blob, кодиране, URL, структурирано клониране, прекъсване, 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/bg/docs/compatibility/test262)** — какво се тества, как работи пакетът и защо 100% е важно.
- **[Уеб API (WPT)](https://phasis.inline0.dev/bg/docs/compatibility/web-apis)** — Web Platform Pack и Fetch Pack: URL, кодиране, atob/btoa, structuredClone, производителност, Headers, Blob, AbortSignal, EventTarget, Streams, както и crypto, WebSocket и XMLHttpRequest.
- **[Потоци](https://phasis.inline0.dev/bg/docs/compatibility/streams)** — пълният стандарт WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, стратегии за поставяне в опашка и асинхронна итерация.
- **[Популярни пакети](https://phasis.inline0.dev/bg/docs/compatibility/popular-packages)** — проверявано в CI побайтово равенство с Node.js за 204 пакета npm в областите анализиране, шаблони, валидация, дати и час, математика, хеширане, търсене и сравнение, цветове, обработка на URL и др.
- **[Обхват на спецификацията](https://phasis.inline0.dev/bg/docs/compatibility/spec-surface)** — всички вградени елементи на ECMAScript, синтактични функции и обекти от стандартната библиотека, които Phasis включва.
- **[Известни ограничения](https://phasis.inline0.dev/bg/docs/compatibility/limitations)** — къде Phasis умишлено се различава от V8: ограничение в производителността, едновременна работа на множество агенти, Wasm и Web API само за браузъри.

## Как се измерва

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

Регресия в WPT или популярен пакет проваля заявката за изтегляне, която я е причинила. Регресия в test262 се открива при следващото изпълнение на матрицата.
