namespace ClaudeDo.Data.Models; public enum TaskStatus { Idle, Queued, Running, WaitingForReview, Done, Failed, Cancelled, } public enum PlanningPhase { None, Active, Finalized, } public sealed class TaskEntity { public required string Id { get; init; } public required string ListId { get; init; } public required string Title { get; set; } public string? Description { get; set; } public TaskStatus Status { get; set; } = TaskStatus.Idle; public PlanningPhase PlanningPhase { get; set; } = PlanningPhase.None; public string? BlockedByTaskId { get; set; } public DateTime? ScheduledFor { get; set; } public string? Result { get; set; } public string? ReviewFeedback { get; set; } public string? LogPath { get; set; } public required DateTime CreatedAt { get; init; } public DateTime? StartedAt { get; set; } public DateTime? FinishedAt { get; set; } public string CommitType { get; set; } = CommitTypeRegistry.DefaultType; public string? Model { get; set; } public string? SystemPrompt { get; set; } public string? AgentPath { get; set; } public bool IsStarred { get; set; } public bool IsMyDay { get; set; } public string? Notes { get; set; } public int SortOrder { get; set; } public string? ParentTaskId { get; set; } public string? PlanningSessionId { get; set; } public string? PlanningSessionToken { get; set; } public DateTime? PlanningFinalizedAt { get; set; } public string? CreatedBy { get; set; } // Navigation properties public ListEntity List { get; set; } = null!; public WorktreeEntity? Worktree { get; set; } public ICollection Runs { get; set; } = new List(); public ICollection Subtasks { get; set; } = new List(); public TaskEntity? Parent { get; set; } public ICollection Children { get; set; } = new List(); }