# 018j - CLI Minimum Utility
## Context
`crates/xdoc-cli/` debe aportar utilidad minima de inspeccion y desarrollo. La tarea mantiene el CLI generico y fuera de dominios.
Fuente: `plan_libreria_xml_generica_rust.md`, secciones "`xdoc-cli`" y "Definicion de exito". Hallazgo local: H-010.
Decision local: el CLI se implementa como crate separado `xdoc-cli`, con binario `xdoc`, para facilitar publicacion/instalacion independiente en crates.io. El motor XML sigue siendo `xdoc-rs`/`xdoc` y no depende del CLI.
Orden de publicacion esperado: `xdoc-macros`, luego `xdoc-rs`, luego `xdoc-cli`.
## Dependencies
[x] 005 - Writer Serializer.
[x] 007 - Parser.
[x] 009 - Query Engine.
## Instructions
[x] Implementar comando de formato pretty.
[x] Implementar comando compact.
[x] Implementar comando query basico.
[x] Implementar comando validate-wellformed.
[x] Mantener parsing de argumentos simple si no hay dependencia CLI.
[x] Agregar tests o verificacion por comandos.
## Checklist
[x] `xdoc format input.xml` produce pretty XML.
[x] `xdoc compact input.xml` produce XML compacto.
[x] `xdoc query input.xml "/Root/Item"` ejecuta query.
[x] `xdoc validate-wellformed input.xml` valida parseo.
[x] Errores de uso son claros.
## Verification
Ejecutar:
```bash
cargo run -p xdoc-cli -- validate-wellformed tests/fixtures/xml/simple.xml
cargo run -p xdoc-cli -- compact tests/fixtures/xml/simple.xml
cargo run -p xdoc-cli -- query tests/fixtures/xml/simple.xml "/Root"
cargo test
```
Criterio medible:
[x] CLI deja de ser placeholder.
[x] Comandos devuelven codigo `0` para XML valido.
[x] Comandos devuelven error para XML invalido.
## Acceptance Criteria
[x] CLI sirve para inspeccion basica del motor.
[x] CLI no introduce dominios ni dependencias innecesarias.
## Worklog
[x] 2026-06-11: se movio el CLI a `crates/xdoc-cli`, se implementaron `format`, `compact`, `query` y `validate-wellformed`, se agregaron tests unitarios y fixtures XML reutilizables. El crate depende de `xdoc-rs` por path/version y el motor no depende del CLI.
[x] 2026-06-11: `cargo package -p xdoc-cli --allow-dirty` queda bloqueado hasta publicar `xdoc-rs` en crates.io; esto confirma el orden de publicacion.