Complete triage type guidance and preserve existing types - #68869
Open
PureWeen wants to merge 2 commits into
Open
Complete triage type guidance and preserve existing types#68869PureWeen wants to merge 2 commits into
PureWeen wants to merge 2 commits into
Conversation
PureWeen
force-pushed
the
pureween-simplify-triage-type-fix
branch
from
August 27, 2026 22:00
3e426de to
85fabf2
Compare
PureWeen
marked this pull request as ready for review
September 2, 2026 16:41
Contributor
There was a problem hiding this comment.
Copilot review overview
🟢 Approval recommended
The documentation/rubric updates are internally consistent with the existing safe-output allow-list and the compiled lock file reflects the source changes.
Review tier: Lite
Findings: None
What changed in this PR
Updates the issue-triage workflow guidance to fully define all allowed issue types (Bug, Feature, Task, Epic) and align the Step 2 rubric and Step 6 report template with the existing set-issue-type allow-list.
Changes:
- Expand the Step 2 type rubric to include
TaskandEpic, and add a concrete Bug-vs-Task guardrail. - Clarify that docs-only deliverables should be classified as
Taskwith thedocssub-type label. - Update the triage comment template to list all four issue types, and regenerate the compiled
.lock.ymlto reflect the updated prompt.
| File | Description |
|---|---|
| .github/workflows/issue-triage-agent.md | Adds Task/Epic definitions and updates the triage report template to match allowed issue types. |
| .github/workflows/issue-triage-agent.lock.yml | Regenerated compiled workflow (metadata/body hash update) to keep it in sync with the updated source prompt. |
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
Rebase the issue triage type policy onto current main, preserve existing issue types, and enforce per-output staged mutations with gh-aw v0.87.10. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: bcb017f1-64bc-4c44-81c0-96d2b6cc3bce
PureWeen
force-pushed
the
pureween-simplify-triage-type-fix
branch
from
September 2, 2026 18:46
09c4c8f to
8874261
Compare
PureWeen
marked this pull request as draft
September 2, 2026 19:16
PureWeen
marked this pull request as ready for review
September 2, 2026 19:29
The issue_context job's type lookup conflates 'lookup failed' with 'issue is untyped', so a transient API error (502, network timeout) cascades through the job graph and kills the entire triage run. Add an explicit lookup_succeeded output that separates the trust channel from the value channel: - Failed/impossible lookup: lookup_succeeded=false, issue_type='' Type mutation fails closed (staged); area/labels/comment continue. - Successful untyped lookup: lookup_succeeded=true, issue_type='' Type assignment proceeds normally. - Successful typed lookup: lookup_succeeded=true, issue_type=<name> Existing type preserved (staged). The step never fails: the gh api call is inside an if-compound that suppresses errexit. Input is sanitized (single-line enforcement). The set-issue-type staged expression gains a leading 'lookup_succeeded != true' clause so the handler blocks type writes whenever the lookup is untrusted. The prompt gains a three-way rule matching the same states and instructs the agent not to call set-issue-type when the lookup failed. Compiled with gh aw v0.87.10 strict, 0 warnings. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7098ed82-dcc7-447e-8dd0-09e68f10ce22
wtgodbe
approved these changes
Sep 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This makes automated issue-type triage match how ASP.NET Core actually uses GitHub issue types.
For a new issue without a type, the workflow can choose
Bug,Feature, orTask. It no longer assignsEpic, because an Epic represents a maintainer planning decision rather than something the agent can reliably infer from an incoming report. If a template or maintainer already assigned a type, the workflow leaves that decision alone.Why this change is needed
Taskwas allowed but never explainedThe workflow already allowed the agent to assign
Task, but its instructions only definedBugandFeature. That left documentation, maintenance, test, infrastructure, and refactoring work without a clear classification.dotnet/aspnetcore#65910 is a concrete example. It asks for updated Blazor documentation and guidance, not a fix to broken runtime behavior and not a new product feature. During manual triage it was initially marked as
Bug, then changed toTaskwith theDocslabel. The updated guidance makes that distinction explicit:Bug: current shipped behavior is broken or behaves differently from its intended design.Feature: the issue requests product behavior that does not exist yet.Task: the requested work is bounded maintenance, documentation, test, infrastructure, or refactoring where current product behavior is not broken.A small fix to broken behavior is still a
Bug. The amount of work does not determine the issue type.Epicis planning metadataAn Epic coordinates a larger objective across multiple issues. That requires maintainer intent and knowledge of how the work will be decomposed. A broad or expensive feature request is not automatically an Epic, so automated intake should not promote it to one.
Epicremains available to maintainers. This change only removes it from the types that the triage agent can assign.Existing issue types should be preserved
An issue may already have a type because it came from a typed template or because a maintainer assigned one while creating it. That existing decision is treated as authoritative.
The workflow still performs area classification, subtype labeling, duplicate detection, vulnerability handling, label removal, and the triage summary. It only skips replacing the existing issue type.
Existing types are preserved even if the model ignores the instruction
The workflow reads the current issue type from trusted metadata before triage begins. If a type exists, the agent is told not to request a replacement, and the write handler independently prevents an emitted type change from being applied.
Dry runs use the same protection for type and label changes. The metadata writes are skipped, but the analysis comment is still posted so the proposed triage result remains visible.
A metadata lookup failure is not treated as an untyped issue
The trusted metadata request can fail independently of the rest of triage, for example because of a temporary GitHub API error. The workflow now records whether that lookup actually succeeded instead of allowing the metadata job to fail the entire run.
If the lookup succeeds and returns no type, the issue is genuinely untyped and the agent may assign
Bug,Feature, orTask. If the lookup fails, the current type is unknown. In that state the workflow prevents any type write from being applied, but it still allows area and subtype labels, duplicate analysis, label cleanup, and the triage comment to continue.This fails closed for issue types without losing the rest of the triage result.
Resulting behavior
Bug,Feature, orTaskEpic; never replace or newly assign itWhat changes
Taskdefinition, the Bug-versus-Task boundary, and theTaskplusdocsconvention.Epicfrom automated assignment while keeping it available for maintainers.main.Scope
This PR does not change area classification policy, supported subtype meanings, duplicate criteria, vulnerability handling, or the triage comment format beyond reporting the corrected type decision or an unavailable type lookup.
Validation
gh aw compile issue-triage-agent --strict --no-check-update: 1 workflow compiled with 0 warnings.Stack context
This is the first part of a three-PR stack: