# Postconditions

> A rule or precondition that an operation's result and resulting state must satisfy when it returns.

Record: `architecture: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#architecture-postconditions

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Preconditions](https://banes-lab.com/records/architecture/preconditions.md) and before [Invariant](https://banes-lab.com/records/architecture/invariant.md).

## 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/lexicon/result-validation.md)
- [Invariant](https://banes-lab.com/records/architecture/invariant.md)

## Reinforces

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

## Enables

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

## Conflicts with

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

## In tension with

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

## Tensions

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

## Severity

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

## Category

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

## Required by

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

## Linked from

- [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)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/lexicon/lexicon-category-contracts-interfaces-compatibility.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lexicon-category-solid-object-oriented-design.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
