Adds a new CLI command and MCP tool to reorganize tasks and subtasks within the hierarchy. Features include: - Moving tasks between different positions in the task list - Converting tasks to subtasks and vice versa - Moving subtasks between parents - Moving multiple tasks at once with comma-separated IDs - Creating placeholder tasks when moving to new IDs - Validation to prevent accidental data loss This is particularly useful for resolving merge conflicts when multiple team members create tasks on different branches.
50 lines
5.2 KiB
Plaintext
50 lines
5.2 KiB
Plaintext
# Task ID: 91
|
|
# Title: Implement Move Command for Tasks and Subtasks
|
|
# Status: done
|
|
# Dependencies: 1, 3
|
|
# Priority: medium
|
|
# Description: Introduce a 'move' command to enable moving tasks or subtasks to a different id, facilitating conflict resolution by allowing teams to assign new ids as needed.
|
|
# Details:
|
|
The move command will consist of three core components: 1) Core Logic Function in scripts/modules/task-manager/move-task.js, 2) Direct Function Wrapper in mcp-server/src/core/direct-functions/move-task.js, and 3) MCP Tool in mcp-server/src/tools/move-task.js. The command will accept source and destination IDs, handling various scenarios including moving tasks to become subtasks, subtasks to become tasks, and subtasks between different parents. The implementation will handle edge cases such as invalid ids, non-existent parents, circular dependencies, and will properly update all dependencies.
|
|
|
|
# Test Strategy:
|
|
Testing will follow a three-tier approach: 1) Unit tests for core functionality including moving tasks to subtasks, subtasks to tasks, subtasks between parents, dependency handling, and validation error cases; 2) Integration tests for the direct function with mock MCP environment and task file regeneration; 3) End-to-end tests for the full MCP tool call path. This will verify all scenarios including moving a task to a new id, moving a subtask under a different parent while preserving its hierarchy, and handling errors for invalid operations.
|
|
|
|
# Subtasks:
|
|
## 1. Design and implement core move logic [done]
|
|
### Dependencies: None
|
|
### Description: Create the fundamental logic for moving tasks and subtasks within the task management system hierarchy
|
|
### Details:
|
|
Implement the core logic function in scripts/modules/task-manager/move-task.js with the signature that accepts tasksPath, sourceId, destinationId, and generateFiles parameters. Develop functions to handle all movement operations including task-to-subtask, subtask-to-task, and subtask-to-subtask conversions. Implement validation for source and destination IDs, and ensure proper updating of parent-child relationships and dependencies.
|
|
|
|
## 2. Implement edge case handling [done]
|
|
### Dependencies: 91.1
|
|
### Description: Develop robust error handling for all potential edge cases in the move operation
|
|
### Details:
|
|
Create validation functions to detect invalid task IDs, non-existent parent tasks, and circular dependencies. Handle special cases such as moving a task to become the first/last subtask, reordering within the same parent, preventing moving a task to itself, and preventing moving a parent to its own subtask. Implement proper error messages and status codes for each edge case, and ensure system stability if a move operation fails.
|
|
|
|
## 3. Update CLI interface for move commands [done]
|
|
### Dependencies: 91.1
|
|
### Description: Extend the command-line interface to support the new move functionality with appropriate flags and options
|
|
### Details:
|
|
Create the Direct Function Wrapper in mcp-server/src/core/direct-functions/move-task.js to adapt the core logic for MCP, handling path resolution and parameter validation. Implement silent mode to prevent console output interfering with JSON responses. Create the MCP Tool in mcp-server/src/tools/move-task.js that exposes the functionality to Cursor, handles project root resolution, and includes proper Zod parameter definitions. Update MCP tool definition in .cursor/mcp.json and register the tool in mcp-server/src/tools/index.js.
|
|
|
|
## 4. Ensure data integrity during moves [done]
|
|
### Dependencies: 91.1, 91.2
|
|
### Description: Implement safeguards to maintain data consistency and update all relationships during move operations
|
|
### Details:
|
|
Implement dependency handling logic to update dependencies when converting between task/subtask, add appropriate parent dependencies when needed, and validate no circular dependencies are created. Create transaction-like operations to ensure atomic moves that either complete fully or roll back. Implement functions to update all affected task relationships after a move, and add verification steps to confirm data integrity post-move.
|
|
|
|
## 5. Create comprehensive test suite [done]
|
|
### Dependencies: 91.1, 91.2, 91.3, 91.4
|
|
### Description: Develop and execute tests covering all move scenarios and edge cases
|
|
### Details:
|
|
Create unit tests for core functionality including moving tasks to subtasks, subtasks to tasks, subtasks between parents, dependency handling, and validation error cases. Implement integration tests for the direct function with mock MCP environment and task file regeneration. Develop end-to-end tests for the full MCP tool call path. Ensure tests cover all identified edge cases and potential failure points, and verify data integrity after moves.
|
|
|
|
## 6. Export and integrate the move function [done]
|
|
### Dependencies: 91.1
|
|
### Description: Ensure the move function is properly exported and integrated with existing code
|
|
### Details:
|
|
Export the move function in scripts/modules/task-manager.js. Update task-master-core.js to include the direct function. Reuse validation logic from add-subtask.js and remove-subtask.js where appropriate. Follow silent mode implementation pattern from other direct functions and match parameter naming conventions in MCP tools.
|
|
|