# Self-Describing Structures

> A design rule that a data structure carries its own type tags and field names, so a reader can interpret it without outside knowledge.

Record: `architecture:self-describing-structures`
Kind: principle
Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)
Severity: contextual
Scope: data, runtime, metadata
Canonical: https://banes-lab.com/ontology#architecture-self-describing-structures

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Self-Describing API](https://banes-lab.com/records/architecture/self-describing-api.md) and before [Metadata-Driven Design](https://banes-lab.com/records/architecture/metadata-driven-design.md).

## Repair

- Refactored by: Add Type Tags, Add Schema, Add Manifest
- Detected by: missing type/schema markers
- Violated by: data requiring external hidden assumptions
- Measured by: metadata completeness
- Enforced by: [schema validation](https://banes-lab.com/records/architecture/schema-validation.md)

## Requires

- [Type Metadata](https://banes-lab.com/records/lexicon/type-metadata.md)
- [Schema](https://banes-lab.com/records/lexicon/schema.md)

## Reinforces

- [Introspection](https://banes-lab.com/records/architecture/introspection.md)
- [Validation](https://banes-lab.com/records/architecture/validation.md)

## Enables

- [Dynamic Processing](https://banes-lab.com/records/lexicon/dynamic-processing.md)

## Conflicts with

- [Opaque Binary/Untyped Structures](https://banes-lab.com/records/lexicon/opaque-binary-untyped-structures.md)

## In tension with

- [Size Overhead](https://banes-lab.com/records/lexicon/size-overhead.md)

## Tensions

- [Self-Describing Structures / Size Overhead](https://banes-lab.com/records/tension/self-describing-structures-size-overhead.md)

## Severity

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

## Category

- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/records/architecture-category/metadata-self-description-declarative-systems.md)

## Reinforced by

- [Derived Naming Registry](https://banes-lab.com/records/architecture/derived-naming-registry.md)

## Linked from

- [Document structure](https://banes-lab.com/pag/guide/document-structure.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture.md)
- [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/lexicon/lexicon-category-metadata-self-description-declarative-systems.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
