# Error Handling

> A design rule that every error is either handled with its context kept, or propagated as a typed error the caller must handle.

Record: `architecture:error-handling`
Kind: principle
Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)
Severity: mandatory
Scope: function, module, service
Canonical: https://banes-lab.com/ontology#architecture-error-handling

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Robustness Principle](https://banes-lab.com/records/architecture/robustness-principle.md) and before [Error Boundaries](https://banes-lab.com/records/architecture/error-boundaries.md).

## Repair

- Refactored by: Add Error Type, Propagate Context, Handle Explicitly
- Detected by: empty catch blocks, unchecked result errors
- Violated by: ignored errors, generic catches, lost context
- Measured by: unhandled error count
- Enforced by: linting, [tests](https://banes-lab.com/records/lexicon/tests.md)

## Requires

- [Error Model](https://banes-lab.com/records/lexicon/error-model.md)
- [Observability](https://banes-lab.com/records/architecture/observability.md)

## Reinforces

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

## Enables

- [Controlled Failure](https://banes-lab.com/records/lexicon/controlled-failure.md)

## Conflicts with

- [Exception Swallowing](https://banes-lab.com/records/lexicon/exception-swallowing.md)
- [Exception Control Flow](https://banes-lab.com/records/architecture/exception-control-flow.md)

## In tension with

- [Simplicity](https://banes-lab.com/records/lexicon/simplicity.md)

## Tensions

- [Error Handling / Simplicity](https://banes-lab.com/records/tension/error-handling-simplicity.md)

## Severity

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

## Category

- [Error Handling / Resilience](https://banes-lab.com/records/architecture-category/error-handling-resilience.md)

## Enforced by

- [rules/eslint/no-swallowed-failure.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/no-swallowed-failure.eslint.rule.ts.md)
- [rules/eslint/require-signal-guard.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/require-signal-guard.eslint.rule.ts.md)

## Required by

- [Defensive Programming](https://banes-lab.com/records/architecture/defensive-programming.md)
- [Fault Tolerance](https://banes-lab.com/records/architecture/fault-tolerance.md)

## Linked from

- [Integrating algorithms](https://banes-lab.com/pag/patterns/algorithm-integration.md)
- [Execution joins the halves](https://banes-lab.com/software-architecture/principles/execution-joins-the-halves.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/principles/architecture-category-error-handling-resilience.md)
- [Observability / Auditability / Traceability](https://banes-lab.com/ontology/principles/architecture-category-observability-auditability-traceability.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/lexicon/lexicon-category-error-handling-resilience.md)
- [Quality Attributes](https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
