Skip to content

Conversation

@yeelam-gordon
Copy link
Contributor

Introduce a workflow and scripts to streamline the preparation for triage meetings, including saving the current state of issues for future comparisons and enhancing documentation checks for known limitations.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a comprehensive triage meeting preparation workflow for the Windows App SDK repository. The feature adds an Agent Skills file that automates the generation of triage meeting summaries by comparing current Needs-Triage issues against previous states, identifying hot issues, and generating research-backed analysis for each issue.

Changes:

  • New triage-meeting-prep Agent Skill with workflow documentation, PowerShell scripts for state management, and Handlebars template for meeting summaries
  • Enhancement to review-issue prompt to check documentation for known limitations and unsupported scenarios
  • Apache 2.0 license file for the new skill

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 18 comments.

Show a summary per file
File Description
.github/skills/triage-meeting-prep/SKILL.md Main skill definition with frontmatter, prerequisites, workflow overview, and resource references
.github/skills/triage-meeting-prep/scripts/Save-TriageState.ps1 PowerShell script to snapshot current triage state as JSON for future comparisons
.github/skills/triage-meeting-prep/scripts/Compare-TriageState.ps1 PowerShell script to compare current issues against previous state and categorize changes
.github/skills/triage-meeting-prep/templates/template-summary.md Handlebars template for generating formatted triage meeting summary reports
.github/skills/triage-meeting-prep/references/workflow-triage-prep.md Detailed 7-phase workflow documentation with step-by-step instructions
.github/skills/triage-meeting-prep/LICENSE.txt Apache 2.0 license for the skill
.github/prompts/review-issue.prompt.md Enhanced with documentation check section for identifying known limitations

- Add copyright headers to PowerShell scripts
- Add Set-StrictMode -Version 2.0 and ErrorActionPreference
- Fix null reference issues for author, milestone, and reaction counts
- Add explicit exit 0 for successful execution
- Add license field to SKILL.md frontmatter
- Fix broken emoji in template-summary.md
- Fix duplicate step/phase numbering in workflow-triage-prep.md
@yeelam-gordon
Copy link
Contributor Author

All 18 automated review comments from copilot-pull-request-reviewer have been addressed in commit 233260c:

PowerShell Scripts (Compare-TriageState.ps1 & Save-TriageState.ps1):

  • ✅ Added copyright headers
  • ✅ Added Set-StrictMode -Version 2.0 and $ErrorActionPreference = 'Stop'
  • ✅ Fixed null reference issues for author.login, milestone.title, and Measure-Object -Sum
  • ✅ Added explicit exit 0 at end of successful execution

SKILL.md:

  • ✅ Added license: Complete terms in LICENSE.txt to frontmatter

template-summary.md:

  • ✅ Fixed broken emoji (🏷️) on line 14

workflow-triage-prep.md:

  • ✅ Fixed duplicate Step 2.2 → Step 2.3
  • ✅ Fixed Step 5.2/5.3 → Step 6.2/6.3 in Phase 6
  • ✅ Fixed duplicate Phase 6 → Phase 7 for Presentation section

@guimafelipe - Thank you for the thoughtful feedback! I've captured your two comments for discussion:

  1. Schema repetition (line 100): Happy to discuss whether the JSON schema example adds value or should be consolidated. The intent was to help implementers understand the expected structure, but I can see it could be redundant.

  2. PowerShell script for data gathering: Great idea! Creating a standalone Get-TriageIssues.ps1 that uses gh CLI could provide a cleaner separation of concerns. I'll track this as a potential enhancement.

StrictMode and ErrorActionPreference must be inside the begin block
when using begin/process/end pipeline structure
Update workflow-triage-prep.md to match the actual JSON schema produced
by Save-TriageState.ps1:
- Replace noAreaIssues/closedIssues structure with flat 'issues' object
- Remove non-existent fields: firstSeen, weeksPending, lastSuggestedAction, reviewPath
- Add actual fields: generatedAt, issueCount, state, author, commentCount, reactionCount, labels, milestone
- Update pseudocode references from previousState.allIssues to previousState.issues

Addresses PR review comment about schema repetition/inconsistency.
@yeelam-gordon
Copy link
Contributor Author

@guimafelipe Good catch on the schema inconsistency!

Fixed in commit 47ad69d — the workflow documentation now matches the actual Save-TriageState.ps1 output:

Before (aspirational but not implemented):

{ "noAreaIssues": { "12345": { "firstSeen", "weeksPending", "lastSuggestedAction"... } } }

After (matches actual script output):

{ "triageDate", "generatedAt", "issueCount", "issues": { "12345": { "number", "title", "state", "author", "commentCount", "reactionCount"... } } }

Tested both scripts to confirm they still work correctly with the aligned schema. Thanks for catching this!

The issue number is already used as the dictionary key, so storing it
again inside the value object is redundant. Removed from:
- Save-TriageState.ps1
- Compare-TriageState.ps1
- workflow-triage-prep.md documentation schema

Addresses PR review comment about information repetition.
@yeelam-gordon
Copy link
Contributor Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@yeelam-gordon yeelam-gordon requested a review from Copilot February 2, 2026 19:50
@yeelam-gordon
Copy link
Contributor Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 5 comments.

Addresses 5 review comments from copilot-pull-request-reviewer:

Save-TriageState.ps1:
- Fix triageDate and generatedAt to use ToUniversalTime() for proper UTC

Compare-TriageState.ps1:
- Fix state comparison to use case-insensitive (-ieq) since GitHub API
  returns uppercase OPEN/CLOSED
- Fix summary output timestamp to use ToUniversalTime() for proper UTC
@yeelam-gordon yeelam-gordon requested a review from Copilot February 3, 2026 01:58
@yeelam-gordon
Copy link
Contributor Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 13 comments.


[CmdletBinding()]
param(
[Parameter()]
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Repository parameter accepts any string without validation. Consider adding a ValidatePattern attribute to ensure it matches the expected 'owner/repo' format to prevent potential command injection or unintended behavior. For example: [ValidatePattern('^[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+$')]

Suggested change
[Parameter()]
[Parameter()]
[ValidatePattern('^[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+$')]

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 72c5216. Added [ValidatePattern('^[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+$')]\ to validate the owner/repo format.

Comment on lines 78 to 104
Write-Host "Fetching issue #$IssueNumber from $Repository..." -ForegroundColor Cyan

# Fetch issue details
$issueJson = gh issue view $IssueNumber --repo $Repository --json number,title,body,author,createdAt,updatedAt,closedAt,state,labels,milestone,comments,reactionGroups,url,assignees
if ($LASTEXITCODE -ne 0) {
Write-Error "Failed to fetch issue #$IssueNumber"
exit 1
}

$issue = $issueJson | ConvertFrom-Json

# Fetch comments if requested (gh issue view --json comments already includes them)
$comments = @()
if ($IncludeComments -and $issue.comments) {
$comments = @($issue.comments)
Write-Host " Retrieved $($comments.Count) comments" -ForegroundColor Gray
}

# Fetch timeline if requested
$timeline = @()
if ($IncludeTimeline) {
Write-Host " Fetching timeline events..." -ForegroundColor Gray
# gh doesn't have direct timeline support, use API
$timelineJson = gh api "repos/$Repository/issues/$IssueNumber/timeline" --paginate 2>$null
if ($LASTEXITCODE -eq 0 -and $timelineJson) {
$timeline = $timelineJson | ConvertFrom-Json
Write-Host " Retrieved $($timeline.Count) timeline events" -ForegroundColor Gray
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to PowerShell best practices, informational/progress messages should use Write-Verbose instead of Write-Host to support automation scenarios. Consider changing these progress messages to Write-Verbose. Note: The Write-Host usage in the 'summary' output format (lines 150-183) is appropriate as it's intended as user-facing display output.

Copilot generated this review using guidance from repository custom instructions.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 72c5216. Changed progress messages to \Write-Verbose. Summary output retained as \Write-Host.

…gress

Addresses review comments from copilot-pull-request-reviewer:

Get-TriageIssues.ps1 & Get-IssueDetails.ps1:
- Add ValidatePattern to validate owner/repo format for Repository parameter
- Prevents potential injection via malformed repository names

All scripts:
- Change progress Write-Host to Write-Verbose for automation support
- Users can now control verbosity with -Verbose switch
- Summary output Write-Host retained (user-facing display)

Note: .WriteError() suggestion deferred as larger refactor.
See Generated Files/prReview/6179/fixPlan/overview.md for details.
@yeelam-gordon
Copy link
Contributor Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants