# Closed Vocabulary

> A design rule that every word in a name slot comes from a declared list, and a new word enters the list only by an approved edit.

Record: `architecture:closed-vocabulary`
Kind: principle
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: mandatory
Scope: repository, folder, filename
Canonical: https://banes-lab.com/ontology#architecture-closed-vocabulary

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Hand-Kept Index](https://banes-lab.com/records/architecture/hand-kept-index.md) and before [Positional Slot Resolution](https://banes-lab.com/records/architecture/positional-slot-resolution.md).

## Repair

- Refactored by: Rename to a Declared Word, Propose by Reasoning
- Detected by: a name slot holding a word absent from its declared array
- Violated by: adding a word so a check passes
- Measured by: undeclared-word count per governed root
- Enforced by: registry-backed naming gate, developer approval

## Requires

- [Vocabulary Admission](https://banes-lab.com/records/lexicon/vocabulary-admission.md)
- [Rejection Table](https://banes-lab.com/records/lexicon/rejection-table.md)

## Reinforces

- [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md)
- [Ubiquitous Language](https://banes-lab.com/records/architecture/ubiquitous-language.md)

## Enables

- [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)
- [Concern-Folder Correspondence](https://banes-lab.com/records/architecture/concern-folder-correspondence.md)

## Conflicts with

- [Vocabulary Inflation](https://banes-lab.com/records/lexicon/vocabulary-inflation.md)
- [Nominalized Process Word](https://banes-lab.com/records/lexicon/nominalized-process-word.md)
- [Adjective Slot Word](https://banes-lab.com/records/lexicon/adjective-slot-word.md)
- [Plural Subject](https://banes-lab.com/records/lexicon/plural-subject.md)
- [Measurement Word](https://banes-lab.com/records/lexicon/measurement-word.md)
- [Instance Identifier Word](https://banes-lab.com/records/lexicon/instance-identifier-word.md)

## In tension with

- [Naming Expressiveness](https://banes-lab.com/records/lexicon/naming-expressiveness.md)

## Tensions

- [Closed Vocabulary / Naming Expressiveness](https://banes-lab.com/records/tension/closed-vocabulary-naming-expressiveness.md)

## Contracts

- [Vocabulary Admission Gate](https://banes-lab.com/records/algorithms/vocabulary-admission-gate.md)
- [Taxonomy Kernel](https://banes-lab.com/records/algorithms/taxonomy-kernel.md)

## Severity

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

## Category

- [Taxonomy / Classification / Naming](https://banes-lab.com/records/architecture-category/taxonomy-classification-naming.md)

## Enforced by

- [codemods/validators/field.vocabulary.validator.ts](https://banes-lab.com/source/governance/codemods/validators/field.vocabulary.validator.ts.md)
- [rules/entrypoints/taxonomy.entrypoint.ts](https://banes-lab.com/source/governance/rules/entrypoints/taxonomy.entrypoint.ts.md)

## Reinforced by

- [Carrier and Payload Split](https://banes-lab.com/records/architecture/carrier-and-payload-split.md)
- [Positional Slot Resolution](https://banes-lab.com/records/architecture/positional-slot-resolution.md)
- [Agnostic-First Vocabulary](https://banes-lab.com/records/architecture/agnostic-first-vocabulary.md)
- [Guided Vocabulary Refusal](https://banes-lab.com/records/architecture/guided-vocabulary-refusal.md)
- [Sanctioned Generic Subject](https://banes-lab.com/records/architecture/sanctioned-generic-subject.md)
- [Case Dialect](https://banes-lab.com/records/architecture/case-dialect.md)

## Required by

- [Externally Resolved Slot](https://banes-lab.com/records/architecture/externally-resolved-slot.md)

## Linked from

- [What PAG is](https://banes-lab.com/pag/introduction/what-is-pag.md)
- [A check matches a shape](https://banes-lab.com/disciplined-methodology/build/a-check-matches-a-shape.md)
- [One home](https://banes-lab.com/disciplined-methodology/build/one-home.md)
- [Placement is a grammar](https://banes-lab.com/disciplined-methodology/build/placement-is-a-grammar.md)
- [Coverage is derived](https://banes-lab.com/disciplined-methodology/verify/coverage-is-derived.md)
- [Definitions own what, code owns how](https://banes-lab.com/software-architecture/model/definitions-own-what.md)
- [The layer spine](https://banes-lab.com/software-architecture/model/the-layer-spine.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- [Coordination Surfaces](https://banes-lab.com/ontology/principles/architecture-category-coordination-surfaces.md)
- [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/lexicon/lexicon-category-taxonomy-classification-naming.md)
- [Taxonomy](https://banes-lab.com/ontology/algorithms/algorithms-domain-taxonomy.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

- [checkNaming](https://banes-lab.com/source/coordination/tools/core/validators/taxonomy.validator.ts.md)
