# Schema / Canonical Data / Semantics

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

Page: Ontology · Principles
Canonical: https://banes-lab.com/ontology#architecture-category-schema-canonical-data-semantics

Listed in [Ontology · Principles](https://banes-lab.com/api/pages/ontology/principles.md), after [Self-Healing / Recovery / Deployment Safety](https://banes-lab.com/ontology/principles/architecture-category-self-healing-recovery-deployment-safety.md) and before [Security / Privacy / Compliance / Governance](https://banes-lab.com/ontology/principles/architecture-category-security-privacy-compliance-governance.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_schema_validation["Schema Validation"]
n_type_safety["Type Safety"]
n_canonical_model["Canonical Model"]
n_canonical_data_model["Canonical Data Model"]
n_canonical_schema["Canonical Schema"]
n_canonicalization["Canonicalization"]
n_single_source_of_truth["Single Source of Truth"]
n_normalization["Normalization"]
n_semantic_consistency["Semantic Consistency"]
n_ubiquitous_language["Ubiquitous Language"]
n_intent_revealing_interface["Intent-Revealing Interface"]
n_principle_of_least_surprise["Principle of Least Surprise"]
n_database_normalization["Database Normalization"]
n_canonical_model --> n_semantic_consistency
n_canonical_model --> n_ubiquitous_language
n_canonical_model --> n_single_source_of_truth
n_canonical_data_model --> n_canonical_model
n_canonical_data_model --> n_normalization
n_canonical_schema --> n_canonical_data_model
n_canonical_schema --> n_schema_validation
n_semantic_consistency --> n_ubiquitous_language
n_ubiquitous_language --> n_intent_revealing_interface
n_intent_revealing_interface --> n_principle_of_least_surprise
n_principle_of_least_surprise --> n_intent_revealing_interface
n_database_normalization --> n_single_source_of_truth
```

### Schema Validation

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: data, API, message
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A mechanism that parses incoming data against a schema at the boundary and rejects any payload that does not conform.

Requires
[Schema Contract](https://banes-lab.com/records/architecture/schema-contract.md)

Reinforces
[Correctness](https://banes-lab.com/records/architecture/correctness.md), [Data Contract](https://banes-lab.com/records/architecture/data-contract.md)

Enables
[Fail Fast](https://banes-lab.com/records/architecture/fail-fast.md), [Interoperability](https://banes-lab.com/records/architecture/interoperability.md)

In tension with
[Flexible Input](https://banes-lab.com/records/lexicon/flexible-input.md)

Conflicts with
[Untyped Payloads](https://banes-lab.com/records/lexicon/untyped-payloads.md)

Referenced by
[Schema Contract](https://banes-lab.com/records/architecture/schema-contract.md), [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md), [Canonical Schema](https://banes-lab.com/records/architecture/canonical-schema.md)

Tensions
[Schema Validation / Flexible Input](https://banes-lab.com/records/tension/flexible-input-schema-validation.md)

Violated by
accepting unvalidated payloads

Detected by
missing validator at boundary

Measured by
validation coverage

Refactored by
Add Schema Validator, Add DTO

Enforced by
[runtime validation](https://banes-lab.com/records/reasoning/technique-runtime-validation.md), CI schema checks

Before

```typescript
const foo = JSON.parse(raw) as Foo;
```

After

```typescript
const FooSchema = object({ id: string(), name: string().min(1), count: integer().min(0) });
const foo = FooSchema.parse(JSON.parse(raw));
```

How it is checked

Checked by
runtime validation, CI schema checks

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Schema Contract](https://banes-lab.com/records/architecture/schema-contract.md), [Correctness](https://banes-lab.com/records/architecture/correctness.md), [Data Contract](https://banes-lab.com/records/architecture/data-contract.md), [Fail Fast](https://banes-lab.com/records/architecture/fail-fast.md), [Interoperability](https://banes-lab.com/records/architecture/interoperability.md)

Shape it refuses
[Untyped Payloads](https://banes-lab.com/records/lexicon/untyped-payloads.md)

### Type Safety

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: function, module, API, data
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A mechanism that has the compiler reject operations on values of the wrong type before the code runs.

Requires
[Explicit Types](https://banes-lab.com/records/lexicon/explicit-types.md)

Reinforces
[Correctness](https://banes-lab.com/records/architecture/correctness.md), [Contracts](https://banes-lab.com/records/lexicon/contracts.md)

Enables
[Static Analysis](https://banes-lab.com/records/architecture/static-analysis.md)

In tension with
[Rapid Scripting](https://banes-lab.com/records/lexicon/rapid-scripting.md)

Conflicts with
[Dynamic Untyped Boundaries](https://banes-lab.com/records/lexicon/dynamic-untyped-boundaries.md), [Stringly Typed Programming](https://banes-lab.com/records/architecture/stringly-typed-programming.md)

Referenced by
[Explicit Contracts](https://banes-lab.com/records/architecture/explicit-contracts.md), [Data Contract](https://banes-lab.com/records/architecture/data-contract.md), [Static Analysis](https://banes-lab.com/records/architecture/static-analysis.md), [Liskov Substitution Principle (LSP)](https://banes-lab.com/records/architecture/liskov-substitution.md), [Compile-Time Evaluation](https://banes-lab.com/records/architecture/compile-time-evaluation.md), [Composite Pattern](https://banes-lab.com/records/architecture/composite-pattern.md)

Tensions
[Type Safety / Rapid Scripting](https://banes-lab.com/records/tension/rapid-scripting-type-safety.md)

Distinct from
[Compile-Time Evaluation](https://banes-lab.com/records/architecture/compile-time-evaluation.md): Type safety rejects wrongly typed operations at compile time, while compile-time evaluation runs computations and checks during the build.

Violated by
any/unknown maps crossing boundaries

Detected by
weak type usage, unsafe casts

Measured by
type coverage, unsafe cast count

Refactored by
Add Types, Replace Map with DTO, Narrow Types

Enforced by
compiler flags, type checker

Refused by rules
type-safety

Before

```typescript
function loadFoo(id: string): any { return fooStore.get(id); }
const count = loadFoo("x").coutn + 1;
```

After

```typescript
type FooId = string & { readonly __brand: "FooId" };
type Foo = Readonly<{ id: FooId; count: number }>;
function loadFoo(id: FooId): Foo | undefined { return fooStore.get(id); }
```

How it is checked

Checked by
compiler flags, type checker

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Explicit Types](https://banes-lab.com/records/lexicon/explicit-types.md), [Correctness](https://banes-lab.com/records/architecture/correctness.md), [Contracts](https://banes-lab.com/records/lexicon/contracts.md), [Static Analysis](https://banes-lab.com/records/architecture/static-analysis.md)

Shape it refuses
[Dynamic Untyped Boundaries](https://banes-lab.com/records/lexicon/dynamic-untyped-boundaries.md), [Stringly Typed Programming](https://banes-lab.com/records/architecture/stringly-typed-programming.md)

### Canonical Model

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: domain, integration, data
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A design rule that a concept has one authoritative representation, and every other representation is translated to and from it.

Requires
[Semantic Consistency](https://banes-lab.com/records/architecture/semantic-consistency.md), [Ubiquitous Language](https://banes-lab.com/records/architecture/ubiquitous-language.md)

Reinforces
[Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md)

Enables
[Normalized Translation](https://banes-lab.com/records/lexicon/normalized-translation.md)

In tension with
[Bounded Context Autonomy](https://banes-lab.com/records/lexicon/bounded-context-autonomy.md)

Conflicts with
[Multiple Competing Models](https://banes-lab.com/records/lexicon/multiple-competing-models.md)

Referenced by
[Canonical Data Model](https://banes-lab.com/records/architecture/canonical-data-model.md)

Tensions
[Canonical Model / Bounded Context Autonomy](https://banes-lab.com/records/tension/bounded-context-autonomy-canonical-model.md)

Violated by
duplicate conflicting representations

Detected by
same concept modeled inconsistently

Measured by
model duplication count

Refactored by
Introduce Canonical Model, Add Translator

Enforced by
schema governance, domain review

Before

```typescript
type ApiFoo = { foo_id: string; label: string };
type DbFoo = { id: string; name: string };
type UiFoo = { key: string; title: string };
```

After

```typescript
type Foo = Readonly<{ id: FooId; name: string }>;
const fromApi = (value: ApiFoo): Foo => ({ id: fooId(value.foo_id), name: value.label });
const toUi = (foo: Foo): UiFoo => ({ key: foo.id, title: foo.name });
```

How it is checked

Checked by
schema governance, domain review

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Semantic Consistency](https://banes-lab.com/records/architecture/semantic-consistency.md), [Ubiquitous Language](https://banes-lab.com/records/architecture/ubiquitous-language.md), [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md), [Normalized Translation](https://banes-lab.com/records/lexicon/normalized-translation.md)

Shape it refuses
[Multiple Competing Models](https://banes-lab.com/records/lexicon/multiple-competing-models.md)

### Canonical Data Model

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: integration, enterprise data
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A design pattern in which integrated systems exchange data through one shared model, with a mapping per system.

Requires
[Canonical Model](https://banes-lab.com/records/architecture/canonical-model.md), [Data Contract](https://banes-lab.com/records/architecture/data-contract.md)

Reinforces
[Interoperability](https://banes-lab.com/records/architecture/interoperability.md), [Normalization](https://banes-lab.com/records/architecture/normalization.md)

Enables
[Cross-System Mapping](https://banes-lab.com/records/lexicon/cross-system-mapping.md)

In tension with
[Bounded Context Purity](https://banes-lab.com/records/lexicon/bounded-context-purity.md), [Local Model Autonomy](https://banes-lab.com/records/lexicon/local-model-autonomy.md)

Conflicts with
none

Referenced by
[Canonical Schema](https://banes-lab.com/records/architecture/canonical-schema.md)

Tensions
[Canonical Data Model / Bounded Context Purity](https://banes-lab.com/records/tension/bounded-context-purity-canonical-data-model.md), [Canonical Data Model / Local Model Autonomy](https://banes-lab.com/records/tension/canonical-data-model-local-model-autonomy.md)

Violated by
point-to-point inconsistent mappings

Detected by
duplicated transformation logic

Measured by
transformation duplication

Refactored by
Centralize Data Mapping, Add Anti-Corruption Layer

Enforced by
data contract review

Before

```typescript
fooTable.insert({ foo_id: foo.id, foo_name: foo.name });
barTable.insert({ id: foo.id, label: foo.name });
```

After

```typescript
type CanonicalFoo = Readonly<{ id: FooId; name: string }>;
fooRepository.save(canonicalFoo);
barProjection.apply(canonicalFoo);
```

How it is checked

Checked by
data contract review

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Canonical Model](https://banes-lab.com/records/architecture/canonical-model.md), [Data Contract](https://banes-lab.com/records/architecture/data-contract.md), [Interoperability](https://banes-lab.com/records/architecture/interoperability.md), [Normalization](https://banes-lab.com/records/architecture/normalization.md), [Cross-System Mapping](https://banes-lab.com/records/lexicon/cross-system-mapping.md)

Shape it refuses
Not answered

### Canonical Schema

- Kind: [artifact](https://banes-lab.com/records/kind/artifact.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: data, message, API
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A formal definition of one concept's shape, published once and used by every API, message and store that carries the concept.

Requires
[Canonical Data Model](https://banes-lab.com/records/architecture/canonical-data-model.md)

Reinforces
[Schema Contract](https://banes-lab.com/records/architecture/schema-contract.md)

Enables
[Schema Validation](https://banes-lab.com/records/architecture/schema-validation.md)

In tension with
[Service-Specific Schemas](https://banes-lab.com/records/lexicon/service-specific-schemas.md)

Conflicts with
[Schema Drift](https://banes-lab.com/records/architecture/schema-drift.md)

Referenced by
[Schema Contract](https://banes-lab.com/records/architecture/schema-contract.md)

Tensions
[Canonical Schema / Service-Specific Schemas](https://banes-lab.com/records/tension/canonical-schema-service-specific-schemas.md)

Violated by
divergent schemas for same concept

Detected by
schema diff conflict

Measured by
schema reuse/conformance rate

Refactored by
Align Schema, Add Versioned Schema

Enforced by
schema registry

Before

```typescript
const fooSchema = { id: "string", name: "string" };
const barFooSchema = { fooId: "text", label: "text" };
```

After

```typescript
export const CanonicalFooSchema = schema({ id: fooIdSchema, name: nonEmptyString });
fooApi.use(CanonicalFooSchema);
barProjection.use(CanonicalFooSchema);
```

How it is checked

Checked by
schema registry

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Canonical Data Model](https://banes-lab.com/records/architecture/canonical-data-model.md), [Schema Contract](https://banes-lab.com/records/architecture/schema-contract.md), [Schema Validation](https://banes-lab.com/records/architecture/schema-validation.md)

Shape it refuses
[Schema Drift](https://banes-lab.com/records/architecture/schema-drift.md)

### Canonicalization

- Kind: [technique](https://banes-lab.com/records/kind/technique.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: input, data, security
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A technique for converting equivalent values to one normal form before they are compared, stored or checked.

Requires
[Canonical Format](https://banes-lab.com/records/lexicon/canonical-format.md)

Reinforces
[Validation](https://banes-lab.com/records/architecture/validation.md), [Deduplication](https://banes-lab.com/records/lexicon/deduplication.md)

Enables
[Idempotency](https://banes-lab.com/records/architecture/idempotency.md), [Security Checks](https://banes-lab.com/records/lexicon/security-checks.md)

In tension with
[Lossless Preservation](https://banes-lab.com/records/lexicon/lossless-preservation.md)

Conflicts with
[Ambiguous Encoding](https://banes-lab.com/records/lexicon/ambiguous-encoding.md)

Tensions
[Canonicalization / Lossless Preservation](https://banes-lab.com/records/tension/canonicalization-lossless-preservation.md)

Violated by
comparing non-normalized forms

Detected by
duplicate semantically equivalent values

Measured by
normalization defect count

Refactored by
Normalize Input, Canonicalize Before Compare

Enforced by
validation pipeline

Before

```typescript
const keys = ["Foo", " foo ", "FOO"];
const map = new Map(keys.map(key => [key, loadFoo(key)]));
```

After

```typescript
function canonicalFooKey(value: string) { return value.trim().normalize("NFKC").toLowerCase(); }
const map = new Map(keys.map(key => [canonicalFooKey(key), loadFoo(canonicalFooKey(key))]));
```

How it is checked

Checked by
validation pipeline

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Canonical Format](https://banes-lab.com/records/lexicon/canonical-format.md), [Validation](https://banes-lab.com/records/architecture/validation.md), [Deduplication](https://banes-lab.com/records/lexicon/deduplication.md), [Idempotency](https://banes-lab.com/records/architecture/idempotency.md), [Security Checks](https://banes-lab.com/records/lexicon/security-checks.md)

Shape it refuses
[Ambiguous Encoding](https://banes-lab.com/records/lexicon/ambiguous-encoding.md)

### Single Source of Truth

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: configuration, data, rule, schema
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A design rule that each fact, rule or configuration value has one owning definition, and every other value is derived from it.

Requires
[Ownership](https://banes-lab.com/records/lexicon/ownership.md), [Canonical Definition](https://banes-lab.com/records/lexicon/canonical-definition.md)

Reinforces
[Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/architecture/duplicate-code.md), [Consistency](https://banes-lab.com/records/architecture/consistency.md)

Enables
[Governance](https://banes-lab.com/records/architecture/governance.md), [Correctness](https://banes-lab.com/records/architecture/correctness.md)

In tension with
[Availability](https://banes-lab.com/records/lexicon/availability.md), [Decentralization](https://banes-lab.com/records/architecture/decentralization.md)

Conflicts with
[Duplicated Authority](https://banes-lab.com/records/lexicon/duplicated-authority.md), [Magic Value](https://banes-lab.com/records/architecture/magic-value.md)

Referenced by
[Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/architecture/duplicate-code.md), [Canonical Model](https://banes-lab.com/records/architecture/canonical-model.md), [Database Normalization](https://banes-lab.com/records/architecture/database-normalization.md), [Derived Record State](https://banes-lab.com/records/architecture/derived-record-state.md), [Projection Channel](https://banes-lab.com/records/architecture/projection-channel.md), [Two-Direction Index](https://banes-lab.com/records/architecture/two-direction-index.md), [Period-Decided Disposition](https://banes-lab.com/records/architecture/period-decided-disposition.md), [Single Aggregate](https://banes-lab.com/records/architecture/single-aggregate.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Declared Jurisdiction](https://banes-lab.com/records/architecture/declared-jurisdiction.md), [Derived Naming Registry](https://banes-lab.com/records/architecture/derived-naming-registry.md), [Collision Consolidation](https://banes-lab.com/records/architecture/collision-consolidation.md), [Externally Resolved Slot](https://banes-lab.com/records/architecture/externally-resolved-slot.md)

Contracts
[Structural Core](https://banes-lab.com/records/algorithms/structural-core.md), [Centralization Kernel](https://banes-lab.com/records/algorithms/centralization-kernel.md), [CSS Type-Cascade Kernel](https://banes-lab.com/records/algorithms/css-type-cascade-concern.md)

Tensions
[Single Source of Truth / Availability](https://banes-lab.com/records/tension/availability-single-source-of-truth.md), [Single Source of Truth / Decentralization](https://banes-lab.com/records/tension/decentralization-single-source-of-truth.md)

Distinct from
[Canonical Model](https://banes-lab.com/records/architecture/canonical-model.md): A single source of truth gives each fact one owner, while a canonical model gives a concept one representation that others translate to and from.

Distinct from
[Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md): A single source of truth owns each fact once, while a closed vocabulary limits the words a name slot may hold.

Distinct from
[Collision Consolidation](https://banes-lab.com/records/architecture/collision-consolidation.md): A single source of truth is one owner per fact, while collision consolidation reads a taken filename as evidence of two files doing one job.

Distinct from
[Declared Jurisdiction](https://banes-lab.com/records/architecture/declared-jurisdiction.md): A single source of truth is one owner per fact, while declared jurisdiction is the declaration a naming gate reads its scope from.

Distinct from
[Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/architecture/duplicate-code.md): A single source of truth owns facts, rules and configuration values, while DRY keeps one source for logic and constants in code.

Distinct from
[Decentralization](https://banes-lab.com/records/architecture/decentralization.md): A single source of truth centralises ownership of a fact, while decentralization spreads decisions and control to the owning teams.

Distinct from
[Determinism](https://banes-lab.com/records/architecture/determinism.md): A single source of truth fixes where a fact lives, while determinism fixes that the same inputs give the same result.

Distinct from
[Governance](https://banes-lab.com/records/architecture/governance.md): A single source of truth owns facts, while governance holds decisions to policy.

Violated by
duplicate configs/rules/schemas

Detected by
conflicting definitions

Measured by
duplicate authority count

Refactored by
Centralize Definition, Reference Shared Source

Enforced by
config governance, schema registry

Before

```typescript
let fooCount = 0;
const foos: Foo[] = [];
function addFoo(foo: Foo) { foos.push(foo); fooCount += 1; }
```

After

```typescript
const foos: Foo[] = [];
function addFoo(foo: Foo) { foos.push(foo); }
function fooCount() { return foos.length; }
```

How it is checked

Checked by
config governance, schema registry

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Ownership](https://banes-lab.com/records/lexicon/ownership.md), [Canonical Definition](https://banes-lab.com/records/lexicon/canonical-definition.md), [Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/architecture/duplicate-code.md), [Consistency](https://banes-lab.com/records/architecture/consistency.md), [Governance](https://banes-lab.com/records/architecture/governance.md), [Correctness](https://banes-lab.com/records/architecture/correctness.md)

Shape it refuses
[Duplicated Authority](https://banes-lab.com/records/lexicon/duplicated-authority.md), [Magic Value](https://banes-lab.com/records/architecture/magic-value.md)

### Normalization

- Kind: [technique](https://banes-lab.com/records/kind/technique.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: database, schema, data model
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A technique for storing each fact once and referring to it by key wherever it is needed.

Requires
[Data Semantics](https://banes-lab.com/records/lexicon/data-semantics.md)

Reinforces
[Consistency](https://banes-lab.com/records/architecture/consistency.md), [Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/architecture/duplicate-code.md)

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

In tension with
[Query Performance](https://banes-lab.com/records/lexicon/query-performance.md), [Denormalized Read Models](https://banes-lab.com/records/lexicon/denormalized-read-models.md)

Conflicts with
none

Referenced by
[Canonical Data Model](https://banes-lab.com/records/architecture/canonical-data-model.md)

Tensions
[Normalization / Query Performance](https://banes-lab.com/records/tension/normalization-query-performance.md), [Normalization / Denormalized Read Models](https://banes-lab.com/records/tension/denormalized-read-models-normalization.md)

Violated by
uncontrolled duplicated data

Detected by
update anomalies, duplicated facts

Measured by
redundancy/anomaly count

Refactored by
Extract Entity, Normalize Table, Add Reference

Enforced by
schema review, database constraints

Before

```typescript
type Foo = { id: FooId; barName: string; barEmail: string };
const foos: Foo[] = duplicateBarAcrossFoos();
```

After

```typescript
type Foo = { id: FooId; barId: BarId };
type Bar = { id: BarId; name: string; email: string };
const foos = new Map<FooId, Foo>();
const bars = new Map<BarId, Bar>();
```

How it is checked

Checked by
schema review, database constraints

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Data Semantics](https://banes-lab.com/records/lexicon/data-semantics.md), [Consistency](https://banes-lab.com/records/architecture/consistency.md), [Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/architecture/duplicate-code.md), [Reduced Redundancy](https://banes-lab.com/records/lexicon/reduced-redundancy.md)

Shape it refuses
Not answered

### Semantic Consistency

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: domain, API, data
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
The degree to which one name carries one meaning across the code, the schemas and the documentation.

Requires
[Ubiquitous Language](https://banes-lab.com/records/architecture/ubiquitous-language.md), [Semantic Contracts](https://banes-lab.com/records/architecture/semantic-contracts.md)

Reinforces
[Correctness](https://banes-lab.com/records/architecture/correctness.md), [Interoperability](https://banes-lab.com/records/architecture/interoperability.md)

Enables
[Disambiguation](https://banes-lab.com/records/lexicon/disambiguation.md)

In tension with
[Polysemy Across Contexts](https://banes-lab.com/records/lexicon/polysemy-across-contexts.md)

Conflicts with
[Ambiguous Naming](https://banes-lab.com/records/lexicon/ambiguous-naming.md), [Inconsistent Error Model](https://banes-lab.com/records/architecture/inconsistent-error-model.md)

Referenced by
[Domain-Driven Design (DDD)](https://banes-lab.com/records/architecture/domain-driven-design.md), [Data Contract](https://banes-lab.com/records/architecture/data-contract.md), [Semantic Contracts](https://banes-lab.com/records/architecture/semantic-contracts.md), [Knowledge Graphs](https://banes-lab.com/records/architecture/knowledge-graphs.md), [Canonical Model](https://banes-lab.com/records/architecture/canonical-model.md)

Tensions
[Semantic Consistency / Polysemy Across Contexts](https://banes-lab.com/records/tension/polysemy-across-contexts-semantic-consistency.md)

Distinct from
[Polysemy Across Contexts](https://banes-lab.com/records/lexicon/polysemy-across-contexts.md): Semantic consistency is one name keeping one meaning, while polysemy across contexts is a term legitimately meaning different things in different bounded contexts.

Violated by
same name with different meanings

Detected by
conflicting glossary/schema definitions

Measured by
semantic conflict count

Refactored by
Rename, Split Context, Add Translator

Enforced by
glossary review, schema review

Before

```typescript
function createFoo(name: string) {}
function renameFoo(label: string) {}
function findFoo(title: string) {}
```

After

```typescript
type FooName = string & { readonly __brand: "FooName" };
function createFoo(name: FooName) {}
function renameFoo(name: FooName) {}
function findFoo(name: FooName) {}
```

How it is checked

Checked by
glossary review, schema review

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Ubiquitous Language](https://banes-lab.com/records/architecture/ubiquitous-language.md), [Semantic Contracts](https://banes-lab.com/records/architecture/semantic-contracts.md), [Correctness](https://banes-lab.com/records/architecture/correctness.md), [Interoperability](https://banes-lab.com/records/architecture/interoperability.md), [Disambiguation](https://banes-lab.com/records/lexicon/disambiguation.md)

Shape it refuses
[Ambiguous Naming](https://banes-lab.com/records/lexicon/ambiguous-naming.md), [Inconsistent Error Model](https://banes-lab.com/records/architecture/inconsistent-error-model.md)

### Ubiquitous Language

- Kind: [activity](https://banes-lab.com/records/kind/activity.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: bounded context, domain, codebase
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
The practice of using the domain's own terms, agreed with its experts, in conversation, documentation and code alike.

Requires
[Domain Collaboration](https://banes-lab.com/records/lexicon/domain-collaboration.md)

Reinforces
[Domain-Driven Design (DDD)](https://banes-lab.com/records/architecture/domain-driven-design.md), [Semantic Contracts](https://banes-lab.com/records/architecture/semantic-contracts.md)

Enables
[Intent-Revealing Interface](https://banes-lab.com/records/architecture/intent-revealing-interface.md)

In tension with
[Cross-Context Terminology](https://banes-lab.com/records/lexicon/cross-context-terminology.md)

Conflicts with
[Technical/Domain Mismatch](https://banes-lab.com/records/lexicon/technical-domain-mismatch.md)

Referenced by
[Domain-Driven Design (DDD)](https://banes-lab.com/records/architecture/domain-driven-design.md), [Domain Model](https://banes-lab.com/records/architecture/domain-model.md), [Bounded Context](https://banes-lab.com/records/architecture/bounded-context.md), [Domain Service](https://banes-lab.com/records/architecture/domain-service.md), [Semantic Contracts](https://banes-lab.com/records/architecture/semantic-contracts.md), [Domain-Specific Language (DSL)](https://banes-lab.com/records/architecture/domain-specific-language.md), [Canonical Model](https://banes-lab.com/records/architecture/canonical-model.md), [Semantic Consistency](https://banes-lab.com/records/architecture/semantic-consistency.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md)

Tensions
[Ubiquitous Language / Cross-Context Terminology](https://banes-lab.com/records/tension/cross-context-terminology-ubiquitous-language.md)

Violated by
inconsistent domain terms

Detected by
synonym drift, ambiguous names

Measured by
naming consistency score

Refactored by
Rename Class/Method/Field, Update Glossary

Enforced by
naming rules, domain review

Before

```typescript
function changeThingState(record: any, code: string) {
record.s = code;
}
```

After

```typescript
function activateFoo(foo: Foo) {
foo.activate();
fooEvents.emit({ type: "FooActivated", fooId: foo.id });
}
```

How it is checked

Checked by
naming rules, domain review

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Domain Collaboration](https://banes-lab.com/records/lexicon/domain-collaboration.md), [Domain-Driven Design (DDD)](https://banes-lab.com/records/architecture/domain-driven-design.md), [Semantic Contracts](https://banes-lab.com/records/architecture/semantic-contracts.md), [Intent-Revealing Interface](https://banes-lab.com/records/architecture/intent-revealing-interface.md)

Shape it refuses
[Technical/Domain Mismatch](https://banes-lab.com/records/lexicon/technical-domain-mismatch.md)

### Intent-Revealing Interface

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: API, method, class, module
- Aliases: Intent-Revealing Interfaces, Intent-Revealing API
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A design rule that an operation's name and parameters state what it does for the caller.

Requires
[Clear Semantics](https://banes-lab.com/records/lexicon/clear-semantics.md), [Naming Consistency](https://banes-lab.com/records/lexicon/naming-consistency.md)

Reinforces
[Principle of Least Surprise](https://banes-lab.com/records/architecture/principle-of-least-surprise.md)

Enables
[Readability](https://banes-lab.com/records/lexicon/readability.md), [Correct Usage](https://banes-lab.com/records/lexicon/correct-usage.md)

In tension with
[Concise Naming](https://banes-lab.com/records/lexicon/concise-naming.md)

Conflicts with
[Ambiguous API](https://banes-lab.com/records/lexicon/ambiguous-api.md), [Boolean Trap](https://banes-lab.com/records/architecture/boolean-trap.md)

Referenced by
[Builder Pattern](https://banes-lab.com/records/architecture/builder-pattern.md), [Ubiquitous Language](https://banes-lab.com/records/architecture/ubiquitous-language.md), [Principle of Least Surprise](https://banes-lab.com/records/architecture/principle-of-least-surprise.md)

Tensions
[Intent-Revealing Interface / Concise Naming](https://banes-lab.com/records/tension/concise-naming-intent-revealing-interface.md)

Distinct from
[Principle of Least Surprise](https://banes-lab.com/records/architecture/principle-of-least-surprise.md): An intent-revealing interface states what an operation does in its name and parameters, while least surprise requires the behavior to match what they lead a caller to expect.

Violated by
vague method names, boolean traps

Detected by
generic names, unclear parameters

Measured by
API clarity review findings

Refactored by
Rename Method, Replace Boolean with Enum, Add Value Object

Enforced by
naming lint, API review

Before

```typescript
foo.update("s", "A");
foo.apply(3, true);
```

After

```typescript
foo.activate();
foo.reserve({ quantity: 3, notify: true });
```

How it is checked

Checked by
naming lint, API review

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Clear Semantics](https://banes-lab.com/records/lexicon/clear-semantics.md), [Naming Consistency](https://banes-lab.com/records/lexicon/naming-consistency.md), [Principle of Least Surprise](https://banes-lab.com/records/architecture/principle-of-least-surprise.md), [Readability](https://banes-lab.com/records/lexicon/readability.md), [Correct Usage](https://banes-lab.com/records/lexicon/correct-usage.md)

Shape it refuses
[Ambiguous API](https://banes-lab.com/records/lexicon/ambiguous-api.md), [Boolean Trap](https://banes-lab.com/records/architecture/boolean-trap.md)

### Principle of Least Surprise

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: API, UX, module behavior
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A design rule that an operation behaves the way its name and its conventions lead a caller to expect.

Requires
[Predictability](https://banes-lab.com/records/architecture/predictability.md), [Convention](https://banes-lab.com/records/lexicon/convention.md)

Reinforces
[Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md), [Intent-Revealing Interface](https://banes-lab.com/records/architecture/intent-revealing-interface.md)

Enables
[Safe Use](https://banes-lab.com/records/lexicon/safe-use.md)

In tension with
[Clever Abstractions](https://banes-lab.com/records/lexicon/clever-abstractions.md)

Conflicts with
[Hidden Side Effect](https://banes-lab.com/records/architecture/hidden-side-effect.md)

Referenced by
[Uniform Interface](https://banes-lab.com/records/architecture/uniform-interface.md), [Predictability](https://banes-lab.com/records/architecture/predictability.md), [Intent-Revealing Interface](https://banes-lab.com/records/architecture/intent-revealing-interface.md)

Contracts
[Human Factors](https://banes-lab.com/records/algorithms/human-factors.md)

Tensions
[Principle of Least Surprise / Clever Abstractions](https://banes-lab.com/records/tension/clever-abstractions-principle-of-least-surprise.md)

Violated by
unexpected mutation, nonstandard behavior

Detected by
misleading names, [hidden behavior](https://banes-lab.com/records/lexicon/hidden-behavior.md)

Measured by
surprise defects, misuse reports

Refactored by
Rename, Make Side Effects Explicit, Normalize Behavior

Enforced by
API review, [tests](https://banes-lab.com/records/lexicon/tests.md)

Before

```typescript
function getFoo(id: FooId) {
fooStore.delete(id);
return undefined;
}
```

After

```typescript
function getFoo(id: FooId) { return fooStore.find(id); }
function deleteFoo(id: FooId) { return fooStore.delete(id); }
```

How it is checked

Checked by
API review, tests

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Predictability](https://banes-lab.com/records/architecture/predictability.md), [Convention](https://banes-lab.com/records/lexicon/convention.md), [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md), [Intent-Revealing Interface](https://banes-lab.com/records/architecture/intent-revealing-interface.md), [Safe Use](https://banes-lab.com/records/lexicon/safe-use.md)

Shape it refuses
[Hidden Side Effect](https://banes-lab.com/records/architecture/hidden-side-effect.md)

### Database Normalization

- Kind: [technique](https://banes-lab.com/records/kind/technique.md)
- Category: [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- Severity: [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- Scope: schema, data modeling, integrity
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Definition
A technique for decomposing tables by their functional dependencies into normal forms, so no column depends on anything but its key.

Requires
[Functional Dependencies](https://banes-lab.com/records/lexicon/functional-dependencies.md)

Reinforces
[Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md), [Data Integrity](https://banes-lab.com/records/lexicon/data-integrity.md)

Enables
[Non-Redundant Storage](https://banes-lab.com/records/lexicon/non-redundant-storage.md), [Non-Redundant Storage](https://banes-lab.com/records/lexicon/non-redundant-storage.md)

In tension with
[Read Performance](https://banes-lab.com/records/lexicon/read-performance.md)

Conflicts with
[Duplicated Denormalized Columns](https://banes-lab.com/records/lexicon/duplicated-denormalized-columns.md)

Tensions
[Database Normalization / Read Performance](https://banes-lab.com/records/tension/database-normalization-read-performance.md)

Violated by
repeating groups and transitively-dependent columns duplicated across rows

Detected by
the same fact stored in multiple places drifting out of sync

Measured by
update-anomaly incidents and redundant-column count

Refactored by
Normalize to 3NF, extracting dependent attributes into their own relations

Enforced by
schema review

Before

```typescript
type FooRow = { id: string; customerName: string; customerCity: string; customerCityZip: string };
```

After

```typescript
type Foo = { id: FooId; customerId: CustomerId };
type Customer = { id: CustomerId; name: string; cityId: CityId };
type City = { id: CityId; name: string; zip: string };
```

How it is checked

Checked by
schema review

Population
Every schema, type, name and stored fact that represents one concept

Freshness
A verdict stands until a schema, a type or a stored representation changes

Refusal
The type checker, schema registry or validation pipeline fails a representation that diverges from the canonical one

Observation
Schemas and types compared across producers, stores and consumers of the same concept

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

Authoritative side
The canonical representation, which every producer, store and consumer conforms to

Depends on
[Functional Dependencies](https://banes-lab.com/records/lexicon/functional-dependencies.md), [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md), [Data Integrity](https://banes-lab.com/records/lexicon/data-integrity.md), [Non-Redundant Storage](https://banes-lab.com/records/lexicon/non-redundant-storage.md), [Non-Redundant Storage](https://banes-lab.com/records/lexicon/non-redundant-storage.md)

Shape it refuses
[Duplicated Denormalized Columns](https://banes-lab.com/records/lexicon/duplicated-denormalized-columns.md)

## Links to

- [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
- [Schema Contract](https://banes-lab.com/records/architecture/schema-contract.md)
- [Correctness](https://banes-lab.com/records/architecture/correctness.md)
- [Data Contract](https://banes-lab.com/records/architecture/data-contract.md)
- [Fail Fast](https://banes-lab.com/records/architecture/fail-fast.md)
- [Interoperability](https://banes-lab.com/records/architecture/interoperability.md)
- [Flexible Input](https://banes-lab.com/records/lexicon/flexible-input.md)
- [Untyped Payloads](https://banes-lab.com/records/lexicon/untyped-payloads.md)
- [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md)
- [Canonical Schema](https://banes-lab.com/records/architecture/canonical-schema.md)
- [Schema Validation / Flexible Input](https://banes-lab.com/records/tension/flexible-input-schema-validation.md)
- [Runtime Validation](https://banes-lab.com/records/reasoning/technique-runtime-validation.md)
- [Explicit Types](https://banes-lab.com/records/lexicon/explicit-types.md)
- [Contracts](https://banes-lab.com/records/lexicon/contracts.md)
- [Static Analysis](https://banes-lab.com/records/architecture/static-analysis.md)
- [Rapid Scripting](https://banes-lab.com/records/lexicon/rapid-scripting.md)
- [Dynamic Untyped Boundaries](https://banes-lab.com/records/lexicon/dynamic-untyped-boundaries.md)
- [Stringly Typed Programming](https://banes-lab.com/records/architecture/stringly-typed-programming.md)
- [Explicit Contracts](https://banes-lab.com/records/architecture/explicit-contracts.md)
- [Liskov Substitution Principle](https://banes-lab.com/records/architecture/liskov-substitution.md)
- [Compile-Time Evaluation](https://banes-lab.com/records/architecture/compile-time-evaluation.md)
- [Composite Pattern](https://banes-lab.com/records/architecture/composite-pattern.md)
- [Type Safety / Rapid Scripting](https://banes-lab.com/records/tension/rapid-scripting-type-safety.md)
- [principle](https://banes-lab.com/records/kind/principle.md)
- [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- [Semantic Consistency](https://banes-lab.com/records/architecture/semantic-consistency.md)
- [Ubiquitous Language](https://banes-lab.com/records/architecture/ubiquitous-language.md)
- [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md)
- [Normalized Translation](https://banes-lab.com/records/lexicon/normalized-translation.md)
- [Bounded Context Autonomy](https://banes-lab.com/records/lexicon/bounded-context-autonomy.md)
- [Multiple Competing Models](https://banes-lab.com/records/lexicon/multiple-competing-models.md)
- [Canonical Data Model](https://banes-lab.com/records/architecture/canonical-data-model.md)
- [Canonical Model / Bounded Context Autonomy](https://banes-lab.com/records/tension/bounded-context-autonomy-canonical-model.md)
- [pattern](https://banes-lab.com/records/kind/pattern.md)
- [Canonical Model](https://banes-lab.com/records/architecture/canonical-model.md)
- [Normalization](https://banes-lab.com/records/architecture/normalization.md)
- [Cross-System Mapping](https://banes-lab.com/records/lexicon/cross-system-mapping.md)
- [Bounded Context Purity](https://banes-lab.com/records/lexicon/bounded-context-purity.md)
- [Local Model Autonomy](https://banes-lab.com/records/lexicon/local-model-autonomy.md)
- [Canonical Data Model / Bounded Context Purity](https://banes-lab.com/records/tension/bounded-context-purity-canonical-data-model.md)
- [Canonical Data Model / Local Model Autonomy](https://banes-lab.com/records/tension/canonical-data-model-local-model-autonomy.md)
- [artifact](https://banes-lab.com/records/kind/artifact.md)
- [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)
- [Schema Validation](https://banes-lab.com/records/architecture/schema-validation.md)
- [Service-Specific Schemas](https://banes-lab.com/records/lexicon/service-specific-schemas.md)
- [Schema Drift](https://banes-lab.com/records/architecture/schema-drift.md)
- [Canonical Schema / Service-Specific Schemas](https://banes-lab.com/records/tension/canonical-schema-service-specific-schemas.md)
- [technique](https://banes-lab.com/records/kind/technique.md)
- [Canonical Format](https://banes-lab.com/records/lexicon/canonical-format.md)
- [Validation](https://banes-lab.com/records/architecture/validation.md)
- [Deduplication](https://banes-lab.com/records/lexicon/deduplication.md)
- [Idempotency](https://banes-lab.com/records/architecture/idempotency.md)
- [Security Checks](https://banes-lab.com/records/lexicon/security-checks.md)
- [Lossless Preservation](https://banes-lab.com/records/lexicon/lossless-preservation.md)
- [Ambiguous Encoding](https://banes-lab.com/records/lexicon/ambiguous-encoding.md)
- [Canonicalization / Lossless Preservation](https://banes-lab.com/records/tension/canonicalization-lossless-preservation.md)
- [Ownership](https://banes-lab.com/records/lexicon/ownership.md)
- [Canonical Definition](https://banes-lab.com/records/lexicon/canonical-definition.md)
- [Do Not Repeat Yourself](https://banes-lab.com/records/architecture/duplicate-code.md)
- [Consistency](https://banes-lab.com/records/architecture/consistency.md)
- [Governance](https://banes-lab.com/records/architecture/governance.md)
- [Availability](https://banes-lab.com/records/lexicon/availability.md)
- [Decentralization](https://banes-lab.com/records/architecture/decentralization.md)
- [Duplicated Authority](https://banes-lab.com/records/lexicon/duplicated-authority.md)
- [Magic Value](https://banes-lab.com/records/architecture/magic-value.md)
- [Database Normalization](https://banes-lab.com/records/architecture/database-normalization.md)
- [Derived Record State](https://banes-lab.com/records/architecture/derived-record-state.md)
- [Projection Channel](https://banes-lab.com/records/architecture/projection-channel.md)
- [Two-Direction Index](https://banes-lab.com/records/architecture/two-direction-index.md)
- [Period-Decided Disposition](https://banes-lab.com/records/architecture/period-decided-disposition.md)
- [Single Aggregate](https://banes-lab.com/records/architecture/single-aggregate.md)
- [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md)
- [Declared Jurisdiction](https://banes-lab.com/records/architecture/declared-jurisdiction.md)
- [Derived Naming Registry](https://banes-lab.com/records/architecture/derived-naming-registry.md)
- [Collision Consolidation](https://banes-lab.com/records/architecture/collision-consolidation.md)
- [Externally Resolved Slot](https://banes-lab.com/records/architecture/externally-resolved-slot.md)
- [Structural Core](https://banes-lab.com/records/algorithms/structural-core.md)
- [Centralization Kernel](https://banes-lab.com/records/algorithms/centralization-kernel.md)
- [CSS Type-Cascade Kernel](https://banes-lab.com/records/algorithms/css-type-cascade-concern.md)
- [Single Source of Truth / Availability](https://banes-lab.com/records/tension/availability-single-source-of-truth.md)
- [Single Source of Truth / Decentralization](https://banes-lab.com/records/tension/decentralization-single-source-of-truth.md)
- [Determinism](https://banes-lab.com/records/architecture/determinism.md)
- [Data Semantics](https://banes-lab.com/records/lexicon/data-semantics.md)
- [Reduced Redundancy](https://banes-lab.com/records/lexicon/reduced-redundancy.md)
- [Query Performance](https://banes-lab.com/records/lexicon/query-performance.md)
- [Denormalized Read Models](https://banes-lab.com/records/lexicon/denormalized-read-models.md)
- [Normalization / Query Performance](https://banes-lab.com/records/tension/normalization-query-performance.md)
- [Normalization / Denormalized Read Models](https://banes-lab.com/records/tension/denormalized-read-models-normalization.md)
- [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- [Semantic Contracts](https://banes-lab.com/records/architecture/semantic-contracts.md)
- [Disambiguation](https://banes-lab.com/records/lexicon/disambiguation.md)
- [Polysemy Across Contexts](https://banes-lab.com/records/lexicon/polysemy-across-contexts.md)
- [Ambiguous Naming](https://banes-lab.com/records/lexicon/ambiguous-naming.md)
- [Inconsistent Error Model](https://banes-lab.com/records/architecture/inconsistent-error-model.md)
- [Domain-Driven Design](https://banes-lab.com/records/architecture/domain-driven-design.md)
- [Knowledge Graphs](https://banes-lab.com/records/architecture/knowledge-graphs.md)
- [Semantic Consistency / Polysemy Across Contexts](https://banes-lab.com/records/tension/polysemy-across-contexts-semantic-consistency.md)
- [activity](https://banes-lab.com/records/kind/activity.md)
- [Domain Collaboration](https://banes-lab.com/records/lexicon/domain-collaboration.md)
- [Intent-Revealing Interface](https://banes-lab.com/records/architecture/intent-revealing-interface.md)
- [Cross-Context Terminology](https://banes-lab.com/records/lexicon/cross-context-terminology.md)
- [Technical/Domain Mismatch](https://banes-lab.com/records/lexicon/technical-domain-mismatch.md)
- [Domain Model](https://banes-lab.com/records/architecture/domain-model.md)
- [Bounded Context](https://banes-lab.com/records/architecture/bounded-context.md)
- [Domain Service](https://banes-lab.com/records/architecture/domain-service.md)
- [Domain-Specific Language](https://banes-lab.com/records/architecture/domain-specific-language.md)
- [Ubiquitous Language / Cross-Context Terminology](https://banes-lab.com/records/tension/cross-context-terminology-ubiquitous-language.md)
- [Clear Semantics](https://banes-lab.com/records/lexicon/clear-semantics.md)
- [Naming Consistency](https://banes-lab.com/records/lexicon/naming-consistency.md)
- [Principle of Least Surprise](https://banes-lab.com/records/architecture/principle-of-least-surprise.md)
- [Readability](https://banes-lab.com/records/lexicon/readability.md)
- [Correct Usage](https://banes-lab.com/records/lexicon/correct-usage.md)
- [Concise Naming](https://banes-lab.com/records/lexicon/concise-naming.md)
- [Ambiguous API](https://banes-lab.com/records/lexicon/ambiguous-api.md)
- [Boolean Trap](https://banes-lab.com/records/architecture/boolean-trap.md)
- [Builder Pattern](https://banes-lab.com/records/architecture/builder-pattern.md)
- [Intent-Revealing Interface / Concise Naming](https://banes-lab.com/records/tension/concise-naming-intent-revealing-interface.md)
- [Predictability](https://banes-lab.com/records/architecture/predictability.md)
- [Convention](https://banes-lab.com/records/lexicon/convention.md)
- [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md)
- [Safe Use](https://banes-lab.com/records/lexicon/safe-use.md)
- [Clever Abstractions](https://banes-lab.com/records/lexicon/clever-abstractions.md)
- [Hidden Side Effect](https://banes-lab.com/records/architecture/hidden-side-effect.md)
- [Uniform Interface](https://banes-lab.com/records/architecture/uniform-interface.md)
- [Human Factors](https://banes-lab.com/records/algorithms/human-factors.md)
- [Principle of Least Surprise / Clever Abstractions](https://banes-lab.com/records/tension/clever-abstractions-principle-of-least-surprise.md)
- [Hidden Behavior](https://banes-lab.com/records/lexicon/hidden-behavior.md)
- [Tests](https://banes-lab.com/records/lexicon/tests.md)
- [Functional Dependencies](https://banes-lab.com/records/lexicon/functional-dependencies.md)
- [Data Integrity](https://banes-lab.com/records/lexicon/data-integrity.md)
- [Non-Redundant Storage](https://banes-lab.com/records/lexicon/non-redundant-storage.md)
- [Read Performance](https://banes-lab.com/records/lexicon/read-performance.md)
- [Duplicated Denormalized Columns](https://banes-lab.com/records/lexicon/duplicated-denormalized-columns.md)
- [Database Normalization / Read Performance](https://banes-lab.com/records/tension/database-normalization-read-performance.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)
