# Capability Declaration

> A mechanism by which a plugin or service lists the operations it supports, so callers test the list instead of probing for methods.

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

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Convention over Configuration](https://banes-lab.com/records/architecture/convention-over-configuration.md) and before [Manifest-Based Design](https://banes-lab.com/records/architecture/manifest-based-design.md).

## Repair

- Refactored by: Add Manifest Entry, Add Capability Interface
- Detected by: manifest-code mismatch
- Violated by: capability exists but is undocumented/unregistered
- Measured by: declared/actual capability match rate
- Enforced by: manifest validation, conformance tests

## Requires

- [Manifest](https://banes-lab.com/records/lexicon/manifest.md)
- [Contracts](https://banes-lab.com/records/lexicon/contracts.md)

## Reinforces

- [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md)
- [Self-Description](https://banes-lab.com/records/lexicon/self-description.md)

## Enables

- [Dynamic Binding](https://banes-lab.com/records/architecture/dynamic-binding.md)

## Conflicts with

- [Implicit Capability](https://banes-lab.com/records/lexicon/implicit-capability.md)

## In tension with

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

## Tensions

- [Capability Declaration / Declaration Drift](https://banes-lab.com/records/tension/capability-declaration-declaration-drift.md)

## Severity

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

## Category

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

## Required by

- [Self-Describing Architecture](https://banes-lab.com/records/architecture/self-describing-architecture.md)

## Enabled by

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

## Linked from

- [Limits](https://banes-lab.com/pag/validation/limitations.md)
- [Systems built around a model](https://banes-lab.com/software-architecture/scale/systems-built-around-a-model.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)
- [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)
