# Metadata / Self-Description / Declarative Systems

> Every principle in this category is listed as a record.

Page: Ontology · Principles
Canonical: https://banes-lab.com/ontology#architecture-category-metadata-self-description-declarative-systems

Listed in [Ontology · Principles](https://banes-lab.com/api/pages/ontology/principles.md), after [Architecture Review / Evolution / Governance Artifacts](https://banes-lab.com/ontology/principles/architecture-category-architecture-review-evolution-governance-artifacts.md) and before [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture.md).

Every principle in this category is listed as a record. Each record carries its kind, its severity, the scopes it applies at and the layer it lives in, then the edge relations that join it to other records, the records that point back at it, the contracts that answer to it and the tensions it takes part in. The descriptors say how it is violated, detected, measured, repaired and enforced. Where the record carries one, an exemplar shows the shape before and after the principle is applied.

Relations diagram

The relations inside this category.

```mermaid
flowchart LR
n_self_describing_architecture["Self-Describing Architecture"]
n_self_describing_api["Self-Describing API"]
n_self_describing_structures["Self-Describing Structures"]
n_metadata_driven_design["Metadata-Driven Design"]
n_declarative_configuration["Declarative Configuration"]
n_convention_over_configuration["Convention over Configuration"]
n_capability_declaration["Capability Declaration"]
n_manifest_based_design["Manifest-Based Design"]
n_self_describing_architecture --> n_capability_declaration
n_metadata_driven_design --> n_declarative_configuration
n_manifest_based_design --> n_self_describing_architecture
n_manifest_based_design --> n_capability_declaration
```

### Self-Describing Architecture

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: system, runtime, integration
- Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)

Details

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

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)

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

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

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

Tensions
[Self-Describing Architecture / Metadata Drift](https://banes-lab.com/records/tension/metadata-drift-self-describing-architecture.md)

Violated by
behavior not represented in metadata/contracts

Detected by
undocumented runtime capability

Measured by
metadata coverage

Refactored by
Add Manifest, Add Metadata, Add Schema

Enforced by
manifest validation, metadata tests

Before

```typescript
const modules = [new FooModule(), new BarModule()];
```

After

```typescript
type ModuleDescriptor = { name: string; version: string; provides: readonly string[]; requires: readonly string[] };
const fooModule = defineModule({ name: "foo", version: "1.0.0", provides: ["FooStore"], requires: ["EventBus"] });
```

How it is checked

Checked by
manifest validation, metadata tests

Population
Every manifest, schema, configuration file and declared capability, and the code each one describes

Freshness
A verdict stands until the metadata or the code it describes changes

Refusal
Manifest or schema validation fails when a declaration and the code disagree

Observation
Each declaration compared with the capability, endpoint or structure found in the code

Evidence
None, because the catalog states this check as a class, so a watched run belongs to each system that adopts it

Authoritative side
None, because the declaration and the code both declare the capability, so a green comparison shows that they agree and not that either is right

Depends on
[Metadata](https://banes-lab.com/records/lexicon/metadata.md), [Capability Declaration](https://banes-lab.com/records/architecture/capability-declaration.md), [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md), [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md), [Plugin Architecture](https://banes-lab.com/records/architecture/plugin-architecture.md), [Automation](https://banes-lab.com/records/lexicon/automation.md)

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

### Self-Describing API

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: API, integration
- Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)

Details

Definition
A design rule that an API publishes machine-readable descriptions of its operations, payloads and errors.

Requires
[API Contract](https://banes-lab.com/records/architecture/api-contract.md), [Metadata](https://banes-lab.com/records/lexicon/metadata.md)

Reinforces
[Discoverability](https://banes-lab.com/records/lexicon/discoverability.md), [Interoperability](https://banes-lab.com/records/architecture/interoperability.md)

Enables
[Client Generation](https://banes-lab.com/records/lexicon/client-generation.md), [HATEOAS-style Navigation](https://banes-lab.com/records/lexicon/hateoas-style-navigation.md)

In tension with
[Payload Verbosity](https://banes-lab.com/records/lexicon/payload-verbosity.md)

Conflicts with
[Opaque API](https://banes-lab.com/records/lexicon/opaque-api.md)

Tensions
[Self-Describing API / Payload Verbosity](https://banes-lab.com/records/tension/payload-verbosity-self-describing-api.md)

Violated by
undocumented endpoints, opaque error responses

Detected by
missing OpenAPI/metadata

Measured by
API documentation/contract coverage

Refactored by
Add OpenAPI, Add Metadata, Normalize Responses

Enforced by
API linting, docs gates

Before

```typescript
app.post("/foo", createFoo);
```

After

```typescript
const createFooApi = defineEndpoint({
method: "POST",
path: "/foos",
request: CreateFooSchema,
response: FooCreatedSchema,
errors: FooErrorSchema,
});
```

How it is checked

Checked by
API linting, docs gates

Population
Every manifest, schema, configuration file and declared capability, and the code each one describes

Freshness
A verdict stands until the metadata or the code it describes changes

Refusal
Manifest or schema validation fails when a declaration and the code disagree

Observation
Each declaration compared with the capability, endpoint or structure found in the code

Evidence
None, because the catalog states this check as a class, so a watched run belongs to each system that adopts it

Authoritative side
None, because the declaration and the code both declare the capability, so a green comparison shows that they agree and not that either is right

Depends on
[API Contract](https://banes-lab.com/records/architecture/api-contract.md), [Metadata](https://banes-lab.com/records/lexicon/metadata.md), [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md), [Interoperability](https://banes-lab.com/records/architecture/interoperability.md), [Client Generation](https://banes-lab.com/records/lexicon/client-generation.md), [HATEOAS-style Navigation](https://banes-lab.com/records/lexicon/hateoas-style-navigation.md)

Shape it refuses
[Opaque API](https://banes-lab.com/records/lexicon/opaque-api.md)

### Self-Describing Structures

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: data, runtime, metadata
- Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)

Details

Definition
A design rule that a data structure carries its own type tags and field names, so a reader can interpret it without outside knowledge.

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

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

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

In tension with
[Size Overhead](https://banes-lab.com/records/lexicon/size-overhead.md)

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

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

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

Violated by
data requiring external hidden assumptions

Detected by
missing type/schema markers

Measured by
metadata completeness

Refactored by
Add Type Tags, Add Schema, Add Manifest

Enforced by
[schema validation](https://banes-lab.com/records/architecture/schema-validation.md)

Before

```typescript
const node = ["foo", "foo_1", 3, true];
```

After

```typescript
const node = { kind: "foo", id: "foo_1", count: 3, active: true } as const;
```

How it is checked

Checked by
schema validation

Population
Every manifest, schema, configuration file and declared capability, and the code each one describes

Freshness
A verdict stands until the metadata or the code it describes changes

Refusal
Manifest or schema validation fails when a declaration and the code disagree

Observation
Each declaration compared with the capability, endpoint or structure found in the code

Evidence
None, because the catalog states this check as a class, so a watched run belongs to each system that adopts it

Authoritative side
None, because the declaration and the code both declare the capability, so a green comparison shows that they agree and not that either is right

Depends on
[Type Metadata](https://banes-lab.com/records/lexicon/type-metadata.md), [Schema](https://banes-lab.com/records/lexicon/schema.md), [Introspection](https://banes-lab.com/records/architecture/introspection.md), [Validation](https://banes-lab.com/records/architecture/validation.md), [Dynamic Processing](https://banes-lab.com/records/lexicon/dynamic-processing.md)

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

### Metadata-Driven Design

- Kind: [approach](https://banes-lab.com/records/kind/approach.md)
- Category: [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: runtime, configuration, framework
- Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)

Details

Definition
An approach in which behavior such as forms, routes or plugins is generated from validated metadata instead of written case by case.

Requires
[Metadata Schema](https://banes-lab.com/records/lexicon/metadata-schema.md), [Validation](https://banes-lab.com/records/architecture/validation.md)

Reinforces
[Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md), [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md)

Enables
[Code Generation](https://banes-lab.com/records/lexicon/code-generation.md), [Plugins](https://banes-lab.com/records/lexicon/plugins.md)

In tension with
[Debuggability](https://banes-lab.com/records/lexicon/debuggability.md)

Conflicts with
[Hardcoded Behavior](https://banes-lab.com/records/lexicon/hardcoded-behavior.md)

Referenced by
[Model-Driven Architecture](https://banes-lab.com/records/architecture/model-driven-architecture.md)

Tensions
[Metadata-Driven Design / Debuggability](https://banes-lab.com/records/tension/debuggability-metadata-driven-design.md)

Violated by
unvalidated metadata, hidden magic

Detected by
metadata/config drift

Measured by
metadata coverage, config error rate

Refactored by
Extract Metadata, Add Schema, Validate Config

Enforced by
metadata schema tests

Before

```typescript
if (field === "name") renderText();
if (field === "count") renderNumber();
```

After

```typescript
const fooFields = {
name: { kind: "text", required: true },
count: { kind: "integer", min: 0 },
} as const;
renderForm(fooFields);
```

How it is checked

Checked by
metadata schema tests

Population
Every manifest, schema, configuration file and declared capability, and the code each one describes

Freshness
A verdict stands until the metadata or the code it describes changes

Refusal
Manifest or schema validation fails when a declaration and the code disagree

Observation
Each declaration compared with the capability, endpoint or structure found in the code

Evidence
None, because the catalog states this check as a class, so a watched run belongs to each system that adopts it

Authoritative side
None, because the declaration and the code both declare the capability, so a green comparison shows that they agree and not that either is right

Depends on
[Metadata Schema](https://banes-lab.com/records/lexicon/metadata-schema.md), [Validation](https://banes-lab.com/records/architecture/validation.md), [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md), [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md), [Code Generation](https://banes-lab.com/records/lexicon/code-generation.md), [Plugins](https://banes-lab.com/records/lexicon/plugins.md)

Shape it refuses
[Hardcoded Behavior](https://banes-lab.com/records/lexicon/hardcoded-behavior.md)

### Declarative Configuration

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: configuration, infrastructure, runtime
- Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)

Details

Definition
A design rule that a system's settings are declared as validated data, and the system configures itself from that data.

Requires
[Schema Validation](https://banes-lab.com/records/architecture/schema-validation.md), [Explicit Semantics](https://banes-lab.com/records/lexicon/explicit-semantics.md)

Reinforces
[Predictability](https://banes-lab.com/records/architecture/predictability.md), [Infrastructure as Code](https://banes-lab.com/records/architecture/infrastructure-as-code.md)

Enables
[Runtime Configuration without Code Change](https://banes-lab.com/records/lexicon/runtime-configuration-without-code-change.md)

In tension with
[Dynamic Complexity](https://banes-lab.com/records/lexicon/dynamic-complexity.md)

Conflicts with
[Hardcoded Configuration](https://banes-lab.com/records/architecture/hardcoded-configuration.md)

Referenced by
[Infrastructure as Code](https://banes-lab.com/records/architecture/infrastructure-as-code.md), [Metadata-Driven Design](https://banes-lab.com/records/architecture/metadata-driven-design.md), [Domain-Specific Language (DSL)](https://banes-lab.com/records/architecture/domain-specific-language.md), [Registry-Held Order](https://banes-lab.com/records/architecture/registry-held-order.md)

Contracts
[Declarative Core](https://banes-lab.com/records/algorithms/declarative-core.md)

Tensions
[Declarative Configuration / Dynamic Complexity](https://banes-lab.com/records/tension/declarative-configuration-dynamic-complexity.md)

Violated by
behavior hidden in code constants

Detected by
hardcoded environment values

Measured by
configuration externalization coverage

Refactored by
Extract Config, Add Config Schema

Enforced by
config linting, [validation](https://banes-lab.com/records/architecture/validation.md)

Before

```typescript
const app = new FooApp();
app.enableCache();
app.setRetries(3);
app.register(new BarPlugin());
```

After

```typescript
const config = defineFooConfig({
cache: { enabled: true },
retries: 3,
plugins: ["bar"],
});
const app = FooApp.fromConfig(config);
```

How it is checked

Checked by
config linting, validation

Population
Every manifest, schema, configuration file and declared capability, and the code each one describes

Freshness
A verdict stands until the metadata or the code it describes changes

Refusal
Manifest or schema validation fails when a declaration and the code disagree

Observation
Each declaration compared with the capability, endpoint or structure found in the code

Evidence
None, because the catalog states this check as a class, so a watched run belongs to each system that adopts it

Authoritative side
None, because the declaration and the code both declare the capability, so a green comparison shows that they agree and not that either is right

Depends on
[Schema Validation](https://banes-lab.com/records/architecture/schema-validation.md), [Explicit Semantics](https://banes-lab.com/records/lexicon/explicit-semantics.md), [Predictability](https://banes-lab.com/records/architecture/predictability.md), [Infrastructure as Code](https://banes-lab.com/records/architecture/infrastructure-as-code.md), [Runtime Configuration without Code Change](https://banes-lab.com/records/lexicon/runtime-configuration-without-code-change.md)

Shape it refuses
[Hardcoded Configuration](https://banes-lab.com/records/architecture/hardcoded-configuration.md)

### Convention over Configuration

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: framework, application structure
- Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)

Details

Definition
A design rule that a framework infers settings from stable naming and placement conventions, and explicit configuration covers only the exceptions.

Requires
[Stable Conventions](https://banes-lab.com/records/lexicon/stable-conventions.md)

Reinforces
[Pattern Consistency](https://banes-lab.com/records/architecture/pattern-consistency.md), [Predictability](https://banes-lab.com/records/architecture/predictability.md)

Enables
[Reduced Boilerplate](https://banes-lab.com/records/lexicon/reduced-boilerplate.md)

In tension with
[Explicitness](https://banes-lab.com/records/lexicon/explicitness.md)

Conflicts with
[Excessive Configuration](https://banes-lab.com/records/lexicon/excessive-configuration.md)

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

Contracts
[Automation Kernel](https://banes-lab.com/records/algorithms/automation-kernel.md)

Tensions
[Convention over Configuration / Explicitness](https://banes-lab.com/records/tension/convention-over-configuration-explicitness.md)

Distinct from
[Self-Describing Structures](https://banes-lab.com/records/architecture/self-describing-structures.md): Convention over configuration infers settings from naming and placement, while self-describing structures carry their own type tags and field names.

Violated by
inconsistent project conventions

Detected by
convention deviations

Measured by
convention compliance score

Refactored by
Normalize Structure, Remove Redundant Config

Enforced by
scaffolding, lint rules

Before

```typescript
registerHandler("foo", "./handlers/foo-handler", "FooHandler");
registerHandler("bar", "./handlers/bar-handler", "BarHandler");
```

After

```typescript
const handlers = discoverHandlers("./handlers/*.handler.ts");
```

How it is checked

Checked by
scaffolding, lint rules

Population
Every manifest, schema, configuration file and declared capability, and the code each one describes

Freshness
A verdict stands until the metadata or the code it describes changes

Refusal
Manifest or schema validation fails when a declaration and the code disagree

Observation
Each declaration compared with the capability, endpoint or structure found in the code

Evidence
None, because the catalog states this check as a class, so a watched run belongs to each system that adopts it

Authoritative side
None, because the declaration and the code both declare the capability, so a green comparison shows that they agree and not that either is right

Depends on
[Stable Conventions](https://banes-lab.com/records/lexicon/stable-conventions.md), [Pattern Consistency](https://banes-lab.com/records/architecture/pattern-consistency.md), [Predictability](https://banes-lab.com/records/architecture/predictability.md), [Reduced Boilerplate](https://banes-lab.com/records/lexicon/reduced-boilerplate.md)

Shape it refuses
[Excessive Configuration](https://banes-lab.com/records/lexicon/excessive-configuration.md)

### Capability Declaration

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: plugin, service, runtime
- Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)

Details

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

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)

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

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

Referenced by
[Self-Describing Architecture](https://banes-lab.com/records/architecture/self-describing-architecture.md), [Manifest-Based Design](https://banes-lab.com/records/architecture/manifest-based-design.md)

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

Violated by
capability exists but is undocumented/unregistered

Detected by
manifest-code mismatch

Measured by
declared/actual capability match rate

Refactored by
Add Manifest Entry, Add Capability Interface

Enforced by
manifest validation, conformance tests

Before

```typescript
try { await plugin.exportFoo(foo); } catch (error) { if (isMissingMethod(error)) return; }
```

After

```typescript
type FooPlugin = {
capabilities: readonly ("read" | "write" | "export")[];
exportFoo?: (foo: Foo) => Promise<void>;
};
if (plugin.capabilities.includes("export")) await plugin.exportFoo!(foo);
```

How it is checked

Checked by
manifest validation, conformance tests

Population
Every manifest, schema, configuration file and declared capability, and the code each one describes

Freshness
A verdict stands until the metadata or the code it describes changes

Refusal
Manifest or schema validation fails when a declaration and the code disagree

Observation
Each declaration compared with the capability, endpoint or structure found in the code

Evidence
None, because the catalog states this check as a class, so a watched run belongs to each system that adopts it

Authoritative side
None, because the declaration and the code both declare the capability, so a green comparison shows that they agree and not that either is right

Depends on
[Manifest](https://banes-lab.com/records/lexicon/manifest.md), [Contracts](https://banes-lab.com/records/lexicon/contracts.md), [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md), [Self-Description](https://banes-lab.com/records/lexicon/self-description.md), [Dynamic Binding](https://banes-lab.com/records/architecture/dynamic-binding.md)

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

### Manifest-Based Design

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Category: [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: plugin, module, deployment
- Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)

Details

Definition
A design pattern that loads modules or plugins from a validated manifest listing each entry, version and dependency.

Requires
[Manifest Schema](https://banes-lab.com/records/lexicon/manifest-schema.md)

Reinforces
[Self-Describing Architecture](https://banes-lab.com/records/architecture/self-describing-architecture.md), [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md)

Enables
[Plugin Loading](https://banes-lab.com/records/lexicon/plugin-loading.md), [Capability Declaration](https://banes-lab.com/records/architecture/capability-declaration.md)

In tension with
[Manifest Drift](https://banes-lab.com/records/lexicon/manifest-drift.md)

Conflicts with
[Hardcoded Registration](https://banes-lab.com/records/lexicon/hardcoded-registration.md)

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

Violated by
undeclared dependencies/capabilities

Detected by
manifest mismatch, load failure

Measured by
manifest validation pass rate

Refactored by
Add Manifest, Validate Manifest, Generate Manifest

Enforced by
CI validation

Before

```typescript
loadPlugin("./foo.js");
loadPlugin("./bar.js");
```

After

```typescript
const manifest = {
name: "foo-suite",
plugins: [
{ name: "foo", entry: "./foo.js", version: "1.0.0" },
{ name: "bar", entry: "./bar.js", version: "1.0.0" },
],
} as const;
loadManifest(manifest);
```

How it is checked

Checked by
CI validation

Population
Every manifest, schema, configuration file and declared capability, and the code each one describes

Freshness
A verdict stands until the metadata or the code it describes changes

Refusal
Manifest or schema validation fails when a declaration and the code disagree

Observation
Each declaration compared with the capability, endpoint or structure found in the code

Evidence
None, because the catalog states this check as a class, so a watched run belongs to each system that adopts it

Authoritative side
None, because the declaration and the code both declare the capability, so a green comparison shows that they agree and not that either is right

Depends on
[Manifest Schema](https://banes-lab.com/records/lexicon/manifest-schema.md), [Self-Describing Architecture](https://banes-lab.com/records/architecture/self-describing-architecture.md), [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md), [Plugin Loading](https://banes-lab.com/records/lexicon/plugin-loading.md), [Capability Declaration](https://banes-lab.com/records/architecture/capability-declaration.md)

Shape it refuses
[Hardcoded Registration](https://banes-lab.com/records/lexicon/hardcoded-registration.md)

## Links to

- [principle](https://banes-lab.com/records/kind/principle.md)
- [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)
- [Metadata](https://banes-lab.com/records/lexicon/metadata.md)
- [Capability Declaration](https://banes-lab.com/records/architecture/capability-declaration.md)
- [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)
- [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md)
- [Plugin Architecture](https://banes-lab.com/records/architecture/plugin-architecture.md)
- [Automation](https://banes-lab.com/records/lexicon/automation.md)
- [Metadata Drift](https://banes-lab.com/records/lexicon/metadata-drift.md)
- [Hidden Runtime Behavior](https://banes-lab.com/records/lexicon/hidden-runtime-behavior.md)
- [Manifest-Based Design](https://banes-lab.com/records/architecture/manifest-based-design.md)
- [Self-Describing Architecture / Metadata Drift](https://banes-lab.com/records/tension/metadata-drift-self-describing-architecture.md)
- [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- [API Contract](https://banes-lab.com/records/architecture/api-contract.md)
- [Interoperability](https://banes-lab.com/records/architecture/interoperability.md)
- [Client Generation](https://banes-lab.com/records/lexicon/client-generation.md)
- [HATEOAS-style Navigation](https://banes-lab.com/records/lexicon/hateoas-style-navigation.md)
- [Payload Verbosity](https://banes-lab.com/records/lexicon/payload-verbosity.md)
- [Opaque API](https://banes-lab.com/records/lexicon/opaque-api.md)
- [Self-Describing API / Payload Verbosity](https://banes-lab.com/records/tension/payload-verbosity-self-describing-api.md)
- [Type Metadata](https://banes-lab.com/records/lexicon/type-metadata.md)
- [Schema](https://banes-lab.com/records/lexicon/schema.md)
- [Introspection](https://banes-lab.com/records/architecture/introspection.md)
- [Validation](https://banes-lab.com/records/architecture/validation.md)
- [Dynamic Processing](https://banes-lab.com/records/lexicon/dynamic-processing.md)
- [Size Overhead](https://banes-lab.com/records/lexicon/size-overhead.md)
- [Opaque Binary/Untyped Structures](https://banes-lab.com/records/lexicon/opaque-binary-untyped-structures.md)
- [Derived Naming Registry](https://banes-lab.com/records/architecture/derived-naming-registry.md)
- [Self-Describing Structures / Size Overhead](https://banes-lab.com/records/tension/self-describing-structures-size-overhead.md)
- [Schema Validation](https://banes-lab.com/records/architecture/schema-validation.md)
- [approach](https://banes-lab.com/records/kind/approach.md)
- [Metadata Schema](https://banes-lab.com/records/lexicon/metadata-schema.md)
- [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md)
- [Code Generation](https://banes-lab.com/records/lexicon/code-generation.md)
- [Plugins](https://banes-lab.com/records/lexicon/plugins.md)
- [Debuggability](https://banes-lab.com/records/lexicon/debuggability.md)
- [Hardcoded Behavior](https://banes-lab.com/records/lexicon/hardcoded-behavior.md)
- [Model-Driven Architecture](https://banes-lab.com/records/architecture/model-driven-architecture.md)
- [Metadata-Driven Design / Debuggability](https://banes-lab.com/records/tension/debuggability-metadata-driven-design.md)
- [Explicit Semantics](https://banes-lab.com/records/lexicon/explicit-semantics.md)
- [Predictability](https://banes-lab.com/records/architecture/predictability.md)
- [Infrastructure as Code](https://banes-lab.com/records/architecture/infrastructure-as-code.md)
- [Runtime Configuration without Code Change](https://banes-lab.com/records/lexicon/runtime-configuration-without-code-change.md)
- [Dynamic Complexity](https://banes-lab.com/records/lexicon/dynamic-complexity.md)
- [Hardcoded Configuration](https://banes-lab.com/records/architecture/hardcoded-configuration.md)
- [Metadata-Driven Design](https://banes-lab.com/records/architecture/metadata-driven-design.md)
- [Domain-Specific Language](https://banes-lab.com/records/architecture/domain-specific-language.md)
- [Registry-Held Order](https://banes-lab.com/records/architecture/registry-held-order.md)
- [Declarative Core](https://banes-lab.com/records/algorithms/declarative-core.md)
- [Declarative Configuration / Dynamic Complexity](https://banes-lab.com/records/tension/declarative-configuration-dynamic-complexity.md)
- [Stable Conventions](https://banes-lab.com/records/lexicon/stable-conventions.md)
- [Pattern Consistency](https://banes-lab.com/records/architecture/pattern-consistency.md)
- [Reduced Boilerplate](https://banes-lab.com/records/lexicon/reduced-boilerplate.md)
- [Explicitness](https://banes-lab.com/records/lexicon/explicitness.md)
- [Excessive Configuration](https://banes-lab.com/records/lexicon/excessive-configuration.md)
- [Automation Kernel](https://banes-lab.com/records/algorithms/automation-kernel.md)
- [Convention over Configuration / Explicitness](https://banes-lab.com/records/tension/convention-over-configuration-explicitness.md)
- [Self-Describing Structures](https://banes-lab.com/records/architecture/self-describing-structures.md)
- [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- [Manifest](https://banes-lab.com/records/lexicon/manifest.md)
- [Contracts](https://banes-lab.com/records/lexicon/contracts.md)
- [Self-Description](https://banes-lab.com/records/lexicon/self-description.md)
- [Dynamic Binding](https://banes-lab.com/records/architecture/dynamic-binding.md)
- [Declaration Drift](https://banes-lab.com/records/lexicon/declaration-drift.md)
- [Implicit Capability](https://banes-lab.com/records/lexicon/implicit-capability.md)
- [Self-Describing Architecture](https://banes-lab.com/records/architecture/self-describing-architecture.md)
- [Capability Declaration / Declaration Drift](https://banes-lab.com/records/tension/capability-declaration-declaration-drift.md)
- [pattern](https://banes-lab.com/records/kind/pattern.md)
- [Manifest Schema](https://banes-lab.com/records/lexicon/manifest-schema.md)
- [Plugin Loading](https://banes-lab.com/records/lexicon/plugin-loading.md)
- [Manifest Drift](https://banes-lab.com/records/lexicon/manifest-drift.md)
- [Hardcoded Registration](https://banes-lab.com/records/lexicon/hardcoded-registration.md)
- [Manifest-Based Design / Manifest Drift](https://banes-lab.com/records/tension/manifest-based-design-manifest-drift.md)

## Linked from

- [The layer topology](https://banes-lab.com/ontology/schema/the-layer-topology.md)
- [The membership](https://banes-lab.com/ontology/schema/the-membership.md)
