# Triage Meeting Prep

> Prepare weekly triage meeting summary for WinAppSDK Needs-Triage issues. Use when preparing for triage meetings, reviewing Needs-Triage issues, generating diff reports since last triage, summarizing new or updated issues, or creating action item recommendations. Triggers on requests involving triage preparation, Needs-Triage review, meeting summary, triage diff, or weekly issue analysis.

- Skill: `microsoft/triage-meeting-prep` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add microsoft/triage-meeting-prep`
- Raw SKILL.md: https://api.skillmd.com/api/skills/microsoft/triage-meeting-prep/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- License: Complete terms in LICENSE.txt
- Author: Microsoft (https://skillmd.com/u/microsoft)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/microsoft/triage-meeting-prep

---


# Triage Meeting Preparation

This skill helps prepare comprehensive summaries for the twice-weekly WinAppSDK triage meetings. It focuses on issues that **actually need triage attention**:

1. **Needs-Triage WITHOUT area label** — These need area assignment (primary focus)
2. **Closed issues still labeled Needs-Triage** — These need follow-up replies

> **Note**: Open issues with both `Needs-Triage` AND an `area-*` label are **excluded** — they're already triaged and waiting for area team action.

## Research-Backed Analysis

**Every suggestion and reply is backed by research:**

| Research Type | What We Search | Why |
|---------------|----------------|-----|
| 🔍 **Similar Issues** | GitHub issue search | Find duplicates, related bugs, past fixes |
| 💻 **Codebase** | `grep_search`, `semantic_search` | Understand technical context, find workarounds |
| 📚 **Documentation** | `fetch_webpage` on MS docs | Verify known limitations, expected behavior |
| 📜 **Git History** | `git log`, `git blame` | Identify area owners, recent changes |

This ensures:
- Suggested replies are technically accurate
- Workarounds are validated against the codebase
- We reference related issues customers may have missed
- Area assignments are informed by code structure

## Key Outputs: What's Changed Since Last Triage

The skill tracks **four critical categories** for each meeting:

| Category | Description | Action Required |
|----------|-------------|-----------------|
| 🌟 **Popular Issues** | ≥5 reactions (community interest) | May need priority attention |
| 🆕 **Created This Week** | Issues created since last weekly triage | Review + assign area |
| ⏳ **Older Pending** | Older issues still without area labels | Follow up — why no action? |
| ✅ **Closed (need reply)** | Closed issues with customer follow-up | Draft reply with `[confidence:XX]` |

All suggestions include confidence scoring in `[confidence:XX]` format for easy filtering.

## When to Use This Skill

**Primary triggers** — Use this skill when:

1. **Preparing for triage meetings** — Generate a summary of issues needing area assignment
2. **Reviewing what's changed** — See the diff of issues since the last triage run
3. **Drafting customer replies** — Get research-backed suggested replies for closed issues
4. **Tracking pending items** — Identify issues that still haven't been actioned from previous meetings

**Anti-patterns** — Do NOT use this skill when:
- Reviewing a single specific issue (use `Get-IssueDetails.ps1` for individual issues)
- General issue searching without triage context
- Non-WinAppSDK repositories

## Prerequisites

- **GitHub CLI (gh)** installed and authenticated (`gh auth login`)
- Access to microsoft/WindowsAppSDK repository
- Previous triage state file for diff comparison: `Generated-Files/triageMeeting/previous-state.json`

> **Migration note**: If you have an existing `Generated Files/triageMeeting/...` directory from earlier runs, rename `Generated Files` to `Generated-Files` before using this skill, or pass explicit input/output paths to the scripts so you keep prior diff history.

### Installing GitHub CLI

```powershell
# Windows
winget install GitHub.cli

# Then authenticate
gh auth login
```

## Step-by-Step Workflow

### Workflow: Generate Triage Meeting Summary

1. **Load previous triage state** from `Generated-Files/triageMeeting/previous-state.json`
2. **Fetch current Needs-Triage issues** using the scripts:
   ```powershell
   # Get all issues needing triage (no area label)
   ./.github/skills/triage-meeting-prep/scripts/Get-TriageIssues.ps1 -NoAreaOnly -OutputFormat summary
   
   # Or get JSON for processing
   $issues = ./.github/skills/triage-meeting-prep/scripts/Get-TriageIssues.ps1 -NoAreaOnly | ConvertFrom-Json
   ```
3. **Categorize issues by creation date**:
   - 🆕 **Created This Week** — `createdAt` ≥ last weekly triage date
   - ⏳ **Older Pending** — `createdAt` < last weekly triage date
4. **Fetch area label definitions** for classification:
   ```powershell
   ./.github/skills/triage-meeting-prep/scripts/Get-RepositoryLabels.ps1 -Filter "area-*" -OutputFormat json
   ```
5. **For each no-area issue**, analyze using `Get-IssueDetails.ps1`:
   - Run: `./Get-IssueDetails.ps1 -IssueNumber <number> -OutputFormat summary`
   - Review the issue body, comments, and labels
   - **Classify the area label** by reasoning about the issue content against the area label definitions (see workflow for confidence rubric)
5. **Generate summary report** with links to each issue's `overview.md`
6. **Save current state** for next diff comparison

> **Important**: Every issue without an area label gets a review. The summary links to each review file.

## Available Scripts

The skill provides several PowerShell scripts for data fetching and analysis:

### Get-TriageIssues.ps1

Fetches all issues with the `Needs-Triage` label from the repository.

```powershell
# Get all Needs-Triage issues without area labels
./Get-TriageIssues.ps1 -NoAreaOnly -OutputFormat summary

# Get JSON output for programmatic processing
$issues = ./Get-TriageIssues.ps1 -NoAreaOnly | ConvertFrom-Json
```

**Parameters:**
- `-Repository` — Repository in 'owner/repo' format (default: microsoft/WindowsAppSDK)
- `-State` — Filter by state: 'open', 'closed', or 'all' (default: all)
- `-NoAreaOnly` — Only include issues without area-* labels
- `-Limit` — Maximum issues to fetch (default: 200)
- `-OutputFormat` — Output format: 'json', 'summary', or 'table' (default: json)

### Get-IssueDetails.ps1

Performs deep analysis of a single issue including scoring and recommendations.

```powershell
# Analyze a specific issue
./Get-IssueDetails.ps1 -IssueNumber 1234 -OutputFormat summary
```

### Get-RepositoryLabels.ps1

Fetches all label definitions from the repository including names, descriptions, and colors.

```powershell
# Get all labels
./Get-RepositoryLabels.ps1 -OutputFormat summary

# Get only area labels
./Get-RepositoryLabels.ps1 -Filter "area-*" -OutputFormat table

# Get labels from a different repository
./Get-RepositoryLabels.ps1 -Repository "microsoft/terminal" -OutputFormat json
```

**Parameters:**
- `-Repository` — Repository in 'owner/repo' format (default: microsoft/WindowsAppSDK)
- `-Filter` — Filter pattern for label names (supports wildcards like 'area-*')
- `-Limit` — Maximum labels to fetch (default: 500)
- `-OutputFormat` — Output format: 'json', 'summary', or 'table' (default: json)

**Use cases:**
- Understanding available area labels for issue categorization
- Verifying label descriptions for triage decisions
- Comparing label definitions across repositories
- Finding labels that lack descriptions

### Compare-TriageState.ps1

Compares current triage state with previous state to identify changes.

### Save-TriageState.ps1

Saves the current triage state for future comparisons.

## Output Structure

All outputs are saved to `Generated-Files/triageMeeting/<date>/`:

| File | Purpose |
|------|---------|
| `summary.md` | Main meeting document with tables linking to individual reviews |
| `previous-state.json` | State snapshot for next diff (auto-generated) |

Individual issue reviews are saved to `Generated-Files/issueReview/<issue-number>/`:

| File | Purpose |
|------|---------|
| `overview.md` | Full issue analysis with scores and suggested actions (linked from summary) |
| `implementation-plan.md` | Technical implementation details (if applicable) |

> **Key Output**: The `summary.md` includes the **Suggested Actions** section extracted from each issue's `overview.md`, with `[confidence:XX]` scores.

## Detailed Workflow

See [workflow-triage-prep.md](./references/workflow-triage-prep.md) for the complete step-by-step process.

## Issue Categories

| Category | Definition | Action Needed |
|----------|------------|---------------|
| 🌟 **Popular Issues** | ≥5 reactions (community interest) | May need priority attention |
| 🆕 **Created This Week** | `createdAt` is after last weekly triage date | Use `Get-IssueDetails.ps1` + assign area |
| ⏳ **Older Pending** | Created before this week, still no area label | Follow up — why not actioned? |
| ✅ **Resolved** | In previous state, NOT in current | Acknowledge (got area label or closed) |
| 🏷️ **Closed (cleanup)** | Closed + still has `Needs-Triage` label | Remove `Needs-Triage` label |

> **Key distinction**: "Created This Week" is based on when the issue was **created** (`createdAt`), not when it was first seen in triage runs. This ensures new issues are highlighted even if triage runs multiple times per week.

## Summary.md Format

See [template-summary.md](./templates/template-summary.md) for the full template structure.

## Area Classification (LLM-Based)

Issues without an `area-*` label are classified by the agent using LLM reasoning — **not** keyword matching. The agent:

1. Fetches area label definitions via `Get-RepositoryLabels.ps1 -Filter "area-*"`
2. Reads the issue title, body, and comments from `Get-IssueDetails.ps1`
3. Reasons about the best area match and assigns a confidence score

**Confidence scale:**

| Score | Level | Meaning |
|-------|-------|---------|
| **80–100** | High | Issue explicitly names the component; maps to exactly one area |
| **60–79** | Medium-High | Strong signals (stack traces, API names) point to one area |
| **40–59** | Medium | Reasonable match, but 2+ areas are plausible |
| **20–39** | Low | Weak signal; best guess |
| **0–19** | Very Low | No clear signal; vague or multi-area |

See [workflow-triage-prep.md](./references/workflow-triage-prep.md) for the full confidence rubric and adjusters.

## Action Item Types

| Action | When to Suggest |
|--------|-----------------|
| `Assign to milestone` | High business importance, clear scope |
| `Add area label` | Missing component/area identification |
| `Request clarification` | Requirement clarity < 50 |
| `Close as duplicate` | Similar closed issue found with fix |
| `Close as by-design` | Expected behavior, not a bug |
| `Needs investigation` | Repro unclear, needs debugging |
| `Ready for work` | Clear requirements, assignable |

## Troubleshooting

| Symptom | Solution |
|---------|----------|
| No previous state file | First run — all issues shown as "New" |
| `gh` CLI not installed | Run `winget install GitHub.cli` then `gh auth login` |
| `gh` not authenticated | Run `gh auth login` and follow the prompts |
| Rate limited | Wait and retry, or reduce `--limit` parameter |
| Missing issue details | Use `Get-IssueDetails.ps1 -IssueNumber <number>` |

## Related Resources

- [GitHub CLI documentation](https://cli.github.com/manual/) — `gh` CLI reference
- [Scripts directory](./scripts/) — PowerShell scripts for data fetching

