ValidateHandler
Valida un plugin de punta a punta: la forma de su manifiesto y que los servicios que declara realmente implementen sus interfaces. Es el mismo trabajo que hacía `coa:validate`, sin la mitad que pintaba. El comando anterior tenía dos renderers adentro —una versión humana con marcas de color y una `--json` con su propia forma— y decidía entre ellos con un `if` sobre una bandera. Eso es un comando que conoce a sus consumidores: para agregar una superficie había que volver a este archivo. Aquí no hay formato. Devuelve estructura y quien materialice decide cómo se ve, que es la razón por la que la bandera `--json` desapareció en vez de mudarse.
ValidateHandler::__construct()
public function __construct(Milpa\DevTools\Support\RootResolver $roots = new RootResolver()):Parameters
| Name | Type | Description |
|---|---|---|
| $roots | Milpa\DevTools\Support\RootResolver |
ValidateHandler::handle()
public function handle(array $input): arrayCorre los dos validadores sobre un manifiesto y reporta qué encontró cada uno. El manifiesto no encontrado NO es una excepción: es un resultado con `ok: false` y el motivo, porque «miré y no está» es una observación válida sobre el objetivo que se pidió. Lanzar obligaría a cada superficie a traducir la excepción a su forma, y sería la superficie decidiendo qué significa un archivo ausente.
Parameters
| Name | Type | Description |
|---|---|---|
| $input | array<string, mixed> |