# Taxonomy / Classification / Naming

> Every principle in this category is listed as a record.

Page: Ontology · Principles
Canonical: https://banes-lab.com/ontology#architecture-category-taxonomy-classification-naming

Listed in [Ontology · Principles](https://banes-lab.com/api/pages/ontology/principles.md), after [Coordination Surfaces](https://banes-lab.com/ontology/principles/architecture-category-coordination-surfaces.md) and before [Transactions / State / Concurrency](https://banes-lab.com/ontology/principles/architecture-category-transactions-state-concurrency.md).

Every principle in this category is listed as a record. Each record carries its kind, its severity, the scopes it applies at and the layer it lives in, then the edge relations that join it to other records, the records that point back at it, the contracts that answer to it and the tensions it takes part in. The descriptors say how it is violated, detected, measured, repaired and enforced. Where the record carries one, an exemplar shows the shape before and after the principle is applied.

Relations diagram

The relations inside this category.

```mermaid
flowchart LR
n_closed_vocabulary["Closed Vocabulary"]
n_positional_slot_resolution["Positional Slot Resolution"]
n_concern_folder_correspondence["Concern-Folder Correspondence"]
n_glob_resolvable_tree["Glob-Resolvable Tree"]
n_declared_jurisdiction["Declared Jurisdiction"]
n_bounded_nesting_depth["Bounded Nesting Depth"]
n_sideways_overflow["Sideways Overflow"]
n_one_concern_per_file["One Concern Per File"]
n_narrowest_concern["Narrowest Concern"]
n_layer_spine_precedence["Layer Spine Precedence"]
n_agnostic_first_vocabulary["Agnostic-First Vocabulary"]
n_guided_vocabulary_refusal["Guided Vocabulary Refusal"]
n_derived_naming_registry["Derived Naming Registry"]
n_set_relative_member_name["Set-Relative Member Name"]
n_manual_identity_migration["Manual Identity Migration"]
n_collision_consolidation["Collision Consolidation"]
n_mirrored_test_placement["Mirrored Test Placement"]
n_sanctioned_generic_subject["Sanctioned Generic Subject"]
n_conformance_at_creation["Conformance at Creation"]
n_registry_held_order["Registry-Held Order"]
n_externally_resolved_slot["Externally Resolved Slot"]
n_case_dialect["Case Dialect"]
n_root_spine_files["Root Spine Files"]
n_closed_vocabulary --> n_concern_folder_correspondence
n_positional_slot_resolution --> n_closed_vocabulary
n_positional_slot_resolution --> n_concern_folder_correspondence
n_concern_folder_correspondence --> n_glob_resolvable_tree
n_glob_resolvable_tree --> n_concern_folder_correspondence
n_declared_jurisdiction --> n_bounded_nesting_depth
n_declared_jurisdiction --> n_glob_resolvable_tree
n_bounded_nesting_depth --> n_sideways_overflow
n_sideways_overflow --> n_bounded_nesting_depth
n_one_concern_per_file --> n_narrowest_concern
n_narrowest_concern --> n_layer_spine_precedence
n_layer_spine_precedence --> n_narrowest_concern
n_agnostic_first_vocabulary --> n_closed_vocabulary
n_guided_vocabulary_refusal --> n_closed_vocabulary
n_guided_vocabulary_refusal --> n_agnostic_first_vocabulary
n_derived_naming_registry --> n_declared_jurisdiction
n_collision_consolidation --> n_one_concern_per_file
n_sanctioned_generic_subject --> n_closed_vocabulary
n_conformance_at_creation --> n_glob_resolvable_tree
n_registry_held_order --> n_positional_slot_resolution
n_externally_resolved_slot --> n_closed_vocabulary
n_case_dialect --> n_positional_slot_resolution
n_case_dialect --> n_closed_vocabulary
```

### Closed Vocabulary

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: repository, folder, filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
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.

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)

In tension with
[Naming Expressiveness](https://banes-lab.com/records/lexicon/naming-expressiveness.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)

Referenced 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), [Externally Resolved Slot](https://banes-lab.com/records/architecture/externally-resolved-slot.md), [Case Dialect](https://banes-lab.com/records/architecture/case-dialect.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)

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

Distinct from
[Agnostic-First Vocabulary](https://banes-lab.com/records/architecture/agnostic-first-vocabulary.md): A closed vocabulary admits a word only by approved edit, while agnostic-first decides which words to admit, domain-neutral roles before domain ones.

Violated by
adding a word so a check passes

Detected by
a name slot holding a word absent from its declared array

Measured by
undeclared-word count per governed root

Refactored by
Rename to a Declared Word, Propose by Reasoning

Enforced by
registry-backed naming gate, developer approval

Before

```text
<container>/managers/foo.manager.ts → neither "managers" nor "manager" is a declared word
```

After

```text
<container>/coordinators/foo.coordinator.ts → the declared concern that already covers the role
```

How it is checked

Checked by
registry-backed naming gate, developer approval

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Vocabulary Admission](https://banes-lab.com/records/lexicon/vocabulary-admission.md), [Rejection Table](https://banes-lab.com/records/lexicon/rejection-table.md), [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), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md), [Concern-Folder Correspondence](https://banes-lab.com/records/architecture/concern-folder-correspondence.md)

Shape it refuses
[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)

### Positional Slot Resolution

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: folder, filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A mechanism that reads each word of a path by the slot it lands in, so the last dot-segment before a file's extension is always its concern and a folder named after a concern tag resolves as the latest role its depth can legally take.

Requires
[Concern Tag](https://banes-lab.com/records/lexicon/concern-tag.md), [Subject Slot](https://banes-lab.com/records/lexicon/subject-slot.md), [Ordered Role Sequence](https://banes-lab.com/records/lexicon/ordered-role-sequence.md)

Reinforces
[Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Enables
[Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md), [Concern-Folder Correspondence](https://banes-lab.com/records/architecture/concern-folder-correspondence.md)

In tension with
none

Conflicts with
[Concern-Swallowing Compound](https://banes-lab.com/records/lexicon/concern-swallowing-compound.md), [Free-Form Folder Level](https://banes-lab.com/records/lexicon/free-form-folder-level.md)

Referenced by
[Registry-Held Order](https://banes-lab.com/records/architecture/registry-held-order.md), [Case Dialect](https://banes-lab.com/records/architecture/case-dialect.md)

Contracts
[Name Projection](https://banes-lab.com/records/algorithms/name-projection.md)

Distinct from
[Case Dialect](https://banes-lab.com/records/architecture/case-dialect.md): Positional slot resolution reads slots from dot-separated segments, while a case dialect reads the same slots from word boundaries in another case.

Distinct from
[Subject Slot](https://banes-lab.com/records/lexicon/subject-slot.md): Positional slot resolution is the reading rule, while the subject slot is one position it reads.

Distinct from
[Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md): Positional slot resolution is the reading rule, while the variant slot is one position it reads.

Violated by
reading a word by which vocabulary declares it rather than by the slot it lands in

Detected by
a filename whose last segment before the extension is not a declared concern tag, or a folder carrying a concern tag's label that the resolver places in the subject role

Measured by
unparseable filename count, and folders whose resolved role differs from the latest legal role for their word

Refactored by
Split the Compound, Move the Tag to the Concern Slot, Correct the Resolver

Enforced by
filename parser, naming gate, placement gate

Before

```text
foo-registry.ts → one fused word, so neither slot resolves
```

After

```text
foo.registry.ts → subject "foo", concern "registry"; position decides, so a concern word is legal in the subject slot too
```

How it is checked

Checked by
filename parser, naming gate, placement gate

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Concern Tag](https://banes-lab.com/records/lexicon/concern-tag.md), [Subject Slot](https://banes-lab.com/records/lexicon/subject-slot.md), [Ordered Role Sequence](https://banes-lab.com/records/lexicon/ordered-role-sequence.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md), [Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md), [Concern-Folder Correspondence](https://banes-lab.com/records/architecture/concern-folder-correspondence.md)

Shape it refuses
[Concern-Swallowing Compound](https://banes-lab.com/records/lexicon/concern-swallowing-compound.md), [Free-Form Folder Level](https://banes-lab.com/records/lexicon/free-form-folder-level.md)

### Concern-Folder Correspondence

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: folder, filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A rule or precondition that a file's concern tag matches the label of the folder that holds it.

Requires
[Concern Folder](https://banes-lab.com/records/lexicon/concern-folder.md), [Concern Tag](https://banes-lab.com/records/lexicon/concern-tag.md), [Collection Concern](https://banes-lab.com/records/lexicon/collection-concern.md), [Single-Unit Concern](https://banes-lab.com/records/lexicon/single-unit-concern.md), [Mass Concern](https://banes-lab.com/records/lexicon/mass-concern.md)

Reinforces
[Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

Enables
[Glob-Resolvable Tree](https://banes-lab.com/records/architecture/glob-resolvable-tree.md)

In tension with
none

Conflicts with
[Free-Form Folder Level](https://banes-lab.com/records/lexicon/free-form-folder-level.md)

Referenced by
[Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Positional Slot Resolution](https://banes-lab.com/records/architecture/positional-slot-resolution.md), [Glob-Resolvable Tree](https://banes-lab.com/records/architecture/glob-resolvable-tree.md)

Contracts
[Taxonomy Completion](https://banes-lab.com/records/algorithms/taxonomy-completion.md)

Violated by
a file whose concern tag differs from its parent folder's label

Detected by
tag/folder mismatch on a filesystem walk

Measured by
mismatched file count

Refactored by
Move to the Matching Concern Folder, Reclassify the File

Enforced by
placement gate, naming gate

Before

```text
<container>/caches/foo.store.ts → the folder says cache, the tag says store
```

After

```text
<container>/stores/foo.store.ts → the tag terminates the name and names the parent folder
```

How it is checked

Checked by
placement gate, naming gate

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Concern Folder](https://banes-lab.com/records/lexicon/concern-folder.md), [Concern Tag](https://banes-lab.com/records/lexicon/concern-tag.md), [Collection Concern](https://banes-lab.com/records/lexicon/collection-concern.md), [Single-Unit Concern](https://banes-lab.com/records/lexicon/single-unit-concern.md), [Mass Concern](https://banes-lab.com/records/lexicon/mass-concern.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md), [Glob-Resolvable Tree](https://banes-lab.com/records/architecture/glob-resolvable-tree.md)

Shape it refuses
[Free-Form Folder Level](https://banes-lab.com/records/lexicon/free-form-folder-level.md)

### Glob-Resolvable Tree

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: repository
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A mechanism that lets one unanchored pattern per concern collect every matching file or folder, at whatever depth it sits.

Requires
[Concern-Folder Correspondence](https://banes-lab.com/records/architecture/concern-folder-correspondence.md)

Reinforces
[Discoverability](https://banes-lab.com/records/lexicon/discoverability.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

Enables
[Shape-Discovered Surface](https://banes-lab.com/records/lexicon/shape-discovered-surface.md)

In tension with
none

Conflicts with
[Concern-Swallowing Compound](https://banes-lab.com/records/lexicon/concern-swallowing-compound.md)

Referenced by
[Concern-Folder Correspondence](https://banes-lab.com/records/architecture/concern-folder-correspondence.md), [Declared Jurisdiction](https://banes-lab.com/records/architecture/declared-jurisdiction.md), [Conformance at Creation](https://banes-lab.com/records/architecture/conformance-at-creation.md)

Contracts
[Discovery Verification](https://banes-lab.com/records/algorithms/discovery-verification.md)

Distinct from
[Shape-Discovered Surface](https://banes-lab.com/records/lexicon/shape-discovered-surface.md): A glob-resolvable tree is the property that one pattern collects a concern at any depth, while a shape-discovered surface is a consumer that collects by such a pattern.

Violated by
anchoring discovery to a depth, so a grouped set falls out of the pattern

Detected by
a pattern that must enumerate depths to collect one concern

Measured by
depth-anchored pattern count

Refactored by
Unanchor the Pattern, Restore the Terminating Tag

Enforced by
aggregator review, placement gate

Before

```text
<root>/*/validators/*.ts and <root>/*/*/validators/*.ts → one pattern per depth, and a new grouping adds another
```

After

```text
**/*.validator.ts for the files, **/validators/ for the folders → two unanchored patterns resolve the concern tree-wide
```

How it is checked

Checked by
aggregator review, placement gate

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Concern-Folder Correspondence](https://banes-lab.com/records/architecture/concern-folder-correspondence.md), [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md), [Shape-Discovered Surface](https://banes-lab.com/records/lexicon/shape-discovered-surface.md)

Shape it refuses
[Concern-Swallowing Compound](https://banes-lab.com/records/lexicon/concern-swallowing-compound.md)

### Declared Jurisdiction

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: repository, root, file
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A design rule that a naming gate reads from one declaration the roots it governs, the containers and buckets under each, the classes of file exempt from the grammar, and the trees another system authors or resolves by name, which are exempted once and never governed.

Requires
[Governed Root](https://banes-lab.com/records/lexicon/governed-root.md), [Container Level](https://banes-lab.com/records/lexicon/container-level.md), [Flat Bucket](https://banes-lab.com/records/lexicon/flat-bucket.md), [Ignore Declaration](https://banes-lab.com/records/lexicon/ignore-declaration.md), [Ecosystem-Fixed Name](https://banes-lab.com/records/lexicon/ecosystem-fixed-name.md), [Structurally Exempt File](https://banes-lab.com/records/lexicon/structurally-exempt-file.md), [Compound Marker](https://banes-lab.com/records/lexicon/compound-marker.md)

Reinforces
[Explicit Boundaries](https://banes-lab.com/records/architecture/explicit-boundaries.md), [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md)

Enables
[Bounded Nesting Depth](https://banes-lab.com/records/architecture/bounded-nesting-depth.md), [Glob-Resolvable Tree](https://banes-lab.com/records/architecture/glob-resolvable-tree.md), [Backward Compatibility](https://banes-lab.com/records/architecture/backward-compatibility.md)

In tension with
none

Conflicts with
[Ignore-List Silencing](https://banes-lab.com/records/lexicon/ignore-list-silencing.md), [Depth-Relief Container](https://banes-lab.com/records/lexicon/depth-relief-container.md), [Claimed Foreign Tree](https://banes-lab.com/records/lexicon/claimed-foreign-tree.md), [Duplicated Authority](https://banes-lab.com/records/lexicon/duplicated-authority.md)

Referenced by
[Derived Naming Registry](https://banes-lab.com/records/architecture/derived-naming-registry.md)

Contracts
[Taxonomy Jurisdiction](https://banes-lab.com/records/algorithms/taxonomy-jurisdiction.md), [Container Ladder](https://banes-lab.com/records/algorithms/container-ladder.md)

Violated by
inferring jurisdiction from folder shape, exempting a file by adding its name to silence a finding, or keeping one exemption list per check for the same upstream tree

Detected by
a folder at a governed root that is in neither the container nor the bucket declaration, an ignore entry naming authored source that belongs to no exempt class, or a declared root that holds another system's ownership marker

Measured by
undeclared root-level folder count, ignore entries outside the exempt classes, and exemptions held outside the one upstream declaration

Refactored by
Declare the Root, Place the Folder Inside an Existing Container, Remove the Ignore Entry, Collapse the Exemption Lists into One Declaration

Enforced by
jurisdiction gate, the taxonomy validator, which refuses an ignore entry of wildcards or of a whole extension, and the coordination member's declaration check, which resolves every declared upstream root against the disk and refuses a root carrying a foreign ownership marker

Before

```text
"a folder holding no folders is a bucket" → inferred, so a container that loses its last folder silently reclassifies and its next loose file passes
```

After

```text
containers{<root>: [...]} + specialContainers{<root>: [...]} → both kinds declared; a folder in neither is flagged
```

How it is checked

Checked by
jurisdiction gate, the taxonomy validator, which refuses an ignore entry of wildcards or of a whole extension, and the coordination member's declaration check, which resolves every declared upstream root against the disk and refuses a root carrying a foreign ownership marker

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Governed Root](https://banes-lab.com/records/lexicon/governed-root.md), [Container Level](https://banes-lab.com/records/lexicon/container-level.md), [Flat Bucket](https://banes-lab.com/records/lexicon/flat-bucket.md), [Ignore Declaration](https://banes-lab.com/records/lexicon/ignore-declaration.md), [Ecosystem-Fixed Name](https://banes-lab.com/records/lexicon/ecosystem-fixed-name.md), [Structurally Exempt File](https://banes-lab.com/records/lexicon/structurally-exempt-file.md), [Compound Marker](https://banes-lab.com/records/lexicon/compound-marker.md), [Explicit Boundaries](https://banes-lab.com/records/architecture/explicit-boundaries.md), [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md), [Bounded Nesting Depth](https://banes-lab.com/records/architecture/bounded-nesting-depth.md), [Glob-Resolvable Tree](https://banes-lab.com/records/architecture/glob-resolvable-tree.md), [Backward Compatibility](https://banes-lab.com/records/architecture/backward-compatibility.md)

Shape it refuses
[Ignore-List Silencing](https://banes-lab.com/records/lexicon/ignore-list-silencing.md), [Depth-Relief Container](https://banes-lab.com/records/lexicon/depth-relief-container.md), [Claimed Foreign Tree](https://banes-lab.com/records/lexicon/claimed-foreign-tree.md), [Duplicated Authority](https://banes-lab.com/records/lexicon/duplicated-authority.md)

### Bounded Nesting Depth

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: folder, root
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A rule or precondition that a file sits within a fixed number of folders below its governed root, with each folder taking a later role than the one above it.

Requires
[Depth Cap](https://banes-lab.com/records/lexicon/depth-cap.md), [Ordered Role Sequence](https://banes-lab.com/records/lexicon/ordered-role-sequence.md)

Reinforces
[Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Enables
[Sideways Overflow](https://banes-lab.com/records/architecture/sideways-overflow.md)

In tension with
[Tree Compactness](https://banes-lab.com/records/lexicon/tree-compactness.md)

Conflicts with
[Downward Nesting](https://banes-lab.com/records/lexicon/downward-nesting.md)

Referenced by
[Declared Jurisdiction](https://banes-lab.com/records/architecture/declared-jurisdiction.md), [Sideways Overflow](https://banes-lab.com/records/architecture/sideways-overflow.md)

Contracts
[Path Role Walk](https://banes-lab.com/records/algorithms/path-role-walk.md)

Tensions
[Bounded Nesting Depth / Tree Compactness](https://banes-lab.com/records/tension/bounded-nesting-depth-tree-compactness.md)

Distinct from
[Backward Compatibility](https://banes-lab.com/records/architecture/backward-compatibility.md): Bounded nesting depth limits a path, while backward compatibility keeps a new version working for old consumers.

Distinct from
[Depth Cap](https://banes-lab.com/records/lexicon/depth-cap.md): Bounded nesting depth joins two conditions on a path, while the depth cap is the first, the number of folders.

Distinct from
[Ordered Role Sequence](https://banes-lab.com/records/lexicon/ordered-role-sequence.md): Bounded nesting depth joins two conditions on a path, while the ordered role sequence is the second, the order of roles.

Violated by
adding a level to relieve collision or breadth pressure

Detected by
a path over the cap, or a role repeated or revisited along it

Measured by
over-cap path count

Refactored by
Take the Variant Slot, Add a Sibling Subject Folder

Enforced by
placement gate

Before

```text
<container>/foo/pools/lru/bar.pool.ts → one folder past the cap, and the extra level resolves to no role at all
```

After

```text
<container>/foo/pools/bar.lru.pool.ts → container, subject, concern, in order and at the cap; the discriminator moved into the variant slot
```

How it is checked

Checked by
placement gate

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Depth Cap](https://banes-lab.com/records/lexicon/depth-cap.md), [Ordered Role Sequence](https://banes-lab.com/records/lexicon/ordered-role-sequence.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md), [Sideways Overflow](https://banes-lab.com/records/architecture/sideways-overflow.md)

Shape it refuses
[Downward Nesting](https://banes-lab.com/records/lexicon/downward-nesting.md)

### Sideways Overflow

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: folder, filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A design pattern that resolves a naming collision with the filename's variant slot and resolves breadth with a sibling subject folder.

Requires
[Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md), [Subject Folder](https://banes-lab.com/records/lexicon/subject-folder.md)

Reinforces
[Bounded Nesting Depth](https://banes-lab.com/records/architecture/bounded-nesting-depth.md)

Enables
[Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

In tension with
none

Conflicts with
[Downward Nesting](https://banes-lab.com/records/lexicon/downward-nesting.md)

Referenced by
[Bounded Nesting Depth](https://banes-lab.com/records/architecture/bounded-nesting-depth.md)

Violated by
relieving pressure downward, by nesting, instead of sideways

Detected by
a folder level introduced where a variant or a sibling subject folder resolves the collision

Measured by
nesting-relief count

Refactored by
Insert a Declared Variant, Split into Sibling Subject Folders

Enforced by
placement gate, reshape review

Before

```text
<container>/caches/lru/foo.cache.ts beside <container>/caches/fifo/foo.cache.ts → the collision was relieved by a new level
```

After

```text
<container>/caches/foo.lru.cache.ts beside <container>/caches/foo.fifo.cache.ts → relieved by the variant slot, at the same depth
```

How it is checked

Checked by
placement gate, reshape review

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md), [Subject Folder](https://banes-lab.com/records/lexicon/subject-folder.md), [Bounded Nesting Depth](https://banes-lab.com/records/architecture/bounded-nesting-depth.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

Shape it refuses
[Downward Nesting](https://banes-lab.com/records/lexicon/downward-nesting.md)

### One Concern Per File

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: file
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A design rule that each file plays exactly one declared role, and a file that plays two is split.

Requires
[Classification Judgment](https://banes-lab.com/records/lexicon/classification-judgment.md)

Reinforces
[Separation of Concerns](https://banes-lab.com/records/architecture/separation-of-concerns.md)

Enables
[Narrowest Concern](https://banes-lab.com/records/architecture/narrowest-concern.md)

In tension with
none

Conflicts with
[Multi-Role File](https://banes-lab.com/records/lexicon/multi-role-file.md), [Sentence-Shaped Name](https://banes-lab.com/records/lexicon/sentence-shaped-name.md)

Referenced by
[Collision Consolidation](https://banes-lab.com/records/architecture/collision-consolidation.md)

Distinct from
[Collision Consolidation](https://banes-lab.com/records/architecture/collision-consolidation.md): One concern per file splits a file that plays two roles, while collision consolidation merges two files that play one.

Distinct from
[Narrowest Concern](https://banes-lab.com/records/architecture/narrowest-concern.md): One concern per file requires a single role, while narrowest concern chooses which declared role names it.

Violated by
forcing a two-role file under an arbitrary tag instead of splitting it

Detected by
a file that classifies equally well under two declared concerns

Measured by
split-candidate count

Refactored by
Split by Responsibility

Enforced by
classification review

Before

```text
foo.store.ts → holds the state AND validates every write, so its concern is two words
```

After

```text
foo.store.ts + foo.validator.ts → the ambiguity was the finding; the split is the fix
```

How it is checked

Checked by
classification review

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Classification Judgment](https://banes-lab.com/records/lexicon/classification-judgment.md), [Separation of Concerns](https://banes-lab.com/records/architecture/separation-of-concerns.md), [Narrowest Concern](https://banes-lab.com/records/architecture/narrowest-concern.md)

Shape it refuses
[Multi-Role File](https://banes-lab.com/records/lexicon/multi-role-file.md), [Sentence-Shaped Name](https://banes-lab.com/records/lexicon/sentence-shaped-name.md)

### Narrowest Concern

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: file
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A design rule that a file is classified under the narrowest declared role that describes it accurately.

Requires
[Classification Judgment](https://banes-lab.com/records/lexicon/classification-judgment.md)

Reinforces
[Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Enables
[Layer Spine Precedence](https://banes-lab.com/records/architecture/layer-spine-precedence.md)

In tension with
none

Conflicts with
[Saturated Role Tag](https://banes-lab.com/records/lexicon/saturated-role-tag.md)

Referenced by
[One Concern Per File](https://banes-lab.com/records/architecture/one-concern-per-file.md), [Layer Spine Precedence](https://banes-lab.com/records/architecture/layer-spine-precedence.md)

Contracts
[Concern Classification](https://banes-lab.com/records/algorithms/concern-classification.md)

Violated by
classifying to a saturated high-level label where a narrower accurate one fits

Detected by
one tag carrying files of several distinct roles

Measured by
files per tag, skew toward the broadest tags

Refactored by
Reclassify to the Narrower Role

Enforced by
classification review

Before

```text
foo.manager.ts → names a stature, so it fits lifecycle owners, caches, registries and coordinators alike
```

After

```text
foo.coordinator.ts → the narrowest declared role that is accurate; a file that cannot choose is doing both
```

How it is checked

Checked by
classification review

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Classification Judgment](https://banes-lab.com/records/lexicon/classification-judgment.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md), [Layer Spine Precedence](https://banes-lab.com/records/architecture/layer-spine-precedence.md)

Shape it refuses
[Saturated Role Tag](https://banes-lab.com/records/lexicon/saturated-role-tag.md)

### Layer Spine Precedence

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: file
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A mechanism that breaks an irreducible tie between two roles in favor of the one nearer the domain on the layer spine.

Requires
[Layer Spine](https://banes-lab.com/records/lexicon/layer-spine.md)

Reinforces
[Narrowest Concern](https://banes-lab.com/records/architecture/narrowest-concern.md)

Enables
[Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

In tension with
none

Conflicts with
[Multi-Role File](https://banes-lab.com/records/lexicon/multi-role-file.md)

Referenced by
[Narrowest Concern](https://banes-lab.com/records/architecture/narrowest-concern.md)

Violated by
reading the spine as a dependency-direction rule rather than a classification tie-break

Detected by
an irreducible two-concern overlap resolved by preference rather than by layer

Measured by
unresolved overlap count

Refactored by
Apply the Domain-Ward Tie-Break

Enforced by
classification review

Before

```text
a file that is irreducibly both is tagged by whichever word came to mind first
```

After

```text
model (domain) beats schema (infrastructure) → domain-ward wins, and only as a tie-break after the split test fails
```

How it is checked

Checked by
classification review

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Layer Spine](https://banes-lab.com/records/lexicon/layer-spine.md), [Narrowest Concern](https://banes-lab.com/records/architecture/narrowest-concern.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Shape it refuses
[Multi-Role File](https://banes-lab.com/records/lexicon/multi-role-file.md)

### Agnostic-First Vocabulary

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: repository, vocabulary
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A design rule that a domain-specific role word is admitted only where no domain-neutral role already covers it.

Requires
[Is-A Test](https://banes-lab.com/records/lexicon/is-a-test.md), [Rejection Table](https://banes-lab.com/records/lexicon/rejection-table.md)

Reinforces
[Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md)

Enables
[Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)

In tension with
none

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), [Saturated Role Tag](https://banes-lab.com/records/lexicon/saturated-role-tag.md)

Referenced by
[Guided Vocabulary Refusal](https://banes-lab.com/records/architecture/guided-vocabulary-refusal.md)

Violated by
restating an agnostic role in local domain dialect

Detected by
a domain tag whose role a declared agnostic concern already covers

Measured by
domain-tag share of the vocabulary

Refactored by
Classify to the Meta Concern

Enforced by
[rejection table](https://banes-lab.com/records/lexicon/rejection-table.md), developer approval

Before

```text
<container>/managers/ and <container>/helpers/ → two catch-all words for roles the agnostic set already names
```

After

```text
<container>/coordinators/ and <container>/predicates/ → a domain tag is admitted only where no agnostic concern covers the role
```

How it is checked

Checked by
rejection table, developer approval

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Is-A Test](https://banes-lab.com/records/lexicon/is-a-test.md), [Rejection Table](https://banes-lab.com/records/lexicon/rejection-table.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)

Shape it refuses
[Vocabulary Inflation](https://banes-lab.com/records/lexicon/vocabulary-inflation.md), [Nominalized Process Word](https://banes-lab.com/records/lexicon/nominalized-process-word.md), [Saturated Role Tag](https://banes-lab.com/records/lexicon/saturated-role-tag.md)

### Guided Vocabulary Refusal

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: repository, vocabulary, tooling
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A mechanism that answers a refused word with the declared word that covers its role, looked up in an indexed rejection table.

Requires
[Rejection Table](https://banes-lab.com/records/lexicon/rejection-table.md), [Covering Concern](https://banes-lab.com/records/lexicon/covering-concern.md), [Reverse Coverage Resolution](https://banes-lab.com/records/lexicon/reverse-coverage-resolution.md)

Reinforces
[Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Agnostic-First Vocabulary](https://banes-lab.com/records/architecture/agnostic-first-vocabulary.md)

Enables
[Vocabulary Admission](https://banes-lab.com/records/lexicon/vocabulary-admission.md), [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)

In tension with
none

Conflicts with
[Unguided Refusal](https://banes-lab.com/records/lexicon/unguided-refusal.md), [Borrowed Synonymy](https://banes-lab.com/records/lexicon/borrowed-synonymy.md)

Violated by
reporting that a word is undeclared without resolving the declared word that covers it

Detected by
a refusal message naming only the rejected word, and a rejection table readable by the developer but not by the gate

Measured by
share of refusals carrying a resolved replacement

Refactored by
Index the Rejection Table by Refused Word, Name the Covering Concern in the Refusal

Enforced by
registry-backed naming gate, rejection-table index drift-check

Before

```text
'foo.manager.ts' → "'manager' is not a declared concern tag" → the developer guesses again, and the table that already answered this sits in prose no gate reads
```

After

```text
refused word → rejection-table index → "'manager' is covered by 'coordinator'" → foo.coordinator.ts; coverage is decided by the role a file plays, never by a general-language synonym set
```

How it is checked

Checked by
registry-backed naming gate, rejection-table index drift-check

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Rejection Table](https://banes-lab.com/records/lexicon/rejection-table.md), [Covering Concern](https://banes-lab.com/records/lexicon/covering-concern.md), [Reverse Coverage Resolution](https://banes-lab.com/records/lexicon/reverse-coverage-resolution.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Agnostic-First Vocabulary](https://banes-lab.com/records/architecture/agnostic-first-vocabulary.md), [Vocabulary Admission](https://banes-lab.com/records/lexicon/vocabulary-admission.md), [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)

Shape it refuses
[Unguided Refusal](https://banes-lab.com/records/lexicon/unguided-refusal.md), [Borrowed Synonymy](https://banes-lab.com/records/lexicon/borrowed-synonymy.md)

### Derived Naming Registry

- Kind: [artifact](https://banes-lab.com/records/kind/artifact.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: repository, tooling
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
Descriptive data about the declared vocabulary and roots, derived from the naming document so a gate can read it, with the reasoning kept in the document.

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

Reinforces
[Convention over Configuration](https://banes-lab.com/records/architecture/convention-over-configuration.md), [Self-Describing Structures](https://banes-lab.com/records/architecture/self-describing-structures.md)

Enables
[Declared Jurisdiction](https://banes-lab.com/records/architecture/declared-jurisdiction.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

In tension with
none

Conflicts with
[Reasoning in the Registry](https://banes-lab.com/records/lexicon/reasoning-in-the-registry.md)

Contracts
[Taxonomy Ledger](https://banes-lab.com/records/algorithms/taxonomy-ledger.md)

Violated by
keeping the vocabulary in prose the gate cannot read, or the reasoning in the file the gate does read

Detected by
a tag in the document and absent from the registry, or either way round

Measured by
document/registry drift count

Refactored by
Derive the Registry from the Document, Move Reasoning Back to the Document

Enforced by
registry/document cross-check

Before

```text
the vocabulary lives only in prose, so every gate re-reads it by hand and a rule written into the config is read by no gate
```

After

```text
document holds the reasoning → registry holds the declarations → one gate and one classifier read the registry; drift either way is a bug
```

How it is checked

Checked by
registry/document cross-check

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md), [Convention over Configuration](https://banes-lab.com/records/architecture/convention-over-configuration.md), [Self-Describing Structures](https://banes-lab.com/records/architecture/self-describing-structures.md), [Declared Jurisdiction](https://banes-lab.com/records/architecture/declared-jurisdiction.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Shape it refuses
[Reasoning in the Registry](https://banes-lab.com/records/lexicon/reasoning-in-the-registry.md)

### Set-Relative Member Name

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A rule or precondition that a file inside a subject folder names only its own subject, because the folder already names the set.

Requires
[Subject Folder](https://banes-lab.com/records/lexicon/subject-folder.md)

Reinforces
[Naming Consistency](https://banes-lab.com/records/lexicon/naming-consistency.md)

Enables
[Concise Naming](https://banes-lab.com/records/lexicon/concise-naming.md)

In tension with
none

Conflicts with
[Restated Set Member](https://banes-lab.com/records/lexicon/restated-set-member.md)

Violated by
repeating the grouping folder's subject in the filename

Detected by
a file subject equal to the subject folder above it

Measured by
restated-member count

Refactored by
Drop the Redundant Head

Enforced by
naming gate

Before

```text
<container>/foo/behaviors/foo-bar.behavior.ts → restates what the folder already said
```

After

```text
<container>/foo/behaviors/bar.behavior.ts → the folder names the set, the file names the member
```

How it is checked

Checked by
naming gate

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Subject Folder](https://banes-lab.com/records/lexicon/subject-folder.md), [Naming Consistency](https://banes-lab.com/records/lexicon/naming-consistency.md), [Concise Naming](https://banes-lab.com/records/lexicon/concise-naming.md)

Shape it refuses
[Restated Set Member](https://banes-lab.com/records/lexicon/restated-set-member.md)

### Manual Identity Migration

- Kind: [technique](https://banes-lab.com/records/kind/technique.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: repository, refactor
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A technique for renaming files one container at a time by hand, re-pointing each pattern and comparing what each aggregator collects before and after.

Requires
[Identity Migration](https://banes-lab.com/records/lexicon/identity-migration.md), [Shape-Discovered Surface](https://banes-lab.com/records/lexicon/shape-discovered-surface.md), [Conversion Record](https://banes-lab.com/records/lexicon/conversion-record.md), [Alignment Entry](https://banes-lab.com/records/lexicon/alignment-entry.md), [Re-Alignment Cadence](https://banes-lab.com/records/lexicon/re-alignment-cadence.md), [Frozen Baseline](https://banes-lab.com/records/lexicon/frozen-baseline.md), [Unreferenced Export Triage](https://banes-lab.com/records/lexicon/unreferenced-export-triage.md)

Reinforces
[Container-by-Container Reshape](https://banes-lab.com/records/lexicon/container-by-container-reshape.md)

Enables
[Maintainability](https://banes-lab.com/records/lexicon/maintainability.md)

In tension with
none

Conflicts with
[Automated Reshape](https://banes-lab.com/records/lexicon/automated-reshape.md)

Contracts
[Reshape Risk Priority](https://banes-lab.com/records/algorithms/reshape-risk-priority.md), [Container Reshape](https://banes-lab.com/records/algorithms/container-reshape.md), [Export Triage Ladder](https://banes-lab.com/records/algorithms/export-triage-ladder.md), [Alignment Cadence](https://banes-lab.com/records/algorithms/alignment-cadence.md)

Violated by
renaming by tool across a tree whose aggregators resolve by pattern

Detected by
a shape-discovered surface whose collected count changed across a rename

Measured by
collected-member delta per aggregator

Refactored by
Re-point the Pattern, Verify the Collected Count

Enforced by
per-container reshape review, gate green between containers

Before

```text
a rename tool rewrites every literal path; **/*.validator.ts now collects nothing and the gate stays green because nothing is left to check
```

After

```text
one container → rename → update every importer → re-point every pattern → compare collected counts against the previous run → gate green before the next container
```

How it is checked

Checked by
per-container reshape review, gate green between containers

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Identity Migration](https://banes-lab.com/records/lexicon/identity-migration.md), [Shape-Discovered Surface](https://banes-lab.com/records/lexicon/shape-discovered-surface.md), [Conversion Record](https://banes-lab.com/records/lexicon/conversion-record.md), [Alignment Entry](https://banes-lab.com/records/lexicon/alignment-entry.md), [Re-Alignment Cadence](https://banes-lab.com/records/lexicon/re-alignment-cadence.md), [Frozen Baseline](https://banes-lab.com/records/lexicon/frozen-baseline.md), [Unreferenced Export Triage](https://banes-lab.com/records/lexicon/unreferenced-export-triage.md), [Container-by-Container Reshape](https://banes-lab.com/records/lexicon/container-by-container-reshape.md), [Maintainability](https://banes-lab.com/records/lexicon/maintainability.md)

Shape it refuses
[Automated Reshape](https://banes-lab.com/records/lexicon/automated-reshape.md)

### Collision Consolidation

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: folder, filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A design rule that a filename already held by another file is first read as a sign that both files do the same job, and a variant is added only after the code shows that their jobs differ.

Requires
[Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md), [One Concern Per File](https://banes-lab.com/records/architecture/one-concern-per-file.md)

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

Enables
[Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

In tension with
none

Conflicts with
[Variant-Masked Duplicate](https://banes-lab.com/records/lexicon/variant-masked-duplicate.md)

Violated by
adding a variant to a colliding file without comparing its responsibilities with the file that holds the name

Detected by
a variant whose sibling in the same folder shares its concern and one of its responsibilities

Measured by
variants admitted without a consolidation verdict

Refactored by
Compare Both Files, Merge One Job or Name the Facet That Differs

Enforced by
the duplicates verdict each conversion record carries, reviewed per file

Before

```text
foo.validator.ts exists → the new file becomes foo.extra.validator.ts, and both run the same checks under two names
```

After

```text
the name is taken → both files are read → one job: merged into foo.validator.ts; two jobs: the variant names the facet the code shows
```

How it is checked

Checked by
the duplicates verdict each conversion record carries, reviewed per file

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md), [One Concern Per File](https://banes-lab.com/records/architecture/one-concern-per-file.md), [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Shape it refuses
[Variant-Masked Duplicate](https://banes-lab.com/records/lexicon/variant-masked-duplicate.md)

### Mirrored Test Placement

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: folder, file
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A rule or precondition that a test sits in the concern folder of the file it tests, under a test root mirroring that file's governed root, and moves whenever that file moves.

Requires
[Compound Marker](https://banes-lab.com/records/lexicon/compound-marker.md), [Concern Folder](https://banes-lab.com/records/lexicon/concern-folder.md)

Reinforces
[Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)

Enables
[Identity Migration](https://banes-lab.com/records/lexicon/identity-migration.md)

In tension with
none

Conflicts with
[Stranded Test](https://banes-lab.com/records/lexicon/stranded-test.md)

Violated by
leaving a test in its old folder after its subject moves, or keeping one test for several subjects

Detected by
a test whose path does not mirror the concern folder of the file it names

Measured by
tests off their mirrored path

Refactored by
Move the Test With Its Subject, Split One Test per Subject

Enforced by
the centralized-test and subjectless-test checks, and the taxonomy step's mirror check

Before

```text
<root>/validators/foo.validator.ts moves to <root>/predicates/foo.predicate.ts → its test stays under the old validators mirror
```

After

```text
<test-root>/predicates/foo.predicate.test.ts → the test moves in the same pass and names the file it now covers
```

How it is checked

Checked by
the centralized-test and subjectless-test checks, and the taxonomy step's mirror check

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Compound Marker](https://banes-lab.com/records/lexicon/compound-marker.md), [Concern Folder](https://banes-lab.com/records/lexicon/concern-folder.md), [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md), [Identity Migration](https://banes-lab.com/records/lexicon/identity-migration.md)

Shape it refuses
[Stranded Test](https://banes-lab.com/records/lexicon/stranded-test.md)

### Sanctioned Generic Subject

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A rule or precondition that a file takes the one generic subject only when it is generic over its type parameters and names no domain noun anywhere in its source.

Requires
[Subject Slot](https://banes-lab.com/records/lexicon/subject-slot.md)

Reinforces
[Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md)

Enables
[Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

In tension with
none

Conflicts with
[Grouping Label](https://banes-lab.com/records/lexicon/grouping-label.md)

Violated by
naming a file with the generic subject while its source mentions the domain it serves

Detected by
a file carrying the generic subject whose source names a domain noun

Measured by
generic-subject files that fail either test

Refactored by
Take the Domain Noun as the Subject

Enforced by
classification review

Before

```text
base.cache.ts → holds a cache typed to invoices and sessions, so the generic name hides two subjects
```

After

```text
base.lru.cache.ts for the cache generic over its keys and values, and invoice.cache.ts for the one that names invoices
```

How it is checked

Checked by
classification review

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Subject Slot](https://banes-lab.com/records/lexicon/subject-slot.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Shape it refuses
[Grouping Label](https://banes-lab.com/records/lexicon/grouping-label.md)

### Conformance at Creation

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: file
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A design rule that a file created under a governed root is named and placed correctly when it is first written, so no conversion queue accumulates behind new work.

Requires
[Governed Root](https://banes-lab.com/records/lexicon/governed-root.md), [Classification Judgment](https://banes-lab.com/records/lexicon/classification-judgment.md)

Reinforces
[Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Enables
[Glob-Resolvable Tree](https://banes-lab.com/records/architecture/glob-resolvable-tree.md)

In tension with
none

Conflicts with
[Automated Reshape](https://banes-lab.com/records/lexicon/automated-reshape.md)

Violated by
writing a file under a provisional name and leaving its correct name for a later sweep

Detected by
a newly created file that the naming or placement gate refuses

Measured by
new files refused on their first run

Refactored by
Classify Before the First Write

Enforced by
naming gate, placement gate

Before

```text
a new helper lands as temp.ts, to be renamed later, and three importers bind to the temporary name
```

After

```text
the file is read into its role before it is written → foo.formatter.ts in formatters/ from the first commit
```

How it is checked

Checked by
naming gate, placement gate

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Governed Root](https://banes-lab.com/records/lexicon/governed-root.md), [Classification Judgment](https://banes-lab.com/records/lexicon/classification-judgment.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md), [Glob-Resolvable Tree](https://banes-lab.com/records/architecture/glob-resolvable-tree.md)

Shape it refuses
[Automated Reshape](https://banes-lab.com/records/lexicon/automated-reshape.md)

### Registry-Held Order

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A design rule that load or execution order is held by an import list or a registry, so a filename carries no numeric prefix the grammar would have to parse.

Requires
[Positional Slot Resolution](https://banes-lab.com/records/architecture/positional-slot-resolution.md)

Reinforces
[Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md)

Enables
[Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

In tension with
none

Conflicts with
[Numeric Order Prefix](https://banes-lab.com/records/lexicon/numeric-order-prefix.md)

Distinct from
[Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md): Registry-held order keeps sequence out of filenames, while declarative configuration keeps settings in validated data.

Violated by
encoding the position of a file in a sequence into its name

Detected by
a filename whose first segment is a number

Measured by
numerically prefixed filenames

Refactored by
Move the Order into the Registry, Drop the Prefix

Enforced by
naming gate

Before

```text
01-setup.step.ts, 02-build.step.ts → inserting a step renumbers every name after it
```

After

```text
setup.step.ts, build.step.ts, and the order held once in the registry that runs them
```

How it is checked

Checked by
naming gate

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Positional Slot Resolution](https://banes-lab.com/records/architecture/positional-slot-resolution.md), [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

Shape it refuses
[Numeric Order Prefix](https://banes-lab.com/records/lexicon/numeric-order-prefix.md)

### Externally Resolved Slot

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: root, filename, vocabulary
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A mechanism that resolves a name slot whose words another source owns against that source, whether an index that allocates identities, an upstream key set or a field the file itself carries, so the closed vocabulary never holds a copy of them.

Requires
[Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md)

Reinforces
[Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md), [Determinism](https://banes-lab.com/records/architecture/determinism.md)

Enables
[Stable Identity](https://banes-lab.com/records/lexicon/stable-identity.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

In tension with
none

Conflicts with
[Vocabulary Inflation](https://banes-lab.com/records/lexicon/vocabulary-inflation.md), [Duplicated Authority](https://banes-lab.com/records/lexicon/duplicated-authority.md)

Violated by
copying each word the source owns into the declared vocabulary, one entry per allocated identity or upstream key

Detected by
a vocabulary entry that mirrors a row of an allocating index, or a corpus file whose facet segment differs from the facet its own field declares

Measured by
slot words held both in the vocabulary and in the source that owns them

Refactored by
Resolve the Slot Against Its Source, Remove the Copies

Enforced by
the coordination member's slot check, which resolves a seat letter against the index that allocates it

Before

```text
each new seat letter is added to the variants array → the array and the index disagree as soon as one moves
```

After

```text
the variant slot resolves against the index that allocates letters → a new seat needs no vocabulary edit
```

How it is checked

Checked by
the coordination member's slot check, which resolves a seat letter against the index that allocates it

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md), [Determinism](https://banes-lab.com/records/architecture/determinism.md), [Stable Identity](https://banes-lab.com/records/lexicon/stable-identity.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

Shape it refuses
[Vocabulary Inflation](https://banes-lab.com/records/lexicon/vocabulary-inflation.md), [Duplicated Authority](https://banes-lab.com/records/lexicon/duplicated-authority.md)

### Case Dialect

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- Scope: filename
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A mechanism that binds file extensions to the case their language names files in and reads the same subject, variant and concern slots from the stem's word boundaries.

Requires
[Word-Boundary Case](https://banes-lab.com/records/lexicon/word-boundary-case.md), [Positional Slot Resolution](https://banes-lab.com/records/architecture/positional-slot-resolution.md)

Reinforces
[Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Portability](https://banes-lab.com/records/architecture/portability.md)

Enables
[Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

In tension with
none

Conflicts with
[Concern-Swallowing Compound](https://banes-lab.com/records/lexicon/concern-swallowing-compound.md)

Contracts
[Dialect Resolution](https://banes-lab.com/records/algorithms/dialect-resolution.md)

Violated by
declaring a separate vocabulary per language instead of one set of slots read through each language's case

Detected by
a dialect file whose trailing words are not a declared concern tag, or a dialect naming a case no splitter reads

Measured by
dialect files that do not resolve to three declared slots

Refactored by
Declare the Dialect, Rename to the Case's Word Run

Enforced by
naming gate, which parses a dialect's word run, and the taxonomy validator, which refuses a case no splitter reads

Before

```text
a language that names files in pascal case falls outside the grammar, so its files are ignored or forced into dotted kebab names its tools do not find
```

After

```text
SessionRefreshValidator.<ext> under a pascal dialect → words session, refresh, validator → subject session, variant refresh, concern validator, and its folder stays kebab
```

How it is checked

Checked by
naming gate, which parses a dialect's word run, and the taxonomy validator, which refuses a case no splitter reads

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Word-Boundary Case](https://banes-lab.com/records/lexicon/word-boundary-case.md), [Positional Slot Resolution](https://banes-lab.com/records/architecture/positional-slot-resolution.md), [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md), [Portability](https://banes-lab.com/records/architecture/portability.md), [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)

Shape it refuses
[Concern-Swallowing Compound](https://banes-lab.com/records/lexicon/concern-swallowing-compound.md)

### Root Spine Files

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- Severity: [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- Scope: root
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A rule or precondition that a governed root carries only its entry document and its accumulators at the root, and every other file sits in a concern folder.

Requires
[Governed Root](https://banes-lab.com/records/lexicon/governed-root.md), [Concern Folder](https://banes-lab.com/records/lexicon/concern-folder.md)

Reinforces
[Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)

Enables
[Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)

In tension with
none

Conflicts with
[Free-Form Folder Level](https://banes-lab.com/records/lexicon/free-form-folder-level.md)

Distinct from
[Governed Root](https://banes-lab.com/records/lexicon/governed-root.md): Root spine files limit which files may sit at a governed root, while the governed root is the declaration that brings a tree under the taxonomy.

Violated by
leaving a file at a root that is neither the entry document nor an accumulator

Detected by
a loose file at a governed root

Measured by
loose root files

Refactored by
Move the File into Its Concern Folder

Enforced by
placement gate

Before

```text
<root>/notes.ts beside <root>/README.md → the loose file resolves to no role
```

After

```text
<root>/README.md and the underscore-marked accumulators stay; every other file moves to <root>/<container>/<concern>/
```

How it is checked

Checked by
placement gate

Population
Every folder and filename under a declared governed root, and every word in the declared vocabularies

Freshness
A verdict stands until a file is added, moved or renamed, or a vocabulary or root declaration changes

Refusal
The naming or placement gate fails the lint run on the file, naming the declared word that covers a refused one

Observation
Each path parsed by position against the declared containers, depth cap and closed vocabularies

Evidence
Watched to fire and to accept: one suite lints a file whose tag is undeclared and one whose tag differs from its folder, another refuses a repeated role and a path past the depth cap, and both pass conforming paths

Authoritative side
The declared vocabularies and roots, which every path conforms to, so an undeclared word is an approved edit to the declaration

Depends on
[Governed Root](https://banes-lab.com/records/lexicon/governed-root.md), [Concern Folder](https://banes-lab.com/records/lexicon/concern-folder.md), [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md), [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)

Shape it refuses
[Free-Form Folder Level](https://banes-lab.com/records/lexicon/free-form-folder-level.md)

## Links to

- [principle](https://banes-lab.com/records/kind/principle.md)
- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)
- [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
- [Vocabulary Admission](https://banes-lab.com/records/lexicon/vocabulary-admission.md)
- [Rejection Table](https://banes-lab.com/records/lexicon/rejection-table.md)
- [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)
- [Placement Predictability](https://banes-lab.com/records/lexicon/placement-predictability.md)
- [Concern-Folder Correspondence](https://banes-lab.com/records/architecture/concern-folder-correspondence.md)
- [Naming Expressiveness](https://banes-lab.com/records/lexicon/naming-expressiveness.md)
- [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)
- [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)
- [Externally Resolved Slot](https://banes-lab.com/records/architecture/externally-resolved-slot.md)
- [Case Dialect](https://banes-lab.com/records/architecture/case-dialect.md)
- [Vocabulary Admission Gate](https://banes-lab.com/records/algorithms/vocabulary-admission-gate.md)
- [Taxonomy Kernel](https://banes-lab.com/records/algorithms/taxonomy-kernel.md)
- [Closed Vocabulary / Naming Expressiveness](https://banes-lab.com/records/tension/closed-vocabulary-naming-expressiveness.md)
- [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- [Concern Tag](https://banes-lab.com/records/lexicon/concern-tag.md)
- [Subject Slot](https://banes-lab.com/records/lexicon/subject-slot.md)
- [Ordered Role Sequence](https://banes-lab.com/records/lexicon/ordered-role-sequence.md)
- [Closed Vocabulary](https://banes-lab.com/records/architecture/closed-vocabulary.md)
- [Variant Slot](https://banes-lab.com/records/lexicon/variant-slot.md)
- [Glob Resolvability](https://banes-lab.com/records/lexicon/glob-resolvability.md)
- [Concern-Swallowing Compound](https://banes-lab.com/records/lexicon/concern-swallowing-compound.md)
- [Free-Form Folder Level](https://banes-lab.com/records/lexicon/free-form-folder-level.md)
- [Registry-Held Order](https://banes-lab.com/records/architecture/registry-held-order.md)
- [Name Projection](https://banes-lab.com/records/algorithms/name-projection.md)
- [constraint](https://banes-lab.com/records/kind/constraint.md)
- [Concern Folder](https://banes-lab.com/records/lexicon/concern-folder.md)
- [Collection Concern](https://banes-lab.com/records/lexicon/collection-concern.md)
- [Single-Unit Concern](https://banes-lab.com/records/lexicon/single-unit-concern.md)
- [Mass Concern](https://banes-lab.com/records/lexicon/mass-concern.md)
- [Glob-Resolvable Tree](https://banes-lab.com/records/architecture/glob-resolvable-tree.md)
- [Taxonomy Completion](https://banes-lab.com/records/algorithms/taxonomy-completion.md)
- [Discoverability](https://banes-lab.com/records/lexicon/discoverability.md)
- [Shape-Discovered Surface](https://banes-lab.com/records/lexicon/shape-discovered-surface.md)
- [Declared Jurisdiction](https://banes-lab.com/records/architecture/declared-jurisdiction.md)
- [Conformance at Creation](https://banes-lab.com/records/architecture/conformance-at-creation.md)
- [Discovery Verification](https://banes-lab.com/records/algorithms/discovery-verification.md)
- [Governed Root](https://banes-lab.com/records/lexicon/governed-root.md)
- [Container Level](https://banes-lab.com/records/lexicon/container-level.md)
- [Flat Bucket](https://banes-lab.com/records/lexicon/flat-bucket.md)
- [Ignore Declaration](https://banes-lab.com/records/lexicon/ignore-declaration.md)
- [Ecosystem-Fixed Name](https://banes-lab.com/records/lexicon/ecosystem-fixed-name.md)
- [Structurally Exempt File](https://banes-lab.com/records/lexicon/structurally-exempt-file.md)
- [Compound Marker](https://banes-lab.com/records/lexicon/compound-marker.md)
- [Explicit Boundaries](https://banes-lab.com/records/architecture/explicit-boundaries.md)
- [Bounded Nesting Depth](https://banes-lab.com/records/architecture/bounded-nesting-depth.md)
- [Backward Compatibility](https://banes-lab.com/records/architecture/backward-compatibility.md)
- [Ignore-List Silencing](https://banes-lab.com/records/lexicon/ignore-list-silencing.md)
- [Depth-Relief Container](https://banes-lab.com/records/lexicon/depth-relief-container.md)
- [Claimed Foreign Tree](https://banes-lab.com/records/lexicon/claimed-foreign-tree.md)
- [Duplicated Authority](https://banes-lab.com/records/lexicon/duplicated-authority.md)
- [Derived Naming Registry](https://banes-lab.com/records/architecture/derived-naming-registry.md)
- [Taxonomy Jurisdiction](https://banes-lab.com/records/algorithms/taxonomy-jurisdiction.md)
- [Container Ladder](https://banes-lab.com/records/algorithms/container-ladder.md)
- [Depth Cap](https://banes-lab.com/records/lexicon/depth-cap.md)
- [Sideways Overflow](https://banes-lab.com/records/architecture/sideways-overflow.md)
- [Tree Compactness](https://banes-lab.com/records/lexicon/tree-compactness.md)
- [Downward Nesting](https://banes-lab.com/records/lexicon/downward-nesting.md)
- [Path Role Walk](https://banes-lab.com/records/algorithms/path-role-walk.md)
- [Bounded Nesting Depth / Tree Compactness](https://banes-lab.com/records/tension/bounded-nesting-depth-tree-compactness.md)
- [pattern](https://banes-lab.com/records/kind/pattern.md)
- [Subject Folder](https://banes-lab.com/records/lexicon/subject-folder.md)
- [Classification Judgment](https://banes-lab.com/records/lexicon/classification-judgment.md)
- [Separation of Concerns](https://banes-lab.com/records/architecture/separation-of-concerns.md)
- [Narrowest Concern](https://banes-lab.com/records/architecture/narrowest-concern.md)
- [Multi-Role File](https://banes-lab.com/records/lexicon/multi-role-file.md)
- [Sentence-Shaped Name](https://banes-lab.com/records/lexicon/sentence-shaped-name.md)
- [Collision Consolidation](https://banes-lab.com/records/architecture/collision-consolidation.md)
- [Layer Spine Precedence](https://banes-lab.com/records/architecture/layer-spine-precedence.md)
- [Saturated Role Tag](https://banes-lab.com/records/lexicon/saturated-role-tag.md)
- [One Concern Per File](https://banes-lab.com/records/architecture/one-concern-per-file.md)
- [Concern Classification](https://banes-lab.com/records/algorithms/concern-classification.md)
- [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)
- [Layer Spine](https://banes-lab.com/records/lexicon/layer-spine.md)
- [Is-A Test](https://banes-lab.com/records/lexicon/is-a-test.md)
- [Covering Concern](https://banes-lab.com/records/lexicon/covering-concern.md)
- [Reverse Coverage Resolution](https://banes-lab.com/records/lexicon/reverse-coverage-resolution.md)
- [Unguided Refusal](https://banes-lab.com/records/lexicon/unguided-refusal.md)
- [Borrowed Synonymy](https://banes-lab.com/records/lexicon/borrowed-synonymy.md)
- [artifact](https://banes-lab.com/records/kind/artifact.md)
- [Convention over Configuration](https://banes-lab.com/records/architecture/convention-over-configuration.md)
- [Self-Describing Structures](https://banes-lab.com/records/architecture/self-describing-structures.md)
- [Reasoning in the Registry](https://banes-lab.com/records/lexicon/reasoning-in-the-registry.md)
- [Taxonomy Ledger](https://banes-lab.com/records/algorithms/taxonomy-ledger.md)
- [Naming Consistency](https://banes-lab.com/records/lexicon/naming-consistency.md)
- [Concise Naming](https://banes-lab.com/records/lexicon/concise-naming.md)
- [Restated Set Member](https://banes-lab.com/records/lexicon/restated-set-member.md)
- [technique](https://banes-lab.com/records/kind/technique.md)
- [Identity Migration](https://banes-lab.com/records/lexicon/identity-migration.md)
- [Conversion Record](https://banes-lab.com/records/lexicon/conversion-record.md)
- [Alignment Entry](https://banes-lab.com/records/lexicon/alignment-entry.md)
- [Re-Alignment Cadence](https://banes-lab.com/records/lexicon/re-alignment-cadence.md)
- [Frozen Baseline](https://banes-lab.com/records/lexicon/frozen-baseline.md)
- [Unreferenced Export Triage](https://banes-lab.com/records/lexicon/unreferenced-export-triage.md)
- [Container-by-Container Reshape](https://banes-lab.com/records/lexicon/container-by-container-reshape.md)
- [Maintainability](https://banes-lab.com/records/lexicon/maintainability.md)
- [Automated Reshape](https://banes-lab.com/records/lexicon/automated-reshape.md)
- [Reshape Risk Priority](https://banes-lab.com/records/algorithms/reshape-risk-priority.md)
- [Container Reshape](https://banes-lab.com/records/algorithms/container-reshape.md)
- [Export Triage Ladder](https://banes-lab.com/records/algorithms/export-triage-ladder.md)
- [Alignment Cadence](https://banes-lab.com/records/algorithms/alignment-cadence.md)
- [Variant-Masked Duplicate](https://banes-lab.com/records/lexicon/variant-masked-duplicate.md)
- [Stranded Test](https://banes-lab.com/records/lexicon/stranded-test.md)
- [Grouping Label](https://banes-lab.com/records/lexicon/grouping-label.md)
- [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md)
- [Numeric Order Prefix](https://banes-lab.com/records/lexicon/numeric-order-prefix.md)
- [Determinism](https://banes-lab.com/records/architecture/determinism.md)
- [Stable Identity](https://banes-lab.com/records/lexicon/stable-identity.md)
- [Word-Boundary Case](https://banes-lab.com/records/lexicon/word-boundary-case.md)
- [Portability](https://banes-lab.com/records/architecture/portability.md)
- [Dialect Resolution](https://banes-lab.com/records/algorithms/dialect-resolution.md)

## Linked from

- [The layer topology](https://banes-lab.com/ontology/schema/the-layer-topology.md)
- [The membership](https://banes-lab.com/ontology/schema/the-membership.md)
