Skip to content

Issue & Report Types

From packages/shared/src/types.ts — the canonical shapes re-exported by @frontend-qa/shared and used across core, browser, cli, and mcp-server.

type EvidenceType =
| 'Measured'
| 'Observed'
| 'StaticAnalysis'
| 'Heuristic'
| 'Inferred'
| 'Unavailable';
type Severity = 'critical' | 'high' | 'medium' | 'low' | 'info';
interface IssueSource {
url?: string;
line?: number;
column?: number;
}
interface IssueElement {
selector?: string;
snippet?: string;
}
interface Issue {
id: string;
collector: string;
category: string;
severity: Severity;
route: string;
title: string;
description: string;
evidence: EvidenceType;
source?: IssueSource;
element?: IssueElement;
metadata: Record<string, unknown>;
suggestedNextStep?: string;
}
Field Meaning
id Stable identifier for this finding
collector Which collector produced it, e.g. browser.console, static.dead-export
category Sub-classification within the collector
severity critical | high | medium | low | info
route The route the issue was found on (or the file path context for static)
evidence How it was found — see Core Concepts
source File/line/column, when known
element DOM selector/snippet, when known (runtime collectors)
metadata Collector-specific extra data
suggestedNextStep Optional human-readable hint
interface ReportTarget {
url: string;
framework?: 'react' | 'next' | 'unknown';
}
interface ReportArtifacts {
screenshots: string[];
har?: string;
}
interface Report {
schemaVersion: '1';
runId: string;
startedAt: string;
finishedAt: string;
target: ReportTarget;
config: unknown;
routesScanned: string[];
issues: Issue[];
artifacts: ReportArtifacts;
}

config holds the exact resolved ResolvedConfig that produced this run, so a report.json is self-describing.

packages/shared/src/schemas.ts defines the Zod counterparts (issueSchema, reportSchema, configSchema) these types are inferred from/validated against.