xdoc-rs 0.1.1

Declarative XML engine for Rust
Documentation
# 015 - CLI

## Context

`xdoc` es una herramienta para inspeccionar, formatear, consultar, validar y canonicalizar XML durante desarrollo. Es consumidor del motor, no parte del core.

Decision local: por la excepcion documentada para publicacion en crates.io, el binario vive en `crates/xdoc-cli` como package auxiliar `xdoc-cli`, no en `src/bin/xdoc.rs`. El motor `xdoc-rs` no depende del CLI.

Fuente: `plan_libreria_xml_generica_rust.md`, secciones "Workspace recomendado", "Feature flags" y "API publica recomendada".

## Dependencies

[x] 005 - Writer Serializer.
[x] 007 - Parser.
[x] 009 - Query Engine.
[x] 011 - Schema Contract.
[x] 012 - Signature Base.
[x] 012e - XAdES BES.
[x] 012f - XAdES EPES Policy.

## Instructions

[x] Mantener el binario `xdoc` en `crates/xdoc-cli`.
[x] Implementar comando `format`.
[x] Implementar comando `parse`.
[x] Implementar comando `query`.
[x] Implementar comando `validate`.
[x] Implementar comando `canonicalize`.
[x] Usar errores legibles para terminal.
[x] Agregar tests de CLI.

## Checklist

[x] `xdoc format input.xml` produce XML pretty.
[x] `xdoc parse input.xml` valida well-formedness soportada.
[x] `xdoc query input.xml "/Root/ID/text()"` imprime resultado.
[x] `xdoc validate input.xml contract.toml` produce reporte.
[x] `xdoc canonicalize input.xml` imprime bytes/texto canonicalizado.
[x] Exit code `0` para exito.
[x] Exit code distinto de `0` para error.
[x] CLI no contiene logica de dominio.

## Verification

Ejecutar:

```bash
cargo test -p xdoc-cli
cargo run -p xdoc-cli -- --help
cargo run -p xdoc-cli -- format tests/fixtures/xml/simple.xml
cargo run -p xdoc-cli -- query tests/fixtures/xml/simple.xml "/Root/Item[@code='B']/text()"
cargo run -p xdoc-cli -- validate tests/fixtures/xml/simple.xml tests/fixtures/contracts/simple-list.toml
cargo run -p xdoc-cli -- canonicalize tests/fixtures/xml/simple.xml
```

Criterio medible:

[x] `--help` lista todos los comandos.
[x] `format` devuelve XML pretty.
[x] `query` devuelve el valor esperado del fixture.
[x] Errores devuelven exit code no cero.

## Acceptance Criteria

[x] CLI sirve para probar el motor desde terminal.
[x] CLI no crea dependencias inversas hacia modulos superiores.
[x] CLI puede desactivarse del uso de libreria porque se publica como package separado.

## Worklog

[x] Completada. `xdoc-cli` ahora cubre `format`, `compact`, `parse`, `query`, `validate`, `canonicalize`, `validate-wellformed` y `--help`; `validate` consume un contrato TOML minimo traducido a `XmlContract`, y `canonicalize` usa la canonicalizacion generica de `src/signature/` con seleccion `c14n11`/`c14n10`.