4.8 KiB
4.8 KiB
description, category, tools, model, version, status
| description | category | tools | model | version | status |
|---|---|---|---|---|---|
| Review cycle progress and identify blockers using Linearis and GitHub | project-task-management | Bash(linearis *), Bash(gh *), Read, Write, TodoWrite | inherit | 1.0.0 | placeholder |
Cycle Review
Status: Placeholder for v1.0 - Full implementation coming in future release
Planned Functionality
This command will help you review cycle progress by:
- Fetching active cycle details
- Calculating completion percentage by status
- Identifying blocked tickets
- Generating velocity metrics
- Creating cycle summary report
Current Workaround
Use Linearis CLI directly:
# Get active cycle with tickets
linearis cycles read "Sprint 2025-10" --team TEAM
# List tickets by status (use cycles read to get all issues, then filter)
linearis cycles read "Sprint 2025-10" --team TEAM | \
jq '.issues[] | select(.state.name == "In Progress")'
linearis cycles read "Sprint 2025-10" --team TEAM | \
jq '.issues[] | select(.state.name == "Done")'
# Calculate completion manually (count tickets)
Example Workflow
# 1. Get active cycle info
CYCLE=$(linearis cycles list --team ENG --active | jq -r '.[0].name')
echo "Active cycle: $CYCLE"
# 2. Get all tickets in cycle
linearis issues list --team ENG | \
jq --arg cycle "$CYCLE" '.[] | select(.cycle.name == $cycle)'
# 3. Count by status (use cycles read to get issues)
CYCLE_DATA=$(linearis cycles read "$CYCLE" --team ENG)
echo "Backlog:"
echo "$CYCLE_DATA" | jq '[.issues[] | select(.state.name == "Backlog")] | length'
echo "In Progress:"
echo "$CYCLE_DATA" | jq '[.issues[] | select(.state.name == "In Progress")] | length'
echo "Done:"
echo "$CYCLE_DATA" | jq '[.issues[] | select(.state.name == "Done")] | length'
# 4. Calculate completion percentage
# total_tickets = backlog + in_progress + done
# completion = (done / total_tickets) * 100
# 5. Find blocked tickets (use cycles read)
linearis cycles read "$CYCLE" --team ENG | \
jq '.issues[] | select(.state.name == "Blocked") | {id, title, blockedReason}'
# 6. Review PRs merged during cycle
# Get cycle start date (example: 2 weeks ago)
CYCLE_START=$(date -v-14d +%Y-%m-%d)
# List all PRs merged during cycle
gh pr list --state merged --search "merged:>=$CYCLE_START" \
--json number,title,author,mergedAt --jq \
'.[] | "\(.mergedAt | split("T")[0]) - \(.author.login): \(.title)"'
# 7. Identify active contributors
gh pr list --state merged --search "merged:>=$CYCLE_START" \
--json author --jq '[.[].author.login] | group_by(.) | map({author: .[0], count: length}) | sort_by(-.count)'
# 8. Check open PRs (work in progress)
gh pr list --state open --json number,title,author,createdAt,isDraft | \
jq '.[] | {author: .author.login, title, days_open: ((now - (.createdAt | fromdateiso8601)) / 86400 | floor), draft: .isDraft}'
# 9. Find work without Linear tickets
# Compare PR titles with Linear ticket IDs (TEAM-XXX pattern)
gh pr list --state merged --search "merged:>=$CYCLE_START" \
--json number,title --jq '.[] | select(.title | test("TEAM-[0-9]+") | not) | {number, title}'
Future Implementation
When fully implemented, this command will:
- Automated metrics - Calculate completion, velocity, cycle time
- Status breakdown - Show tickets grouped by status with percentages
- Blocker identification - Highlight blocked tickets with reasons
- Trend analysis - Compare to previous cycles
- Risk assessment - Identify at-risk tickets (large, old, no progress)
- PR-based activity tracking - Analyze GitHub PR data to:
- Identify who completed what work during the cycle
- Find work done without Linear tickets (untracked work)
- Calculate actual velocity based on merged PRs
- Show contributor activity breakdown
- Flag stale PRs that need attention
- Work reconciliation - Match PRs to Linear tickets, flag mismatches
- Team contribution report - Show per-person breakdown of PRs and tickets
- Summary generation - Create review document in thoughts/
- Burndown visualization - Show progress over time (text-based chart)
Track progress at: https://github.com/coalesce-labs/catalyst/issues
Configuration
Uses .claude/config.json:
{
"linear": {
"teamKey": "ENG",
"defaultTeam": "Backend"
}
}
Tips
- Review mid-cycle to course-correct
- Review end-of-cycle for retrospectives
- Track blockers daily - don't wait for review
- Compare velocity across cycles for capacity planning
- Document lessons learned for process improvement
- Celebrate wins - acknowledge team progress
- Use PR data to understand actual work:
- Merged PRs show completed work (even if not in Linear)
- Open PRs show current work in progress
- PR activity reveals team contribution patterns
- Missing ticket references indicate process gaps
- Reconcile Linear and GitHub regularly to ensure all work is tracked