| name | update-dependent-tasks |
| description | Automatically unblock tasks when dependencies are satisfied |
| allowed-tools | Bash, Read, Edit |
Update Dependent Tasks Skill
Purpose: Automatically update BLOCKED tasks to READY when all their dependencies are satisfied, preventing tasks from remaining unnecessarily blocked.
Performance: Automates dependency management, prevents stale BLOCKED tasks, improves workflow visibility
When to Use This Skill
✅ Use update-dependent-tasks When:
- After completing and archiving a task
- After updating changelog.md with completed task
- In COMPLETE → CLEANUP transition
- Want to unblock dependent tasks automatically
❌ Do NOT Use When:
- Task not yet completed
- Task not yet in changelog.md
- No tasks have dependencies
- Not using dependency tracking in todo.md
What This Skill Does
1. Finds BLOCKED Tasks
# Searches todo.md for:
- [ ] **BLOCKED:** `task-name`
- **Dependencies**: A0, A1, A2
2. Checks Dependencies
# For each dependency:
- Checks if dependency in changelog.md
- If in changelog: Dependency satisfied ✅
- If not in changelog: Dependency pending ❌
3. Updates Task Status
# If ALL dependencies satisfied:
BEFORE: - [ ] **BLOCKED:** `task-name`
AFTER: - [ ] **READY:** `task-name`
4. Updates Dependency List
# Marks which dependencies complete:
BEFORE: - **Dependencies**: A0, A1, A2
AFTER: - **Dependencies**: A0 ✅ COMPLETE, A1 ✅ COMPLETE, A2 ✅ COMPLETE
5. Reports Changes
## Dependency Update Results
### Unblocked Tasks:
- `implement-line-length-formatter` (dependencies: A0 ✅, A1 ✅)
- `implement-import-organization` (dependencies: A0 ✅, A1 ✅)
### Still Blocked Tasks:
- `implement-advanced-formatter` (waiting for: A3)
Usage
Basic Update
# After completing task A1
COMPLETED_TASK="implement-index-overlay-parser"
/workspace/main/.claude/scripts/update-dependent-tasks.sh \
--completed-task "$COMPLETED_TASK"
Update All Dependencies
# Check all BLOCKED tasks, update any now ready
/workspace/main/.claude/scripts/update-dependent-tasks.sh \
--check-all true
Dependency Tracking Format
Todo.md Entry Format
- [ ] **BLOCKED:** `implement-line-length-formatter`
- **Dependencies**: A0 (styler-formatter-api module), A1 (parser for AST)
- **Description**: Format line length according to rules
Components:
- Status:
BLOCKED(will change toREADYwhen satisfied) - Task name: Backtick-wrapped identifier
- Dependencies: Comma-separated list of task identifiers
- Description: Optional task description
Dependency Specification
Dependencies: A0, A1, A2
Dependencies: implement-api, implement-tests
Dependencies: A0 (module setup), A1 (parser core)
Formats:
- Short identifiers:
A0, A1, A2 - Full task names:
implement-api, implement-tests - With descriptions:
A0 (module setup), A1 (parser core)
Workflow Integration
Complete → Cleanup Flow
COMPLETE state
↓
Merge task to main
↓
Update todo.md (mark complete)
↓
Update changelog.md (add entry)
↓
[update-dependent-tasks skill] ← THIS SKILL
↓
Find BLOCKED tasks
↓
Check if dependencies satisfied
↓
Update BLOCKED → READY if satisfied
↓
Commit updated todo.md
↓
Continue with cleanup
Example Scenario
Initial State
todo.md:
- [ ] **BLOCKED:** `implement-line-length-formatter`
- **Dependencies**: A0 (styler-formatter-api module), A1 (parser for AST)
- **Description**: Format line length according to rules
- [ ] **BLOCKED:** `implement-import-organization`
- **Dependencies**: A0 (styler-formatter-api module), A1 (parser for AST)
- **Description**: Organize imports according to rules
- [ ] **BLOCKED:** `implement-advanced-formatter`
- **Dependencies**: A1 (parser for AST), A3 (semantic analyzer)
- **Description**: Advanced formatting with semantic analysis
changelog.md:
## [2025-11-01] - A0-styler-formatter-api
- Created formatter API module
- Defined FormattingRule interface
## [2025-11-10] - A1-implement-index-overlay-parser
- Implemented parser with index overlay
- Added AST generation
After Running Skill
Completed Task: A1 (implement-index-overlay-parser)
Analysis:
implement-line-length-formatter: Needs A0 ✅, A1 ✅ → UNBLOCKimplement-import-organization: Needs A0 ✅, A1 ✅ → UNBLOCKimplement-advanced-formatter: Needs A1 ✅, A3 ❌ → STAY BLOCKED
Updated todo.md:
- [ ] **READY:** `implement-line-length-formatter`
- **Dependencies**: A0 ✅ COMPLETE, A1 ✅ COMPLETE
- **Description**: Format line length according to rules
- [ ] **READY:** `implement-import-organization`
- **Dependencies**: A0 ✅ COMPLETE, A1 ✅ COMPLETE
- **Description**: Organize imports according to rules
- [ ] **BLOCKED:** `implement-advanced-formatter`
- **Dependencies**: A1 ✅ COMPLETE, A3 (semantic analyzer)
- **Description**: Advanced formatting with semantic analysis
Report:
=== DEPENDENCY UPDATE RESULTS ===
Unblocked Tasks: 2
- implement-line-length-formatter (A0, A1 complete)
- implement-import-organization (A0, A1 complete)
Still Blocked Tasks: 1
- implement-advanced-formatter (waiting for: A3)
Updated todo.md with changes.
Output Format
Script returns JSON:
{
"status": "success",
"message": "Dependent tasks updated successfully",
"completed_task": "A1-implement-index-overlay-parser",
"checked_tasks": 3,
"unblocked_tasks": [
{
"task_name": "implement-line-length-formatter",
"dependencies": ["A0", "A1"],
"all_satisfied": true,
"new_status": "READY"
},
{
"task_name": "implement-import-organization",
"dependencies": ["A0", "A1"],
"all_satisfied": true,
"new_status": "READY"
}
],
"still_blocked_tasks": [
{
"task_name": "implement-advanced-formatter",
"dependencies": ["A1", "A3"],
"satisfied": ["A1"],
"pending": ["A3"],
"status": "BLOCKED"
}
],
"todo_md_updated": true,
"timestamp": "2025-11-11T12:34:56-05:00"
}
Safety Features
Validation
- ✅ Verifies todo.md exists and readable
- ✅ Validates changelog.md exists
- ✅ Checks dependency format correct
- ✅ Confirms all dependencies specified
Conservative Updates
- ✅ Only updates when ALL dependencies satisfied
- ✅ Preserves task order in todo.md
- ✅ Maintains task descriptions
- ✅ Keeps formatting intact
Atomic Changes
- ✅ Edits todo.md atomically
- ✅ Commits changes separately
- ✅ Rollback on error
- ✅ Preserves backup if update fails
Related Skills
- archive-task: Adds task to changelog (prerequisite)
- task-cleanup: Runs after dependency updates
Troubleshooting
Error: "Dependency not found in changelog"
# Dependency listed but not in changelog.md
# Possible causes:
1. Task completed but not archived
2. Dependency identifier mismatch
3. Changelog.md not up to date
# Fix:
1. Check if task actually complete
2. Verify dependency identifier matches changelog entry
3. Run archive-task if missing
Error: "Invalid dependency format"
# Dependency list format incorrect
# Expected: "Dependencies: A0, A1, A2"
# Found: "Depends on: A0 and A1"
# Fix: Update todo.md to use standard format
- **Dependencies**: A0, A1, A2
Task Not Unblocked
# Task expected to unblock but didn't
# Check:
1. All dependencies in changelog?
grep "A0\|A1\|A2" changelog.md
2. Dependency list complete?
grep -A 2 "BLOCKED.*task-name" todo.md
3. Task status correct?
grep "task-name" todo.md
# If all dependencies satisfied, manually update:
sed -i 's/BLOCKED:/READY:/' todo.md
Common Patterns
Pattern 1: Linear Dependencies
A0 → A1 → A2 → A3
After A1 completes:
- A2 unblocked (depends only on A1)
- A3 remains blocked (depends on A2)
Pattern 2: Fan-Out Dependencies
A0
/ | \
B1 B2 B3
After A0 completes:
- B1, B2, B3 all unblocked (all depend only on A0)
Pattern 3: Fan-In Dependencies
A1 A2 A3
\ | /
B0
After A1 and A2 complete:
- B0 remains blocked (still waiting for A3)
After A3 completes:
- B0 unblocked (all dependencies satisfied)
Pattern 4: Diamond Dependencies
A0
/ \
A1 A2
\ /
B0
After A0 completes:
- A1, A2 unblocked
After A1 completes:
- B0 remains blocked (waiting for A2)
After A2 completes:
- B0 unblocked (both A1 and A2 complete)
Best Practices
Clear Dependency Identifiers
✅ GOOD: Unique, consistent
- Dependencies: A0, A1, A2
- Dependencies: implement-api, implement-tests
❌ BAD: Ambiguous, inconsistent
- Dependencies: the API thing, parser
Minimal Dependencies
✅ GOOD: Only true dependencies
Dependencies: A0 (API interface needed)
❌ BAD: Nice-to-have
Dependencies: A0 (API), B5 (would be nice to have)
Keep Dependencies Updated
# After completing task, check for dependents
./update-dependent-tasks.sh --check-all
# After updating todo.md structure, verify dependencies
grep -A 2 "BLOCKED:" todo.md
Implementation Notes
The update-dependent-tasks script performs:
Discovery Phase
- Read todo.md
- Find all BLOCKED tasks
- Extract dependency lists
- Parse dependency identifiers
Validation Phase
- Read changelog.md
- Extract completed task identifiers
- Build set of satisfied dependencies
Analysis Phase
- For each BLOCKED task:
- Get dependency list
- Check each dependency against changelog
- Determine if all satisfied
- For each BLOCKED task:
Update Phase
- For tasks with all dependencies satisfied:
- Update BLOCKED → READY
- Mark dependencies as ✅ COMPLETE
- Preserve task structure
- For tasks with all dependencies satisfied:
Commit Phase
- Write updated todo.md
- Verify changes applied
- Commit changes
- Report results
Reporting Phase
- List unblocked tasks
- List still-blocked tasks
- Show pending dependencies
- Return JSON summary