diff --git a/src/ClaudeDo.Data/Migrations/20260423154708_AddPlanningSupport.cs b/src/ClaudeDo.Data/Migrations/20260423154708_AddPlanningSupport.cs
new file mode 100644
index 0000000..ef24f78
--- /dev/null
+++ b/src/ClaudeDo.Data/Migrations/20260423154708_AddPlanningSupport.cs
@@ -0,0 +1,80 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace ClaudeDo.Data.Migrations
+{
+ ///
+ public partial class AddPlanningSupport : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "parent_task_id",
+ table: "tasks",
+ type: "TEXT",
+ nullable: true);
+
+ migrationBuilder.AddColumn(
+ name: "planning_finalized_at",
+ table: "tasks",
+ type: "TEXT",
+ nullable: true);
+
+ migrationBuilder.AddColumn(
+ name: "planning_session_id",
+ table: "tasks",
+ type: "TEXT",
+ nullable: true);
+
+ migrationBuilder.AddColumn(
+ name: "planning_session_token",
+ table: "tasks",
+ type: "TEXT",
+ nullable: true);
+
+ migrationBuilder.CreateIndex(
+ name: "idx_tasks_parent_task_id",
+ table: "tasks",
+ column: "parent_task_id");
+
+ migrationBuilder.AddForeignKey(
+ name: "FK_tasks_tasks_parent_task_id",
+ table: "tasks",
+ column: "parent_task_id",
+ principalTable: "tasks",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Restrict);
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropForeignKey(
+ name: "FK_tasks_tasks_parent_task_id",
+ table: "tasks");
+
+ migrationBuilder.DropIndex(
+ name: "idx_tasks_parent_task_id",
+ table: "tasks");
+
+ migrationBuilder.DropColumn(
+ name: "parent_task_id",
+ table: "tasks");
+
+ migrationBuilder.DropColumn(
+ name: "planning_finalized_at",
+ table: "tasks");
+
+ migrationBuilder.DropColumn(
+ name: "planning_session_id",
+ table: "tasks");
+
+ migrationBuilder.DropColumn(
+ name: "planning_session_token",
+ table: "tasks");
+ }
+ }
+}
diff --git a/src/ClaudeDo.Data/Migrations/ClaudeDoDbContextModelSnapshot.cs b/src/ClaudeDo.Data/Migrations/ClaudeDoDbContextModelSnapshot.cs
index eee421b..08926d8 100644
--- a/src/ClaudeDo.Data/Migrations/ClaudeDoDbContextModelSnapshot.cs
+++ b/src/ClaudeDo.Data/Migrations/ClaudeDoDbContextModelSnapshot.cs
@@ -273,6 +273,22 @@ namespace ClaudeDo.Data.Migrations
.HasColumnType("TEXT")
.HasColumnName("notes");
+ b.Property("ParentTaskId")
+ .HasColumnType("TEXT")
+ .HasColumnName("parent_task_id");
+
+ b.Property("PlanningFinalizedAt")
+ .HasColumnType("TEXT")
+ .HasColumnName("planning_finalized_at");
+
+ b.Property("PlanningSessionId")
+ .HasColumnType("TEXT")
+ .HasColumnName("planning_session_id");
+
+ b.Property("PlanningSessionToken")
+ .HasColumnType("TEXT")
+ .HasColumnName("planning_session_token");
+
b.Property("Result")
.HasColumnType("TEXT")
.HasColumnName("result");
@@ -310,6 +326,9 @@ namespace ClaudeDo.Data.Migrations
b.HasIndex("ListId")
.HasDatabaseName("idx_tasks_list_id");
+ b.HasIndex("ParentTaskId")
+ .HasDatabaseName("idx_tasks_parent_task_id");
+
b.HasIndex("Status")
.HasDatabaseName("idx_tasks_status");
@@ -502,7 +521,14 @@ namespace ClaudeDo.Data.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+ b.HasOne("ClaudeDo.Data.Models.TaskEntity", "Parent")
+ .WithMany("Children")
+ .HasForeignKey("ParentTaskId")
+ .OnDelete(DeleteBehavior.Restrict);
+
b.Navigation("List");
+
+ b.Navigation("Parent");
});
modelBuilder.Entity("ClaudeDo.Data.Models.TaskRunEntity", b =>
@@ -566,6 +592,8 @@ namespace ClaudeDo.Data.Migrations
modelBuilder.Entity("ClaudeDo.Data.Models.TaskEntity", b =>
{
+ b.Navigation("Children");
+
b.Navigation("Runs");
b.Navigation("Subtasks");