Skip to content

fix(observe): address remaining review items on PR #1642 - #2024

Closed
Simon J (simonjj) wants to merge 158 commits into
microsoft:pass-equity-gap-10from
simonjj:fix/pr-1642-observe
Closed

fix(observe): address remaining review items on PR #1642#2024
Simon J (simonjj) wants to merge 158 commits into
microsoft:pass-equity-gap-10from
simonjj:fix/pr-1642-observe

Conversation

@simonjj

Copy link
Copy Markdown
Contributor

Fixes applied to PR #1642 (Container Apps Observe)

4 corrections to \container-apps.md:

  1. Workspace ID clarity — clarified --logs-workspace-id\ expects Customer ID (GUID), not ARM resource ID
  2. Azure Monitor table names — added note that _CL\ suffix only applies to Log Analytics destination
  3. Query title mismatch — fixed 'Console log volume by revision' section title to match its KQL
  4. Dapr ACA deployment command — corrected to use \�z containerapp env dapr-component set\

Model-Matrix Test Results — 15/15 PASS

Model Cosmos RBAC KEDA Identity KQL+Redis
GPT-5 mini
GPT-5.3-Codex
Claude Haiku 4.5
Claude Sonnet 4.6
Claude Opus 4.6

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

taylorak (taylorak) and others added 30 commits April 1, 2026 14:25
…ost-forecast and azure cost-optimization skills (microsoft#1221)

* initial implementation

* update the guardrails for query and forecast

* reduce token limit of reference files

* update unit tests

* fix breaking PR checks

* fix pr check errors and code review comments

* refactor to azure-cost (microsoft#1)

* update tests and references to combined azure cost skill

* Remove unused test fixture files

Delete cost-query-sample.json and cost-forecast-sample.json from
tests/azure-cost/fixtures/ as they are not referenced by any test
files. No other skills in the repo use fixture files either, so
these add maintenance overhead without value.

Addresses PR review comment microsoft#14 and microsoft#15 (fixtures removed entirely
rather than fixing hard-coded dates, since they were unused).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* updates tests

* Consolidate azure-cost tests to standard 3-file layout, fix CI gates

- Consolidate 12 test files into standard 3-file structure (unit/triggers/integration)
- Rewrite integration tests using canonical withTestResult pattern
- Move all positive trigger prompts into triggers.test.ts
- Move all sub-area unit assertions into unit.test.ts
- Delete 9 redundant sub-area test files
- Regenerate snapshot with Jest 30 header format
- Bump sensei version 1.0.1 -> 1.0.2
- Bump azure-prepare version 1.0.10 -> 1.0.11

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix PR review comments: canonical azqr tool name, table formatting

- Change azure__extension_azqr to mcp_azure_mcp_extension_azqr in SKILL.md
- Fix missing space in 429 table row in cost-forecast/error-handling.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review comments: MCP tools table, code block languages, remove phantom skill

- Add azure__extension_azqr and azure__aks to MCP Tools table for consistency
- Add yaml language to azqr code block in SKILL.md
- Add text language to portal link code block in report-template.md
- Remove non-existent azure-create-app row from tests/README.md coverage grid

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor: extract azure-cost workflows into separate reference files

Move each workflow (query, optimization, forecast) into dedicated
reference files under references/ for progressive disclosure. This
reduces SKILL.md from 575 lines (23KB) to 139 lines (7KB), so the
agent only loads the workflow it needs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor: move workflow files into their respective folders

Move cost-query-workflow.md, cost-optimization-workflow.md, and
cost-forecast-workflow.md from references/ into cost-query/,
cost-optimization/, and cost-forecast/ as workflow.md. Update all
links in SKILL.md and cross-references. Bump version to 1.0.2.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fixes skill quality issues

* fix: update azure-cost tests for refactored skill structure

- Update snapshot to match new description with DO NOT USE FOR clause
- Update unit tests to load workflow files directly (content moved from
  SKILL.md to cost-query/, cost-forecast/, cost-optimization/ folders)
- Fix heading level assertions (## not ### in standalone workflow files)
- Remove 3 shouldNotTrigger prompts that contain cost keywords and
  correctly trigger the keyword-based matcher

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: reset azure-cost version to 1.0.0 and fix YAML comment syntax

- Reset version to 1.0.0 for new skill directory (was incorrectly 1.0.3)
- Change // optional to # optional in YAML code block

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Sai Koumudi Kaluvakolanu <saikoumudi@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…soft#1649)

* Document principal type mismatch error in AZD errors reference

AZD base templates (e.g. functions-quickstart-python-http-azd) create RBAC
role assignments with hardcoded principalType 'User' for the deploying
identity. In CI/CD where a service principal is used, ARM rejects this
with a PrincipalType mismatch error. The agent had no guidance for this
failure and spent multiple retries before finding the fix.

Adding this to the AZD errors reference gives the agent a direct path to
the solution: set allowUserIdentityPrincipal to false in main.bicep. It
also warns against the ineffective workaround of clearing
AZURE_PRINCIPAL_ID.

Fixes microsoft#1624

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update plugin/skills/azure-deploy/references/recipes/azd/errors.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…icrosoft#1648)

* Clarify main.parameters.json format to prevent .bicepparam confusion

Add explicit warnings and complete examples to the three skill reference
files used by azure-prepare, azure-validate, and azure-deploy:

- patterns.md: Replace hard-coded values with azd \ substitution
  syntax and add a warning against .bicepparam syntax
- iac-rules.md: Add a new Parameter File Format section with a full
  ARM JSON example and format warning
- troubleshooting.md: Add \/contentVersion to the incomplete JSON
  example and add a format warning callout

Addresses the root cause of issue microsoft#1623 where the agent created
main.parameters.json with .bicepparam syntax (readEnvironmentVariable),
causing 6 failed azd provision --preview attempts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Bump azure-prepare to 1.1.2 and azure-deploy to 1.0.11

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update plugin/skills/azure-prepare/references/recipes/bicep/patterns.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* refactor quota tests

* add more specification to test

---------

Co-authored-by: Christopher Earley <cearley@microsoft.com>
Co-authored-by: Harsha Nair <hnair@microsoft.com>
…icrosoft#1498)

* feat: add GEPA integration to sensei skill + quality score workflow

Add GEPA (Genetic-Pareto) evolutionary optimization as an optional
enhancement to sensei's Ralph loop for automated SKILL.md improvement.

Changes:
- .github/skills/sensei/SKILL.md: Added --gepa flag, GEPA mode docs,
  Step 5-GEPA in the Ralph loop
- .github/skills/sensei/scripts/gepa/auto_evaluator.py: Auto-discovers
  test harness at runtime, builds GEPA evaluators, scores/optimizes skills
- pipelines/gepa-quality-score.yml: PR quality gate that scores SKILL.md
  quality and posts results as PR comment

The auto-evaluator requires zero manual configuration. It reads
triggers.test.ts to extract shouldTrigger/shouldNotTrigger arrays
and builds a composite evaluator (content quality + trigger accuracy).

Existing tests are NOT replaced or modified.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address PR review feedback for GEPA integration

- Bump sensei SKILL.md version 1.0.0 → 1.0.2 (fixes Skill Structure CI)
- Remove unused imports: sys, dataclass, field (fixes CodeQL warnings)
- Extract strip_frontmatter() helper to replace fragile content.index()
  parsing that could raise ValueError on malformed frontmatter
- Deduplicate frontmatter stripping logic between score_skill/optimize_skill
- Add explicit permissions block (contents: read, pull-requests: write)
- Use sticky comment pattern (<- Consolidate FileSystemWatcher usage: gepa-quality-score --> marker) to avoid
  PR comment spam on re-runs
- Fix display results to match workflow_dispatch single-skill input
- Rename quality gate step to '(advisory)' to clarify non-blocking behavior

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: skip PR comment step for forked PRs

Forked PRs have reduced GITHUB_TOKEN permissions, which would cause
the comment step to fail. Only post comments when the PR originates
from the same repository.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: strip comments in trigger parsing + clarify GEPA step scope

- Strip single-line (//) and multi-line (/* */) comments from trigger
  test arrays before extracting strings, preventing commented-out
  example prompts from polluting trigger accuracy scoring
- Fix SKILL.md step 5b to clarify GEPA only replaces step 5 (IMPROVE
  FRONTMATTER), not step 6 (IMPROVE TESTS)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: correct docstring and SKILL.md to reflect actual evaluator behavior

The evaluator parses trigger prompt arrays and uses content heuristics
for scoring — it does not execute Jest tests or incorporate test
pass/fail results. Updated docs to accurately describe this.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address round 3 review feedback

- Remove unused params: as_json from score_skill, fast from build_evaluator
- Pin all actions to commit SHAs matching repo convention (checkout v6,
  setup-python v6.2.0, upload-artifact v7.0.0, github-script v8.0.0)
- Pin gepa dependency to v0.7.0 for reproducible CI
- Remove DO NOT USE FOR from scoring criteria (conflicts with repo
  guidance that discourages it due to keyword contamination risk)
- Add quality_score_raw field for full-precision threshold comparisons
- Enhance parse_trigger_arrays to resolve ...varName spread patterns
  by extracting strings from referenced arrays in the same file
- Clarify SKILL.md step 5b: GEPA uses trigger definitions as config,
  does not execute Jest tests
- Add NOTE about future workflow_run commenting pattern migration

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address PR review feedback — split workflow, fix regex, update docs

- Split gepa-quality-score.yml into read-only scoring workflow +
  workflow_run-triggered commenter (gepa-quality-score-comment.yml),
  matching the repo's existing pr.yml / pr-comment.yml pattern
- Fix API key regex to also match 'api key:' with whitespace separator
- Update PR description to clarify ASI uses heuristic scoring
  (Jest integration is planned for future iteration)
- Remove pull-requests:write from scoring workflow permissions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bumps the minor-and-patch group in /scripts with 4 updates: [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8), [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser), [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) and [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest).


Updates `@vitest/coverage-v8` from 4.1.0 to 4.1.2
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.2/packages/coverage-v8)

Updates `fast-xml-parser` from 5.5.8 to 5.5.9
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](NaturalIntelligence/fast-xml-parser@v5.5.8...v5.5.9)

Updates `typescript-eslint` from 8.57.1 to 8.57.2
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.2/packages/typescript-eslint)

Updates `vitest` from 4.1.0 to 4.1.2
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.2/packages/vitest)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: fast-xml-parser
  dependency-version: 5.5.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: typescript-eslint
  dependency-version: 8.57.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: vitest
  dependency-version: 4.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

* Initial plan

* Add kvenkatrajan as codeowner for entra-app-registration

Agent-Logs-Url: https://github.com/microsoft/GitHub-Copilot-for-Azure/sessions/0062a31a-0103-4dbf-a191-8264b9deea81

Co-authored-by: kvenkatrajan <102772054+kvenkatrajan@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kvenkatrajan <102772054+kvenkatrajan@users.noreply.github.com>
* Point to database reference files

Fixes microsoft#1536.
Fixes microsoft#1541.

In issue microsoft#1536 an integration test run has failed due to a timeout. Among other things, the agent needed eight tries to come up with a sufficiently complex password for the Azure SQL admin account... but it shouldn't have been specifying a password to begin with. Instead it should be using Entra-based authentication. The SQL database reference docs explain this, but the test never pulled them in. Here we add further links to these docs in a few key locations to help pull them in.

* Remove references to non-existent skills

Remove references to the azure-security and azure-security-hardening skills as they do not exist.

* Bump versions

* Update snapshots
Create skill-fixer agent to provide basic guidelines. Currently, it includes skill bumping rule.
* adding the azure skills gif

* Add files via upload

Image to be rendered in the VS Code extension
…age (microsoft#1663)

* Enhance microsoft-foundry quota skill with explicit calculation language

Updates quota skill content to use explicit "calculate" and "estimate"
terminology when discussing production capacity planning. Broadens test
assertions to accept equivalent phrasing from the model.

Changes:
- quota.md: Update justification template to use "Calculate required TPM"
- capacity-planning.md: Add "estimate" and "calculate" language to
  section headers and guidance (3 locations)
- integration.test.ts: Broaden assertions with synonyms (calculation,
  quantify, determine, figure out) in 2 test cases

Test results: ✅ Integration test "suggests capacity calculation" passed

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Address PR feedback: tighten test assertions and fix template phrasing

Changes based on PR review comments:

1. integration.test.ts: Require BOTH quota-specific terms (TPM/PTU/capacity/
   tokens per minute) AND calculation verbs (calculate/estimate/calculation/
   quantify) to pass. This prevents false positives from generic verbs like
   "determine" appearing in unrelated answers.

2. quota.md: Change justification template from instruction-style
   "Calculate required TPM as [Z TPM]" to declarative statement
   "Calculated required TPM: [Z TPM]" for proper paste-ready format.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Valerie Pham <valeriepham@microsoft.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
)

* update scripts

* update scripts to have strict regex check and make it a common script across 3 clients

* update script to strip azure prefix for claude

* normalize backslashes
microsoft#1644)

* fix: restore skill routing disambiguation for azure-hosted-copilot-sdk (microsoft#1599)

Restore DO NOT USE FOR clause and add codebase detection to fix
routing regression where azure-prepare incorrectly won on generic
deploy prompts (e.g. 'Deploy this app to Azure') when the codebase
contains @github/copilot-sdk.

Root cause: PR microsoft#1210 (commit a1ba84c) removed the DO NOT USE FOR
clause from azure-hosted-copilot-sdk description, eliminating the
critical negative discriminator that prevented azure-prepare from
capturing Copilot SDK deployment prompts.

Changes:
- azure-hosted-copilot-sdk/SKILL.md: Restore DO NOT USE FOR clause,
  add PREFER OVER azure-prepare directive, add Codebase Detection
  section with marker table (v1.0.1 -> v1.0.2)
- azure-prepare/SKILL.md: Expand Step 0 to check codebase markers
  (not just prompt keywords) for Copilot SDK detection
  (v1.1.1 -> v1.1.2)
- unit.test.ts: Add 2 regression guard tests requiring DO NOT USE FOR
  and PREFER OVER clauses to prevent silent removal
- triggers.test.ts.snap: Updated snapshots for new description

Fixes microsoft#1599

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: update sensei/skill-authoring guidelines to allow DO NOT USE FOR for disambiguation

Add exception to the blanket 'do not use DO NOT USE FOR' guidance:
skills whose triggers overlap with broader skills (e.g., azure-prepare)
MUST retain DO NOT USE FOR clauses for routing disambiguation.

The previous guidance actively caused the microsoft#1599 regression — PR microsoft#1210
removed the clause while following sensei's recommendation, breaking
routing for azure-hosted-copilot-sdk.

Updated files:
- sensei/SKILL.md: Add exception note to warning blocks
- sensei/references/SCORING.md: Add disambiguation row to risk table,
  update pseudocode to skip warning for overlapping skills
- skill-authoring frontmatter.md: Add exception for disambiguation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: implement recommendations microsoft#4 microsoft#5 microsoft#6 from RCA

- microsoft#4: Audit conditional unit tests — added warning comments to
  azure-quotas and azure-hosted-copilot-sdk about the fragile
  if(description.includes('DO NOT USE FOR')) pattern
- microsoft#5: Add PR template with skill routing verification checkbox
- microsoft#6: Set continue-on-error: false in test-all-integration.yml
  so integration test failures actually fail the workflow

Part of microsoft#1599

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address review feedback - version bumps, snapshot header, stale comments, genericize refs

- Bump sensei version 1.0.1 -> 1.0.2
- Bump skill-authoring version 1.0.0 -> 1.0.1
- Update snapshot header to jestjs.io (CI Jest version compatibility)
- Fix PR template: correct integration test command, remove issue link
- Update stale workflow comments to match continue-on-error: false
- Remove explicit issue number references from skill and test files

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: update blanket DO NOT USE FOR prohibition to reflect disambiguation exception

- skill-authoring Constraints: changed blanket prohibition to conditional guidance
- sensei help banner: added '(unless disambiguation-critical)' qualifier
- test-all-integration.yml: clarified continue-on-error comment wording

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: bump sensei version to 1.0.3 (main already at 1.0.2)

Main branch already has sensei at version 1.0.2 from another merged PR.
Our PR also modified sensei, so we need a higher version to pass the
Skill Structure CI check.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: trim description to 55 words, sync marker tables between skills

Address @wbreza review feedback:
- Issue 1: Trim azure-hosted-copilot-sdk description from 107 to 55 words
  (under 60-word guideline). Removed redundant/implementation-detail phrases
  while preserving all routing-critical triggers.
- Issue 2: Sync codebase marker tables - added 2 missing markers to
  azure-prepare Check 2 (copilot-sdk in name/deps, createSession+sendAndWait)
  so both skills use identical detection logic.
- Version bumps: azure-hosted-copilot-sdk 1.0.2->1.0.3, azure-prepare 1.1.2->1.1.3
- Updated unit test to match trimmed description.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: snapshot header and azure-prepare version bump

- Fix snapshot header to jestjs.io URL (CI requirement)
- Bump azure-prepare 1.1.3->1.1.4 (main already at 1.1.3)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rvices (microsoft#1673)

* Add mandatory post-init docker context verification for Aspire AddDockerfile services

After azd init --from-code, the generated azure.yaml often omits or
misconfigures docker.context for AddDockerfile() services. This adds a
mandatory 3-step verification workflow to the Aspire+AZD recipe:

1. Scan AppHost for AddDockerfile calls
2. Check azure.yaml for matching docker.context entries
3. Patch azure.yaml if missing or incorrect

Also updates Validation Steps to reference the new check, and bumps
skill version to 1.1.2.

Fixes microsoft#1660

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update plugin/skills/azure-prepare/references/recipes/azd/aspire.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update plugin/skills/azure-prepare/references/recipes/azd/aspire.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Add redundant SQL Entra-only auth guidance at the security hardening
and generation steps so the prohibition is seen even if the agent
skips the sql-database reference chain. Also add a Container Apps +
SQL Database research pattern alongside the existing App Service one.

Addresses microsoft#1661.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…m resources" (microsoft#1682)

The default FOLLOW_UP_PROMPT ("Go with recommended options and proceed with
Azure deployment.") improperly encourages the agent to continue with a
deployment even when there is nothing to deploy. In this test the Aspire
app contains only non-deployable custom resources, and the agent correctly
identifies this, but then the follow-up prompt pushes it to add a new
project and deploy anyway.

Replace with a prompt that allows the agent to stop when it determines
there is no further work.

Fixes microsoft#1591

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…soft#1684)

* Initial plan

* Add Sovereign Cloud configuration instructions to README

Agent-Logs-Url: https://github.com/microsoft/GitHub-Copilot-for-Azure/sessions/825c66a2-51c0-4d4d-a040-9c24df334582

Co-authored-by: fanyang-mono <52458914+fanyang-mono@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: fanyang-mono <52458914+fanyang-mono@users.noreply.github.com>
…t#1679)

Add trigger keywords and routing guidance for modify/add-feature
prompts in existing Copilot SDK codebases. Previously, prompts like
'Add a new feature to this app' would not route to this skill even
when the codebase contained @github/copilot-sdk markers.

Changes:
- Description: add 'modify', 'add feature' trigger keywords (v1.0.4)
- Codebase Detection: broaden from deploy-only to ANY prompts
- Warning: explicitly list deploy, modify, add feature, update, enhance
- Step 1 routing table: add 'Modify/add features' row
- Snapshot: updated for new extracted keywords

Fixes microsoft#1385

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…YOM API key leak (microsoft#1447, microsoft#1448) (microsoft#1685)

* fix: reduce greenfield-explicit test runs to prevent timeout (microsoft#1447)

Greenfield prompts trigger full planning + scaffolding per agent invocation
(~6-8 min each). With RUNS_PER_PROMPT=3, the cumulative runtime exceeded the
20-min TEST_TIMEOUT.

Introduce GREENFIELD_RUNS_PER_PROMPT=1 for the greenfield-explicit scenario,
matching the pattern used by other slow suites (azure-deploy, azure-prepare).
One run is sufficient to validate routing correctness for an explicit SDK
mention.

* fix: strengthen BYOM auth guidance to prevent API key leaks (microsoft#1448)

countApiKeyInByomConfig detected apiKey references in agent-generated BYOM
configs. The SKILL.md Step 3 only had a brief table mention of bearerToken
via DefaultAzureCredential, which was insufficient to steer the agent away
from API key patterns.

Add explicit BYOM auth constraint to Step 3 and Rules section: MUST use
DefaultAzureCredential/ManagedIdentityCredential, NEVER use apiKey or
AZURE_OPENAI_API_KEY/AZURE_OPENAI_KEY env vars. Bump version to 1.0.4.

Update trigger test snapshots for new 'identity' keyword from
ManagedIdentityCredential.
…th 3 updates (microsoft#1580)

Bumps the minor-and-patch group with 3 updates in the /tests directory: [@azure/identity](https://github.com/Azure/azure-sdk-for-js), [@github/copilot-sdk](https://github.com/github/copilot-sdk) and [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `@azure/identity` from 4.13.0 to 4.13.1
- [Release notes](https://github.com/Azure/azure-sdk-for-js/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-js/blob/main/documentation/Changelog-for-next-generation.md)
- [Commits](https://github.com/Azure/azure-sdk-for-js/compare/@azure/identity_4.13.0...@azure/identity_4.13.1)

Updates `@github/copilot-sdk` from 0.1.32 to 0.2.0
- [Release notes](https://github.com/github/copilot-sdk/releases)
- [Changelog](https://github.com/github/copilot-sdk/blob/main/CHANGELOG.md)
- [Commits](github/copilot-sdk@v0.1.32...v0.2.0)

Updates `typescript-eslint` from 8.57.1 to 8.57.2
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.2/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@azure/identity"
  dependency-version: 4.13.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@github/copilot-sdk"
  dependency-version: 0.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: typescript-eslint
  dependency-version: 8.57.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ript-eslint to 8.58.0, and eslint-plugin-import-x to 4.16.2 (microsoft#1700)

* Initial plan

* Bump typescript to 6.0.2, ts-jest to 29.4.9, typescript-eslint to 8.58.0, eslint to 10.1.0

Agent-Logs-Url: https://github.com/microsoft/GitHub-Copilot-for-Azure/sessions/d3e12f48-eef0-4bdd-b35b-2b79f79d6c46

Co-authored-by: fanyang-mono <52458914+fanyang-mono@users.noreply.github.com>

* Replace eslint-plugin-import with eslint-plugin-import-x for eslint 10 compatibility

Agent-Logs-Url: https://github.com/microsoft/GitHub-Copilot-for-Azure/sessions/ff18e4ac-1c62-4497-af0e-afa7d1768ea7

Co-authored-by: fanyang-mono <52458914+fanyang-mono@users.noreply.github.com>

* Add comment explaining suppressMissingFileEnumeratorAPIWarning option

Agent-Logs-Url: https://github.com/microsoft/GitHub-Copilot-for-Azure/sessions/ff18e4ac-1c62-4497-af0e-afa7d1768ea7

Co-authored-by: fanyang-mono <52458914+fanyang-mono@users.noreply.github.com>

* Add engines field to tests/package.json matching scripts/package.json

Agent-Logs-Url: https://github.com/microsoft/GitHub-Copilot-for-Azure/sessions/2d4e94d5-8a06-4a03-a9a8-8c7bc1c9c184

Co-authored-by: fanyang-mono <52458914+fanyang-mono@users.noreply.github.com>

* Update scripts/package.json

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: fanyang-mono <52458914+fanyang-mono@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* add cleanup script for test resources

* add readme

* update formatting

* update scripts

* address script comments

* update script

* Update eng/scripts/Metadata-Helpers.ps1

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* address comments

* Update eng/README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update eng/scripts/Resource-Helpers.ps1

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update eng/scripts/test-sub-cleanup.ps1

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update eng/scripts/Resource-Helpers.ps1

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update eng/scripts/test-sub-cleanup.ps1

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: kvenkatrajan <102772054+kvenkatrajan@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…#1680)

* Fix quota integration tests: check tool execution data

Fixes two failing microsoft-foundry quota integration tests:
1. "mentions business justification" - agent wrote template to file
2. "lists deployments using MCP tools or CLI" - agent used tools in reasoning

Changes:
- Enhanced quota.md with explicit business justification guidance
- Referenced actual Azure MCP tool (model_deployment_get) instead of non-existent foundry-mcp
- Made "business justification" test prompt more directive
- Created doesAssistantOrToolsIncludeKeyword() to check both responses and tool data
- Fixed isMcpToolCalled() logic bug (now returns false when pattern provided but tool name missing)
- Changed skill invocation from hard assertion to soft check
- Updated deployment listing test to check for model_deployment MCP tool usage
- Removed unused imports (isToolCalled, isMcpToolCalled, isSkillInvoked)

Addresses review comments:
- Removed foundry-mcp references (not configured in .mcp.json)
- Use actual Azure MCP server tools (model_deployment_get from azure server)
- Fixed isMcpToolCalled() to require tool name when pattern specified
- Removed unused imports to avoid lint warnings

Test results: Both tests now pass
- ✅ "mentions business justification" (45s)
- ✅ "lists deployments using MCP tools or CLI"

* Use isMcpToolCalled for MCP tool verification in quota test

Replace keyword-based text search with proper MCP tool execution checking.
This provides more accurate verification that the Azure MCP tool was called,
and prevents isMcpToolCalled() from becoming unused/dead code.

Changes:
- Import isMcpToolCalled from evaluate.ts
- Replace doesAssistantOrToolsIncludeKeyword("model_deployment") with
  isMcpToolCalled(agentMetadata, "azure", /model_deployment/)
- Test still passes and maintains all existing safeguards

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Valerie Pham <valeriepham@microsoft.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Simon J (simonjj) and others added 5 commits April 23, 2026 14:09
- Fix: LA workspace not required (was 'requires', now 'by default')
- Fix: add missing --logs-workspace-key CLI param
- Fix: metric dimensions now include replica (was missing on 5/6 metrics)
- Fix: rename Java 'Auto-agent JAR' to 'Agent JAR (manual)' (ACA has no auto-instrumentation)
- Fix: Dapr endpoint placeholder clarified as OTel Collector, not App Insights
- Fix: ARG query checks all containers, not just containers[0]
- Fix: remove undocumented ReplicaCount_d column
- Fix: rename misleading 'Request latency' section to 'Console log volume'
- Add: actual request latency KQL using App Insights requests table

All fixes validated against official Microsoft ACA documentation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… reference

- Bump metadata.version 1.0.2 → 1.0.3 (required by Skill Structure check)
- Link references/container-apps.md from SKILL.md (required by Markdown References check)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Dapr: clarify tracing spans are conditional on config, not automatic
- ARG query: use mv-expand kind=outer to include apps with no env vars
- Update trigger test snapshot for new 'observability' keyword

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Snapshot header link goo.gl/fbAQLP → jestjs.io/docs/snapshot-testing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Clarify --logs-workspace-id expects Customer ID (GUID), not ARM resource ID
- Add note about Azure Monitor destination table names (no _CL suffix)
- Rename 'Request latency by revision' to 'by app instance' (matches query grouping)
- Add az containerapp env dapr-component set command for ACA-native Dapr config

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@paulyuk

Copy link
Copy Markdown
Member

Thanks Simon — your 4 fixes are spot on (workspace ID, table names, query title, Dapr deployment). However your fork has diverged significantly (393 changed files, merge conflicts), so I can't merge this cleanly.

I'll apply all 4 of your fixes directly on the branch myself, along with the remaining items (table formatting, secrets pattern). Closing this one — thanks for the review work!

Paul Yuknewicz (paulyuk) added a commit that referenced this pull request Apr 24, 2026
container-apps.md:
- Clarify --logs-workspace-id expects Customer ID (GUID), not ARM ID
- Add Azure Monitor vs Log Analytics table name note (_CL suffix)
- Use secrets pattern for App Insights connection string (secretref)
- Clarify Dapr config is applied via CLI/Bicep, not raw YAML
- Fix query title 'by revision' to 'by instance' (cloud_RoleInstance)

Incorporates Simon's 4 fixes from PR #2024 (closed due to fork
divergence) plus additional copilot-reviewer and JonG items.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
JasonYeMSFT (JasonYeMSFT) pushed a commit that referenced this pull request May 4, 2026
…r tracing (#1642)

* feat(observe): Container Apps observability guide (Gap-10)

Closes #1618 | Parent: #1608
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(observe): correct ACA observability content against official docs

- Fix: LA workspace not required (was 'requires', now 'by default')
- Fix: add missing --logs-workspace-key CLI param
- Fix: metric dimensions now include replica (was missing on 5/6 metrics)
- Fix: rename Java 'Auto-agent JAR' to 'Agent JAR (manual)' (ACA has no auto-instrumentation)
- Fix: Dapr endpoint placeholder clarified as OTel Collector, not App Insights
- Fix: ARG query checks all containers, not just containers[0]
- Fix: remove undocumented ReplicaCount_d column
- Fix: rename misleading 'Request latency' section to 'Console log volume'
- Add: actual request latency KQL using App Insights requests table

All fixes validated against official Microsoft ACA documentation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: bump appinsights-instrumentation version and link container-apps reference

- Bump metadata.version 1.0.2 → 1.0.3 (required by Skill Structure check)
- Link references/container-apps.md from SKILL.md (required by Markdown References check)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot review round 2 + update test snapshot

- Dapr: clarify tracing spans are conditional on config, not automatic
- ARG query: use mv-expand kind=outer to include apps with no env vars
- Update trigger test snapshot for new 'observability' keyword

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: update snapshot header to match CI Jest version

Snapshot header link goo.gl/fbAQLP → jestjs.io/docs/snapshot-testing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(observe): resolve 9 review comments on PR #1642

container-apps.md:
- Clarify --logs-workspace-id expects Customer ID (GUID), not ARM ID
- Add Azure Monitor vs Log Analytics table name note (_CL suffix)
- Use secrets pattern for App Insights connection string (secretref)
- Clarify Dapr config is applied via CLI/Bicep, not raw YAML
- Fix query title 'by revision' to 'by instance' (cloud_RoleInstance)

Incorporates Simon's 4 fixes from PR #2024 (closed due to fork
divergence) plus additional copilot-reviewer and JonG items.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: restore version placeholder for appinsights-instrumentation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(observe): ARG query — remove unsupported mv-expand kind=outer

ARG KQL dialect doesn't support kind=outer (only Log Analytics does).
Use mv-expand + isnotempty filter instead. Found via E2E testing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add caveat note to ARG query about mv-expand excluding envless apps

Addresses jongio's non-blocking suggestion: clarify that the ARG query
drops Container Apps with no env vars, so users know the audit isn't
exhaustive.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: simonjj <simonjj@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.