# Schema Validation

> A mechanism that parses incoming data against a schema at the boundary and rejects any payload that does not conform.

Record: `architecture:schema-validation`
Kind: mechanism
Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
Severity: mandatory
Scope: data, API, message
Canonical: https://banes-lab.com/ontology#architecture-schema-validation

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [RAID Redundancy](https://banes-lab.com/records/architecture/raid-redundancy.md) and before [Type Safety](https://banes-lab.com/records/architecture/type-safety.md).

## Repair

- Refactored by: Add Schema Validator, Add DTO
- Detected by: missing validator at boundary
- Violated by: accepting unvalidated payloads
- Measured by: validation coverage
- Enforced by: [runtime validation](https://banes-lab.com/records/reasoning/technique-runtime-validation.md), CI schema checks

## Requires

- [Schema Contract](https://banes-lab.com/records/architecture/schema-contract.md)

## Reinforces

- [Correctness](https://banes-lab.com/records/architecture/correctness.md)
- [Data Contract](https://banes-lab.com/records/architecture/data-contract.md)

## Enables

- [Fail Fast](https://banes-lab.com/records/architecture/fail-fast.md)
- [Interoperability](https://banes-lab.com/records/architecture/interoperability.md)

## Conflicts with

- [Untyped Payloads](https://banes-lab.com/records/lexicon/untyped-payloads.md)

## In tension with

- [Flexible Input](https://banes-lab.com/records/lexicon/flexible-input.md)

## Tensions

- [Schema Validation / Flexible Input](https://banes-lab.com/records/tension/flexible-input-schema-validation.md)

## Severity

- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)

## Category

- [Schema / Canonical Data / Semantics](https://banes-lab.com/records/architecture-category/schema-canonical-data-semantics.md)

## Required by

- [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md)

## Enabled by

- [Canonical Schema](https://banes-lab.com/records/architecture/canonical-schema.md)

## Linked from

- [Definitions own what, code owns how](https://banes-lab.com/software-architecture/model/definitions-own-what.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/principles/architecture-category-error-handling-resilience.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/lexicon/lexicon-category-schema-canonical-data-semantics.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
