--- name: gh-project-triage description: Triage project items and ensure proper status and priority assignment tools: Bash, AskUserQuestion, TodoWrite model: inherit --- # Triage GitHub Project Items This command facilitates systematic triage of project items, ensuring all items have proper priority, status, and other critical field assignments. ## Instructions ### Step 1: Initialize Triage Session Ask the user what scope of triage they want: 1. **Full Triage**: Review all items in the project 2. **Backlog Only**: Focus on Backlog status items 3. **Unprioritized**: Only items missing priority 4. **New Items**: Items added in last N days 5. **Custom Filter**: User-specified criteria ### Step 2: Gather Project Data ```bash # Get project info PROJECT_DATA=$(gh project view --owner "@me" --format json) PROJECT_ID=$(echo $PROJECT_DATA | jq -r '.id') PROJECT_TITLE=$(echo $PROJECT_DATA | jq -r '.title') # Get fields and options FIELDS=$(gh project field-list --owner "@me" --format json) # Extract field IDs STATUS_FIELD=$(echo $FIELDS | jq -r '.[] | select(.name=="Status") | .id') PRIORITY_FIELD=$(echo $FIELDS | jq -r '.[] | select(.name=="Priority") | .id') # Get field options STATUS_OPTIONS=$(echo $FIELDS | jq -r '.[] | select(.name=="Status") | .options[] | {name: .name, id: .id}') PRIORITY_OPTIONS=$(echo $FIELDS | jq -r '.[] | select(.name=="Priority") | .options[] | {name: .name, id: .id}') # Get all items ITEMS=$(gh project item-list --owner "@me" --format json --limit 100) ``` ### Step 3: Filter Items Based on Triage Scope ```bash # Example: Unprioritized items TRIAGE_ITEMS=$(echo $ITEMS | jq -r ' .items[] | select( (.fieldValues[] | select(.name=="Priority")) == null ) | { id: .id, title: .content.title, number: .content.number, type: .content.type, url: .content.url, body: .content.body, labels: .content.labels, status: (.fieldValues[] | select(.name=="Status") | .name) } ') TRIAGE_COUNT=$(echo $TRIAGE_ITEMS | jq -s 'length') ``` ### Step 4: Present Triage Summary Show user what needs triage: ```markdown ## Triage Summary **Project**: [Project Title] (#[Number]) **Scope**: [Triage scope selected] **Items to Triage**: [Count] ### Breakdown - Unprioritized: [X] - Without status: [Y] - Missing estimation: [Z] (if applicable) - No assignee: [A] (if applicable) **Proceeding with triage...** ``` ### Step 5: Interactive Triage Loop For each item requiring triage: #### A. Present Item Details ```markdown --- ## Item [current]/[total] **Title**: [Item title] **Number**: #[number] (or "draft") **Type**: [Issue/PR/Draft] **Current Status**: [Status or "Not set"] **Current Priority**: [Priority or "Not set"] **URL**: [URL if available] ### Description [First 200 chars of body...] ### Labels [List issue labels if any] ### Context Hints [Analyze title/description for priority hints:] - Contains "critical", "blocking", "urgent" → Suggests P0/P1 - Contains "bug", "error", "broken" → Suggests P1/P2 - Contains "enhancement", "feature" → Suggests P2/P3 - Contains "nice-to-have", "someday" → Suggests P3 ``` #### B. Assess Priority Use intelligent priority suggestion: ```bash # Auto-suggest priority based on keywords TITLE_LOWER=$(echo "$ITEM_TITLE" | tr '[:upper:]' '[:lower:]') BODY_LOWER=$(echo "$ITEM_BODY" | tr '[:upper:]' '[:lower:]') COMBINED="$TITLE_LOWER $BODY_LOWER" if echo "$COMBINED" | grep -qE "critical|blocking|urgent|security|production down|data loss"; then SUGGESTED_PRIORITY="P0" REASON="Critical keywords detected (blocking, security, urgent)" elif echo "$COMBINED" | grep -qE "bug|error|broken|failing|regression"; then SUGGESTED_PRIORITY="P1" REASON="Bug-related keywords detected" elif echo "$COMBINED" | grep -qE "enhancement|feature|improve"; then SUGGESTED_PRIORITY="P2" REASON="Enhancement/feature keywords detected" else SUGGESTED_PRIORITY="P3" REASON="Standard priority (no high-urgency indicators)" fi # Check issue labels for additional hints if echo "$LABELS" | grep -qE "critical|p0"; then SUGGESTED_PRIORITY="P0" REASON="Critical label found" elif echo "$LABELS" | grep -qE "bug|urgent|p1"; then SUGGESTED_PRIORITY="P1" REASON="Bug/urgent label found" fi ``` Present suggestion and ask for confirmation: ```markdown ### Suggested Priority: [P0/P1/P2/P3] **Reasoning**: [Reason based on analysis] **Priority Criteria**: - **P0 (Critical)**: Blocking issues, security vulnerabilities, data loss, production outages - **P1 (High)**: Important bugs, features affecting many users, time-sensitive work - **P2 (Medium)**: Standard enhancements, non-blocking bugs, improvements - **P3 (Low)**: Nice-to-have features, minor improvements, future work **Select Priority**: [P0/P1/P2/P3/Skip] ``` #### C. Assess Status If status is not set or needs review: ```markdown ### Current Status: [Status or "Not set"] **Recommended Status**: - **Backlog**: Not yet refined or scheduled - **Todo**: Refined and ready to start - **In Progress**: Actively being worked on - **In Review**: PR open, awaiting review - **Done**: Completed and merged/deployed **Select Status**: [Backlog/Todo/In Progress/In Review/Done/Skip] ``` #### D. Update Item Apply the selected field values: ```bash # Update priority if [ "$SELECTED_PRIORITY" != "Skip" ]; then PRIORITY_OPTION_ID=$(echo $PRIORITY_OPTIONS | jq -r ". | select(.name==\"$SELECTED_PRIORITY\") | .id") gh project item-edit --id $ITEM_ID --project-id $PROJECT_ID \ --field-id $PRIORITY_FIELD \ --single-select-option-id $PRIORITY_OPTION_ID echo "✅ Updated priority to $SELECTED_PRIORITY" fi # Update status if [ "$SELECTED_STATUS" != "Skip" ]; then STATUS_OPTION_ID=$(echo $STATUS_OPTIONS | jq -r ". | select(.name==\"$SELECTED_STATUS\") | .id") gh project item-edit --id $ITEM_ID --project-id $PROJECT_ID \ --field-id $STATUS_FIELD \ --single-select-option-id $STATUS_OPTION_ID echo "✅ Updated status to $SELECTED_STATUS" fi ``` #### E. Ask About Additional Fields If project has other important fields: ```markdown ### Additional Fields (Optional) - **Story Points**: [1/2/3/5/8/13/Skip] - **Component**: [Frontend/Backend/DevOps/Skip] - **Assignee**: [@username or Skip] - **Sprint/Iteration**: [Current/Next/Later/Skip] **Skip all additional fields?** [Yes/No] ``` ### Step 6: Batch Mode (Alternative) For experienced users or bulk triage, offer batch mode: ```markdown ## Batch Triage Mode Applying automatic prioritization based on keywords and labels... [For each item:] - #[number] [title] → Priority: P[X] (reason: [reason]) → Status: [Status] **Preview [X] changes. Proceed?** [Yes/No/Review individually] ``` ### Step 7: Generate Triage Report After completing triage: ```markdown # Triage Session Complete **Project**: [Project Title] **Duration**: [Start time - End time] **Items Processed**: [Count] --- ## Summary of Changes ### Priority Assignment - P0 (Critical): [X] items - P1 (High): [Y] items - P2 (Medium): [Z] items - P3 (Low): [A] items - Skipped: [B] items ### Status Assignment - Backlog: [X] items - Todo: [Y] items - In Progress: [Z] items - Skipped: [A] items ### Field Updates Total - [X] items updated - [Y] items skipped - [Z] items had errors --- ## Items Still Requiring Attention [If any items were skipped or errored:] - #[number] [title] - [Reason for skip/error] --- ## Project Health After Triage **Priority Coverage**: [X]% of items now have priority **Status Coverage**: [Y]% of items have appropriate status **Recommendations**: [Provide 2-3 recommendations based on triage results] --- ## Next Steps 1. **Review P0/P1 items**: Ensure critical items are scheduled 2. **Sprint planning**: Move refined items from Backlog to Todo 3. **Assign work**: Distribute items to team members 4. **Regular triage**: Schedule weekly triage sessions **View updated project**: [Project URL] ``` ## Triage Best Practices ### Priority Assessment Guidelines **P0 Criteria** (Critical - Immediate attention): - Production is down or severely degraded - Data loss or corruption risk - Security vulnerability - Blocking all users from core functionality - Legal or compliance risk **P1 Criteria** (High - This week): - Significant user impact (>25% of users) - Important feature broken - High-value customer request - Sprint commitment - Dependency for other work **P2 Criteria** (Medium - This month): - Moderate user impact - Standard feature request - Improvement to existing feature - Non-blocking bug - Technical debt with visible impact **P3 Criteria** (Low - Backlog): - Nice-to-have feature - Minor cosmetic issue - Optimization without user impact - Long-term improvements - Ideas for future exploration ### Status Assessment Guidelines **When to use Backlog**: - Item needs more information - Not yet refined or estimated - Awaiting dependencies - Future work, not committed **When to use Todo**: - Fully refined and ready to start - Acceptance criteria defined - No blockers - Can be pulled into current sprint **When to use In Progress**: - Work has actively started - Assignee is working on it - PR may or may not exist yet **When to use In Review**: - PR is open - Awaiting code review - Testing in progress - Documentation pending **When to use Done**: - Code merged - Tests passing - Deployed to production (if applicable) - Acceptance criteria met ## Automation Suggestions After triage, suggest automation rules: ```markdown ### Recommended Automation Based on this triage session, consider setting up: 1. **Auto-priority for labeled issues**: - Issues with "critical" label → P0 - Issues with "bug" label → P1 - Issues with "enhancement" label → P2 2. **Auto-status from PR state**: - When PR opens → Move to "In Review" - When PR merges → Move to "Done" 3. **Auto-archive**: - Items in "Done" for >30 days → Archive 4. **Notifications**: - Alert on new P0 items - Daily digest of P1 items in Backlog [Link to automation setup guide] ``` ## Important Notes - **Context Matters**: Item priority depends on project goals and current sprint - **Team Alignment**: Ensure team agrees on priority definitions - **Regular Cadence**: Weekly triage prevents backlog chaos - **Don't Over-Triage**: It's okay to leave P3 items rough until needed - **Save Time**: Use batch mode for obvious cases, interactive for complex items - **Document Decisions**: Add comments to items explaining priority rationale ## Definition of Done - [ ] Triage scope determined - [ ] Items fetched and filtered - [ ] Each item assessed for priority - [ ] Each item assessed for status - [ ] Field values updated successfully - [ ] Changes verified - [ ] Triage report generated - [ ] Remaining items noted - [ ] Next steps provided - [ ] Automation suggestions offered ## Error Handling - If item update fails: Log error, continue to next item, report at end - If field options missing: Alert user, skip that field for affected items - If user cancels mid-triage: Save progress, provide partial report - If API rate limit: Pause, wait, resume from last item Remember: Good triage is the foundation of effective project management. Taking time to properly prioritize and organize items saves hours of confusion and misprioritized work later.