from __future__ import annotations from dataclasses import asdict, dataclass, field from typing import Any @dataclass class CanonicalIncident: title: str description_text: str cluster_id: str = '' clinic_links: list[str] = field(default_factory=list) grafana_links: list[str] = field(default_factory=list) time_window: str = '' l2_assignee: str = 'N/A' assignee_or_l3: str = 'N/A' def to_dict(self) -> dict[str, Any]: return asdict(self) @dataclass class ReplayInputs: used_fields: list[str] = field(default_factory=list) excluded_fields: list[str] = field(default_factory=list) notes: str = '' def to_dict(self) -> dict[str, Any]: return asdict(self) @dataclass class ReplayReadyCase: incident_id: str source: str initial_symptom: str canonical_incident: CanonicalIncident replay_inputs: ReplayInputs def to_dict(self) -> dict[str, Any]: payload = asdict(self) return payload @dataclass class ReplayContract: profile: str allowed_mismatch_types: list[str] = field(default_factory=list) allowed_entry_modes: list[str] = field(default_factory=list) allowed_reference_files: list[str] = field(default_factory=list) skill_conclusion_fields: list[str] = field(default_factory=list) merge_readiness_values: list[str] = field(default_factory=list) def to_dict(self) -> dict[str, Any]: return asdict(self) @dataclass class SkillConclusion: entry_mode: str = '' activated_subcapabilities: list[str] = field(default_factory=list) reference_files_consulted: list[str] = field(default_factory=list) is_tikv_side: str = '' scope: str = '' path: str = '' earliest_proven_bottleneck: str = '' key_evidence: list[str] = field(default_factory=list) missing_evidence: list[str] = field(default_factory=list) uncertainty_statement: str = '' provisional_conclusion: str = '' def to_dict(self) -> dict[str, Any]: return asdict(self) @dataclass class AnalysisWindow: label: str = '' start_time: str = '' end_time: str = '' summary: str = '' inferred_path: str = '' inferred_bottleneck: str = '' evidence: list[str] = field(default_factory=list) def to_dict(self) -> dict[str, Any]: return asdict(self) @dataclass class FinalHumanConclusion: status: str = '' owner_final_comment: str = '' structured_conclusion: str = '' evidence_references: list[str] = field(default_factory=list) all_comment_summary: str = '' analysis_progression: list[str] = field(default_factory=list) supplementary_evidence: list[str] = field(default_factory=list) analysis_windows: list[AnalysisWindow] = field(default_factory=list) def to_dict(self) -> dict[str, Any]: return asdict(self) @dataclass class WindowReview: label: str = '' start_time: str = '' end_time: str = '' human_summary: str = '' skill_summary: str = '' assessment: str = '' notes: list[str] = field(default_factory=list) def to_dict(self) -> dict[str, Any]: return asdict(self) @dataclass class CaseReview: incident_id: str source: str initial_symptom: str canonical_incident: CanonicalIncident replay_inputs: ReplayInputs skill_conclusion: SkillConclusion = field(default_factory=SkillConclusion) final_human_conclusion: FinalHumanConclusion = field(default_factory=FinalHumanConclusion) match_level: str = '' mismatch_type: list[str] = field(default_factory=list) comparison_notes: list[str] = field(default_factory=list) improvement_suggestions: list[str] = field(default_factory=list) window_reviews: list[WindowReview] = field(default_factory=list) def to_dict(self) -> dict[str, Any]: return asdict(self) @dataclass class ComparisonContract: profile: str allowed_match_levels: list[str] = field(default_factory=list) allowed_mismatch_types: list[str] = field(default_factory=list) allowed_human_conclusion_statuses: list[str] = field(default_factory=list) skill_conclusion_fields: list[str] = field(default_factory=list) def to_dict(self) -> dict[str, Any]: return asdict(self)