Source code for ralph.mcp.artifacts.development_result
"""Structured development_result artifact validation helpers."""
from __future__ import annotations
from pydantic import ConfigDict, Field, ValidationError, model_validator
from ralph.mcp.artifacts.analysis_item_proof import AnalysisItemProof
from ralph.mcp.artifacts.development_result_continuation import Continuation
from ralph.mcp.artifacts.development_result_validation_error import DevelopmentResultValidationError
from ralph.mcp.artifacts.plan_item_proof import PlanItemProof
from ralph.pydantic_compat import RalphBaseModel
DEVELOPMENT_RESULT_ARTIFACT_TYPE = "development_result"
[docs]
class DevelopmentResult(RalphBaseModel):
"""Validated schema for a development_result artifact."""
model_config = ConfigDict(extra="forbid")
status: str = Field(..., min_length=1)
summary: str = Field(..., min_length=1)
files_changed: str = Field(..., min_length=1)
plan_items_proven: list[PlanItemProof] = Field(default_factory=list)
analysis_items_addressed: list[AnalysisItemProof] = Field(default_factory=list)
next_steps: str | None = None
continuation: Continuation | None = None
@model_validator(mode="after")
def validate_status_requirements(self) -> DevelopmentResult:
if self.status == "partial":
if self.next_steps is None:
raise ValueError("partial development_result artifacts require next_steps")
if self.continuation is None:
raise ValueError("partial development_result artifacts require continuation")
return self
[docs]
def normalize_development_result_content(content: dict[str, object]) -> dict[str, object]:
"""Validate and normalize a raw development_result content dict."""
try:
validated = DevelopmentResult.model_validate(content)
return validated.model_dump(mode="python", exclude_none=True)
except ValidationError as exc:
raise DevelopmentResultValidationError(str(exc)) from exc
__all__ = [
"DEVELOPMENT_RESULT_ARTIFACT_TYPE",
"AnalysisItemProof",
"Continuation",
"DevelopmentResult",
"DevelopmentResultValidationError",
"PlanItemProof",
"normalize_development_result_content",
]