
# Compatibilidade

Phasis é verificado com três referências independentes:

1. **test262** — a suíte oficial de conformidade ECMAScript do TC39. **100 %** da revisão fixada no repositório.
2. **Web Platform Tests** — a suíte oficial WHATWG / W3C para APIs da Web que não fazem parte do ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, codificação, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** do conjunto importado.
3. **Bibliotecas populares** — 204 pacotes npm amplamente usados (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) são executados com bytes idênticos aos de Node.js.

## Comparação com outros mecanismos

| Mecanismo | test262 | Observações |
|---|---:|---|
| **Phasis** | **100 %** | PHP puro. Compatível com ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Mecanismo C++ de referência. |
| SpiderMonkey (Firefox) | 99.6 % | Mecanismo C++ de referência. |
| JavaScriptCore (Safari) | 99.4 % | Mecanismo C++ de referência. |
| QuickJS | ~97 % | Mecanismo leve e incorporável em C. |
| Hermes (React Native) | ~95 % | Mecanismo incorporável, otimizado para dispositivos móveis. |

Dados de [test262.fyi](https://test262.fyi). Phasis está entre os melhores, junto com os mecanismos de produção dos navegadores.

## Páginas

- **[test262 cobertura](https://phasis.inline0.dev/pt/docs/compatibility/test262)** — o que é testado, como a suíte é executada e por que 100% importa.
- **[APIs da Web (WPT)](https://phasis.inline0.dev/pt/docs/compatibility/web-apis)** — Web Platform Pack e Fetch Pack: URL, codificação, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, além de crypto, WebSocket e XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/pt/docs/compatibility/streams)** — padrão WHATWG Streams completo: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, estratégias de enfileiramento e iteração assíncrona.
- **[Pacotes populares](https://phasis.inline0.dev/pt/docs/compatibility/popular-packages)** — igualdade de bytes verificada por CI com Node.js para 204 pacotes npm em análise, modelagem, validação, data/hora, matemática, hashing, pesquisa/diff, cores, tratamento de URL e muito mais.
- **[Superfície da especificação](https://phasis.inline0.dev/pt/docs/compatibility/spec-surface)** — cada recurso integrado do ECMAScript, recurso sintático e objeto da biblioteca padrão incluído em Phasis.
- **[Limitações conhecidas](https://phasis.inline0.dev/pt/docs/compatibility/limitations)** — onde Phasis diverge intencionalmente de V8: limite de desempenho, concorrência multiagente, Wasm e APIs da Web exclusivas dos navegadores.

## Como as medições são feitas

- **test262** — `bin/test262` executa a suíte localmente. A matriz completa é executada no fluxo de trabalho `compat-matrix.yml`, iniciado manualmente, e não a cada push; uma execução bem-sucedida confirma seu instantâneo em [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), que registra quando foi criado e em qual commit. A revisão da suíte é a fixada pelo submódulo `test262` git.
- **Web Platform Tests** — `bin/wpt` executa os testes importados. O fluxo de trabalho `wpt.yml` os executa em pushes para `main` e em pull requests que alteram `src/`, os testes ou os arquivos Composer.
- **Bibliotecas populares** — `composer test` executa PHPUnit, incluindo a suíte de igualdade de bytes para bibliotecas populares em `tests/Popular/`. O fluxo de trabalho `popular.yml` a executa com o mesmo filtro de caminhos e também regenera cada referência com o Node real, detectando referências desatualizadas quando uma biblioteca fornecida é atualizada.

Uma regressão no WPT ou em um pacote popular faz falhar o pull request que a introduziu. Uma regressão test262 aparece na próxima execução da matriz.
