# Contracts / Interfaces / Compatibility

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

Page: Ontology · Principles
Canonical: https://banes-lab.com/ontology#arch-category-contracts-interfaces-compatibility

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_design_by_contract["Design by Contract"]
n_explicit_contracts["Explicit Contracts"]
n_stable_interfaces["Stable Interfaces"]
n_interface_based_design["Interface-Based Design"]
n_contract_first_design["Contract-First Design"]
n_api_contract["API Contract"]
n_service_contract["Service Contract"]
n_data_contract["Data Contract"]
n_schema_contract["Schema Contract"]
n_semantic_contracts["Semantic Contracts"]
n_preconditions["Preconditions"]
n_postconditions["Postconditions"]
n_invariants["Invariants"]
n_backward_compatibility["Backward Compatibility"]
n_forward_compatibility["Forward Compatibility"]
n_versioning["Versioning"]
n_protocol_compatibility["Protocol Compatibility"]
n_interoperability["Interoperability"]
n_uniform_interface["Uniform Interface"]
n_consumer_driven_contracts["Consumer-Driven Contracts"]
n_design_by_contract --> n_preconditions
n_design_by_contract --> n_postconditions
n_design_by_contract --> n_invariants
n_explicit_contracts --> n_stable_interfaces
n_explicit_contracts --> n_interoperability
n_explicit_contracts --> n_contract_first_design
n_stable_interfaces --> n_versioning
n_stable_interfaces --> n_backward_compatibility
n_interface_based_design --> n_stable_interfaces
n_contract_first_design --> n_explicit_contracts
n_contract_first_design --> n_schema_contract
n_contract_first_design --> n_interoperability
n_contract_first_design --> n_backward_compatibility
n_api_contract --> n_versioning
n_api_contract --> n_stable_interfaces
n_api_contract --> n_interoperability
n_service_contract --> n_api_contract
n_data_contract --> n_interoperability
n_schema_contract --> n_data_contract
n_preconditions --> n_design_by_contract
n_postconditions --> n_invariants
n_backward_compatibility --> n_versioning
n_backward_compatibility --> n_stable_interfaces
n_versioning --> n_stable_interfaces
n_versioning --> n_backward_compatibility
n_protocol_compatibility --> n_versioning
n_protocol_compatibility --> n_interoperability
n_consumer_driven_contracts --> n_explicit_contracts
n_consumer_driven_contracts --> n_backward_compatibility
n_consumer_driven_contracts --> n_contract_first_design
```

### Design by Contract

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: recommended
- Scope: API, function, class, service
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Preconditions](https://banes-lab.com/records/arch/preconditions.md), [Postconditions](https://banes-lab.com/records/arch/postconditions.md), [Invariants](https://banes-lab.com/records/arch/invariants.md)

Reinforces
[Correctness](https://banes-lab.com/records/arch/correctness.md), [Predictability](https://banes-lab.com/records/arch/predictability.md)

Enables
[Contract Testing](https://banes-lab.com/records/lex/contract-testing.md), [Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)

In tension with
[Development Speed](https://banes-lab.com/records/lex/development-speed.md)

Conflicts with
[Implicit Behavior](https://banes-lab.com/records/lex/implicit-behavior.md)

Referenced by
[Preconditions](https://banes-lab.com/records/arch/preconditions.md), [Correctness](https://banes-lab.com/records/arch/correctness.md)

Tensions
[Design by Contract Development Speed](https://banes-lab.com/records/tension/design-by-contract-development-speed.md)

Violated by
undocumented assumptions, unchecked inputs

Detected by
missing assertions, missing validation, vague public APIs

Measured by
contract coverage

Refactored by
Add Preconditions, Add Postconditions, Add Invariants

Enforced by
assertions, contract tests, [static analysis](https://banes-lab.com/records/reason/technique-static-analysis.md)

Before

```typescript
function divideFoo(total: number, count: number) {
return total / count;
}
```

After

```typescript
function divideFoo(total: number, count: number): number {
if (!Number.isFinite(total)) throw new Error("pre: total must be finite");
if (!Number.isInteger(count) || count <= 0) throw new Error("pre: count must be positive");
const result = total / count;
if (!Number.isFinite(result)) throw new Error("post: result must be finite");
return result;
}
```

### Explicit Contracts

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: mandatory
- Scope: API, service, data, protocol
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md), [Type Safety](https://banes-lab.com/records/arch/type-safety.md)

Reinforces
[Predictability](https://banes-lab.com/records/arch/predictability.md), [Interoperability](https://banes-lab.com/records/arch/interoperability.md)

Enables
[Contract-First Design](https://banes-lab.com/records/arch/contract-first-design.md)

In tension with
[Rapid Prototyping](https://banes-lab.com/records/lex/rapid-prototyping.md)

Conflicts with
[Implicit Payloads](https://banes-lab.com/records/lex/implicit-payloads.md), [Implicit Contract](https://banes-lab.com/records/arch/implicit-contract.md)

Referenced by
[Contract-First Design](https://banes-lab.com/records/arch/contract-first-design.md), [Consumer-Driven Contracts](https://banes-lab.com/records/arch/consumer-driven-contracts.md), [Predictability](https://banes-lab.com/records/arch/predictability.md), [Service Autonomy](https://banes-lab.com/records/arch/service-autonomy.md)

Tensions
[Explicit Contracts Rapid Prototyping](https://banes-lab.com/records/tension/explicit-contracts-rapid-prototyping.md)

Violated by
untyped boundaries, undocumented payloads

Detected by
public methods without DTO/schema, dynamic maps at boundaries

Measured by
boundary contract coverage

Refactored by
Add DTO, Add Schema, Add Interface

Enforced by
[schema validation](https://banes-lab.com/records/arch/schema-validation.md), API linting

Before

```typescript
function saveFoo(foo: any): any { return fooStore.save(foo); }
```

After

```typescript
interface SaveFoo {
execute(input: Readonly<{ id: FooId; name: string }>): Promise<{ saved: true; version: number }>;
}
const saveFoo: SaveFoo = { execute: input => fooStore.save(input) };
```

### Stable Interfaces

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Severity: mandatory
- Scope: API, module, service
- Aliases: Stable Interface
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Versioning](https://banes-lab.com/records/arch/versioning.md), [Backward Compatibility](https://banes-lab.com/records/arch/backward-compatibility.md)

Reinforces
[Low Coupling](https://banes-lab.com/records/arch/low-coupling.md), [Replaceability](https://banes-lab.com/records/arch/replaceability.md)

Enables
[Independent Consumers](https://banes-lab.com/records/lex/independent-consumers.md)

In tension with
[Evolution Speed](https://banes-lab.com/records/lex/evolution-speed.md)

Conflicts with
[Breaking Changes](https://banes-lab.com/records/lex/breaking-changes.md)

Referenced by
[Explicit Contracts](https://banes-lab.com/records/arch/explicit-contracts.md), [Interface-Based Design](https://banes-lab.com/records/arch/interface-based-design.md), [API Contract](https://banes-lab.com/records/arch/api-contract.md), [Backward Compatibility](https://banes-lab.com/records/arch/backward-compatibility.md), [Versioning](https://banes-lab.com/records/arch/versioning.md), [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md), [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md), [Composability](https://banes-lab.com/records/arch/composability.md), [Replaceability](https://banes-lab.com/records/arch/replaceability.md), [Explicit Boundaries](https://banes-lab.com/records/arch/explicit-boundaries.md), [Plugin Architecture](https://banes-lab.com/records/arch/plugin-architecture.md), [Extension Points](https://banes-lab.com/records/arch/extension-points.md), [Runtime Extensibility](https://banes-lab.com/records/arch/runtime-extensibility.md), [Principle of Least Surprise](https://banes-lab.com/records/arch/principle-of-least-surprise.md), [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)

Tensions
[Stable Interfaces Evolution Speed](https://banes-lab.com/records/tension/evolution-speed-stable-interfaces.md)

Violated by
signature churn, [schema drift](https://banes-lab.com/records/arch/schema-drift.md)

Detected by
incompatible API diffs

Measured by
breaking-change frequency

Refactored by
Add Version, Add Adapter, Deprecate Gradually

Enforced by
API diff checks, contract tests

Before

```typescript
class FooService {
createFoo(name: string, tags: string[], notify: boolean, source: string) {}
}
```

After

```typescript
type CreateFooRequest = Readonly<{
name: string;
tags: readonly string[];
extensions: Readonly<Record<string, unknown>>;
}>;
interface FooService { create(request: CreateFooRequest): Promise<FooId>; }
```

### Interface-Based Design

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: recommended
- Scope: class, module, service
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Abstraction](https://banes-lab.com/records/arch/abstraction.md), [Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md)

Reinforces
[Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md), [Testability](https://banes-lab.com/records/arch/testability.md)

Enables
[Dependency Injection](https://banes-lab.com/records/arch/dependency-injection.md), [Adapter Pattern](https://banes-lab.com/records/arch/adapter-pattern.md)

In tension with
[Interface Overuse](https://banes-lab.com/records/lex/interface-overuse.md)

Conflicts with
[Concrete Coupling](https://banes-lab.com/records/arch/concrete-coupling.md)

Referenced by
[Composition Over Inheritance](https://banes-lab.com/records/arch/composition-over-inheritance.md)

Tensions
[Interface-Based Design Interface Overuse](https://banes-lab.com/records/tension/interface-based-design-interface-overuse.md)

Violated by
direct dependency on implementations

Detected by
concrete constructor dependencies

Measured by
interface-to-implementation boundary ratio

Refactored by
Extract Interface, Inject Dependency

Enforced by
dependency rules

Before

```typescript
function processFoo(store: SqlFooStore, foo: Foo) { return store.insert(foo); }
```

After

```typescript
interface FooWriter { save(foo: Foo): Promise<void>; }
function processFoo(store: FooWriter, foo: Foo) { return store.save(foo); }
```

### Contract-First Design

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: recommended
- Scope: API, service, integration
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Explicit Contracts](https://banes-lab.com/records/arch/explicit-contracts.md), [Schema Contract](https://banes-lab.com/records/arch/schema-contract.md)

Reinforces
[Interoperability](https://banes-lab.com/records/arch/interoperability.md), [Backward Compatibility](https://banes-lab.com/records/arch/backward-compatibility.md)

Enables
[Consumer-Driven Development](https://banes-lab.com/records/lex/consumer-driven-development.md)

In tension with
[Iteration Speed](https://banes-lab.com/records/lex/iteration-speed.md)

Conflicts with
[Implementation-First Integration](https://banes-lab.com/records/lex/implementation-first-integration.md)

Referenced by
[Explicit Contracts](https://banes-lab.com/records/arch/explicit-contracts.md), [Consumer-Driven Contracts](https://banes-lab.com/records/arch/consumer-driven-contracts.md)

Tensions
[Contract-First Design Iteration Speed](https://banes-lab.com/records/tension/contract-first-design-iteration-speed.md)

Violated by
generated contracts from unstable implementation

Detected by
absent contract before implementation

Measured by
contract-first coverage

Refactored by
Define Contract, Generate Stubs, Add Contract Tests

Enforced by
CI contract gates

Before

```typescript
app.post("/foo", async request => fooStore.save(await request.json()));
```

After

```typescript
type CreateFooRequest = { name: string };
type CreateFooResponse = { id: FooId; version: 1 };
interface CreateFooContract {
request: CreateFooRequest;
response: CreateFooResponse;
}
app.post("/foo", implement<CreateFooContract>(createFoo));
```

### API Contract

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: API, service boundary
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Schema](https://banes-lab.com/records/lex/schema.md), [Versioning](https://banes-lab.com/records/arch/versioning.md), [Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md)

Reinforces
[Interoperability](https://banes-lab.com/records/arch/interoperability.md), [Predictability](https://banes-lab.com/records/arch/predictability.md)

Enables
[Client Compatibility](https://banes-lab.com/records/lex/client-compatibility.md)

In tension with
[Evolution](https://banes-lab.com/records/lex/evolution.md)

Conflicts with
[Breaking API Change](https://banes-lab.com/records/lex/breaking-api-change.md)

Referenced by
[Service Contract](https://banes-lab.com/records/arch/service-contract.md), [Self-Describing API](https://banes-lab.com/records/arch/self-describing-api.md)

Tensions
[API Contract Evolution](https://banes-lab.com/records/tension/api-contract-evolution.md)

Violated by
undocumented endpoints, inconsistent status/error formats

Detected by
OpenAPI drift, missing endpoint schemas

Measured by
contract coverage, breaking diff count

Refactored by
Add OpenAPI, Normalize Responses, Version API

Enforced by
OpenAPI linting, contract tests

Before

```typescript
app.get("/foo/:id", async request => fooStore.find(request.params.id));
```

After

```typescript
const getFooApi = endpoint({
method: "GET",
path: "/v1/foo/{id}",
request: FooIdSchema,
response: FooResponseSchema,
errors: ["FOO_NOT_FOUND"] as const,
});
```

### Service Contract

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: service, integration
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[API Contract](https://banes-lab.com/records/arch/api-contract.md), [Semantic Contract](https://banes-lab.com/records/lex/semantic-contract.md)

Reinforces
[Service Autonomy](https://banes-lab.com/records/arch/service-autonomy.md), [Compatibility](https://banes-lab.com/records/lex/compatibility.md)

Enables
[Independent Deployment](https://banes-lab.com/records/lex/independent-deployment.md)

In tension with
[Distributed Evolution](https://banes-lab.com/records/lex/distributed-evolution.md)

Conflicts with
[Hidden Service Coupling](https://banes-lab.com/records/lex/hidden-service-coupling.md)

Referenced by
[Service-Oriented Architecture](https://banes-lab.com/records/arch/service-oriented-architecture.md)

Tensions
[Service Contract Distributed Evolution](https://banes-lab.com/records/tension/distributed-evolution-service-contract.md)

Violated by
undocumented side effects, unstable service behavior

Detected by
consumer failures after service changes

Measured by
consumer contract pass rate

Refactored by
Add Consumer Contract, Define SLA, Version Service

Enforced by
contract tests, deployment gates

Before

```typescript
class FooClient {
create(body: any) { return http.post("/foo", body); }
}
```

After

```typescript
interface FooServiceContract {
create(input: CreateFoo): Promise<Result<FooCreated, FooError>>;
}
class FooClient implements FooServiceContract {
create(input: CreateFoo) { return transport.call("Foo.Create", input); }
}
```

### Data Contract

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: data, message, persistence, integration
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Schema](https://banes-lab.com/records/lex/schema.md), [Type Safety](https://banes-lab.com/records/arch/type-safety.md), [Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md)

Reinforces
[Interoperability](https://banes-lab.com/records/arch/interoperability.md), [Data Quality](https://banes-lab.com/records/lex/data-quality.md)

Enables
[Schema Evolution](https://banes-lab.com/records/lex/schema-evolution.md)

In tension with
[Flexible Ingestion](https://banes-lab.com/records/lex/flexible-ingestion.md)

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

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

Tensions
[Data Contract Flexible Ingestion](https://banes-lab.com/records/tension/data-contract-flexible-ingestion.md)

Violated by
untyped maps, implicit fields, undocumented nullability

Detected by
data validation failures, schema mismatch

Measured by
schema conformance rate

Refactored by
Add DTO, Add Schema, Normalize Field Semantics

Enforced by
schema registry, validation gates

Before

```typescript
type FooMessage = Record<string, unknown>;
queue.publish("foo", payload);
```

After

```typescript
type FooMessageV1 = Readonly<{
type: "FooCreated";
version: 1;
fooId: FooId;
name: string;
}>;
queue.publish<FooMessageV1>("foo.created.v1", message);
```

### Schema Contract

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: data, API, message
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Canonical Schema](https://banes-lab.com/records/arch/canonical-schema.md), [Schema Validation](https://banes-lab.com/records/arch/schema-validation.md)

Reinforces
[Data Contract](https://banes-lab.com/records/arch/data-contract.md), [Compatibility](https://banes-lab.com/records/lex/compatibility.md)

Enables
[Automated Validation](https://banes-lab.com/records/lex/automated-validation.md)

In tension with
[Schema Flexibility](https://banes-lab.com/records/lex/schema-flexibility.md)

Conflicts with
[Ad-Hoc Payloads](https://banes-lab.com/records/lex/ad-hoc-payloads.md)

Referenced by
[Contract-First Design](https://banes-lab.com/records/arch/contract-first-design.md), [Schema Validation](https://banes-lab.com/records/arch/schema-validation.md), [Canonical Schema](https://banes-lab.com/records/arch/canonical-schema.md)

Tensions
[Schema Contract Schema Flexibility](https://banes-lab.com/records/tension/schema-contract-schema-flexibility.md)

Violated by
unvalidated payloads, undocumented field changes

Detected by
schema diff failures

Measured by
schema validation coverage

Refactored by
Add JSON Schema, Protobuf, Avro, OpenAPI

Enforced by
schema registry, CI schema checks

Before

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

After

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

### Semantic Contracts

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: domain, API, data
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md), [Domain Model](https://banes-lab.com/records/arch/domain-model.md)

Reinforces
[Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md), [Correctness](https://banes-lab.com/records/arch/correctness.md)

Enables
[Reliable Integration](https://banes-lab.com/records/lex/reliable-integration.md)

In tension with
[Cross-Domain Translation](https://banes-lab.com/records/lex/cross-domain-translation.md)

Conflicts with
[Ambiguous Naming](https://banes-lab.com/records/lex/ambiguous-naming.md)

Referenced by
[Domain Model](https://banes-lab.com/records/arch/domain-model.md), [Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md), [Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md)

Tensions
[Semantic Contracts Cross-Domain Translation](https://banes-lab.com/records/tension/cross-domain-translation-semantic-contracts.md)

Violated by
same term with different meanings

Detected by
conflicting field meanings, overloaded names

Measured by
semantic conflict count

Refactored by
Rename, Introduce Bounded Context, Add Anti-Corruption Layer

Enforced by
domain glossary, contract review

Before

```typescript
function reserveFoo(count: number) { return fooStore.decrement(count); }
```

After

```typescript
type PositiveCount = number & { readonly __brand: "PositiveCount" };
function reserveFoo(count: PositiveCount): Promise<{ reserved: true }> {
return fooInventory.reserveExactly(count);
}
```

### Preconditions

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: function, method, API
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Input Validation](https://banes-lab.com/records/arch/input-validation.md)

Reinforces
[Design by Contract](https://banes-lab.com/records/arch/design-by-contract.md), [Fail Fast](https://banes-lab.com/records/arch/fail-fast.md)

Enables
[Correctness](https://banes-lab.com/records/arch/correctness.md)

In tension with
[Permissive APIs](https://banes-lab.com/records/lex/permissive-apis.md)

Conflicts with
[Implicit Assumptions](https://banes-lab.com/records/lex/implicit-assumptions.md)

Referenced by
[Design by Contract](https://banes-lab.com/records/arch/design-by-contract.md), [Fail Fast](https://banes-lab.com/records/arch/fail-fast.md), [Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)

Tensions
[Preconditions Permissive APIs](https://banes-lab.com/records/tension/permissive-apis-preconditions.md)

Violated by
accepting invalid state/input

Detected by
missing validation before state transition

Measured by
invalid-input handling coverage

Refactored by
Add Guard Clause, Add Validator

Enforced by
[validation rules](https://banes-lab.com/records/lex/validation-rules.md), [static analysis](https://banes-lab.com/records/reason/technique-static-analysis.md)

Before

```typescript
function renameFoo(foo: Foo, name: string) { foo.name = name; }
```

After

```typescript
function renameFoo(foo: Foo, name: string) {
if (foo.status !== "active") throw new Error("pre: Foo must be active");
if (name.trim().length === 0) throw new Error("pre: name required");
foo.rename(name.trim());
}
```

### Postconditions

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: recommended
- Scope: function, method, transaction
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Result Validation](https://banes-lab.com/records/lex/result-validation.md), [Invariants](https://banes-lab.com/records/arch/invariants.md)

Reinforces
[Correctness](https://banes-lab.com/records/arch/correctness.md), [Predictability](https://banes-lab.com/records/arch/predictability.md)

Enables
[Testability](https://banes-lab.com/records/arch/testability.md)

In tension with
[Runtime Cost](https://banes-lab.com/records/lex/runtime-cost.md)

Conflicts with
[Undefined Results](https://banes-lab.com/records/lex/undefined-results.md)

Referenced by
[Design by Contract](https://banes-lab.com/records/arch/design-by-contract.md), [Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)

Tensions
[Postconditions Runtime Cost](https://banes-lab.com/records/tension/postconditions-runtime-cost.md)

Violated by
returning invalid output state

Detected by
missing assertions on results

Measured by
property test coverage

Refactored by
Add Assertions, Add Result Type, Add Contract Tests

Enforced by
property tests, invariant checks

Before

```typescript
async function createFoo(foo: Foo) { return fooStore.save(foo); }
```

After

```typescript
async function createFoo(foo: Foo): Promise<FooId> {
await fooStore.save(foo);
const saved = await fooStore.find(foo.id);
if (!saved) throw new Error("post: Foo must be persisted");
return saved.id;
}
```

### Invariants

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: entity, aggregate, module, system
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Encapsulation](https://banes-lab.com/records/arch/encapsulation.md), [Validation](https://banes-lab.com/records/arch/validation.md)

Reinforces
[Correctness](https://banes-lab.com/records/arch/correctness.md), [Consistency](https://banes-lab.com/records/arch/consistency.md)

Enables
[Safe Refactoring](https://banes-lab.com/records/lex/safe-refactoring.md)

In tension with
[Flexibility](https://banes-lab.com/records/lex/flexibility.md)

Conflicts with
[External State Mutation](https://banes-lab.com/records/lex/external-state-mutation.md)

Referenced by
[Design by Contract](https://banes-lab.com/records/arch/design-by-contract.md), [Postconditions](https://banes-lab.com/records/arch/postconditions.md), [Domain Model](https://banes-lab.com/records/arch/domain-model.md), [Aggregate](https://banes-lab.com/records/arch/aggregate.md), [Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md), [Consistency](https://banes-lab.com/records/arch/consistency.md)

Tensions
[Invariants Flexibility](https://banes-lab.com/records/tension/flexibility-invariants.md)

Violated by
invalid domain states, broken aggregate rules

Detected by
mutable public state, missing invariant checks

Measured by
invariant test coverage

Refactored by
Encapsulate State, Add Factory, Add Validation

Enforced by
domain tests, constructors, type system

Before

```typescript
class FooAccount {
balance = 0;
withdraw(amount: number) { this.balance -= amount; }
}
```

After

```typescript
class FooAccount {
#balance = 0;
withdraw(amount: number) {
if (amount <= 0 || amount > this.#balance) throw new Error("invariant: balance >= 0");
this.#balance -= amount;
}
}
```

### Backward Compatibility

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: API, schema, protocol
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Versioning](https://banes-lab.com/records/arch/versioning.md), [Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md)

Reinforces
[Consumer Safety](https://banes-lab.com/records/lex/consumer-safety.md)

Enables
[Incremental Deployment](https://banes-lab.com/records/lex/incremental-deployment.md)

In tension with
[Cleanup / Simplification](https://banes-lab.com/records/lex/cleanup-simplification.md)

Conflicts with
[Breaking Change](https://banes-lab.com/records/lex/breaking-change.md)

Referenced by
[Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md), [Contract-First Design](https://banes-lab.com/records/arch/contract-first-design.md), [Versioning](https://banes-lab.com/records/arch/versioning.md), [Consumer-Driven Contracts](https://banes-lab.com/records/arch/consumer-driven-contracts.md)

Tensions
[Backward Compatibility Cleanup / Simplification](https://banes-lab.com/records/tension/backward-compatibility-cleanup-simplification.md)

Violated by
removing fields, changing semantics, narrowing types

Detected by
API/schema diff

Measured by
breaking-change count

Refactored by
Add Version, Deprecate, Add Adapter

Enforced by
compatibility tests, API diff gates

Before

```typescript
app.get("/foo", () => ({ label: "Foo", tags: [] }));
```

After

```typescript
app.get("/v1/foo", () => ({ name: "Foo" }));
app.get("/v2/foo", () => ({ label: "Foo", tags: [] }));
```

### Forward Compatibility

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: recommended
- Scope: API, schema, protocol
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Extensible Schema](https://banes-lab.com/records/lex/extensible-schema.md), [Unknown Field Handling](https://banes-lab.com/records/lex/unknown-field-handling.md)

Reinforces
[Evolutionary Architecture](https://banes-lab.com/records/arch/evolutionary-architecture.md)

Enables
[Rolling Upgrades](https://banes-lab.com/records/lex/rolling-upgrades.md)

In tension with
[Strong Validation](https://banes-lab.com/records/lex/strong-validation.md)

Conflicts with
[Strict Fragile Parsers](https://banes-lab.com/records/lex/strict-fragile-parsers.md)

Tensions
[Forward Compatibility Strong Validation](https://banes-lab.com/records/tension/forward-compatibility-strong-validation.md)

Violated by
rejecting unknown safe fields

Detected by
parser failures on additive changes

Measured by
forward-compatibility test pass rate

Refactored by
Add Extension Points, Ignore Unknown Fields Safely

Enforced by
compatibility test matrix

Before

```typescript
function readFoo(input: { name: string }) {
if (Object.keys(input).length !== 1) throw new Error("unknown field");
return input.name;
}
```

After

```typescript
type FooEnvelope = { name: string; extensions?: Record<string, unknown> };
function readFoo(input: FooEnvelope) {
return { name: input.name, extensions: input.extensions ?? {} };
}
```

### Versioning

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Severity: mandatory
- Scope: API, schema, package, service
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md), [Compatibility Policy](https://banes-lab.com/records/lex/compatibility-policy.md)

Reinforces
[Backward Compatibility](https://banes-lab.com/records/arch/backward-compatibility.md), [Governance](https://banes-lab.com/records/arch/governance.md)

Enables
[Controlled Evolution](https://banes-lab.com/records/lex/controlled-evolution.md)

In tension with
[Version Sprawl](https://banes-lab.com/records/lex/version-sprawl.md)

Conflicts with
[Silent Breaking Changes](https://banes-lab.com/records/lex/silent-breaking-changes.md)

Referenced by
[Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md), [API Contract](https://banes-lab.com/records/arch/api-contract.md), [Backward Compatibility](https://banes-lab.com/records/arch/backward-compatibility.md), [Protocol Compatibility](https://banes-lab.com/records/arch/protocol-compatibility.md), [Integration Events](https://banes-lab.com/records/arch/integration-events.md)

Contracts
[Versioned Evolution Over Breaking Change](https://banes-lab.com/records/algo/no-breaking-change.md)

Tensions
[Versioning Version Sprawl](https://banes-lab.com/records/tension/version-sprawl-versioning.md)

Violated by
unversioned breaking changes

Detected by
incompatible diff without version bump

Measured by
version compliance, deprecation window

Refactored by
Add Semantic Versioning, Add API Version

Enforced by
release gates, API checks

Before

```typescript
queue.publish("foo.created", { id: foo.id, name: foo.name });
```

After

```typescript
queue.publish("foo.created.v2", {
schemaVersion: 2,
id: foo.id,
label: foo.name,
});
```

### Protocol Compatibility

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: mandatory
- Scope: integration, network, message
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Protocol Contract](https://banes-lab.com/records/lex/protocol-contract.md), [Versioning](https://banes-lab.com/records/arch/versioning.md)

Reinforces
[Interoperability](https://banes-lab.com/records/arch/interoperability.md)

Enables
[Multi-Client Integration](https://banes-lab.com/records/lex/multi-client-integration.md)

In tension with
[Protocol Optimization](https://banes-lab.com/records/lex/protocol-optimization.md)

Conflicts with
[Proprietary Drift](https://banes-lab.com/records/lex/proprietary-drift.md)

Tensions
[Protocol Compatibility Protocol Optimization](https://banes-lab.com/records/tension/protocol-compatibility-protocol-optimization.md)

Violated by
unsupported protocol changes

Detected by
protocol conformance failure

Measured by
conformance test pass rate

Refactored by
Add Adapter, Normalize Protocol

Enforced by
conformance tests

Before

```typescript
socket.send(JSON.stringify({ action: "save", foo }));
```

After

```typescript
type FooFrameV1 = { protocol: "foo/1"; type: "save"; payload: Foo };
socket.send(encodeFrame<FooFrameV1>({ protocol: "foo/1", type: "save", payload: foo }));
```

### Interoperability

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Severity: mandatory
- Scope: API, data, protocol, system
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Contracts](https://banes-lab.com/records/lex/contracts.md), [Standards](https://banes-lab.com/records/lex/standards.md), [Compatibility](https://banes-lab.com/records/lex/compatibility.md)

Reinforces
[Portability](https://banes-lab.com/records/arch/portability.md), [Integration](https://banes-lab.com/records/lex/integration.md)

Enables
[Cross-System Communication](https://banes-lab.com/records/lex/cross-system-communication.md)

In tension with
[Domain-Specific Optimization](https://banes-lab.com/records/lex/domain-specific-optimization.md)

Conflicts with
[Proprietary Coupling](https://banes-lab.com/records/lex/proprietary-coupling.md)

Referenced by
[Standardization](https://banes-lab.com/records/arch/standardization.md), [Explicit Contracts](https://banes-lab.com/records/arch/explicit-contracts.md), [Contract-First Design](https://banes-lab.com/records/arch/contract-first-design.md), [API Contract](https://banes-lab.com/records/arch/api-contract.md), [Data Contract](https://banes-lab.com/records/arch/data-contract.md), [Protocol Compatibility](https://banes-lab.com/records/arch/protocol-compatibility.md), [Robustness Principle](https://banes-lab.com/records/arch/robustness-principle.md), [Integration Events](https://banes-lab.com/records/arch/integration-events.md), [Self-Describing API](https://banes-lab.com/records/arch/self-describing-api.md), [Standards Compliance](https://banes-lab.com/records/arch/standards-compliance.md), [Schema Validation](https://banes-lab.com/records/arch/schema-validation.md), [Canonical Data Model](https://banes-lab.com/records/arch/canonical-data-model.md), [Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md), [Adapter Pattern](https://banes-lab.com/records/arch/adapter-pattern.md)

Tensions
[Interoperability Domain-Specific Optimization](https://banes-lab.com/records/tension/domain-specific-optimization-interoperability.md)

Violated by
incompatible formats, hidden assumptions

Detected by
integration test failures

Measured by
interoperability test coverage

Refactored by
Standardize Format, Add Adapter, Add Schema

Enforced by
contract tests, standards checks

Before

```typescript
fooClient.send(serializeWithPrivateFormat(foo));
```

After

```typescript
const payload: JsonFooV1 = toJsonFooV1(foo);
fooClient.send(JSON.stringify(payload), { contentType: "application/json" });
```

### Uniform Interface

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: recommended
- Scope: API, resource boundary
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Consistent Semantics](https://banes-lab.com/records/lex/consistent-semantics.md), [Stable Contracts](https://banes-lab.com/records/lex/stable-contracts.md)

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

Enables
[API Usability](https://banes-lab.com/records/lex/api-usability.md)

In tension with
[Specialized Endpoints](https://banes-lab.com/records/lex/specialized-endpoints.md)

Conflicts with
[Ad-Hoc Endpoints](https://banes-lab.com/records/lex/ad-hoc-endpoints.md), [Chatty Interface](https://banes-lab.com/records/arch/chatty-interface.md)

Referenced by
[Composite Pattern](https://banes-lab.com/records/arch/composite-pattern.md)

Tensions
[Uniform Interface Specialized Endpoints](https://banes-lab.com/records/tension/specialized-endpoints-uniform-interface.md)

Violated by
inconsistent verbs, response shapes, error formats

Detected by
API lint violations

Measured by
endpoint consistency score

Refactored by
Normalize API, Standardize Error Model

Enforced by
API style guide, OpenAPI linting

Before

```typescript
fooApi.createFoo(foo);
barApi.post("/bar", bar);
bazApi.execute("DELETE_BAZ", baz.id);
```

After

```typescript
resourceClient.post("/foos", foo);
resourceClient.post("/bars", bar);
resourceClient.delete(`/bazes/${baz.id}`);
```

### Consumer-Driven Contracts

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: recommended
- Scope: API, service, integration
- Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)

Details

Requires
[Explicit Contracts](https://banes-lab.com/records/arch/explicit-contracts.md)

Reinforces
[Backward Compatibility](https://banes-lab.com/records/arch/backward-compatibility.md), [Contract-First Design](https://banes-lab.com/records/arch/contract-first-design.md)

Enables
[Provider Change Safety](https://banes-lab.com/records/lex/provider-change-safety.md), [Consumer-Verified Compatibility](https://banes-lab.com/records/lex/consumer-verified-compatibility.md)

In tension with
[Provider Autonomy](https://banes-lab.com/records/lex/provider-autonomy.md)

Conflicts with
[Unversioned Breaking Change](https://banes-lab.com/records/arch/unversioned-breaking-change.md)

Tensions
[Consumer-Driven Contracts Provider Autonomy](https://banes-lab.com/records/tension/consumer-driven-contracts-provider-autonomy.md)

Violated by
providers changing responses with no consumer expectation check

Detected by
integration breaks discovered only in production

Measured by
consumer-break incident rate

Refactored by
Introduce Consumer-Driven Contract tests

Enforced by
contract test gate

Before

```typescript
fooProvider.deploy(newFooApi);
```

After

```typescript
const expectations = collectContractsFrom(["bar-service", "baz-service"]);
const result = verifyProvider(newFooApi, expectations);
if (!result.satisfied) throw new BrokenConsumerContractError(result.violations);
fooProvider.deploy(newFooApi);
```

## Links to

- [principle](https://banes-lab.com/records/kind/principle.md)
- [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
- [Preconditions](https://banes-lab.com/records/arch/preconditions.md)
- [Postconditions](https://banes-lab.com/records/arch/postconditions.md)
- [Invariants](https://banes-lab.com/records/arch/invariants.md)
- [Correctness](https://banes-lab.com/records/arch/correctness.md)
- [Predictability](https://banes-lab.com/records/arch/predictability.md)
- [Contract Testing](https://banes-lab.com/records/lex/contract-testing.md)
- [Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)
- [Development Speed](https://banes-lab.com/records/lex/development-speed.md)
- [Implicit Behavior](https://banes-lab.com/records/lex/implicit-behavior.md)
- [Design by Contract / Development Speed](https://banes-lab.com/records/tension/design-by-contract-development-speed.md)
- [Static Analysis](https://banes-lab.com/records/reason/technique-static-analysis.md)
- [Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md)
- [Type Safety](https://banes-lab.com/records/arch/type-safety.md)
- [Interoperability](https://banes-lab.com/records/arch/interoperability.md)
- [Contract-First Design](https://banes-lab.com/records/arch/contract-first-design.md)
- [Rapid Prototyping](https://banes-lab.com/records/lex/rapid-prototyping.md)
- [Implicit Payloads](https://banes-lab.com/records/lex/implicit-payloads.md)
- [Implicit Contract](https://banes-lab.com/records/arch/implicit-contract.md)
- [Consumer-Driven Contracts](https://banes-lab.com/records/arch/consumer-driven-contracts.md)
- [Service Autonomy](https://banes-lab.com/records/arch/service-autonomy.md)
- [Explicit Contracts / Rapid Prototyping](https://banes-lab.com/records/tension/explicit-contracts-rapid-prototyping.md)
- [Schema Validation](https://banes-lab.com/records/arch/schema-validation.md)
- [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- [Versioning](https://banes-lab.com/records/arch/versioning.md)
- [Backward Compatibility](https://banes-lab.com/records/arch/backward-compatibility.md)
- [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)
- [Replaceability](https://banes-lab.com/records/arch/replaceability.md)
- [Independent Consumers](https://banes-lab.com/records/lex/independent-consumers.md)
- [Evolution Speed](https://banes-lab.com/records/lex/evolution-speed.md)
- [Breaking Changes](https://banes-lab.com/records/lex/breaking-changes.md)
- [Explicit Contracts](https://banes-lab.com/records/arch/explicit-contracts.md)
- [Interface-Based Design](https://banes-lab.com/records/arch/interface-based-design.md)
- [API Contract](https://banes-lab.com/records/arch/api-contract.md)
- [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)
- [Composability](https://banes-lab.com/records/arch/composability.md)
- [Explicit Boundaries](https://banes-lab.com/records/arch/explicit-boundaries.md)
- [Plugin Architecture](https://banes-lab.com/records/arch/plugin-architecture.md)
- [Extension Points](https://banes-lab.com/records/arch/extension-points.md)
- [Runtime Extensibility](https://banes-lab.com/records/arch/runtime-extensibility.md)
- [Principle of Least Surprise](https://banes-lab.com/records/arch/principle-of-least-surprise.md)
- [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)
- [Stable Interfaces / Evolution Speed](https://banes-lab.com/records/tension/evolution-speed-stable-interfaces.md)
- [Schema Drift](https://banes-lab.com/records/arch/schema-drift.md)
- [Abstraction](https://banes-lab.com/records/arch/abstraction.md)
- [Testability](https://banes-lab.com/records/arch/testability.md)
- [Dependency Injection](https://banes-lab.com/records/arch/dependency-injection.md)
- [Adapter Pattern](https://banes-lab.com/records/arch/adapter-pattern.md)
- [Interface Overuse](https://banes-lab.com/records/lex/interface-overuse.md)
- [Concrete Coupling](https://banes-lab.com/records/arch/concrete-coupling.md)
- [Composition Over Inheritance](https://banes-lab.com/records/arch/composition-over-inheritance.md)
- [Interface-Based Design / Interface Overuse](https://banes-lab.com/records/tension/interface-based-design-interface-overuse.md)
- [Schema Contract](https://banes-lab.com/records/arch/schema-contract.md)
- [Consumer-Driven Development](https://banes-lab.com/records/lex/consumer-driven-development.md)
- [Iteration Speed](https://banes-lab.com/records/lex/iteration-speed.md)
- [Implementation-First Integration](https://banes-lab.com/records/lex/implementation-first-integration.md)
- [Contract-First Design / Iteration Speed](https://banes-lab.com/records/tension/contract-first-design-iteration-speed.md)
- [constraint](https://banes-lab.com/records/kind/constraint.md)
- [Schema](https://banes-lab.com/records/lex/schema.md)
- [Client Compatibility](https://banes-lab.com/records/lex/client-compatibility.md)
- [Evolution](https://banes-lab.com/records/lex/evolution.md)
- [Breaking API Change](https://banes-lab.com/records/lex/breaking-api-change.md)
- [Service Contract](https://banes-lab.com/records/arch/service-contract.md)
- [Self-Describing API](https://banes-lab.com/records/arch/self-describing-api.md)
- [API Contract / Evolution](https://banes-lab.com/records/tension/api-contract-evolution.md)
- [Semantic Contract](https://banes-lab.com/records/lex/semantic-contract.md)
- [Compatibility](https://banes-lab.com/records/lex/compatibility.md)
- [Independent Deployment](https://banes-lab.com/records/lex/independent-deployment.md)
- [Distributed Evolution](https://banes-lab.com/records/lex/distributed-evolution.md)
- [Hidden Service Coupling](https://banes-lab.com/records/lex/hidden-service-coupling.md)
- [Service-Oriented Architecture](https://banes-lab.com/records/arch/service-oriented-architecture.md)
- [Service Contract / Distributed Evolution](https://banes-lab.com/records/tension/distributed-evolution-service-contract.md)
- [Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md)
- [Data Quality](https://banes-lab.com/records/lex/data-quality.md)
- [Schema Evolution](https://banes-lab.com/records/lex/schema-evolution.md)
- [Flexible Ingestion](https://banes-lab.com/records/lex/flexible-ingestion.md)
- [Canonical Data Model](https://banes-lab.com/records/arch/canonical-data-model.md)
- [Data Contract / Flexible Ingestion](https://banes-lab.com/records/tension/data-contract-flexible-ingestion.md)
- [Canonical Schema](https://banes-lab.com/records/arch/canonical-schema.md)
- [Data Contract](https://banes-lab.com/records/arch/data-contract.md)
- [Automated Validation](https://banes-lab.com/records/lex/automated-validation.md)
- [Schema Flexibility](https://banes-lab.com/records/lex/schema-flexibility.md)
- [Ad-Hoc Payloads](https://banes-lab.com/records/lex/ad-hoc-payloads.md)
- [Schema Contract / Schema Flexibility](https://banes-lab.com/records/tension/schema-contract-schema-flexibility.md)
- [Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md)
- [Domain Model](https://banes-lab.com/records/arch/domain-model.md)
- [Reliable Integration](https://banes-lab.com/records/lex/reliable-integration.md)
- [Cross-Domain Translation](https://banes-lab.com/records/lex/cross-domain-translation.md)
- [Ambiguous Naming](https://banes-lab.com/records/lex/ambiguous-naming.md)
- [Semantic Contracts / Cross-Domain Translation](https://banes-lab.com/records/tension/cross-domain-translation-semantic-contracts.md)
- [Input Validation](https://banes-lab.com/records/arch/input-validation.md)
- [Design by Contract](https://banes-lab.com/records/arch/design-by-contract.md)
- [Fail Fast](https://banes-lab.com/records/arch/fail-fast.md)
- [Permissive APIs](https://banes-lab.com/records/lex/permissive-apis.md)
- [Implicit Assumptions](https://banes-lab.com/records/lex/implicit-assumptions.md)
- [Preconditions / Permissive APIs](https://banes-lab.com/records/tension/permissive-apis-preconditions.md)
- [Validation Rules](https://banes-lab.com/records/lex/validation-rules.md)
- [Result Validation](https://banes-lab.com/records/lex/result-validation.md)
- [Runtime Cost](https://banes-lab.com/records/lex/runtime-cost.md)
- [Undefined Results](https://banes-lab.com/records/lex/undefined-results.md)
- [Postconditions / Runtime Cost](https://banes-lab.com/records/tension/postconditions-runtime-cost.md)
- [Validation](https://banes-lab.com/records/arch/validation.md)
- [Consistency](https://banes-lab.com/records/arch/consistency.md)
- [Safe Refactoring](https://banes-lab.com/records/lex/safe-refactoring.md)
- [Flexibility](https://banes-lab.com/records/lex/flexibility.md)
- [External State Mutation](https://banes-lab.com/records/lex/external-state-mutation.md)
- [Aggregate](https://banes-lab.com/records/arch/aggregate.md)
- [Invariants / Flexibility](https://banes-lab.com/records/tension/flexibility-invariants.md)
- [Consumer Safety](https://banes-lab.com/records/lex/consumer-safety.md)
- [Incremental Deployment](https://banes-lab.com/records/lex/incremental-deployment.md)
- [Cleanup / Simplification](https://banes-lab.com/records/lex/cleanup-simplification.md)
- [Breaking Change](https://banes-lab.com/records/lex/breaking-change.md)
- [Backward Compatibility / Cleanup / Simplification](https://banes-lab.com/records/tension/backward-compatibility-cleanup-simplification.md)
- [Extensible Schema](https://banes-lab.com/records/lex/extensible-schema.md)
- [Unknown Field Handling](https://banes-lab.com/records/lex/unknown-field-handling.md)
- [Evolutionary Architecture](https://banes-lab.com/records/arch/evolutionary-architecture.md)
- [Rolling Upgrades](https://banes-lab.com/records/lex/rolling-upgrades.md)
- [Strong Validation](https://banes-lab.com/records/lex/strong-validation.md)
- [Strict Fragile Parsers](https://banes-lab.com/records/lex/strict-fragile-parsers.md)
- [Forward Compatibility / Strong Validation](https://banes-lab.com/records/tension/forward-compatibility-strong-validation.md)
- [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- [Compatibility Policy](https://banes-lab.com/records/lex/compatibility-policy.md)
- [Governance](https://banes-lab.com/records/arch/governance.md)
- [Controlled Evolution](https://banes-lab.com/records/lex/controlled-evolution.md)
- [Version Sprawl](https://banes-lab.com/records/lex/version-sprawl.md)
- [Silent Breaking Changes](https://banes-lab.com/records/lex/silent-breaking-changes.md)
- [Protocol Compatibility](https://banes-lab.com/records/arch/protocol-compatibility.md)
- [Integration Events](https://banes-lab.com/records/arch/integration-events.md)
- [Versioned Evolution Over Breaking Change](https://banes-lab.com/records/algo/no-breaking-change.md)
- [Versioning / Version Sprawl](https://banes-lab.com/records/tension/version-sprawl-versioning.md)
- [Protocol Contract](https://banes-lab.com/records/lex/protocol-contract.md)
- [Multi-Client Integration](https://banes-lab.com/records/lex/multi-client-integration.md)
- [Protocol Optimization](https://banes-lab.com/records/lex/protocol-optimization.md)
- [Proprietary Drift](https://banes-lab.com/records/lex/proprietary-drift.md)
- [Protocol Compatibility / Protocol Optimization](https://banes-lab.com/records/tension/protocol-compatibility-protocol-optimization.md)
- [Contracts](https://banes-lab.com/records/lex/contracts.md)
- [Standards](https://banes-lab.com/records/lex/standards.md)
- [Portability](https://banes-lab.com/records/arch/portability.md)
- [Integration](https://banes-lab.com/records/lex/integration.md)
- [Cross-System Communication](https://banes-lab.com/records/lex/cross-system-communication.md)
- [Domain-Specific Optimization](https://banes-lab.com/records/lex/domain-specific-optimization.md)
- [Proprietary Coupling](https://banes-lab.com/records/lex/proprietary-coupling.md)
- [Standardization](https://banes-lab.com/records/arch/standardization.md)
- [Robustness Principle](https://banes-lab.com/records/arch/robustness-principle.md)
- [Standards Compliance](https://banes-lab.com/records/arch/standards-compliance.md)
- [Interoperability / Domain-Specific Optimization](https://banes-lab.com/records/tension/domain-specific-optimization-interoperability.md)
- [Consistent Semantics](https://banes-lab.com/records/lex/consistent-semantics.md)
- [Stable Contracts](https://banes-lab.com/records/lex/stable-contracts.md)
- [API Usability](https://banes-lab.com/records/lex/api-usability.md)
- [Specialized Endpoints](https://banes-lab.com/records/lex/specialized-endpoints.md)
- [Ad-Hoc Endpoints](https://banes-lab.com/records/lex/ad-hoc-endpoints.md)
- [Chatty Interface](https://banes-lab.com/records/arch/chatty-interface.md)
- [Composite Pattern](https://banes-lab.com/records/arch/composite-pattern.md)
- [Uniform Interface / Specialized Endpoints](https://banes-lab.com/records/tension/specialized-endpoints-uniform-interface.md)
- [Provider Change Safety](https://banes-lab.com/records/lex/provider-change-safety.md)
- [Consumer-Verified Compatibility](https://banes-lab.com/records/lex/consumer-verified-compatibility.md)
- [Provider Autonomy](https://banes-lab.com/records/lex/provider-autonomy.md)
- [Unversioned Breaking Change](https://banes-lab.com/records/arch/unversioned-breaking-change.md)
- [Consumer-Driven Contracts / Provider Autonomy](https://banes-lab.com/records/tension/consumer-driven-contracts-provider-autonomy.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)
