using System.Text; namespace ClaudeDo.Data; /// /// Single source of truth for the text handed to Claude as a task prompt: /// title + description + the OPEN sub-tasks. Resolved sub-tasks are dropped. /// Shared by the Worker (real prompt) and the UI (the card's "what Claude gets" preview). /// public static class TaskPromptComposer { public static string Compose(string title, string? description, IEnumerable<(string Title, bool Completed)> subtasks) { var sb = new StringBuilder((title ?? "").Trim()); if (!string.IsNullOrWhiteSpace(description)) sb.Append("\n\n").Append(description.Trim()); var open = subtasks?.Where(s => !s.Completed).ToList() ?? new List<(string, bool)>(); if (open.Count > 0) { sb.Append("\n\n## Sub-Tasks\n"); foreach (var s in open) sb.Append("- [ ] ").Append(s.Title).Append('\n'); } return sb.ToString(); } }