# Postconditions

Record: `arch:postconditions`
Kind: constraint
Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
Severity: recommended
Scope: function, method, transaction
Canonical: https://banes-lab.com/ontology#arch-postconditions

## Repair

- Refactored by: Add Assertions, Add Result Type, Add Contract Tests
- Detected by: missing assertions on results
- Violated by: returning invalid output state
- Measured by: property test coverage
- Enforced by: property tests, invariant checks

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

## conflicts-with

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

## tensions-with

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

## tensions

- [Postconditions Runtime Cost](https://banes-lab.com/records/tension/postconditions-runtime-cost.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)
