# Doctor: diagnóstico local y remoto

Inspecciona archivos, dependencias y respuestas HTTP con códigos de diagnóstico y salidas para CI.

Requiere WU CLI `1.2.0` y, para las APIs de las aplicaciones, WU Framework `4.0.0`. Comprueba `wu --version` y las dependencias del proyecto.

```sh
wu info
wu doctor --json
wu doctor --url https://example.com --route /guide/ --entry /apps/cart/entry.js --json
```

`wu info` muestra la configuración efectiva. Doctor local usa el binario nativo; el remoto usa Node `>=20` y realiza GET sin cookies ni credenciales. No ejecuta JavaScript ni repara archivos. La salida JSON evita ANSI y avisos de actualización. El modo local JSON no sondea el puerto `3000`; la salida humana mantiene esa comprobación antigua.

| Código | Comprobación |
| --- | --- |
| `WU_D000` | Proyecto no encontrado. |
| `WU_D001` | Directorios de aplicaciones. |
| `WU_D002` | Entrada o build del shell. |
| `WU_D003` | Rangos coherentes y compatibles con la versión objetivo de Framework del catálogo. |
| `WU_D004` | Overrides por directorio y toolchains. |
| `WU_D005` | Colisiones de puertos. |
| `WU_D006` | Archivos sensibles en la salida pública. |
| `WU_D007` | Cabeceras de seguridad y handlers inline. |
| `WU_D008` | Guía de comprobación HTTP o respuesta local. |
| `WU_D009` | Framework usado por varias apps que falta en `shared`. |

Los informes incluyen `schemaVersion: 1`, `tool`, `mode`, `ok`, `checks`, `problems` y `diagnostics`; el local también incluye `version`. Cada diagnóstico tiene `code`, `severity` y `message`. Una categoría puede generar varios hallazgos. Las advertencias pueden permanecer con salida `0`; los errores producen `1`. Opciones inválidas o fallos de ejecución remota producen `2`.

`WU_D003` acepta rangos limitados al major de Framework del catálogo, como `^4.0.0`, `4.x`, `4.2.3` o `>=4 <5`. Rechaza rangos incompatibles, malformados, vacíos o abiertos a otro major, como `^3 || ^4` y `>=4`. Las declaraciones de shell y apps deben coincidir; las dependencias locales conservan sus comprobaciones de destino.

<span class="section-anchor" id="section-1"></span>

## Alcance del escaneo remoto

`--url` selecciona HTTP o HTTPS. Repite `--route` para páginas y `--entry` para módulos o recursos de otros orígenes explícitos. `--timeout` vale `5000` ms por respuesta, incluyendo el cuerpo, y admite `100`–`30000`. El escaneo sigue referencias estáticas; imports calculados y aplicaciones descubiertas durante ejecución requieren pruebas de navegador.

El escaneo limita recursos a 32, peticiones a 40, redirecciones a 3 por recurso, respuestas a 2 MiB y tiempo total a 30 segundos. Una inspección incompleta es un error. Los diagnósticos distinguen status HTTP, MIME incorrecto, CSP inline, fallback HTML para assets, fallos de red y orígenes externos omitidos. Divide sitios grandes en recorridos concretos.

<span class="section-anchor" id="section-2"></span>

## Integridad de un despliegue

```sh
wu doctor --url https://example.com --integrity --pubkey keys/deploy.pub.json --json
```

`--integrity` verifica `wu-integrity.json`, creado por `wu build --sign`, y compara firma, bytes, MIME, CSP e import maps publicados. `--pubkey` acepta PEM o JWK de confianza. Sin esa opción, la clave incluida solo prueba consistencia y genera `WU_INTEGRITY_UNPINNED`. Este modo tiene límites propios: hasta 10000 archivos, manifiesto de 32 MiB y archivos de 64 MiB; no usa el límite de 32 recursos del escaneo normal.

El escaneo local revisa CSP de todas las páginas de `dist/`; el remoto también descubre apps desde `#wu-apps`. Ninguno sustituye montar las apps en un navegador. Para firmar y publicar, sigue [build](/es/docs/cli/build/).

<span class="section-anchor" id="section-3"></span>

## Referencia de implementación

- `wu-cli/src/commands/doctor.zig`
- `wu-cli/src/commands/doctor-remote.cjs`
- `wu-cli/tests/doctor-policy.test.cjs`
- `wu-cli/tests/doctor-remote-apps.test.cjs`
- `wu-cli/tests/build-deploy.test.cjs`