
# Compatibilità

Phasis viene verificato rispetto a tre oracoli indipendenti:

1. **test262** — la suite ufficiale di conformità ECMAScript di TC39. **100 %** della revisione fissata nel repository.
2. **Web Platform Tests** — la suite ufficiale WHATWG / W3C per le Web API non ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, codifica, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** del corpus importato.
3. **Librerie diffuse** — 204 pacchetti npm molto usati (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) vengono eseguiti con risultati identici byte per byte a Node.js.

## Confronto con altri motori

| Motore | test262 | Note |
|---|---:|---|
| **Phasis** | **100 %** | PHP puro. Destinazione ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Motore C++ di riferimento. |
| SpiderMonkey (Firefox) | 99.6 % | Motore C++ di riferimento. |
| JavaScriptCore (Safari) | 99.4 % | Motore C++ di riferimento. |
| QuickJS | ~97 % | Motore leggero in C, integrabile. |
| Hermes (React Native) | ~95 % | Motore integrabile ottimizzato per dispositivi mobili. |

Dati da [test262.fyi](https://test262.fyi). Phasis è nella fascia più alta, insieme ai motori dei browser di produzione.

## Pagine

- **[test262 copertura](https://phasis.inline0.dev/it/docs/compatibility/test262)** — cosa viene testato, come viene eseguita la suite e perché 100% è importante.
- **[Web APIs (WPT)](https://phasis.inline0.dev/it/docs/compatibility/web-apis)** — Web Platform Pack e Fetch Pack: URL, codifica, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, oltre a crypto, WebSocket e XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/it/docs/compatibility/streams)** — intero standard WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, strategie di accodamento, iterazione asincrona.
- **[Pacchetti diffusi](https://phasis.inline0.dev/it/docs/compatibility/popular-packages)** — verifica dell'equivalenza byte per byte con Node.js per 204 pacchetti npm, soggetta ai controlli CI, relativi ad analisi, templating, convalida, date e orari, matematica, hashing, ricerca e confronto, colori, gestione URL e altro.
- **[Superficie delle specifiche](https://phasis.inline0.dev/it/docs/compatibility/spec-surface)** — ogni funzione integrata, caratteristica sintattica e oggetto della libreria standard inclusi in Phasis.
- **[Limitazioni note](https://phasis.inline0.dev/it/docs/compatibility/limitations)** — dove Phasis diverge intenzionalmente da V8: limiti di prestazioni, concorrenza multi-agent, Wasm, Web API disponibili solo nel browser.

## Come vengono effettuate le misurazioni

- **test262** — `bin/test262` esegue la suite localmente. La matrice completa viene eseguita nel workflow `compat-matrix.yml`, avviato manualmente e non a ogni push; al termine, un'esecuzione riuscita aggiunge lo snapshot a [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), che registra quando è stato creato e su quale commit. La revisione della suite è quella fissata dal sottomodulo git `test262`.
- **Web Platform Tests** — `bin/wpt` esegue i fixture importati. Il workflow `wpt.yml` li esegue sui push a `main` e sulle pull request che modificano `src/`, i fixture o i file Composer.
- **Librerie diffuse** — `composer test` esegue PHPUnit, inclusa la suite di equivalenza byte per byte delle librerie diffuse in `tests/Popular/`. Il workflow `popular.yml` la esegue con lo stesso filtro sui percorsi e rigenera anche ogni oracolo con Node reale, così rileva un oracolo non aggiornato quando viene aggiornata una libreria inclusa.

Una regressione nei WPT o nei pacchetti diffusi fa fallire la pull request che la introduce. Una regressione test262 viene rilevata alla successiva esecuzione della matrice.
