from __future__ import annotations import uuid from datetime import datetime from pydantic import BaseModel, Field class ConsistencySweepIssueSummary(BaseModel): fail: int = 0 automation_error: int = 0 warn: int = 0 info: int = 0 class ConsistencySweepRepoResult(BaseModel): repo_slug: str repo_path: str result: str summary: ConsistencySweepIssueSummary fixes_applied: list[str] = Field(default_factory=list) class ConsistencySweepRemoteAllGenerate(BaseModel): max_seconds: int = Field( default=300, ge=0, le=3600, description="Wall-clock budget for the remote-all sweep (0 disables)", ) source: str = Field( default="api", description="Runner label stored on progress events (local-timer, activity-core, api)", ) class ConsistencySweepRemoteAllRun(BaseModel): started_at: datetime completed_at: datetime max_seconds: int source: str exit_code: int automation_error: bool = False lock_skipped: bool repos_processed: list[ConsistencySweepRepoResult] = Field(default_factory=list) skipped_clean: list[str] = Field(default_factory=list) skipped_missing: list[str] = Field(default_factory=list) skipped_budget: list[str] = Field(default_factory=list) progress_event_id: uuid.UUID | None = None