# Introspection

> A mechanism that lets a program query an object's type and public members at runtime without changing them.

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

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Reflection](https://banes-lab.com/records/architecture/reflection.md) and before [Compile-Time Evaluation](https://banes-lab.com/records/architecture/compile-time-evaluation.md).

## Repair

- Refactored by: Add Public Metadata API
- Detected by: introspection of private internals
- Violated by: relying on undocumented internal structure
- Measured by: introspection usage risk
- Enforced by: API boundaries

## Requires

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

## Reinforces

- [Self-Describing Systems](https://banes-lab.com/records/lexicon/self-describing-systems.md)

## Enables

- [Discovery](https://banes-lab.com/records/lexicon/discovery.md)
- [Diagnostics](https://banes-lab.com/records/lexicon/diagnostics.md)

## Conflicts with

- [Opaque Runtime Behavior](https://banes-lab.com/records/architecture/opaque-runtime-behavior.md)

## In tension with

- [Encapsulation](https://banes-lab.com/records/architecture/encapsulation.md)

## Tensions

- [Introspection / Encapsulation](https://banes-lab.com/records/tension/encapsulation-introspection.md)

## Severity

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

## Category

- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/records/architecture-category/metaprogramming-language-oriented-architecture.md)

## Enforced by

- [rules/eslint/centralized-events.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/centralized-events.eslint.rule.ts.md)

## Reinforced by

- [Self-Describing Structures](https://banes-lab.com/records/architecture/self-describing-structures.md)
- [Reflection](https://banes-lab.com/records/architecture/reflection.md)

## Linked from

- [Resolving a message](https://banes-lab.com/disciplined-methodology/start/resolving-a-message.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)
- [The structural domain](https://banes-lab.com/software-architecture/principles/the-structural-domain.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.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)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/ontology/lexicon/lexicon-category-metaprogramming-language-oriented-architecture.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
