Back to Quality Engineering Toolkit

capstone-quality-engineering-toolkit/src/models.ts

/** The clock boundary keeps time-dependent utility behaviour testable. */
export interface Clock {
  now(): number;
  sleep(milliseconds: number): Promise<void>;
}

/** Filesystem operations are explicit effects owned by the outer workflow. */
export interface FileSystem {
  readText(path: string, purpose: string): Promise<string>;
  writeText(path: string, content: string, purpose: string): Promise<void>;
}

export type ExecutionOutcome = "passed" | "failed" | "skipped";

export interface ExecutionRecord {
  readonly executionId: string;
  readonly operation: string;
  readonly environment: string;
  readonly outcome: ExecutionOutcome;
  readonly durationMs: number;
  readonly timestamp: string;
  readonly diagnosticCode?: string;
}

export interface ToolkitConfig {
  readonly environment: string;
  readonly inputPath: string;
  readonly outputPath: string;
  readonly slowThresholdMs: number;
  readonly pollingTimeoutMs: number;
  readonly pollingIntervalMs: number;
  readonly retryMaxAttempts: number;
  readonly retryDelayMs: number;
}

export type FailureKind = "invalid-input" | "dependency-failure" | "timeout" | "unexpected-result";

export interface FailureContext {
  readonly operation: string;
  readonly recordIndex?: number;
  readonly executionId?: string;
  readonly attempt?: number;
  readonly elapsedMs?: number;
  readonly expected?: string;
  readonly observed?: string;
  readonly retryExhausted?: boolean;
}

export interface NormalisedExecutions {
  readonly receivedRecordCount: number;
  readonly executions: readonly ExecutionRecord[];
  readonly duplicateExecutionCount: number;
}

export interface QualitySummary {
  readonly executionCount: number;
  readonly passedExecutionCount: number;
  readonly failedExecutionCount: number;
  readonly skippedExecutionCount: number;
  readonly slowExecutionCount: number;
  readonly failedOperationCount: Readonly<Record<string, number>>;
  readonly executionCountByEnvironment: Readonly<Record<string, number>>;
  readonly slowOperations: readonly string[];
}

export interface PollingResult<T> {
  readonly value: T;
  readonly attempts: number;
  readonly elapsedMs: number;
}

export interface RetryResult<T> {
  readonly value: T;
  readonly attempts: number;
}

export interface EvidenceSnapshot {
  readonly snapshotId: string;
}

export interface DiagnosticEntry {
  readonly severity: "information" | "warning";
  readonly operation: string;
  readonly detail: string;
  readonly attempt?: number;
  readonly elapsedMs?: number;
  readonly expected?: string;
  readonly observed?: string;
}

export interface QualityReport {
  readonly reportName: "quality-engineering-toolkit";
  readonly targetEnvironment: string;
  readonly inputRecordCount: number;
  readonly duplicateExecutionCount: number;
  readonly summary: QualitySummary;
  readonly asynchronousEvidence: {
    readonly readinessAttempts: number;
    readonly readinessElapsedMs: number;
    readonly snapshotReadAttempts: number;
    readonly snapshotId: string;
  };
  readonly diagnostics: readonly DiagnosticEntry[];
}