# Runtime Discovery

> A mechanism that finds the available handlers, plugins or services at startup by matching a naming convention, a file pattern or metadata, and registers each one it finds in place of a hand-written list.

Record: `architecture:runtime-discovery`
Kind: mechanism
Layer: [Extensibility Core](https://banes-lab.com/records/layer/extensibility-core.md)
Severity: contextual
Scope: runtime, plugin, module, service
Aliases: Auto-Discovery, Registry/Discovery Mechanism
Canonical: https://banes-lab.com/ontology#architecture-runtime-discovery

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Domain Service](https://banes-lab.com/records/architecture/domain-service.md) and before [Service Discovery](https://banes-lab.com/records/architecture/service-discovery.md).

## Repair

- Refactored by: Add Registry, Add Scanner, Add Manifest
- Detected by: manual class/service lists
- Violated by: hardcoded dependency discovery
- Measured by: discovery coverage
- Enforced by: startup validation

## Requires

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

## Reinforces

- [Runtime Extensibility](https://banes-lab.com/records/architecture/runtime-extensibility.md)

## Enables

- [Plugin Architecture](https://banes-lab.com/records/architecture/plugin-architecture.md)
- [Service Discovery](https://banes-lab.com/records/architecture/service-discovery.md)
- [Self-Registration](https://banes-lab.com/records/lexicon/self-registration.md)

## Conflicts with

- [Compile-Time Binding](https://banes-lab.com/records/lexicon/compile-time-binding.md)
- [Manual Registration](https://banes-lab.com/records/lexicon/manual-registration.md)

## In tension with

- [Predictability](https://banes-lab.com/records/architecture/predictability.md)
- [Static Analysis](https://banes-lab.com/records/architecture/static-analysis.md)
- [Startup Cost](https://banes-lab.com/records/lexicon/startup-cost.md)

## Tensions

- [Runtime Discovery / Predictability](https://banes-lab.com/records/tension/predictability-runtime-discovery.md)
- [Runtime Discovery / Static Analysis](https://banes-lab.com/records/tension/runtime-discovery-static-analysis.md)
- [Runtime Discovery / Startup Cost](https://banes-lab.com/records/tension/runtime-discovery-startup-cost.md)

## Contracts

- [Runtime Discovery](https://banes-lab.com/records/algorithms/runtime-discovery.md)

## Severity

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

## Category

- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/records/architecture-category/runtime-discovery-dynamic-binding.md)

## Enforced by

- [rules/eslint/closure-barrel-must-be-glob.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-barrel-must-be-glob.eslint.rule.ts.md)

## Reinforced by

- [Self-Describing Architecture](https://banes-lab.com/records/architecture/self-describing-architecture.md)
- [Metadata-Driven Design](https://banes-lab.com/records/architecture/metadata-driven-design.md)
- [Capability Declaration](https://banes-lab.com/records/architecture/capability-declaration.md)
- [Manifest-Based Design](https://banes-lab.com/records/architecture/manifest-based-design.md)
- [Reflection](https://banes-lab.com/records/architecture/reflection.md)

## Linked from

- [When rules collide](https://banes-lab.com/disciplined-methodology/plan/when-rules-collide.md)
- [The filesystem is the architecture](https://banes-lab.com/disciplined-methodology/build/the-filesystem-is-the-architecture.md)
- [Definitions own what, code owns how](https://banes-lab.com/software-architecture/model/definitions-own-what.md)
- [The direction axis](https://banes-lab.com/software-architecture/model/the-direction-axis.md)
- [The honest gaps](https://banes-lab.com/software-architecture/coverage/the-honest-gaps.md)
- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.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)
- [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)
- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/ontology/lexicon/lexicon-category-runtime-discovery-dynamic-binding.md)
- [Architecture](https://banes-lab.com/ontology/algorithms/algorithms-domain-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)

## Evidence in the code

- [registerPage](https://banes-lab.com/source/tree/domain/registries/page.registry.ts.md)
- [presentation/records](https://banes-lab.com/anatomy/tree/folder-presentation-records.md)
- [presentation/records/records.barrel.ts](https://banes-lab.com/source/tree/presentation/records/records.barrel.ts.md)
