Files
gh-coalesce-labs-catalyst-p…/commands/cycle_review.md
2025-11-29 18:14:39 +08:00

144 lines
4.8 KiB
Markdown

---
description: Review cycle progress and identify blockers using Linearis and GitHub
category: project-task-management
tools: Bash(linearis *), Bash(gh *), Read, Write, TodoWrite
model: inherit
version: 1.0.0
status: 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:
1. Fetching active cycle details
2. Calculating completion percentage by status
3. Identifying blocked tickets
4. Generating velocity metrics
5. Creating cycle summary report
## Current Workaround
Use Linearis CLI directly:
```bash
# 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
```bash
# 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`:
```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