260 lines
9.2 KiB
Markdown
260 lines
9.2 KiB
Markdown
---
|
|
description: Show progress report across all tasks in a project
|
|
allowed-tools: [LinearMCP]
|
|
argument-hint: <project>
|
|
---
|
|
|
|
# Progress Report for Project: $1
|
|
|
|
Generating comprehensive progress report for **$1** project.
|
|
|
|
## 🚨 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 (internal tracking)
|
|
- ⛔ **External PM systems** require user confirmation for write operations
|
|
|
|
## Project Context
|
|
|
|
**Project Mapping**:
|
|
|
|
- **my-app** → Linear Team: "Work", Project: "My App"
|
|
- **my-project** → Linear Team: "Work", Project: "My Project"
|
|
- **personal-project** → Linear Team: "Personal", Project: "Personal Project"
|
|
|
|
## Workflow
|
|
|
|
### Step 1: Fetch All Issues for Project
|
|
|
|
Use **Linear MCP** to:
|
|
|
|
1. List all issues for the project ($1)
|
|
2. Include: Backlog, Planning, In Progress, Verification, Done (recent)
|
|
3. Exclude: Canceled, archived (unless requested)
|
|
4. Get full details: status, labels, assignee, checklist progress, dates
|
|
|
|
### Step 2: Categorize and Analyze
|
|
|
|
Group issues by status:
|
|
|
|
```javascript
|
|
const categories = {
|
|
backlog: issues.filter(i => i.status === 'Backlog'),
|
|
planning: issues.filter(i => i.status === 'Planning'),
|
|
inProgress: issues.filter(i => i.status === 'In Progress'),
|
|
verification: issues.filter(i => i.status === 'Verification'),
|
|
blocked: issues.filter(i => i.labels.includes('blocked')),
|
|
done: issues.filter(i => i.status === 'Done' && withinLast7Days(i))
|
|
}
|
|
```
|
|
|
|
Calculate statistics:
|
|
|
|
```javascript
|
|
const stats = {
|
|
total: issues.length,
|
|
byStatus: Object.keys(categories).map(k => ({
|
|
status: k,
|
|
count: categories[k].length,
|
|
percentage: (categories[k].length / issues.length * 100).toFixed(1)
|
|
})),
|
|
avgCompletionTime: calculateAvgTime(categories.done),
|
|
totalSubtasks: sumAllSubtasks(issues),
|
|
completedSubtasks: sumCompletedSubtasks(issues),
|
|
blockedCount: categories.blocked.length
|
|
}
|
|
```
|
|
|
|
### Step 3: Display Report
|
|
|
|
```
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📊 Progress Report: $1
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
📅 Report Date: [Current Date]
|
|
🏢 Project: $1
|
|
📈 Total Issues: [N]
|
|
✅ Overall Progress: [X]% ([Y] of [Z] subtasks complete)
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📋 Status Breakdown
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
📦 Backlog: [N] issues ([%]%)
|
|
📝 Planning: [N] issues ([%]%)
|
|
⏳ In Progress: [N] issues ([%]%)
|
|
🔍 Verification: [N] issues ([%]%)
|
|
🚫 Blocked: [N] issues ([%]%) ⚠️
|
|
✅ Done (7d): [N] issues ([%]%)
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
⚠️ Blocked Issues (Needs Attention!)
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
[If blocked issues exist, list them:]
|
|
|
|
1. [WORK-123]: [Title]
|
|
Status: [Status]
|
|
Blocked: [Duration]
|
|
Action: /ccpm:verification:fix WORK-123
|
|
|
|
2. [WORK-124]: [Title]
|
|
Status: [Status]
|
|
Blocked: [Duration]
|
|
Action: /ccpm:verification:fix WORK-124
|
|
|
|
[Or if none:]
|
|
✅ No blocked issues!
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
🏃 In Progress Issues
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
[For each in-progress issue:]
|
|
|
|
1. [WORK-125]: [Title]
|
|
Progress: [X/Y] subtasks ([%]%)
|
|
Time in progress: [Duration]
|
|
Next: /ccpm:implementation:next WORK-125
|
|
|
|
2. [WORK-126]: [Title]
|
|
Progress: [X/Y] subtasks ([%]%)
|
|
Time in progress: [Duration]
|
|
Next: /ccpm:implementation:next WORK-126
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📝 Planning Issues (Ready to Start)
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
[For each planning issue:]
|
|
|
|
1. [WORK-127]: [Title]
|
|
Checklist: [N] subtasks
|
|
Ready: /ccpm:implementation:start WORK-127
|
|
|
|
2. [WORK-128]: [Title]
|
|
Checklist: [N] subtasks
|
|
Ready: /ccpm:implementation:start WORK-128
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
🔍 Verification Issues (Almost Done!)
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
[For each verification issue:]
|
|
|
|
1. [WORK-129]: [Title]
|
|
Time in verification: [Duration]
|
|
Next: /ccpm:verification:verify WORK-129
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
✅ Recently Completed (Last 7 Days)
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
[For each done issue:]
|
|
|
|
1. [WORK-130]: [Title]
|
|
Completed: [Date]
|
|
Time to complete: [Duration]
|
|
|
|
2. [WORK-131]: [Title]
|
|
Completed: [Date]
|
|
Time to complete: [Duration]
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📈 Insights
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
⚡ Velocity: [N] issues completed in last 7 days
|
|
⏱️ Avg Completion Time: [X] days
|
|
🎯 Focus: [Most common status - where work is concentrated]
|
|
🚨 Attention Needed: [Number] blocked, [Number] in verification too long
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
```
|
|
|
|
### Step 4: Interactive Next Actions
|
|
|
|
**READ**: ``$CCPM_COMMANDS_DIR/_shared-linear-helpers.md``
|
|
|
|
Use **AskUserQuestion** tool:
|
|
|
|
```javascript
|
|
{
|
|
questions: [{
|
|
question: "What would you like to do next?",
|
|
header: "Next Action",
|
|
multiSelect: false,
|
|
options: [
|
|
{
|
|
label: "Work on Blocked Issues",
|
|
description: `Fix ${blockedCount} blocked issues`
|
|
},
|
|
{
|
|
label: "Continue In-Progress",
|
|
description: `Work on ${inProgressCount} active tasks`
|
|
},
|
|
{
|
|
label: "Start New Task",
|
|
description: "Start one of the planning tasks"
|
|
},
|
|
{
|
|
label: "Create New Issue",
|
|
description: "Create and plan a new task (/ccpm:planning:create)"
|
|
}
|
|
]
|
|
}]
|
|
}
|
|
```
|
|
|
|
**Execute based on choice**:
|
|
|
|
- If "Work on Blocked Issues" → Show blocked issues and ask which to fix
|
|
- If "Continue In-Progress" → Show in-progress issues and ask which to work on
|
|
- If "Start New Task" → Show planning issues and ask which to start
|
|
- If "Create New Issue" → Prompt for title and run `/ccpm:planning:create`
|
|
- If "Other" → Show quick commands and exit
|
|
|
|
```
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📝 Quick Commands
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Create Task: /ccpm:planning:create "<title>" $1
|
|
View Task: /ccpm:utils:status <issue-id>
|
|
Context: /ccpm:utils:context <issue-id>
|
|
Refresh: /ccpm:utils:report $1
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
```
|
|
|
|
## Notes
|
|
|
|
### Report Scope
|
|
|
|
- Shows all active work in the project
|
|
- Highlights blockers and issues needing attention
|
|
- Provides quick actions for each category
|
|
- Calculates velocity and insights
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
# For external PM projects
|
|
/ccpm:utils:report my-app
|
|
/ccpm:utils:report my-project
|
|
|
|
# For internal projects
|
|
/ccpm:utils:report personal-project
|
|
```
|
|
|
|
### Refresh Frequency
|
|
|
|
- Run anytime to see current project state
|
|
- Especially useful at start of day
|
|
- Or when planning next work
|
|
- Or in team standups
|