# types/reason.surface.types.ts

> 55 lines of code and 9 definitions.

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

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

## Definitions

- `Verdict` (type_alias_declaration, line 7, exported)
- `EvidenceSource` (type_alias_declaration, line 9, exported)
- `PredicateType` (type_alias_declaration, line 11, exported)
- `TestSurfacePredicate` (interface_declaration, line 13, exported)
- `TestSurfaceEvidence` (interface_declaration, line 19, exported)
- `TestSurface` (interface_declaration, line 25, exported)
- `Technique` (interface_declaration, line 39, exported)
- `Invariant` (interface_declaration, line 48, exported)
- `FailureShape` (interface_declaration, line 55, exported)

## Contained in

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

## Source

```typescript
import type {
    EVIDENCE_SOURCE_VOCABULARY,
    PREDICATE_TYPE_VOCABULARY,
    VERDICT_VOCABULARY,
} from "#configuration/constants/reason.constants";

export type Verdict = (typeof VERDICT_VOCABULARY)[number]["value"];

export type EvidenceSource = (typeof EVIDENCE_SOURCE_VOCABULARY)[number]["value"];

export type PredicateType = (typeof PREDICATE_TYPE_VOCABULARY)[number]["value"];

export interface TestSurfacePredicate {
    type: PredicateType;
    expression: string;
    grounds?: string[];
}

export interface TestSurfaceEvidence {
    required: boolean;
    source: EvidenceSource;
    grounds?: string[];
}

export interface TestSurface {
    id: string;
    dimension: string;
    lens: string;
    fit: string;
    failureModes: string[];
    techniques: string[];
    predicate: TestSurfacePredicate;
    invariant: string;
    evidence: TestSurfaceEvidence;
    verdictDomain: Verdict[];
    aliases?: string[];
}

export interface Technique {
    id: string;
    mode: string;
    principle: string;
    principleRef?: string;
    fails: string;
    aliases?: string[];
}

export interface Invariant {
    id: string;
    name: string;
    statement: string;
    aliases?: string[];
}

export interface FailureShape {
    id: string;
    name: string;
    shape: string;
    fix: string;
    breaks: string;
    canon: string[];
    instances: string[];
    aliases?: string[];
}
```
