File size: 3,896 Bytes
8904f7b
 
 
 
 
 
 
 
 
 
 
 
 
 
994a04c
 
 
8904f7b
 
994a04c
 
 
 
 
 
 
 
 
 
 
8904f7b
 
994a04c
 
 
 
 
 
 
 
 
8904f7b
 
 
 
 
 
 
 
 
 
994a04c
 
 
8904f7b
 
 
 
 
 
 
 
 
994a04c
 
 
 
8904f7b
994a04c
 
 
 
8904f7b
 
 
 
 
 
 
 
994a04c
 
 
8904f7b
994a04c
 
 
 
 
 
 
 
 
 
 
 
8904f7b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
"""Autonomous Engineering Agent (AEA²) execution planning models.

Defines the canonical schemas for ExecutionTask, ExecutionBatch,
RollbackPoint, and ExecutionPlan.
"""

from typing import Any, Dict, List, Optional
from pydantic import BaseModel, Field


class ExecutionTask(BaseModel):
    """A discrete, reviewable unit of engineering work derived from an AdvisorRecommendation."""

    id: str = Field(..., description="Unique task identifier.")
    recommendation_id: str = Field(
        "", description="ID of the originating AdvisorRecommendation."
    )
    title: str = Field(..., description="Short, actionable task title.")
    description: str = Field("", description="Detailed task description.")
    category: str = Field(
        "general",
        description="Engineering category: security | architecture | performance | etc.",
    )
    dependencies: List[str] = Field(
        default_factory=list,
        description="IDs of tasks that must complete before this one.",
    )
    parallel_with: List[str] = Field(
        default_factory=list, description="IDs of tasks that can run concurrently."
    )
    estimated_effort: str = Field("unknown", description="Estimated effort label.")
    risk: str = Field("low", description="Risk level: low | medium | high | critical.")
    risk_rationale: str = Field(
        "", description="Explanation of the assigned risk level."
    )
    affected_entities: List[str] = Field(
        default_factory=list, description="Files, modules, or symbols affected."
    )
    rollback_checkpoint: bool = Field(
        False, description="True if this task is a safe rollback point."
    )
    metadata: Dict[str, Any] = Field(default_factory=dict)


class ExecutionBatch(BaseModel):
    """A group of tasks that can be executed together in the same phase."""

    id: str = Field(..., description="Unique batch identifier.")
    order: int = Field(..., description="Execution order index (lower = earlier).")
    title: str = Field("", description="Human-readable batch title.")
    tasks: List[ExecutionTask] = Field(default_factory=list)
    parallel: bool = Field(
        False, description="True if tasks within this batch can be parallelized."
    )
    estimated_total_effort: str = Field("unknown")
    metadata: Dict[str, Any] = Field(default_factory=dict)


class ConflictReport(BaseModel):
    """Documents a detected conflict between two execution tasks."""

    task_a_id: str
    task_b_id: str
    conflict_type: str = Field(
        ...,
        description="file_collision | module_ownership | migration_order | incompatible_sequence",
    )
    description: str = ""
    resolution: str = Field(
        "serialize",
        description="Recommended resolution: serialize | remove_one | manual_review",
    )


class ExecutionPlan(BaseModel):
    """The complete deterministic output of the AEA² execution planning pipeline."""

    id: str = Field(..., description="Unique plan identifier.")
    repository: str = Field(..., description="Repository owner/name.")
    generated_at: float = Field(..., description="Unix timestamp of plan generation.")
    advisor_report_timestamp: Optional[float] = Field(
        None, description="Timestamp of the source AdvisorReport."
    )
    batches: List[ExecutionBatch] = Field(default_factory=list)
    critical_path: List[str] = Field(
        default_factory=list,
        description="Ordered task IDs forming the longest dependency chain.",
    )
    rollback_points: List[str] = Field(
        default_factory=list,
        description="Task IDs designated as safe rollback checkpoints.",
    )
    conflicts: List[ConflictReport] = Field(
        default_factory=list,
        description="Detected task conflicts and their resolutions.",
    )
    statistics: Dict[str, Any] = Field(default_factory=dict)
    metadata: Dict[str, Any] = Field(default_factory=dict)