# 018b - Parser Document Boundaries
## Context
El parser debe aceptar whitespace-only fuera del root y rechazar documentos sin elemento raiz. Esto mejora compatibilidad XML real antes de firma y validacion estricta.
Fuente: `plan_libreria_xml_generica_rust.md`, secciones "xdoc-parser" y "Seguridad por defecto". Hallazgos locales: H-002 y H-004.
## Dependencies
[x] 007 - Parser.
## Instructions
[x] Revisar manejo de eventos de texto fuera del root.
[x] Permitir whitespace-only antes y despues del root.
[x] Rechazar texto no-whitespace fuera del root.
[x] Rechazar documentos vacios o sin root.
[x] Revisar comentarios y processing instructions fuera del root.
[x] Agregar tests de XML con declaracion, whitespace y documento vacio.
## Checklist
[x] `parse_str(" <Root/> ")` pasa.
[x] `parse_str("\n<Root/>\n")` pasa.
[x] Texto no-whitespace fuera del root falla.
[x] `parse_str("")` falla con error claro.
[x] Documento con solo comentario falla como documento sin root.
[x] Mensajes de error usan `ErrorKind::Parse`.
## Verification
Ejecutar:
```bash
cargo test parser
cargo test whitespace
cargo test empty
cargo fmt --all -- --check
cargo check
```
Criterio medible:
[x] Tests cubren whitespace antes/despues del root.
[x] Tests cubren documento vacio.
[x] Tests cubren texto ilegal fuera del root.
## Acceptance Criteria
[x] Parser acepta XML valido comun de herramientas externas.
[x] Parser no confunde documento XML completo con fragmento vacio.
[x] No se implementa parser streaming en esta tarea.
## Worklog
[x] Completado el 2026-06-11. Parser permite whitespace/comments/processing instructions fuera del root sin agregarlos al arbol, rechaza texto/CDATA fuera del root y falla explicitamente si no hay elemento raiz.