11 KiB
description, allowed-tools, argument-hint
| description | allowed-tools | argument-hint | |||
|---|---|---|---|---|---|
| Update Implementation Checklist items in Linear issue description |
|
<linear-issue-id> |
Update Checklist: $1
Updating Implementation Checklist directly in the Linear issue description.
🚨 CRITICAL: Safety Rules
READ FIRST: $CCPM_COMMANDS_DIR/SAFETY_RULES.md
NEVER submit, post, or update anything to Jira, Confluence, BitBucket, or Slack without explicit user confirmation.
- ✅ Linear operations are permitted (our internal tracking)
- ⛔ External PM systems require user confirmation for write operations
Checklist Update Workflow
Step 1: Fetch Linear Issue
Use Linear MCP to get issue: $1
Extract:
- Full description (markdown)
- Current status
- Title
Step 2: Parse Checklist from Description
Look for the Implementation Checklist section in the description using these markers:
Pattern 1: Marker Comments (Preferred)
<!-- ccpm-checklist-start -->
- [ ] Task 1: Description
- [x] Task 2: Description (completed)
- [ ] Task 3: Description
<!-- ccpm-checklist-end -->
Pattern 2: Header-Based (Fallback)
## ✅ Implementation Checklist
- [ ] Task 1
- [ ] Task 2
...
(until next ## header or end of content)
Parsing Logic:
- Search for
<!-- ccpm-checklist-start -->marker - If found, extract all lines between start and end markers
- If not found, look for "## ✅ Implementation Checklist" or similar headers
- Extract all checklist items (lines starting with
- [ ]or- [x]) - Parse each item to extract:
- Index (0-based position)
- Status (checked or unchecked)
- Content (the text after the checkbox)
Edge Cases:
- No checklist found → Display warning, offer to skip
- Corrupted format → Attempt recovery, show warning
- Multiple checklists → Use marker comments to identify the right one
- Empty checklist → Display error
Step 3: Display Current Checklist
Show current state with indices:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 Current Implementation Checklist ($1)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Progress: X% (Y/Z completed)
0. [ ] Task 1: Description
1. [x] Task 2: Description ✅
2. [ ] Task 3: Description
3. [ ] Task 4: Description
4. [x] Task 5: Description ✅
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Step 4: Choose Update Mode
First, ask user if they want to mark items complete or rollback (uncheck) items:
Use AskUserQuestion:
{
questions: [
{
question: "What would you like to do with the checklist?",
header: "Action",
multiSelect: false,
options: [
{
label: "Mark items complete",
description: "Check off completed tasks (default)"
},
{
label: "Rollback items",
description: "Uncheck incorrectly marked items"
}
]
}
]
}
Step 5: Interactive Selection
If "Mark items complete" selected:
Use AskUserQuestion with multi-select to let user choose which items to check:
{
questions: [
{
question: "Which checklist items did you complete? (Select all that apply)",
header: "Completed",
multiSelect: true,
options: [
{
label: "0: Task 1: Description",
description: "Mark this task as complete"
},
{
label: "2: Task 3: Description",
description: "Mark this task as complete"
},
{
label: "3: Task 4: Description",
description: "Mark this task as complete"
}
// Only show UNCHECKED items
]
}
]
}
If "Rollback items" selected:
Use AskUserQuestion with multi-select to let user choose which items to uncheck:
{
questions: [
{
question: "Which items were incorrectly marked complete? (Select all to rollback)",
header: "Rollback",
multiSelect: true,
options: [
{
label: "1: Task 2: Description",
description: "Uncheck this item (mark incomplete)"
},
{
label: "4: Task 5: Description",
description: "Uncheck this item (mark incomplete)"
}
// Only show CHECKED items
]
}
]
}
Parse user selections:
- Extract indices from selected options (first number before ":")
- Store as array of indices
- Store mode: "complete" or "rollback"
Step 6: Update Checklist via Linear Operations Subagent
Use the Task tool to update the checklist:
Invoke the ccpm:linear-operations subagent:
- Tool: Task
- Subagent: ccpm:linear-operations
- Prompt:
operation: update_checklist_items params: issue_id: "{issue ID from step 1}" indices: [{selected indices from step 5}] mark_complete: {true if mode is "complete", false if mode is "rollback"} add_comment: true # Document the change with a comment update_timestamp: true context: command: "utils:update-checklist" purpose: "Manual checklist update by user"
This operation will:
- Use shared checklist helpers (
_shared-checklist-helpers.md) for parsing - Update the specified checkbox states (✓ or uncheck)
- Recalculate progress percentage automatically
- Update the progress line with current timestamp
- Add a comment documenting the changes
- Return structured result with before/after progress
Example response:
success: true
data:
checklist_summary:
items_updated: 2
previous_progress: 20
new_progress: 60
completed: 3
total: 5
changed_items:
- index: 1
content: "Task 2: Description"
previous_state: unchecked
new_state: checked
metadata:
duration_ms: 320
used_shared_helpers: true
Step 7: Display Confirmation
Show success message with details
Timestamp: [current date/time]
**If mode is "rollback":**
```markdown
## 🔄 Checklist Rollback
**Progress**: X% → Y% (-Z%)
**Unmarked Items** (marked incomplete):
- ⏪ Task 2: Description
- ⏪ Task 3: Description
**Reason**: Incorrectly marked complete, rolling back for accuracy
**Timestamp**: [current date/time]
- Track version history in comment:
- Include previous state
- Include new state
- Record who made the change and why
Step 8: Display Confirmation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Checklist Updated Successfully!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 Issue: $1
🔗 Linear: [issue URL]
📊 Progress: X% → Y% (+Z%)
✅ Marked Complete (N items):
• Task 2: Description
• Task 3: Description
📝 Updated in Linear:
✅ Issue description updated
✅ Progress comment added
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 Next Actions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. ⭐ Continue Implementation
/ccpm:implementation:next $1
2. Sync Progress
/ccpm:implementation:sync $1
3. Run Quality Checks
/ccpm:verification:check $1
4. View Updated Status
/ccpm:utils:status $1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Helper Functions (Inline Logic)
Parse Checklist
Pseudocode:
1. Get description text
2. Find start marker: <!-- ccpm-checklist-start -->
3. Find end marker: <!-- ccpm-checklist-end -->
4. If markers found:
- Extract lines between markers
5. Else:
- Find "## ✅ Implementation Checklist" or "## Implementation Checklist"
- Extract lines until next ## header
6. Filter lines that match: /^- \[([ x])\] (.+)$/
7. Parse each line:
- Extract checkbox state: [ ] or [x]
- Extract content after checkbox
- Store index, state, content
8. Return array of checklist items
Calculate Completion
Pseudocode:
1. Count total items
2. Count checked items (- [x])
3. Calculate percentage: (checked / total) * 100
4. Round to nearest integer
5. Return percentage and counts
Update Checklist Items
Pseudocode:
1. Get current description
2. Parse checklist (get start/end positions)
3. For each index in indices_to_complete:
- Find line in checklist section
- Replace "- [ ]" with "- [x]"
4. Calculate new completion %
5. Find or create progress line
6. Update progress line with new %
7. Add/update timestamp
8. Return modified description
Rollback Capability (Built-in)
The rollback feature is now fully integrated into the main workflow (Step 4):
Features:
- ✅ Two-mode operation: Complete or Rollback
- ✅ Rollback shows only checked items
- ✅ Complete shows only unchecked items
- ✅ Version history tracked in comments
- ✅ Clear reasoning documented
Use Cases:
- Accidentally marked wrong item complete
- Item thought complete but needs more work
- Task requirements changed, no longer complete
- Quality issues discovered after marking complete
Examples
Example 1: Mark Multiple Items Complete
/ccpm:utils:update-checklist PSN-26
Interactive Flow:
Current Progress: 20% (1/5 completed)
Which items did you complete?
[x] 0: Create checklist parser functions
[ ] 2: Modify /ccpm:implementation:sync
[ ] 3: Modify /ccpm:implementation:update
→ User selects items 0 and 2
✅ Updated! Progress: 20% → 60% (+40%)
Example 2: No Changes Needed
/ccpm:utils:update-checklist PSN-26
Interactive Flow:
Current Progress: 100% (5/5 completed)
All items complete! ✅
No changes needed.
Example 3: Rollback Mistake
/ccpm:utils:update-checklist PSN-26
Interactive Flow:
What would you like to do?
( ) Mark items complete
(●) Rollback items
Which items were incorrectly marked complete?
[x] 3: Modify /ccpm:implementation:update
[x] 4: Modify /ccpm:verification:check
→ User selects items 3 and 4
✅ Rolled back! Progress: 80% → 40% (-40%)
Comment added:
"🔄 Checklist Rollback
Unmarked: Task 3, Task 4
Reason: Incorrectly marked complete, rolling back for accuracy"
Notes
- Idempotent: Running multiple times is safe
- Atomic: Either all updates succeed or none
- Tracked: Every change creates a comment for history
- Visible: Progress visible in description, not just comments
- Flexible: Works with or without marker comments
Integration with Other Commands
This command provides the core checklist update logic that other commands can reference:
/ccpm:implementation:sync- Auto-suggest completed items based on git diff/ccpm:implementation:update- Update specific item by index/ccpm:verification:check- Check completion % before verification/ccpm:complete:finalize- Require 100% before finalization