
# Compatibilidad

Phasis se verifica con tres oráculos independientes:

1. **test262** — la suite oficial de conformidad con ECMAScript de TC39. **100 %** de la revisión fijada en el repositorio.
2. **Web Platform Tests** — la suite oficial de WHATWG / W3C para las API web que no pertenecen a ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, codificación, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** del corpus importado.
3. **Bibliotecas populares** — 204 paquetes npm muy utilizados (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) se ejecutan con resultados idénticos byte a byte a Node.js.

## Frente a otros motores

| Motor | test262 | Notas |
|---|---:|---|
| **Phasis** | **100 %** | PHP puro. Compatible con ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Motor de referencia en C++. |
| SpiderMonkey (Firefox) | 99.6 % | Motor de referencia en C++. |
| JavaScriptCore (Safari) | 99.4 % | Motor de referencia en C++. |
| QuickJS | ~97 % | Motor ligero e integrable en C. |
| Hermes (React Native) | ~95 % | Motor integrable optimizado para móviles. |

Cifras de [test262.fyi](https://test262.fyi). Phasis está entre los mejores, junto a los motores de los navegadores de producción.

## Páginas

- **[Cobertura de test262](https://phasis.inline0.dev/es/docs/compatibility/test262)** — qué se prueba, cómo se ejecuta la suite y por qué importa 100%.
- **[API web (WPT)](https://phasis.inline0.dev/es/docs/compatibility/web-apis)** — Web Platform Pack y Fetch Pack: URL, codificación, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, además de crypto, WebSocket y XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/es/docs/compatibility/streams)** — estándar WHATWG Streams completo: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, estrategias de cola e iteración asíncrona.
- **[Paquetes populares](https://phasis.inline0.dev/es/docs/compatibility/popular-packages)** — igualdad byte a byte con Node.js, verificada en CI, para 204 paquetes npm en análisis, plantillas, validación, fecha/hora, matemáticas, hashing, búsqueda/diferencias, color, gestión de URL y más.
- **[Superficie de la especificación](https://phasis.inline0.dev/es/docs/compatibility/spec-surface)** — cada elemento integrado de ECMAScript, característica sintáctica y objeto de biblioteca estándar que ofrece Phasis.
- **[Limitaciones conocidas](https://phasis.inline0.dev/es/docs/compatibility/limitations)** — dónde Phasis se desvía intencionadamente de V8: límite de rendimiento, concurrencia multiagente, Wasm y API web exclusivas del navegador.

## Cómo se mide

- **test262** — `bin/test262` ejecuta la suite localmente. La matriz completa se ejecuta en el flujo de trabajo `compat-matrix.yml`, que se inicia manualmente y no en cada envío; una ejecución correcta guarda su instantánea en [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), donde se registra cuándo se tomó y con qué commit. La revisión de la suite es la fijada por el submódulo git `test262`.
- **Web Platform Tests** — `bin/wpt` ejecuta los fixtures importados. El flujo de trabajo `wpt.yml` los ejecuta al enviar cambios a `main` y en solicitudes de extracción que modifiquen `src/`, los fixtures o los archivos Composer.
- **Bibliotecas populares** — `composer test` ejecuta PHPUnit, incluida la suite de igualdad byte a byte de bibliotecas populares, bajo `tests/Popular/`. El flujo de trabajo `popular.yml` la ejecuta con el mismo filtro de rutas y también regenera cada oráculo con Node real, para detectar oráculos obsoletos cuando se actualiza una biblioteca incluida en el repositorio.

Una regresión de WPT o de un paquete popular hace fallar la solicitud de extracción que la provoca. Una regresión de test262 aparece la próxima vez que se ejecuta la matriz.
