# Invariants

Record: `arch:invariants`
Kind: constraint
Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
Severity: mandatory
Scope: entity, aggregate, module, system
Canonical: https://banes-lab.com/ontology#arch-invariants

## Repair

- Refactored by: Encapsulate State, Add Factory, Add Validation
- Detected by: mutable public state, missing invariant checks
- Violated by: invalid domain states, broken aggregate rules
- Measured by: invariant test coverage
- Enforced by: domain tests, constructors, type system

## 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)

## conflicts-with

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

## tensions-with

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

## tensions

- [Invariants Flexibility](https://banes-lab.com/records/tension/flexibility-invariants.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)
