Repository navigation
Fix AOAI smoke issue targeting and clarify PR safe-output limits - #65409
Conversation
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The wildcard target needs tighter limits, and the regression assertion can miss handler-config drift.
Review effort: Balanced
Findings: 2
Open (2)
What changed in this PR
Updates AOAI smoke-test issue targeting and clarifies pull-request safe-output limits.
Changes:
- Enables temporary-ID issue-type targeting and updates the compiled workflow.
- Adds regression coverage for source and compiled configuration.
- Documents PR quotas and same-run push limitations.
| File | Description |
|---|---|
.github/workflows/smoke-copilot-aoai-entra.md |
Enables explicit issue targeting. |
.github/workflows/smoke-copilot-aoai-entra.lock.yml |
Regenerates the compiled workflow. |
pkg/cli/smoke_copilot_aoai_workflow_contract_test.go |
Adds configuration assertions. |
docs/src/content/docs/reference/safe-outputs-pull-requests.md |
Clarifies quotas and follow-up pushes. |
.github/skills/agentic-workflows/SKILL.md |
Reorganizes work-queue routing guidance. |
| remove-labels: | ||
| allowed: [smoke] | ||
| set-issue-type: | ||
| target: "*" |
| assert.Contains(t, string(compiled), `\"set_issue_type\":{\"target\":\"*\"}`, | ||
| "Compiled safe-output handler must use the explicit issue target") |
|
✅ Ponytail Reviewer completed successfully! Lean already. Ship.
|
|
✅ Test Quality Sentinel completed test quality analysis. Test Quality Sentinel skipped because pre-fetch PR data was unavailable: unable to fetch test file diff
|
|
✅ PR Code Quality Reviewer completed the code quality review. PR review submitted via safeoutputs; no additional GitHub write beyond the review body/comments is needed if submission fails.
|
|
🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅
|
|
✅ Design Decision Gate 🏗️ completed the design decision gate check. See the comment below for the result and any generated ADR draft. Warning Threat Detection Engine Failure — The analysis engine could not complete. This is a tooling failure, not a security finding. What happenedThe threat detection engine failed to produce results. Review the workflow run logs for details.
|
Comment MemoryNote This comment is managed by comment memory.It stores persistent context for this thread in the code block at the top of this comment.
|
There was a problem hiding this comment.
Request changes
Two blocking problems remain in the changed lines.
Blocking themes
set-issue-type.target: "*"fixes temporary-ID resolution, but it also widens the workflow from the triggering item to arbitrary repository issues. If wildcard targeting is unavoidable here, it needs compensating guardrails (max: 1at minimum, ideally narrower validation) before this stops being a permissions regression.TestSmokeCopilotAOAIEntraSetIssueTypeTargetstill substring-matches the entire lock file for"set_issue_type":{"target":"*"}. That fragment can appear inGH_AW_SAFE_OUTPUTS_CONFIG, so the test still passes when the apply-time handler config is wrong. Scope the assertion toGH_AW_SAFE_OUTPUTS_HANDLER_CONFIGor parse the emitted JSON instead of searching the whole file.
🔎 Code quality review by PR Code Quality Reviewer · copilot · gpt54 · 34.8 AIC · ⌖ 7.1 AIC · ⊞ 20.2K
Comment /review to run again
There was a problem hiding this comment.
Skills-Based Review 🧠
Applied /diagnosing-bugs (issue targeting fix) and /grill-with-docs (safe-output limit clarifications). Small, well-scoped PR — the fix, the regression test, and the doc updates line up correctly against HEAD.
📋 Verification performed
- Confirmed
smoke-copilot-aoai-entra.md/.lock.ymlatHEADactually containtarget: "*"/{"target":"*"}, so the newTestSmokeCopilotAOAIEntraSetIssueTypeTargettest passes cleanly (verified viagit stash+go test ./pkg/cli/ -run TestSmokeCopilotAOAIEntraSetIssueTypeTarget). - Confirmed
target: "*"onset-issue-typeis an established pattern already used across dozens of other workflows in this repo (ai-moderator.md,bot-detection.md, etc.), so this isn't introducing a new class of risk — it's consistent with existing convention for temporary-ID-driven safe outputs. - The
SKILL.mddiff is a no-op reordering (alphabetizing the file list and routing bullet) — no functional change. - Doc wording for
create-pull-request.maxand thepush-to-pull-request-branchsame-run caveat reads correctly and matches the staged/post-agent processing model described elsewhere in the same file.
Positive Highlights
- ✅ Root cause fix (missing
target: "*") is paired with a regression test, not just the markdown change — good/diagnosing-bugsdiscipline. - ✅ Doc clarifications are precise and address a real source of confusion (shared-quota semantics, same-run push ordering) rather than vague wording.
🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · copilot · sonnet50 · 74.1 AIC · ⌖ 14.3 AIC · ⊞ 10K
Comment /matt to run again
There was a problem hiding this comment.
Review summary
Focused review using the refactor_cleanup/mixed_unclear Impeccable lenses (doc + config tidy-up PR touching workflow frontmatter, docs, SKILL.md, and a Go test).
Verified as correct:
set-issue-type.target: "*"is present in both the source.mdand the compiled.lock.yml(GH_AW_SAFE_OUTPUTS_CONFIGandGH_AW_SAFE_OUTPUTS_HANDLER_CONFIG), andgh aw compilereproduces the committed lock file byte-for-byte — no drift.- The new regression test
TestSmokeCopilotAOAIEntraSetIssueTypeTargetpasses against the PR head. - The
push_to_pull_request_branchdoc claim (temporary_id doesn't help target a same-run PR) matches the implementation —push_to_pull_request_branch.cjshas no temporary-ID/issue-target resolution path, unlikeset_issue_type.cjs.
New finding (posted inline): the .github/skills/agentic-workflows/SKILL.md diff isn't just an alphabetical reorder — it deletes the "Orchestrate durable work with a work queue..." routing bullet that tells agents when to load work-queue.md. That's unrelated to this PR's stated scope and looks like an accidental drop.
Two pre-existing Copilot review comments (wildcard target: "*" broadening issue-type write scope to any issue in the repo, and the new test assertion matching both GH_AW_SAFE_OUTPUTS_CONFIG/GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG without distinguishing them) are still open and still valid — not duplicated here.
🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · copilot · sonnet50 · 164.4 AIC · ⌖ 13.2 AIC · ⊞ 8.1K
| @@ -106,7 +106,6 @@ After loading the matching workflow prompt or skill, follow it directly: | |||
| - Render compact markdown charts: `.github/aw/asciicharts.md` | |||
There was a problem hiding this comment.
This reorder (moving work-queue.md into alphabetical position in the "Load these files" list) silently drops the corresponding routing bullet two lines below: - Orchestrate durable work with a work queue (dispatcher/worker roles or queue inspection): \.github/aw/work-queue.md`. That line is deleted entirely in this diff and not reintroduced anywhere else, so agents loading this skill lose the only pointer that tells them when to read work-queue.md`. This looks unintentional and unrelated to the PR's stated purpose (AOAI smoke fix / PR safe-output docs). Please restore the deleted routing bullet (or confirm the removal is intentional and explain why).
@copilot please address this.
|
🎉 This pull request is included in a new release. Release: |

The AOAI smoke workflow supplies a newly created issue’s temporary ID to
set_issue_type, but its implicittriggeringtarget rejects that ID on scheduled runs. Separately, the PR safe-output reference leaves the run-level quota and same-run follow-up push behavior unclear.set-issue-type.target: "*"so the smoke workflow can target the issue it created. Add a regression assertion for the source and compiled configuration.create-pull-request.maxis shared across all agents in a workflow run, and that a PR created in the current agent run cannot receive apush_to_pull_request_branchcall before it exists remotely.