# Extension Points

> A mechanism that exposes named hooks or interfaces where new behavior can be added without editing the core.

Record: `architecture:extension-points`
Kind: mechanism
Layer: [Extensibility Core](https://banes-lab.com/records/layer/extensibility-core.md)
Severity: recommended
Scope: framework, plugin, module
Canonical: https://banes-lab.com/ontology#architecture-extension-points

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Plugin Architecture](https://banes-lab.com/records/architecture/plugin-architecture.md) and before [Inversion of Control (IoC)](https://banes-lab.com/records/architecture/inversion-of-control.md).

## Repair

- Refactored by: Add Hook, Add SPI, Extract Interface
- Detected by: repeated core edits for variants
- Violated by: modifying internals to add behavior
- Measured by: extension coverage
- Enforced by: extension tests, API review

## Requires

- [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md)
- [Contracts](https://banes-lab.com/records/lexicon/contracts.md)

## Reinforces

- [Open/Closed Principle (OCP)](https://banes-lab.com/records/architecture/open-closed.md)
- [Plugin Architecture](https://banes-lab.com/records/architecture/plugin-architecture.md)

## Enables

- [Third-Party Extension](https://banes-lab.com/records/lexicon/third-party-extension.md)

## Conflicts with

- [Closed Core](https://banes-lab.com/records/lexicon/closed-core.md)

## In tension with

- [API Surface Growth](https://banes-lab.com/records/lexicon/api-surface-growth.md)

## Tensions

- [Extension Points / API Surface Growth](https://banes-lab.com/records/tension/api-surface-growth-extension-points.md)

## Severity

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

## Category

- [Plugin / Extensibility / IoC](https://banes-lab.com/records/architecture-category/plugin-extensibility-ioc.md)

## Required by

- [Runtime Extensibility](https://banes-lab.com/records/architecture/runtime-extensibility.md)

## Linked from

- [The filesystem is the architecture](https://banes-lab.com/disciplined-methodology/build/the-filesystem-is-the-architecture.md)
- [The direction axis](https://banes-lab.com/software-architecture/model/the-direction-axis.md)
- [The structural domain](https://banes-lab.com/software-architecture/principles/the-structural-domain.md)
- [Architectural rules and principles](https://banes-lab.com/software-architecture/glossary/architectural-principles.md)
- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/lexicon/lexicon-category-plugin-extensibility-ioc.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)

## Evidence in the code

- [registerPage](https://banes-lab.com/source/tree/domain/registries/page.registry.ts.md)
- [presentation/records](https://banes-lab.com/anatomy/tree/folder-presentation-records.md)
- [presentation/records/records.barrel.ts](https://banes-lab.com/source/tree/presentation/records/records.barrel.ts.md)
