"""DTO de transport pour API web et CLI — Sprint S19. Schemas Pydantic strictement orientés "request/response". Ils ne remontent jamais à un service métier — ce sont les frontières entre HTTP/CLI et la logique applicative. Pattern : un endpoint reçoit un schema (validation Pydantic), appelle un service avec les paramètres extraits + validés du schema, retourne un autre schema. Exemple cible : .. code-block:: python # app/schemas/benchmark.py class StartRunRequest(BaseModel): corpus_path: str pipelines: list[PipelineSpecDTO] views: list[str] normalization_profile: NormalizationProfileId # interfaces/web/routers/benchmark.py @router.post("/api/runs") def start_run(req: StartRunRequest) -> StartRunResponse: run_id = benchmark_service.start_run(req.to_domain()) return StartRunResponse(run_id=run_id) """ from __future__ import annotations __all__: list[str] = []