# Zombie Code

> A defect in which unreachable or disabled code stays in the system and misleads the developer and the model.

Record: `architecture:zombie-code`
Kind: anti-pattern
Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)
Severity: discouraged
Scope: architecture_evolution
Canonical: https://banes-lab.com/ontology#architecture-zombie-code

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Lava Flow](https://banes-lab.com/records/architecture/lava-flow.md) and before [Temporal Coupling](https://banes-lab.com/records/architecture/temporal-coupling.md).

## Repair

- Refactored by: delete_code, archive_reference, remove_exports, add_dead_code_check
- Detected by: unused_exports, unreachable_branches, dead_feature_flags, zero_runtime_hits
- Violated by: Leave unreachable, unused, or disabled code in the system where it keeps misleading the developer and the model, and can be reactivated by accident.
- Measured by: unused exports, unreachable branches
- Enforced by: unused-export and unreachable-code checks in the build

## Severity

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

## Category

- [Anti-patterns](https://banes-lab.com/records/architecture-category/anti-patterns.md)

## Force

- [Architecture evolution](https://banes-lab.com/records/force/architecture-evolution.md)

## Detected by

- [codemods/validators/field.validator.ts](https://banes-lab.com/source/governance/codemods/validators/field.validator.ts.md)
- [rules/eslint/closure-allowlist-entries-are-wired.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-allowlist-entries-are-wired.eslint.rule.ts.md)
- [rules/eslint/closure-no-reachable-dead-exports.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-no-reachable-dead-exports.eslint.rule.ts.md)
- [rules/eslint/closure-no-unreachable-file.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-no-unreachable-file.eslint.rule.ts.md)
- [rules/eslint/closure-register-needs-consumer.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-register-needs-consumer.eslint.rule.ts.md)
- [rules/eslint/closure-transitive-liveness.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-transitive-liveness.eslint.rule.ts.md)

## Negated by

- [Evolutionary Architecture](https://banes-lab.com/records/architecture/evolutionary-architecture.md)

## Linked from

- [Fail at the boundary](https://banes-lab.com/disciplined-methodology/build/fail-at-the-boundary.md)
- [Never and always](https://banes-lab.com/software-architecture/decay/never-and-always.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Architecture Review / Evolution / Governance Artifacts](https://banes-lab.com/ontology/principles/architecture-category-architecture-review-evolution-governance-artifacts.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The forces](https://banes-lab.com/ontology/schema/the-forces.md)
