Skip to content

Add unified azure-cost skills that combines azure-cost-query, azure-cost-forecast and azure cost-optimization skills#1221

Merged
kvenkatrajan merged 24 commits intomicrosoft:mainfrom
taylorak:feature/add-cost-management-skills
Apr 1, 2026
Merged

Add unified azure-cost skills that combines azure-cost-query, azure-cost-forecast and azure cost-optimization skills#1221
kvenkatrajan merged 24 commits intomicrosoft:mainfrom
taylorak:feature/add-cost-management-skills

Conversation

@taylorak
Copy link
Copy Markdown
Collaborator

@taylorak taylorak commented Mar 11, 2026

Combines cost optimization with query and forecast skills into azure cost skill for Azure Cost Management:

azure-cost-query

Guides the agent through querying historical Azure cost data via the Cost Management Query API. Supports breakdowns by service, resource, location, tag, and other
dimensions across subscriptions, resource groups, and billing accounts.

azure-cost-forecast

Guides the agent through constructing and executing Azure Cost Management Forecast API requests to project future spending, with built-in time-period guardrails and
training-data validation.

What's included

  • SKILL.md for each skill with frontmatter, MCP tool usage, workflow steps, and error handling
  • Reference docs under references/ — request body schemas, guardrails, error handling, and examples
  • Unit tests — validate metadata, content structure, required sections, and frontmatter formatting
  • Trigger tests — verify keyword matching on relevant prompts with cross-skill shouldNotTrigger checks (cost-query ↔ cost-forecast ↔ cost-optimization) to prevent…
    false positives
  • Integration tests — end-to-end validation against live Azure resources
  • Fixtures — sample API response JSON for each skill

Cross-skill design

Both descriptions include WHEN: and DO NOT USE FOR: clauses to help the agent route between the three cost skills (query, forecast, optimization). Trigger tests
include negative prompts from sibling skills to validate correct routing.

Copilot AI review requested due to automatic review settings March 11, 2026 12:09
Copy link
Copy Markdown
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

Adds two new Azure Cost Management agent skills—azure-cost-query (historical cost querying) and azure-cost-forecast (future cost forecasting)—along with supporting reference documentation and a full test suite to validate metadata, triggering behavior, and integration behavior.

Changes:

  • Added SKILL.md + reference docs for azure-cost-query and azure-cost-forecast (schemas, guardrails, examples, error handling).
  • Added unit, trigger (with snapshots), and integration tests for both skills.
  • Added fixtures to support prompt/examples and sample payloads.

Reviewed changes

Copilot reviewed 21 out of 21 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
tests/azure-cost-query/unit.test.ts Unit tests validating azure-cost-query metadata and required SKILL sections
tests/azure-cost-query/triggers.test.ts Triggering/negative-triggering tests + keyword snapshots for azure-cost-query
tests/azure-cost-query/integration.test.ts End-to-end invocation tests for azure-cost-query using the agent runner
tests/azure-cost-query/fixtures/sample.json Sample prompts + sample request body fixture for azure-cost-query
tests/azure-cost-query/snapshots/triggers.test.ts.snap Snapshot outputs for azure-cost-query trigger keyword extraction
tests/azure-cost-forecast/unit.test.ts Unit tests validating azure-cost-forecast metadata and required SKILL sections
tests/azure-cost-forecast/triggers.test.ts Triggering/negative-triggering tests + keyword snapshots for azure-cost-forecast
tests/azure-cost-forecast/integration.test.ts End-to-end invocation tests for azure-cost-forecast using the agent runner
tests/azure-cost-forecast/fixtures/sample.json Sample prompts + sample request body fixture for azure-cost-forecast
tests/azure-cost-forecast/snapshots/triggers.test.ts.snap Snapshot outputs for azure-cost-forecast trigger keyword extraction
plugin/skills/azure-cost-query/SKILL.md Main skill instructions/workflow for historical cost query construction
plugin/skills/azure-cost-query/references/request-body-schema.md Query API request/response schema reference
plugin/skills/azure-cost-query/references/guardrails.md Query-specific validation rules and constraints
plugin/skills/azure-cost-query/references/examples.md Common Query API request body examples
plugin/skills/azure-cost-query/references/error-handling.md Query API error handling reference
plugin/skills/azure-cost-query/references/dimensions-by-scope.md Dimension availability matrix by scope/agreement type
plugin/skills/azure-cost-forecast/SKILL.md Main skill instructions/workflow for forecast request construction
plugin/skills/azure-cost-forecast/references/request-body-schema.md Forecast API request/response schema reference
plugin/skills/azure-cost-forecast/references/guardrails.md Forecast-specific guardrails (future-to, training data, row limits, etc.)
plugin/skills/azure-cost-forecast/references/examples.md Common Forecast API request body examples + scope URL reference
plugin/skills/azure-cost-forecast/references/error-handling.md Forecast API error handling reference

Comment thread plugin/skills/azure-cost-query/references/error-handling.md Outdated
Comment thread plugin/skills/azure-cost-forecast/references/error-handling.md Outdated
Comment thread plugin/skills/azure-cost-forecast/references/examples.md
Comment thread plugin/skills/azure-cost-forecast/SKILL.md Outdated
Comment thread plugin/skills/azure-cost-query/SKILL.md Outdated
Comment thread plugin/skills/azure-cost-forecast/SKILL.md Outdated
Copilot AI review requested due to automatic review settings March 11, 2026 17:18
Copy link
Copy Markdown
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 22 out of 22 changed files in this pull request and generated 4 comments.


You can also share your feedback on Copilot code review. Take the survey.

Comment thread plugin/skills/azure-cost-query/SKILL.md Outdated
Comment thread plugin/skills/azure-cost-query/SKILL.md Outdated
Comment thread plugin/skills/azure-cost/cost-query/request-body-schema.md
Comment thread tests/azure-cost/cost-query-triggers.test.ts
@JasonYeMSFT
Copy link
Copy Markdown
Member

@taylorak With the two new skills, the total char count of skill exceeds the char count budget of Copilot CLI. @saikoumudi Could you help consolidate the new content with the existing azure-cost-optimization skill? Maybe rebrand the azure-cost-optimization skill to cover a broader range of cost related capabilities.

@taylorak
Copy link
Copy Markdown
Collaborator Author

taylorak commented Mar 11, 2026

@JasonYeMSFT can you explain in more detail how to get around the char count budget? and what the char count budget is for?

@JasonYeMSFT
Copy link
Copy Markdown
Member

@taylorak The skill description char count is computed by putting the "description" section of each skill's SKILL.md together and count how many characters are there after formatting. https://github.com/microsoft/GitHub-Copilot-for-Azure/blob/main/scripts/src/copilot-cli-char-budget.ts

The best way to mitigate the limitation is to reuse existing skills. If a new skill has to be added, it should try to make the description as concise as possible.

@taylorak
Copy link
Copy Markdown
Collaborator Author

taylorak commented Mar 11, 2026

@JasonYeMSFT what is stopping us from increasing the limit when adding new skills? The existing skills are already very close to the limit. It leaves almost nothing for new skills. Is the plan to keep only the existing set of skills and not expand much more?

@JasonYeMSFT
Copy link
Copy Markdown
Member

@taylorak The plan is to making sure skill descriptions of existing skills fit within the budget. If no existing skill can be reused as is, we accept rebranding conslidating new content with existing skills via rebranding.

For example, the existing azure-cost-optimization skill may be rebranded to azure-cost which covers both what azure-cost-optimization has and what you are going to add. This would allow it to support more scenarios without introducing significantly more chars in skill descriptions.

@taylorak
Copy link
Copy Markdown
Collaborator Author

taylorak commented Mar 11, 2026

makes sense @JasonYeMSFT. Thank you for the explanation. So, the goal would be to reduce the description size by combining the skills for querying for historical costs, forecasting future costs, and doing cost optimization into a single azure cost skill. You said @saikoumudi is the contact for cost optimization and she can help me merge the skills?

There's also a limit on the size of the skill itself right? so combining might cause issues with that?

@JasonYeMSFT
Copy link
Copy Markdown
Member

@taylorak @saikoumudi is the author for the existing azure-cost-optimization skill. She can help you consolidate the content to make sure the new skill covers both old and new capabilities.

Unlike skill description, there is no hard limit for size of skill content. Although having too much content for a skill in the same context window will hurt the agent performance, it's hard to tell where the tipping point is. It's more of a recommendation than a requirement to make the skill content concise. On the other hand, if the skill description exceeds the budget, the agent will truncate some skill, making it not presented to the LLM and cause the skill to not work at all.

Copilot AI review requested due to automatic review settings March 25, 2026 21:19
Copilot AI review requested due to automatic review settings March 31, 2026 18:13
Copy link
Copy Markdown
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 33 out of 39 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

plugin/skills/azure-resource-lookup/SKILL.md:7

  • This skill’s SKILL.md was modified (description updated), but metadata.version was not bumped. Repo guidance requires bumping metadata.version in the same PR whenever a skill changes (see .github/instructions/skill-files.instructions.md).
description: "List, find, and show Azure resources across subscriptions or resource groups. Handles prompts like \"list websites\", \"list virtual machines\", \"list my VMs\", \"show storage accounts\", \"find container apps\", and \"what resources do I have\". USE FOR: resource inventory, find resources by tag, tag analysis, orphaned resource discovery (not for cost analysis), unattached disks, count resources by type, cross-subscription lookup, and Azure Resource Graph queries. DO NOT USE FOR: deploying/changing resources (use azure-deploy), cost optimization (use azure-cost), or non-Azure clouds."
license: MIT
metadata:
  author: Microsoft
  version: "1.0.1"

Comment thread plugin/skills/azure-cost/SKILL.md Outdated
saikoumudi
saikoumudi previously approved these changes Mar 31, 2026
kvenkatrajan
kvenkatrajan previously approved these changes Mar 31, 2026
Copy link
Copy Markdown
Collaborator

@wbreza wbreza left a comment

Choose a reason for hiding this comment

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

Issue: Inconsistent MCP Tool Names in Documentation

File: plugin/skills/azure-cost/SKILL.md:43-44
Severity: Medium

Problem: The MCP Tools reference table uses incorrect tool names that don't match the actual usage examples in the workflow instructions.

Evidence:

  • Line 43 shows: azure__extension_azqr

  • But Line 305 uses: mcp_azure_mcp_extension_azqr

  • Line 44 shows: azure__aks

  • But Line 277 uses: mcp_azure_mcp_aks

The correct names should use the mcp_azure_mcp_ prefix, confirmed by:

  1. The usage examples within the same file (lines 277, 305)
  2. The azure-compliance skill which uses mcp_azure_mcp_extension_azqr
  3. The azure-kubernetes skill which uses mcp_azure_mcp_aks
  4. Git commit c59ca73 which changed tool names to the mcp_ prefix

Suggested fix: Update lines 43-44 in the MCP Tools table:

  • Change azure__extension_azqrmcp_azure_mcp_extension_azqr
  • Change azure__aksmcp_azure_mcp_aks

This ensures consistency with the usage examples and other skills in the repo.


Overall assessment: The PR successfully consolidates three cost-related skills into a unified azure-cost skill with comprehensive documentation, examples, and tests. The issue above is a documentation inconsistency that should be fixed but doesn't block functionality. CI is passing and the code changes look solid.

tmeschter
tmeschter previously approved these changes Mar 31, 2026
Comment thread .github/workflows/issue-triage.md
Comment thread plugin/skills/azure-cost/SKILL.md
Copy link
Copy Markdown
Collaborator

@wbreza wbreza left a comment

Choose a reason for hiding this comment

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

🔍 Skill Quality Review

Reviewed with a focus on AI skill development patterns and practices. Overall this is a clean architectural consolidation — nice work unifying the three cost skills. Several items to address before merge:


🔴 Critical

C1. MCP Tool Naming Mismatch (SKILL.md)
The MCP Tools table uses �zure__* naming (e.g., �zure__extension_azqr, �zure__aks) but inline code examples use mcp_azure_mcp_* (e.g., mcp_azure_mcp_extension_azqr). Since tool names are exact-match identifiers, this will cause runtime failures. Grep for mcp_azure_mcp_ and standardize to �zure__*.

C2. Broken Markdown Table ( ests/README.md)
A blank line between the �zure-cost and �zure-deploy rows breaks the Skills Coverage Grid table — every row from �zure-deploy onward renders as plain text.

C3. Deleted Redis Templates With No Replacement

edis-detailed-cache-analysis.md and
edis-subscription-level-report.md are deleted but not migrated. The new �zure-cache-for-redis.md inlines summaries but loses the detailed formatting examples the agent used as few-shot references.


🟠 High

H1. Missing DO NOT USE FOR Routing Boundary (SKILL.md)
The old �zure-cost-optimization description had explicit negative routing (DO NOT USE FOR: deploying resources, diagnostics, security). The new description drops this entirely, risking false activation on ambiguous prompts.

H2. Removed Negative Trigger Tests ( riggers.test.ts)
The old test had shouldNotTrigger cases for cost estimation prompts (""Estimate the cost of a new VM"", ""How much will it cost to deploy?""). These are removed, creating a routing ambiguity gap with �zure-prepare/�zure-compute.

H3. dimensions-by-scope.md Contradiction
The top-level warning says ResourceId grouping is ""only supported at subscription and resource group scopes"" but the tables below mark it ✅ at billing account and management group scopes.

H4. Inconsistent az rest URL Format
Cost query examples use relative scope paths, but forecast examples use absolute https://management.azure.com URLs. Should be consistent so the agent doesn't get confused.

H5. Filter Schema Casing (SKILL.md + reference files)
SKILL.md workflow text uses lowercase filter names but the Azure Cost Management API requires PascalCase (Dimensions, Name, Operator, Values). Will cause 400 errors.


🟡 Medium (non-blocking, can be fast-follow)

  • Token pressure — SKILL.md is ~4K of 5K token limit; inline examples could be offloaded to references
  • Non-standard directory structure — Uses cost-query/, cost-forecast/, cost-optimization/ instead of repo convention references/; verify skill loader handles this
  • Awkward step numbering — Part 2 uses Steps 1.5, 1.6, 1.7, 1.8 for conditional branches; a decision tree would be cleaner
  • fetch_webpage with no fallback — Step 5 references this tool without documenting alternatives
  • Cross-skill routing gap — No negative tests against azure-resource-lookup prompts
  • Vague GroupBy + Daily granularity guardrail — Needs clearer agent guidance on workaround

✅ Positive Highlights

  • Clean consolidation architecture with clear Part 1/2/3 workflow separation
  • Thorough cross-reference updates across 5+ files (sensei, azure-prepare, azure-resource-lookup, etc.)
  • Comprehensive test suite: 38 trigger prompts, edge cases, integration tests with statistical validation
  • Good security patterns: no credential exposure, proper auth guidance, RBAC roles documented
  • Data classification section (ACTUAL DATA vs ESTIMATED SAVINGS) prevents hallucinated costs
  • Safety requirements (approval before deletions, dry-run validation) are well-placed

taylorak and others added 3 commits March 31, 2026 13:55
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>
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>
@taylorak taylorak dismissed stale reviews from tmeschter, kvenkatrajan, and saikoumudi via c4ccc50 March 31, 2026 21:31
- 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>
Copilot AI review requested due to automatic review settings March 31, 2026 22:42
Copy link
Copy Markdown
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 37 out of 42 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (2)

plugin/skills/azure-resource-lookup/SKILL.md:7

  • The skill description changed, but metadata.version was not bumped. Per repo conventions for skill authoring, any SKILL.md change should increment the version so downstream tooling can detect the update.
    tests/azure-cost/triggers.test.ts:166
  • The case-insensitivity test only checks that upper/lowercase results are equal, which would still pass if both return false. Add an assertion that the prompt should actually trigger (e.g., expect(result1.triggered).toBe(true)) so the test catches regressions in keyword matching.

Comment thread plugin/skills/azure-cost/SKILL.md Outdated
Comment thread plugin/skills/azure-cost/SKILL.md
Comment thread plugin/skills/azure-cost/cost-optimization/workflow.md Outdated
Comment thread tests/azure-cost/integration.test.ts
- 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>
Copy link
Copy Markdown
Contributor

@charris-msft charris-msft left a comment

Choose a reason for hiding this comment

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

This is a big change, but nothing jumps out at me as a problem.

Great to have this in!

Copy link
Copy Markdown
Collaborator

@wbreza wbreza left a comment

Choose a reason for hiding this comment

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

🔍 Code Review: PR #1221

What Looks Good

  • Excellent progressive disclosure architecture. The 138-line SKILL.md is a masterclass in token-efficient skill design — frontmatter + routing table + deep workflow references. Well within the ~5000 token budget.
  • Clean skill consolidation. Merging three related skills into a unified �zure-cost with a routing table eliminates cross-skill confusion and simplifies the agent's decision tree.
  • Prior feedback thoroughly addressed. 14 of 19 tracked items from prior reviews are fully resolved, including the critical MCP tool naming inconsistency, SKILL.md size reduction, YAML syntax fixes, and version correction.
  • Comprehensive test coverage. Unit tests validate metadata and structure, trigger tests cover 38+ positive and 21 negative prompts, and integration tests cover 16 distinct prompt patterns with withTestResult wrapping.

Remaining Items

Two documentation accuracy items worth addressing — one will cause runtime API errors:

Priority Finding File
🟠 High Forecast filter schema uses camelCase but API requires PascalCase — will cause 400 errors cost-forecast/request-body-schema.md
🟠 High etch_webpage tool referenced in optimization workflow but not listed in MCP Tools table cost-optimization/workflow.md
🟡 Medium Cost optimization workflow missing error handling cross-reference to query error docs cost-optimization/workflow.md

Prior Feedback Status (14/19 Resolved)

Item Status
MCP tool naming consistency ✅ All �zure__* format
SKILL.md size (540→138 lines) ✅ Excellent restructuring
YAML // → # comments ✅ Fixed
Version 1.0.0 ✅ Correct
Error handling delegation ✅ In workflow files
Integration tests withTestResult ✅ All wrapped
softCheckSkill assertions ✅ Properly asserting
Decorative emoji removed ✅ Only status indicators remain
Code block languages ✅ All specified
Filter schema casing (forecast) ❌ Still camelCase — needs PascalCase
fetch_webpage unlisted ❌ Referenced but not in MCP Tools table

Overall Assessment: Approve — great skill design with strong token efficiency and test coverage. The two High items above are worth a follow-up fix.

Comment thread plugin/skills/azure-cost/cost-forecast/request-body-schema.md
Comment thread plugin/skills/azure-cost/cost-optimization/workflow.md
@kvenkatrajan kvenkatrajan merged commit a0572f9 into microsoft:main Apr 1, 2026
12 checks passed
tmeschter pushed a commit to tmeschter/GitHub-Copilot-for-Azure that referenced this pull request Apr 2, 2026
…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 (#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>
tmeschter pushed a commit to tmeschter/GitHub-Copilot-for-Azure that referenced this pull request Apr 2, 2026
…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 (#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>
tmeschter added a commit that referenced this pull request Apr 14, 2026
…1585)

* fix: prevent azd+Terraform template variable interpolation failures (#1558)

Address azd template variable interpolation gap that caused deployment
timeouts in terraform-azure-container-apps-deploy integration tests.

azure-prepare (v1.0.13):
- Add warning against using Go-style template variables in .tfvars.json
- Document correct variable passing: azd auto-mapping, TF_VAR_* env vars
- Remove incorrect env() function usage in variable example
- Add troubleshooting entries for template interpolation errors

azure-validate (v1.0.3):
- Add Step 10: Template Variable Resolution Check for azd+Terraform
- Detect unresolved {{ .Env.* }} patterns and .tfvars.json files
- Provide remediation steps to fix before deployment

azure-deploy (v1.0.9):
- Add Unresolved Terraform Template Variables error section with solution
- Add pre-deploy Step 9: Verify Terraform Variable Resolution
- Add Terraform state management error entries
- Document azd state clearing behavior and remote backend recommendation

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

* chore: bump azure-prepare skill version to 1.0.14

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

* Apply suggestions from code review

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

* Update plugin/skills/azure-deploy/references/pre-deploy-checklist.md

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

* Restore current plugin version before checking for skill content changes (#1595)

* fix: rename .azure/plan.md to .azure/deployment-plan.md to prevent agent confusion (#1584)

* fix: rename .azure/plan.md to .azure/deployment-plan.md to prevent confusion with session-state plan.md

The agent was confusing the workspace deployment plan (.azure/plan.md) with the
session-state plan.md file, causing the 'creates correct files for AZD with Bicep
recipe' integration test to fail (issue #1562).

Renaming to deployment-plan.md eliminates the name collision and makes the file's
purpose self-documenting. Updated all references across azure-prepare,
azure-validate, and azure-deploy skills, their reference docs, and all tests.

Closes #1562

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

* fix: update azure-deploy trigger keyword snapshots for deployment-plan rename

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

---------

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

* build(deps): bump github/codeql-action from 4.34.1 to 4.35.1 (#1570)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.34.1 to 4.35.1.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@3869755...c10b806)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.35.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* Remove strong verbiage from Enterprise Infra Planner skill (#1533)

* feat: remove strong verbiage

* feat: update phrasing

* fix: undo tool name change

* chore: bump version to 1.0.1

---------

Co-authored-by: Michael Ren <mren@microsoft.com>

* fix: Add Docker build context validation to azure-validate skill (#1586)

* Add Docker build context validation to azure-validate skill

Pre-validate Docker build context during azure-validate by checking
for package-lock.json when npm ci is specified in a Dockerfile. This
prevents Docker build failures during azd package/up that waste time
and can push deployments past test timeouts.

Changes:
- AZD recipe: Add step 9 (Docker Build Context Validation) between
  Build Verification and Package Validation
- AZCLI recipe: Enhance Docker Build step with build context
  pre-validation before attempting docker build
- AZD/AZCLI errors: Add npm ci / package-lock.json missing error entry
- Bump azure-validate version to 1.0.3

Fixes #1557

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

* Update plugin/skills/azure-validate/references/recipes/azd/README.md

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

* Update plugin/skills/azure-validate/references/recipes/azd/README.md

---------

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

* Copy .claude-plugin/plugin.json to repo root for Claude marketplace support (#1605)

Add .claude-plugin/plugin.json to the sync-to-microsoft-azure-skills job
so the Azure plugin is discoverable in the Claude marketplace. Updates
the copy, URL replacement, version restore, and version bump steps.

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

* Copy hooks to top-level folder in azure-skills in addition to skills (#1606)

* Copy .claude-plugin/plugin.json to repo root for Claude marketplace support

Add .claude-plugin/plugin.json to the sync-to-microsoft-azure-skills job
so the Azure plugin is discoverable in the Claude marketplace. Updates
the copy, URL replacement, version restore, and version bump steps.

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

* Copy hooks to top-level folder in azure-skills in addition to skills

Update the sync-to-microsoft-azure-skills job in the publish pipeline
to also copy hooks/ and copilot-hooks.json to the repo root, matching
how skills/ is already copied. Also add the new paths to the URL
replacement step.

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

---------

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

* Azure skills update for verification of functionality and role assignments (#1220)

* update azure-prepare skill to check subscription policies

* update azure-prepare skill to check functionality before deploying

* Add role assignment verification step to azure-prepare skill

Add new Phase 2 step 5 (Verify Role Assignments) between security
hardening and functional verification. Includes reference doc with
service-to-role mapping table, MCP tool usage, and common RBAC
mistakes (e.g., generic Contributor lacking data-plane access).

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

* Update plugin/skills/azure-prepare/references/role-verification.md

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

* Update plugin/skills/azure-prepare/references/functional-verification.md

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

* Add live role verification step to azure-validate skill

Add step 4 (Live Role Verification) to query Azure for provisioned
RBAC assignments and cross-check against expected roles. Complements
the static role check in azure-prepare: prepare checks generated
Bicep/Terraform, validate checks live Azure state.

Includes reference doc with MCP tool usage, CLI commands, common
issues table, and decision tree for pass/fail criteria.

Bumps azure-validate version 1.0.0 -> 1.0.1.

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

* Clarify azure-prepare role check as static only

Replace MCP live-query section with static code review guidance.
Live role verification is the responsibility of azure-validate
step 4 (live-role-verification.md). This removes the overlap
between the two skills.

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

* refactor: move role verification across prepare/validate/deploy skills

- Remove static role check (step 5) from azure-prepare — prepare just generates
- Add static role check as step 4 in azure-validate (pre-deployment)
- Move live role check from azure-validate step 4 to azure-deploy step 8 (post-deployment)
- Move role-verification.md from azure-prepare to azure-validate references
- Move live-role-verification.md from azure-validate to azure-deploy references
- Update all step number cross-references in functional-verification.md
- Bump versions: prepare 1.0.6->1.0.7, validate 1.0.1->1.0.2, deploy 1.0.5->1.0.6

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

* fix: add azure__role to azure-deploy MCP Tools table

Step 8 (Live Role Verification) references azure__role for RBAC
assignment listing, but the tool was missing from the MCP Tools
table. Agents could incorrectly assume only the three listed tools
are available. Bump version 1.0.6 -> 1.0.7.

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

* update test snapshots

* Potential fix for pull request finding

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

* update the versions and added integration/ unit tests

* Update plugin/skills/azure-validate/references/role-verification.md

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

* update skills and the test runs

* update snapshots

* update to correct versions

* update reference name

* update versioning

* update steps

* fix: update azure-deploy trigger test snapshots

Keywords were removed from the SKILL.md description in a previous PR
but the trigger test snapshots were not regenerated, causing 2 snapshot
failures in the pipeline.

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

* fix: update azure-deploy trigger test snapshots

Keywords were removed from the SKILL.md description in a previous PR
but the trigger test snapshots were not regenerated, causing 2 snapshot
failures in the pipeline.

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

* update snapshot

---------

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

* Fix azure-prepare: add DTS bicep.md to workflow routing (#1540) (#1604)

The workflow routing entries loaded durable.md and the DTS README but not
bicep.md — so the agent had overview docs but not the Bicep patterns
needed to generate .bicep files. Also adds 'order processing' keyword.

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

* add skill invocation rate dashboard (#1630)

* Add unified azure-cost skills that combines azure-cost-query, azure-cost-forecast and azure cost-optimization skills (#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 (#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 #14 and #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>

* Document principal type mismatch error in AZD errors reference (#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 #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>

* Clarify main.parameters.json format to prevent .bicepparam confusion (#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 #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 (#1489)

* refactor quota tests

* add more specification to test

---------

Co-authored-by: Christopher Earley <cearley@microsoft.com>

* update AKS cost spike prompts with specific time window (#1650)

Co-authored-by: Harsha Nair <hnair@microsoft.com>

* feat: GEPA integration for sensei skill + quality score CI workflow (#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>

* build(deps-dev): bump the minor-and-patch group (#1572)

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>

* Add kvenkatrajan as codeowner for entra-app-registration (#1667)

* 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>

* adding the azure skills gif (#1651)

* Address wbreza PR review: fix main.tfvars.json guidance and auto-mapping claims

Key changes based on wbreza's review of PR #1585:

- Replace 'Do NOT generate main.tfvars.json' with correct guidance:
  use \\\ syntax (azd envsubst), not Go-style {{ .Env.* }}
- Remove incorrect 'azd auto-mapping' claims — variables flow via
  main.tfvars.json substitution or explicit TF_VAR_* env vars
- Fix pre-deploy check: validate syntax in main.tfvars.json instead
  of rejecting the file's existence
- Scope grep patterns with --include='*.tf' --include='*.tfvars.json'
  to avoid false positives from .terraform/ and READMEs
- Align grep patterns consistently across all files
- Update remediation steps to fix syntax rather than delete files
- Add main.tfvars.json example with correct \ syntax

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

* Bump skill versions: azure-prepare 1.0.15, azure-deploy 1.0.12, azure-validate 1.0.4

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

* Bump version

* Remove extraneous file

* Fix comments in code blocks

Move comments above code blocks. This is especially important for JSON,
as it does not actually support code comments and we wouldn't want the
LM to copy the code block as-is.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Fan Yang <52458914+fanyang-mono@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Michael <37400755+micha31r@users.noreply.github.com>
Co-authored-by: Michael Ren <mren@microsoft.com>
Co-authored-by: KarishmaGhiya <kghiya8@gmail.com>
Co-authored-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com>
Co-authored-by: msalaman <Marcossalamanca97@hotmail.com>
Co-authored-by: taylorak <taykenned@gmail.com>
Co-authored-by: Sai Koumudi Kaluvakolanu <saikoumudi@gmail.com>
Co-authored-by: Christopher T Earley <jrekct@gmail.com>
Co-authored-by: Christopher Earley <cearley@microsoft.com>
Co-authored-by: Harsha Nair <hjjn26@gmail.com>
Co-authored-by: Harsha Nair <hnair@microsoft.com>
Co-authored-by: Shayne Boyer <spboyer@live.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kvenkatrajan <102772054+kvenkatrajan@users.noreply.github.com>
Co-authored-by: Yun Jung Choi <49920477+yunjchoi@users.noreply.github.com>
Ba4bes pushed a commit to Ba4bes/GitHub-Copilot-for-Azure that referenced this pull request Apr 24, 2026
…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 (#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>
Ba4bes pushed a commit to Ba4bes/GitHub-Copilot-for-Azure that referenced this pull request Apr 24, 2026
…icrosoft#1585)

* fix: prevent azd+Terraform template variable interpolation failures (microsoft#1558)

Address azd template variable interpolation gap that caused deployment
timeouts in terraform-azure-container-apps-deploy integration tests.

azure-prepare (v1.0.13):
- Add warning against using Go-style template variables in .tfvars.json
- Document correct variable passing: azd auto-mapping, TF_VAR_* env vars
- Remove incorrect env() function usage in variable example
- Add troubleshooting entries for template interpolation errors

azure-validate (v1.0.3):
- Add Step 10: Template Variable Resolution Check for azd+Terraform
- Detect unresolved {{ .Env.* }} patterns and .tfvars.json files
- Provide remediation steps to fix before deployment

azure-deploy (v1.0.9):
- Add Unresolved Terraform Template Variables error section with solution
- Add pre-deploy Step 9: Verify Terraform Variable Resolution
- Add Terraform state management error entries
- Document azd state clearing behavior and remote backend recommendation

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

* chore: bump azure-prepare skill version to 1.0.14

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

* Apply suggestions from code review

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

* Update plugin/skills/azure-deploy/references/pre-deploy-checklist.md

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

* Restore current plugin version before checking for skill content changes (microsoft#1595)

* fix: rename .azure/plan.md to .azure/deployment-plan.md to prevent agent confusion (microsoft#1584)

* fix: rename .azure/plan.md to .azure/deployment-plan.md to prevent confusion with session-state plan.md

The agent was confusing the workspace deployment plan (.azure/plan.md) with the
session-state plan.md file, causing the 'creates correct files for AZD with Bicep
recipe' integration test to fail (issue microsoft#1562).

Renaming to deployment-plan.md eliminates the name collision and makes the file's
purpose self-documenting. Updated all references across azure-prepare,
azure-validate, and azure-deploy skills, their reference docs, and all tests.

Closes microsoft#1562

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

* fix: update azure-deploy trigger keyword snapshots for deployment-plan rename

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

---------

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

* build(deps): bump github/codeql-action from 4.34.1 to 4.35.1 (microsoft#1570)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.34.1 to 4.35.1.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@3869755...c10b806)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.35.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* Remove strong verbiage from Enterprise Infra Planner skill (microsoft#1533)

* feat: remove strong verbiage

* feat: update phrasing

* fix: undo tool name change

* chore: bump version to 1.0.1

---------

Co-authored-by: Michael Ren <mren@microsoft.com>

* fix: Add Docker build context validation to azure-validate skill (microsoft#1586)

* Add Docker build context validation to azure-validate skill

Pre-validate Docker build context during azure-validate by checking
for package-lock.json when npm ci is specified in a Dockerfile. This
prevents Docker build failures during azd package/up that waste time
and can push deployments past test timeouts.

Changes:
- AZD recipe: Add step 9 (Docker Build Context Validation) between
  Build Verification and Package Validation
- AZCLI recipe: Enhance Docker Build step with build context
  pre-validation before attempting docker build
- AZD/AZCLI errors: Add npm ci / package-lock.json missing error entry
- Bump azure-validate version to 1.0.3

Fixes microsoft#1557

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

* Update plugin/skills/azure-validate/references/recipes/azd/README.md

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

* Update plugin/skills/azure-validate/references/recipes/azd/README.md

---------

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

* Copy .claude-plugin/plugin.json to repo root for Claude marketplace support (microsoft#1605)

Add .claude-plugin/plugin.json to the sync-to-microsoft-azure-skills job
so the Azure plugin is discoverable in the Claude marketplace. Updates
the copy, URL replacement, version restore, and version bump steps.

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

* Copy hooks to top-level folder in azure-skills in addition to skills (microsoft#1606)

* Copy .claude-plugin/plugin.json to repo root for Claude marketplace support

Add .claude-plugin/plugin.json to the sync-to-microsoft-azure-skills job
so the Azure plugin is discoverable in the Claude marketplace. Updates
the copy, URL replacement, version restore, and version bump steps.

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

* Copy hooks to top-level folder in azure-skills in addition to skills

Update the sync-to-microsoft-azure-skills job in the publish pipeline
to also copy hooks/ and copilot-hooks.json to the repo root, matching
how skills/ is already copied. Also add the new paths to the URL
replacement step.

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

---------

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

* Azure skills update for verification of functionality and role assignments (microsoft#1220)

* update azure-prepare skill to check subscription policies

* update azure-prepare skill to check functionality before deploying

* Add role assignment verification step to azure-prepare skill

Add new Phase 2 step 5 (Verify Role Assignments) between security
hardening and functional verification. Includes reference doc with
service-to-role mapping table, MCP tool usage, and common RBAC
mistakes (e.g., generic Contributor lacking data-plane access).

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

* Update plugin/skills/azure-prepare/references/role-verification.md

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

* Update plugin/skills/azure-prepare/references/functional-verification.md

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

* Add live role verification step to azure-validate skill

Add step 4 (Live Role Verification) to query Azure for provisioned
RBAC assignments and cross-check against expected roles. Complements
the static role check in azure-prepare: prepare checks generated
Bicep/Terraform, validate checks live Azure state.

Includes reference doc with MCP tool usage, CLI commands, common
issues table, and decision tree for pass/fail criteria.

Bumps azure-validate version 1.0.0 -> 1.0.1.

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

* Clarify azure-prepare role check as static only

Replace MCP live-query section with static code review guidance.
Live role verification is the responsibility of azure-validate
step 4 (live-role-verification.md). This removes the overlap
between the two skills.

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

* refactor: move role verification across prepare/validate/deploy skills

- Remove static role check (step 5) from azure-prepare — prepare just generates
- Add static role check as step 4 in azure-validate (pre-deployment)
- Move live role check from azure-validate step 4 to azure-deploy step 8 (post-deployment)
- Move role-verification.md from azure-prepare to azure-validate references
- Move live-role-verification.md from azure-validate to azure-deploy references
- Update all step number cross-references in functional-verification.md
- Bump versions: prepare 1.0.6->1.0.7, validate 1.0.1->1.0.2, deploy 1.0.5->1.0.6

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

* fix: add azure__role to azure-deploy MCP Tools table

Step 8 (Live Role Verification) references azure__role for RBAC
assignment listing, but the tool was missing from the MCP Tools
table. Agents could incorrectly assume only the three listed tools
are available. Bump version 1.0.6 -> 1.0.7.

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

* update test snapshots

* Potential fix for pull request finding

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

* update the versions and added integration/ unit tests

* Update plugin/skills/azure-validate/references/role-verification.md

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

* update skills and the test runs

* update snapshots

* update to correct versions

* update reference name

* update versioning

* update steps

* fix: update azure-deploy trigger test snapshots

Keywords were removed from the SKILL.md description in a previous PR
but the trigger test snapshots were not regenerated, causing 2 snapshot
failures in the pipeline.

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

* fix: update azure-deploy trigger test snapshots

Keywords were removed from the SKILL.md description in a previous PR
but the trigger test snapshots were not regenerated, causing 2 snapshot
failures in the pipeline.

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

* update snapshot

---------

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

* Fix azure-prepare: add DTS bicep.md to workflow routing (microsoft#1540) (microsoft#1604)

The workflow routing entries loaded durable.md and the DTS README but not
bicep.md — so the agent had overview docs but not the Bicep patterns
needed to generate .bicep files. Also adds 'order processing' keyword.

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

* add skill invocation rate dashboard (microsoft#1630)

* Add unified azure-cost skills that combines azure-cost-query, azure-cost-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 (#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>

* Document principal type mismatch error in AZD errors reference (microsoft#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>

* Clarify main.parameters.json format to prevent .bicepparam confusion (microsoft#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 (microsoft#1489)

* refactor quota tests

* add more specification to test

---------

Co-authored-by: Christopher Earley <cearley@microsoft.com>

* update AKS cost spike prompts with specific time window (microsoft#1650)

Co-authored-by: Harsha Nair <hnair@microsoft.com>

* feat: GEPA integration for sensei skill + quality score CI workflow (microsoft#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>

* build(deps-dev): bump the minor-and-patch group (microsoft#1572)

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>

* Add kvenkatrajan as codeowner for entra-app-registration (microsoft#1667)

* 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>

* adding the azure skills gif (microsoft#1651)

* Address wbreza PR review: fix main.tfvars.json guidance and auto-mapping claims

Key changes based on wbreza's review of PR microsoft#1585:

- Replace 'Do NOT generate main.tfvars.json' with correct guidance:
  use \\\ syntax (azd envsubst), not Go-style {{ .Env.* }}
- Remove incorrect 'azd auto-mapping' claims — variables flow via
  main.tfvars.json substitution or explicit TF_VAR_* env vars
- Fix pre-deploy check: validate syntax in main.tfvars.json instead
  of rejecting the file's existence
- Scope grep patterns with --include='*.tf' --include='*.tfvars.json'
  to avoid false positives from .terraform/ and READMEs
- Align grep patterns consistently across all files
- Update remediation steps to fix syntax rather than delete files
- Add main.tfvars.json example with correct \ syntax

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

* Bump skill versions: azure-prepare 1.0.15, azure-deploy 1.0.12, azure-validate 1.0.4

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

* Bump version

* Remove extraneous file

* Fix comments in code blocks

Move comments above code blocks. This is especially important for JSON,
as it does not actually support code comments and we wouldn't want the
LM to copy the code block as-is.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Fan Yang <52458914+fanyang-mono@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Michael <37400755+micha31r@users.noreply.github.com>
Co-authored-by: Michael Ren <mren@microsoft.com>
Co-authored-by: KarishmaGhiya <kghiya8@gmail.com>
Co-authored-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com>
Co-authored-by: msalaman <Marcossalamanca97@hotmail.com>
Co-authored-by: taylorak <taykenned@gmail.com>
Co-authored-by: Sai Koumudi Kaluvakolanu <saikoumudi@gmail.com>
Co-authored-by: Christopher T Earley <jrekct@gmail.com>
Co-authored-by: Christopher Earley <cearley@microsoft.com>
Co-authored-by: Harsha Nair <hjjn26@gmail.com>
Co-authored-by: Harsha Nair <hnair@microsoft.com>
Co-authored-by: Shayne Boyer <spboyer@live.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kvenkatrajan <102772054+kvenkatrajan@users.noreply.github.com>
Co-authored-by: Yun Jung Choi <49920477+yunjchoi@users.noreply.github.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.

8 participants