Compare commits

..

1 Commits

Author SHA1 Message Date
Ralph Khreish
7a5aad4178 fix: improve subtask & parent task management 2025-09-26 01:13:18 +02:00
7 changed files with 11 additions and 130 deletions

View File

@@ -0,0 +1,5 @@
---
"task-master-ai": patch
---
Change parent task back to "pending" when all subtasks are in "pending" state

View File

@@ -101,12 +101,7 @@ sidebarTitle: "CLI Commands"
task-master set-status --id=1.1,1.2 --status=<status>
```
**Automatic Parent Status Management:**
When updating subtask statuses, parent task statuses are automatically adjusted:
- When **all subtasks** are marked `done`, the parent task becomes `done`
- When **at least one subtask** is `in-progress` or `done`, the parent task becomes `in-progress`
When marking a parent task as "done", all of its subtasks will automatically be marked as "done" as well.
When marking a task as "done", all of its subtasks will automatically be marked as "done" as well.
</Accordion>
<Accordion title="Expand Tasks">

View File

@@ -34,7 +34,7 @@ The MCP tools can be categorized in the same way as the core functionalities:
- **`get_tasks`**: Lists all tasks.
- **`get_task`**: Shows the details of a specific task.
- **`next_task`**: Shows the next task to work on.
- **`set_task_status`**: Sets the status of a task or subtask. When updating subtask statuses, parent task statuses are automatically adjusted based on subtask completion.
- **`set_task_status`**: Sets the status of a task or subtask.
### 3. Task Analysis and Expansion

View File

@@ -120,23 +120,6 @@ The `show` command:
- Provides contextual action suggestions based on the task's state
- Works with both regular tasks and subtasks (using the format taskId.subtaskId)
</Accordion>
<Accordion title="Automatic Parent Status Management">
Task Master automatically manages parent task statuses based on subtask changes:
**Status Rules:**
- When **all subtasks** are marked as `done`, the parent task is automatically set to `done`
- When **at least one subtask** is `in-progress` or `done`, the parent task is automatically set to `in-progress`
- This ensures parent tasks accurately reflect the progress of their subtasks
**Example Workflow:**
1. Parent task starts as `pending`
2. First subtask marked `in-progress` → Parent becomes `in-progress`
3. Some subtasks completed (`done`) → Parent remains `in-progress`
4. All subtasks completed (`done`) → Parent automatically becomes `done`
This automation eliminates the need to manually update parent task statuses and ensures consistency across your task hierarchy.
</Accordion>
</AccordionGroup>
## Best Practices for AI-Driven Development

View File

@@ -3,31 +3,4 @@ title: "What's New"
sidebarTitle: "What's New"
---
## Version 0.27.2 - Automatic Parent Status Management
### ✨ New Features
**Automatic Parent Status Management**
- Parent tasks now automatically update their status based on subtask progress
- When all subtasks are marked as `done`, the parent task automatically becomes `done`
- When at least one subtask is `in-progress` or `done`, the parent task automatically becomes `in-progress`
- This eliminates manual parent status updates and ensures task hierarchy consistency
### 🔧 How It Works
The new system tracks subtask status changes and intelligently updates parent statuses:
1. **Subtask Progress Tracking**: Each subtask status change triggers parent evaluation
2. **Smart Status Rules**: Parent status reflects the collective progress of all subtasks
3. **Seamless Integration**: Works automatically with existing `set-status` commands and MCP tools
### 📈 Benefits
- **Reduced Manual Work**: No need to manually update parent task statuses
- **Better Visibility**: Parent tasks accurately reflect overall progress
- **Consistency**: Eliminates mismatched parent/subtask status combinations
- **AI-Friendly**: Provides clearer status hierarchy for AI assistants
---
For a complete list of changes, see the [CHANGELOG.md](https://github.com/eyaltoledano/claude-task-master/blob/main/CHANGELOG.md).
An easy way to see the latest releases

File diff suppressed because one or more lines are too long

View File

@@ -409,8 +409,11 @@ export class FileStorage implements IStorage {
const allDone = subs.every(isDoneLike);
const anyInProgress = subs.some((s) => norm(s) === 'in-progress');
const anyDone = subs.some(isDoneLike);
const allPending = subs.every((s) => norm(s) === 'pending');
if (allDone) parentNewStatus = 'done';
else if (anyInProgress || anyDone) parentNewStatus = 'in-progress';
else if (allPending) parentNewStatus = 'pending';
}
// Always bump updatedAt; update status only if changed