from __future__ import annotations from dataclasses import dataclass, field from pathlib import Path from typing import Literal ComponentKind = Literal["process_v2_intent_router"] @dataclass(slots=True, frozen=True) class RouterExpectation: domain: str | None = None intent: str | None = None sub_intent: str | None = None @dataclass(slots=True, frozen=True) class CaseExpectations: router: RouterExpectation = RouterExpectation() @dataclass(slots=True, frozen=True) class V4Case: case_id: str component: ComponentKind query: str source_file: Path expectations: CaseExpectations = CaseExpectations() notes: str = "" tags: tuple[str, ...] = () @dataclass(slots=True, frozen=True) class ExecutionPayload: actual: dict details: dict @dataclass(slots=True) class V4CaseResult: case: V4Case actual: dict details: dict passed: bool mismatches: list[str] = field(default_factory=list)