# Self-Describing Structures

Record: `arch: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#arch-self-describing-structures

## 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/arch/schema-validation.md)

## requires

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

## reinforces

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

## enables

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

## conflicts-with

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

## tensions-with

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

## tensions

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

## referenced-by

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