# types/architecture.types.ts

> 85 lines of code and 12 definitions.

Tree: GovLab Context
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/context#file-context-types-architecture-types-ts
Source text: https://banes-lab.com/source/context/types/architecture.types.ts.txt

Listed in [types](https://banes-lab.com/api/source/context/types.md), after [types/algorithm.types.ts](https://banes-lab.com/source/context/types/algorithm.types.ts.md) and before [types/check.types.ts](https://banes-lab.com/source/context/types/check.types.ts.md).

## Definitions

- `SeverityLevel` (type_alias_declaration, line 7, exported)
- `EdgeRelation` (type_alias_declaration, line 9, exported)
- `RepairField` (type_alias_declaration, line 11, exported)
- `PrincipleRecord` (interface_declaration, line 13, exported)
- `PrincipleCategory` (interface_declaration, line 40, exported)
- `Principle` (interface_declaration, line 45, exported)
- `ArchRelationsOptions` (interface_declaration, line 50, exported)
- `PrincipleFilter` (interface_declaration, line 56, exported)
- `PrincipleEdge` (type_alias_declaration, line 68, exported)
- `ResolveResult` (interface_declaration, line 70, exported)
- `ArchRelations` (interface_declaration, line 82, exported)
- `KindDefinition` (interface_declaration, line 92, exported)

## Contained in

- [types](https://banes-lab.com/anatomy/context/folder-context-types.md)

## Source

```typescript
import type { DistinctDeclaration, Exemplar } from "#types/field.types";
import type { Logger, OntologyIssues } from "#types/ontology.types";
import type { CheckFacet } from "#types/check.types";
import type { SEVERITY_TAXONOMY } from "#configuration/constants/architecture.constants";
import type { UnreadKey } from "#types/record.types";

export type SeverityLevel = (typeof SEVERITY_TAXONOMY)[number]["value"];

export type EdgeRelation = "conflicts_with" | "enables" | "reinforces" | "requires" | "tensions_with";

export type RepairField = "refactored_by" | "violated_by";

export interface PrincipleRecord {
    id?: string;
    name: string;
    definition: string;
    type: string;
    aliases?: string[];
    scope: string[];
    requires: string[];
    reinforces: string[];
    enables: string[];
    conflicts_with: string[];
    tensions_with: string[];
    violated_by?: string[];
    formed_by?: string;
    detected_by: string[];
    measured_by: string[];
    refactored_by: string[];
    enforced_by: string[];
    severity: SeverityLevel;
    mandatoryFor?: string;
    exemplar?: Exemplar;
    check?: CheckFacet;
    canon?: string[];
    distinctFrom?: DistinctDeclaration[];
    expressedBy?: string[];
}

export interface PrincipleCategory {
    category: string;
    records: PrincipleRecord[];
}

export interface Principle extends PrincipleRecord {
    id: string;
    category: string;
}

export interface ArchRelationsOptions {
    logger?: Logger | undefined;
    data?: PrincipleCategory[];
    canonicalizeId?: ((term: string) => string) | undefined;
}

export interface PrincipleFilter {
    type?: string;
    scope?: string;
    category?: string;
    severity?: string;
    enables?: string;
    requires?: string;
    reinforces?: string;
    conflictsWith?: string;
    tensionsWith?: string;
}

export type PrincipleEdge = Principle | string;

export interface ResolveResult {
    principles: Principle[];
    edges: {
        requires: PrincipleEdge[];
        reinforces: PrincipleEdge[];
        enables: PrincipleEdge[];
        conflictsWith: PrincipleEdge[];
        tensionsWith: PrincipleEdge[];
    };
    refactorRecipes: { id: string; refactoredBy: string[]; detectedBy: string[]; violatedBy: string[] }[];
}

export interface ArchRelations {
    get: (id: string) => Principle | null;
    all: () => Principle[];
    ids: () => string[];
    query: (filter?: PrincipleFilter) => Principle[];
    resolve: (ids: string[]) => ResolveResult;
    unreadKeys: () => UnreadKey[];
    validateOntology: () => OntologyIssues;
}

export interface KindDefinition {
    kind: string;
    discriminator: string;
    distinguishesFrom: string;
    definitionSignatures: string[];
}
```
