feat: add maintainer go/no-go issue-decision workflows - #214
Merged
Merged
Conversation
Add three gh-aw-based workflows that handle the maintainer go/no-go
decision after issue triage, replacing the deterministic
squad-issue-assign.yml:
- issue-assign.md (go:yes): assigns the issue to the maintainer who
applied the label, reads prior triage analysis plus the .squad routing
tables, applies `squad` + matched `squad:{member}` + `squad:copilot`
labels, and posts a rationale comment. A post-check job
(needs: [agent, safe_outputs]) deterministically verifies the assignee
is the go:yes sender and that every squad:* label is backed by the
routing tables.
- issue-clarify.md (go:needs-research): posts at most one comment with
clarifying questions, refining the maintainer's questions if present.
- issue-nogo.yml (go:no): verifies the sender is an admin/maintainer,
adds the close:wont-fix label, and closes the issue as not_planned.
Trigger/role gating: the agentic workflows use `roles: [admin, maintainer]`
plus `names:` label filters; issue-nogo checks the cumulative permission
booleans (admin/maintain) rather than the legacy `permission` field, which
collapses the maintain role to write.
Untrusted issue content is isolated to a context-role:user file and trusted
policy/routing to a context-role:system file, with a contract-test step
enforcing separation. Compiled .lock.yml files are pinned to gh-aw v0.80.9
to match doc-freshness.lock.yml.
Reopening an issue does not re-trigger triage (issue-triage.md stays
types:[opened]).
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Peter Hauge (petehauge)
approved these changes
Jul 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
Adds the maintainer go/no-go decision stage of issue triage, picking up where
issue-triage.md(runs on newly-opened issues) leaves off. Three focused workflows replace the single deterministicsquad-issue-assign.yml:go:yesissue-assign.mdgo:needs-researchissue-clarify.mdgo:noissue-nogo.ymlnot_plannedand appliesclose:wont-fixWhat each workflow does
issue-assign.md(go:yes)go:yes(the label event sender) — the agent does not pick the assignee..squad/routing-table.jsonand.squad/issue-routing.jsonto decide which squad areas the issue touches.squad(always) + onesquad:{member}label per matched area +squad:copilotto hand off to the Copilot coding agent, and posts a rationale comment.assign-to-user(max 1),add-labels(allowed[squad, squad:*], blocked[go:*, priority:*, override:*, type:*], max 5),add-comment(max 1).needs: [agent, safe_outputs]) verifies the assignee includes thego:yessender and that every appliedsquad:*label maps to the routing tables (withsquad:copilotalways allowed); the run fails otherwise.issue-clarify.md(go:needs-research)issue-nogo.yml(go:no)close:wont-fix, and closes the issue asnot_planned. No AI, no comment (the maintainer supplies rationale manually).Security / correctness
roles: [admin, maintainer]+names:label filters;issue-nogo.ymlchecks the cumulative permission booleans (admin/maintain) rather than the legacypermissionfield, which collapses the maintain role towrite(so a barepermission === 'maintain'check would wrongly reject maintainers).context-role: userfile; trusted policy + routing tables into acontext-role: systemfile; a contract-test step enforces the separation.issue-triage.mdstaystypes: [opened](reopen firesreopened).Notes
close:wont-fix(there is no barewont-fixlabel inissue-labels-sync.yml)..lock.ymlfiles are compiled output (gh aw compile), pinned to gh-aw v0.80.9 to matchdoc-freshness.lock.yml; theactions-lock.jsonchange only adds theactions/github-script@v8pin.issue-nogo.ymlmaintain→write permission bug) has been fixed in this branch.Related
squad-issue-assign.yml(originally feat: implement issue assignment agentic workflow (go:yes trigger) #186), now deleted.Files
issue-assign.md(+.lock.yml),issue-clarify.md(+.lock.yml),issue-nogo.yml.github/aw/actions-lock.jsonsquad-issue-assign.ymlCo-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com