285 lines
7.8 KiB
Markdown
285 lines
7.8 KiB
Markdown
---
|
|
description: Analyze cycle health and generate comprehensive report with actionable insights, risk analysis, capacity assessment, and specific recommendations
|
|
category: pm
|
|
tools: Task, Read, Write, TodoWrite
|
|
model: inherit
|
|
version: 1.0.0
|
|
---
|
|
|
|
# Analyze Cycle Command
|
|
|
|
Generates a comprehensive **health report** (not just data) for the current Linear cycle.
|
|
|
|
**Reports Include**:
|
|
- 🟢🟡🔴 Health assessment with overall status
|
|
- 📊 Progress metrics with data backing
|
|
- 🎯 Actionable takeaways (what needs attention NOW)
|
|
- 👥 Team capacity analysis (who can work on what)
|
|
- ⚠️ Risk identification (overweight, blocked, at-risk issues)
|
|
- 💡 Specific recommendations (what to do about it)
|
|
|
|
**Philosophy**: Provide insights and recommendations, not just data dumps. PMs should know exactly what action to take after reading the report.
|
|
|
|
## Prerequisites Check
|
|
|
|
First, verify all required tools and systems:
|
|
|
|
```bash
|
|
# 1. Validate thoughts system (REQUIRED)
|
|
if [[ -f "scripts/validate-thoughts-setup.sh" ]]; then
|
|
./scripts/validate-thoughts-setup.sh || exit 1
|
|
else
|
|
# Inline validation if script not found
|
|
if [[ ! -d "thoughts/shared" ]]; then
|
|
echo "❌ ERROR: Thoughts system not configured"
|
|
echo "Run: ./scripts/humanlayer/init-project.sh . {project-name}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# 2. Determine script directory with fallback
|
|
if [[ -n "${CLAUDE_PLUGIN_ROOT}" ]]; then
|
|
SCRIPT_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
|
|
else
|
|
# Fallback: resolve relative to this command file
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts"
|
|
fi
|
|
|
|
# 3. Check PM plugin prerequisites
|
|
if [[ -f "${SCRIPT_DIR}/check-prerequisites.sh" ]]; then
|
|
"${SCRIPT_DIR}/check-prerequisites.sh" || exit 1
|
|
else
|
|
echo "⚠️ Prerequisites check skipped (script not found at: ${SCRIPT_DIR})"
|
|
fi
|
|
```
|
|
|
|
## Process
|
|
|
|
### Step 1: Gather Configuration
|
|
|
|
```bash
|
|
# Determine script directory with fallback (if not already set)
|
|
if [[ -z "${SCRIPT_DIR}" ]]; then
|
|
if [[ -n "${CLAUDE_PLUGIN_ROOT}" ]]; then
|
|
SCRIPT_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
|
|
else
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts"
|
|
fi
|
|
fi
|
|
|
|
source "${SCRIPT_DIR}/pm-utils.sh"
|
|
|
|
TEAM_KEY=$(get_team_key)
|
|
CONFIG_FILE=".claude/config.json"
|
|
```
|
|
|
|
### Step 2: Spawn Research Tasks (Parallel)
|
|
|
|
Spawn multiple research agents in parallel to gather data:
|
|
|
|
**Task 1 - Get Active Cycle**:
|
|
|
|
Use Task tool with `catalyst-dev:linear-research` agent:
|
|
|
|
```
|
|
Prompt: "Get the active cycle for team ${TEAM_KEY} with all issues"
|
|
Model: haiku (fast data gathering)
|
|
```
|
|
|
|
**Task 2 - Get Team Workload**:
|
|
|
|
Use Task tool with `catalyst-dev:linear-research` agent:
|
|
|
|
```
|
|
Prompt: "List all in-progress issues for team ${TEAM_KEY}"
|
|
Model: haiku (fast data gathering)
|
|
```
|
|
|
|
**Wait for both tasks to complete**
|
|
|
|
### Step 3: Spawn Analysis Agent
|
|
|
|
Use Task tool with `cycle-analyzer` agent:
|
|
|
|
**Input**:
|
|
- Cycle data JSON from Task 1
|
|
- In-progress issues from Task 2
|
|
- Current date: $(date +%Y-%m-%d)
|
|
|
|
**Agent returns**:
|
|
Structured markdown with health assessment, risks, capacity, recommendations
|
|
|
|
### Step 4: Generate Health Report
|
|
|
|
Format the agent's analysis into a user-facing health report:
|
|
|
|
**Report Structure**:
|
|
|
|
```markdown
|
|
# Cycle Health Report: [Cycle Name]
|
|
|
|
## 🟢/🟡/🔴 Health Assessment
|
|
|
|
**Takeaway**: [One-sentence summary of cycle health and key concern]
|
|
|
|
**Current State**: [Concise statement with specific numbers]
|
|
- Progress: X% complete (Y/Z issues done)
|
|
- Time: N days remaining of M total
|
|
- Projected completion: X% (based on current velocity)
|
|
- Risk level: [Explanation]
|
|
|
|
---
|
|
|
|
## 📊 Progress Data
|
|
|
|
**Cycle**: Sprint 2025-W04 (Jan 20-26)
|
|
**Progress**: ████████░░ 45% (18/40 issues)
|
|
|
|
| Status | Count | Percentage |
|
|
|--------|-------|------------|
|
|
| ✅ Done | 18 | 45% |
|
|
| 🔄 In Progress | 12 | 30% |
|
|
| 📋 Todo | 10 | 25% |
|
|
|
|
**By Assignee**:
|
|
- Alice: 15 issues (8 done, 5 in progress, 2 todo)
|
|
- Bob: 12 issues (6 done, 4 in progress, 2 todo)
|
|
- Charlie: 8 issues (4 done, 2 in progress, 2 todo)
|
|
- Unassigned: 5 issues
|
|
|
|
---
|
|
|
|
## 👥 Team Capacity Analysis
|
|
|
|
**Available for Work**:
|
|
- Bob: 2 active issues, can take 1-2 more
|
|
- Charlie: 2 active issues, can take 1 more
|
|
|
|
**At Capacity**:
|
|
- Alice: 5 active issues (near max capacity)
|
|
|
|
**Needs Attention**:
|
|
- Dave: No active issues (assign work)
|
|
|
|
---
|
|
|
|
## ⚠️ Risks & Blockers
|
|
|
|
**🚨 Blockers** (2 issues):
|
|
- TEAM-461: External API approval (blocked 6 days)
|
|
- Owner: Alice
|
|
- Blocker: Waiting on partner team response
|
|
- TEAM-462: Dependency conflict (blocked 4 days)
|
|
- Owner: Bob
|
|
- Blocker: Upstream library bug
|
|
|
|
**⚠️ At Risk** (3 issues, >5 days in progress):
|
|
- TEAM-463: Complex refactor (7 days, Alice)
|
|
- Risk: No commits in 3 days
|
|
- TEAM-464: Database migration (6 days, Bob)
|
|
- Risk: Scope increased mid-work
|
|
- TEAM-465: API redesign (5 days, Charlie)
|
|
- Risk: Waiting on code review
|
|
|
|
---
|
|
|
|
## 💡 Recommendations
|
|
|
|
**Priority Actions** (do these today):
|
|
1. **Escalate TEAM-461** - Partner team blocking for 6 days, needs PM intervention
|
|
2. **Pair Bob with senior dev** on TEAM-462 - Dependency issue may need architectural change
|
|
3. **Check in with Alice** on TEAM-463 - 3 days no activity, may need help
|
|
|
|
**Capacity Optimization**:
|
|
1. **Assign 2 issues to Dave** from backlog (currently no active work)
|
|
2. **Assign 1 issue to Bob** once TEAM-462 unblocked (has capacity)
|
|
|
|
**Review Needed**:
|
|
1. **TEAM-464**: Scope changed mid-cycle, consider moving to next cycle
|
|
2. **TEAM-465**: Waiting on review for 2 days, expedite review process
|
|
|
|
---
|
|
|
|
## 📈 Velocity Projection
|
|
|
|
**Current Velocity**: 2.25 issues/day (18 done in 8 days)
|
|
**Remaining Work**: 22 issues
|
|
**Days Left**: 3
|
|
|
|
**Projection**: At current pace, will complete ~7 more issues = 63% total completion
|
|
|
|
**To Hit 80%**: Need to complete 14 more issues in 3 days (4.7/day) - requires addressing blockers immediately
|
|
```
|
|
|
|
### Step 5: Save Report
|
|
|
|
Write report to `thoughts/shared/reports/cycles/YYYY-MM-DD-cycle-N-status.md`
|
|
|
|
```bash
|
|
REPORT_DIR="thoughts/shared/reports/cycles"
|
|
mkdir -p "$REPORT_DIR"
|
|
|
|
REPORT_FILE="$REPORT_DIR/$(date +%Y-%m-%d)-cycle-${cycle_number}-status.md"
|
|
|
|
# Write formatted report to file
|
|
cat > "$REPORT_FILE" << EOF
|
|
# Cycle Status Report - ${cycle_name}
|
|
|
|
**Generated**: $(date +"%Y-%m-%d %H:%M")
|
|
**Cycle**: ${cycle_number} (${cycle_starts} → ${cycle_ends})
|
|
|
|
[... formatted report content ...]
|
|
EOF
|
|
|
|
echo "✅ Report saved: $REPORT_FILE"
|
|
|
|
# Update workflow context
|
|
if [[ -f "${SCRIPT_DIR}/workflow-context.sh" ]]; then
|
|
"${SCRIPT_DIR}/workflow-context.sh" add reports "$REPORT_FILE" "${TICKET_ID:-null}"
|
|
fi
|
|
```
|
|
|
|
### Step 6: Display Summary
|
|
|
|
Present concise summary to user with health assessment:
|
|
|
|
```
|
|
🟡 Cycle Health: Sprint 2025-W04 - At Risk
|
|
|
|
Takeaway: Cycle is 45% complete with 3 days remaining. We're tracking
|
|
slightly behind (projected 63% completion). Main risks: 2 blocked issues
|
|
and Dave has no assigned work.
|
|
|
|
Progress: ████████░░ 45% (18/40 issues)
|
|
Days Remaining: 3 of 10
|
|
|
|
Priority Actions:
|
|
1. Escalate TEAM-461 blocker (external dependency, 6 days)
|
|
2. Pair Bob with senior dev on TEAM-462 (dependency conflict)
|
|
3. Assign 2 backlog issues to Dave (no active work)
|
|
|
|
Status:
|
|
✅ Done: 18 | 🔄 In Progress: 12 | 📋 Todo: 10
|
|
🚨 Blocked: 2 | ⚠️ At Risk: 3 (>5 days)
|
|
|
|
Full health report: thoughts/shared/reports/cycles/2025-01-27-cycle-4-health.md
|
|
```
|
|
|
|
## Success Criteria
|
|
|
|
### Automated Verification:
|
|
- [ ] Prerequisites script passes: `./scripts/check-prerequisites.sh`
|
|
- [ ] Command executes without errors
|
|
- [ ] Report file created in expected location
|
|
- [ ] JSON parsing succeeds for all linearis output
|
|
- [ ] TodoWrite tracking works correctly
|
|
- [ ] Health assessment is data-backed
|
|
|
|
### Manual Verification:
|
|
- [ ] Health score accurately reflects cycle state
|
|
- [ ] Takeaway is clear and actionable
|
|
- [ ] Capacity analysis identifies available team members
|
|
- [ ] Recommendations are specific and prioritized
|
|
- [ ] Risk identification is meaningful
|
|
- [ ] Report guides PM to take specific action
|