# Explicit Contracts

> A design rule that every boundary declares the shape and meaning of what crosses it in a typed contract.

Record: `architecture:explicit-contracts`
Kind: principle
Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
Severity: mandatory
Scope: API, service, data, protocol
Canonical: https://banes-lab.com/ontology#architecture-explicit-contracts

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Design by Contract](https://banes-lab.com/records/architecture/design-by-contract.md) and before [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md).

## Repair

- Refactored by: Add DTO, Add Schema, Add Interface
- Detected by: public methods without DTO/schema, dynamic maps at boundaries
- Violated by: untyped boundaries, undocumented payloads
- Measured by: boundary contract coverage
- Enforced by: [schema validation](https://banes-lab.com/records/architecture/schema-validation.md), API linting

## Requires

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

## Reinforces

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

## Enables

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

## Conflicts with

- [Implicit Contract](https://banes-lab.com/records/architecture/implicit-contract.md)

## In tension with

- [Rapid Prototyping](https://banes-lab.com/records/lexicon/rapid-prototyping.md)

## Tensions

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

## Contracts

- [Contracts Core](https://banes-lab.com/records/algorithms/contracts-core.md)
- [PAG Authoring Kernel](https://banes-lab.com/records/algorithms/pag-authoring-kernel.md)

## Severity

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

## Category

- [Contracts / Interfaces / Compatibility](https://banes-lab.com/records/architecture-category/contracts-interfaces-compatibility.md)

## Enforced by

- [codemods/entrypoints/binding.entrypoint.ts](https://banes-lab.com/source/governance/codemods/entrypoints/binding.entrypoint.ts.md)
- [rules/eslint/no-undeclared-dependency.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/no-undeclared-dependency.eslint.rule.ts.md)

## Required by

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

## Linked from

- [What PAG is](https://banes-lab.com/pag/introduction/what-is-pag.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/lexicon/lexicon-category-contracts-interfaces-compatibility.md)
- [Architectural Clusters](https://banes-lab.com/ontology/algorithms/algorithms-domain-architectural-clusters.md)
- [Pattern Abstract Grammar](https://banes-lab.com/ontology/algorithms/algorithms-domain-pag.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
