# Finite State Machine

Record: `arch:finite-state-machine`
Kind: model
Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)
Severity: recommended
Scope: behavior, state modeling, control flow
Canonical: https://banes-lab.com/ontology#arch-finite-state-machine

## Repair

- Refactored by: Model states and transitions as an explicit FSM
- Detected by: impossible or contradictory state combinations reachable at runtime
- Violated by: behavior driven by ad-hoc combinations of scattered status booleans
- Measured by: count of representable-but-illegal states
- Enforced by: state model review

## requires

- [Explicit State Set](https://banes-lab.com/records/lex/explicit-state-set.md)

## reinforces

- [State Pattern](https://banes-lab.com/records/arch/state-pattern.md)
- [Correctness](https://banes-lab.com/records/arch/correctness.md)

## enables

- [Legal-Transition Enforcement](https://banes-lab.com/records/lex/legal-transition-enforcement.md)
- [Exhaustive State Reasoning](https://banes-lab.com/records/lex/exhaustive-state-reasoning.md)

## conflicts-with

- [Boolean Flag Soup](https://banes-lab.com/records/lex/boolean-flag-soup.md)

## tensions-with

- [State Explosion](https://banes-lab.com/records/lex/state-explosion.md)

## tensions

- [Finite State Machine State Explosion](https://banes-lab.com/records/tension/finite-state-machine-state-explosion.md)

## contracts

- [Finite State Machine](https://banes-lab.com/records/algo/finite-state-machine.md)

## referenced-by

- [Statecharts](https://banes-lab.com/records/arch/statecharts.md)
