All files / src model.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47                                                                                             
import type { CanonicalId } from "./id.js";
 
/** The stable domain roles in Moura's traceability hierarchy. */
export type NodeKind = "requirement" | "scenario" | "case";
 
/** A configurable verification dimension, deliberately not a closed enum. */
export type VerificationLayer = string;
 
export interface TraceNode {
  readonly kind: NodeKind;
  readonly localId: string;
}
 
export interface CaseNode extends TraceNode {
  readonly kind: "case";
  /** Layers for which runtime Evidence is required. */
  readonly verify: readonly VerificationLayer[];
  /** Explicit, Git-reviewed declarations for verification not yet implemented. */
  readonly unimplemented?: readonly VerificationLayer[];
}
 
export interface ScenarioNode extends TraceNode {
  readonly kind: "scenario";
  readonly cases: readonly CaseNode[];
}
 
export interface RequirementNode extends TraceNode {
  readonly kind: "requirement";
  readonly scenarios: readonly ScenarioNode[];
}
 
/** The smallest unit for which verification coverage is evaluated. */
export interface CoveragePoint {
  readonly canonicalCaseId: CanonicalId;
  readonly layer: VerificationLayer;
}
 
/** Adapter-neutral evidence. A single result may cover several cases. */
export interface Evidence {
  readonly covers: readonly CanonicalId[];
  readonly layer: VerificationLayer;
  readonly status: "passed" | "failed" | "broken" | "skipped";
  readonly source?: string;
  /** Optional presentation metadata; never used for matching or status. */
  readonly name?: string;
}