"""Artifact result types for generation harness workflows.""" from dataclasses import dataclass from typing import Literal from app.services.story_status import StoryAssetStatus AssetCompletionKind = Literal["cover_image", "storybook_images", "audio"] @dataclass(frozen=True) class AssetCompletionResult: """Service-level result for a generated asset completion attempt.""" asset: AssetCompletionKind status: StoryAssetStatus value: str | bytes | None = None error: str | None = None blocks_main_result: bool = False @property def succeeded(self) -> bool: """Whether the asset reached a usable ready state.""" return self.status == StoryAssetStatus.READY and self.error is None def asset_result_metadata(result: AssetCompletionResult) -> dict: """Build JSON-safe metadata for asset workflow events.""" return { "asset": result.asset, "status": result.status.value, "error": result.error, "blocks_main_result": result.blocks_main_result, }