# Self-Describing Architecture

> A design rule that each module declares its name, version, capabilities and requirements in metadata that tools and the runtime can read.

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

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Standardization](https://banes-lab.com/records/architecture/standardization.md) and before [Self-Describing API](https://banes-lab.com/records/architecture/self-describing-api.md).

## Repair

- Refactored by: Add Manifest, Add Metadata, Add Schema
- Detected by: undocumented runtime capability
- Violated by: behavior not represented in metadata/contracts
- Measured by: metadata coverage
- Enforced by: manifest validation, metadata tests

## Requires

- [Metadata](https://banes-lab.com/records/lexicon/metadata.md)
- [Capability Declaration](https://banes-lab.com/records/architecture/capability-declaration.md)

## Reinforces

- [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)
- [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md)

## Enables

- [Plugin Architecture](https://banes-lab.com/records/architecture/plugin-architecture.md)
- [Automation](https://banes-lab.com/records/lexicon/automation.md)

## Conflicts with

- [Hidden Runtime Behavior](https://banes-lab.com/records/lexicon/hidden-runtime-behavior.md)

## In tension with

- [Metadata Drift](https://banes-lab.com/records/lexicon/metadata-drift.md)

## Tensions

- [Self-Describing Architecture / Metadata Drift](https://banes-lab.com/records/tension/metadata-drift-self-describing-architecture.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

- [Manifest-Based Design](https://banes-lab.com/records/architecture/manifest-based-design.md)

## Linked from

- [The drop-in](https://banes-lab.com/disciplined-methodology/start/onboarding.md)
- [Derived state](https://banes-lab.com/disciplined-methodology/verify/derived-state.md)
- [A system is a graph](https://banes-lab.com/software-architecture/model/a-system-is-a-graph.md)
- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.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)
- [Quality Attributes](https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)

## Evidence in the code

- [ANATOMY](https://banes-lab.com/source/tree/core/generated/anatomy.generated.ts.md)
- [ONTOLOGY](https://banes-lab.com/source/tree/core/generated/ontology.generated.ts.md)
- [VOCABULARY](https://banes-lab.com/source/tree/core/generated/vocabulary.generated.ts.md)
- [core/assets](https://banes-lab.com/anatomy/tree/folder-core-assets.md)
- [anatomyChapter](https://banes-lab.com/source/tree/domain/converters/anatomy.fragment.converter.ts.md)
