A single validation finding. Messages carry enough context (file path,
line/column when available, a human-readable description) to be
printed directly by the CLI.
Result of running validate_spec over a spec directory: both the
hand-rolled structural checks (well-formedness, cross-file ID
uniqueness, cross-layer reference resolution) and the schema-driven
checks (via crate::xsd_validation). Errors from both layers are
merged into a single list.