Skip to content

Enforce canonical plugin manifest ordering#1601

Merged
aaronpowell merged 2 commits into
stagedfrom
plugin-automation-tidy-up
May 4, 2026
Merged

Enforce canonical plugin manifest ordering#1601
aaronpowell merged 2 commits into
stagedfrom
plugin-automation-tidy-up

Conversation

@aaronpowell

Copy link
Copy Markdown
Contributor

Summary

  • sort existing plugin manifest agents and skills entries alphabetically
  • make plugin:clean normalize manifest spec arrays to canonical order
  • fail plugin validation when plugin spec arrays are not alphabetically sorted

Validation

  • npm run plugin:clean
  • npm run build
  • npm run plugin:validate
  • npm run skill:validate
  • bash eng/fix-line-endings.sh

Sort existing plugin manifest spec arrays so plugin:clean no longer creates noisy diffs from out-of-order entries. Add validation to require alphabetical ordering and teach plugin:clean to normalize manifest arrays when cleaning materialized plugin content.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 4, 2026 01:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR standardizes plugin manifest entry ordering across the repository and updates the plugin tooling so manifest arrays are normalized and validated against a canonical alphabetical order. It fits into the repo’s plugin maintenance workflow by tightening consistency between checked-in plugin.json files and the plugin:clean / plugin:validate scripts.

Changes:

  • Reorders agents and skills arrays in many plugin manifests to a canonical alphabetical order.
  • Updates plugin:clean to normalize manifest spec arrays to that order while restoring manifests from materialized plugin content.
  • Updates plugin:validate to reject unsorted manifest arrays.
Show a summary per file
File Description
plugins/typespec-m365-copilot/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/testing-automation/.github/plugin/plugin.json Reorders agents and skills entries alphabetically.
plugins/software-engineering-team/.github/plugin/plugin.json Reorders agents entries alphabetically.
plugins/salesforce-development/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/rug-agentic-workflow/.github/plugin/plugin.json Reorders agents entries alphabetically.
plugins/react18-upgrade/.github/plugin/plugin.json Reorders agents entries alphabetically.
plugins/project-planning/.github/plugin/plugin.json Reorders agents and skills entries alphabetically.
plugins/power-platform-mcp-connector-development/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/polyglot-test-agent/.github/plugin/plugin.json Reorders agents entries alphabetically.
plugins/partners/.github/plugin/plugin.json Reorders agents entries alphabetically.
plugins/mcp-m365-copilot/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/java-development/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/gem-team/.github/plugin/plugin.json Reorders agents entries toward canonical order.
plugins/frontend-web-dev/.github/plugin/plugin.json Reorders agents entries alphabetically.
plugins/flowstudio-power-automate/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/edge-ai-tasks/.github/plugin/plugin.json Reorders agents entries alphabetically.
plugins/dataverse-sdk-for-python/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/database-data-management/.github/plugin/plugin.json Reorders agents and skills entries alphabetically.
plugins/csharp-dotnet-development/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/context-engineering/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/cast-imaging/.github/plugin/plugin.json Reorders agents entries alphabetically.
plugins/azure-cloud-development/.github/plugin/plugin.json Reorders agents and skills entries alphabetically.
plugins/awesome-copilot/.github/plugin/plugin.json Reorders skills entries alphabetically.
plugins/ai-team-orchestration/.github/plugin/plugin.json Reorders agents entries alphabetically.
eng/validate-plugins.mjs Adds manifest array ordering validation to plugin validation.
eng/clean-materialized-plugins.mjs Adds manifest array sorting during plugin cleanup/restoration and updates logging.

Copilot's findings

Comments suppressed due to low confidence (2)

eng/validate-plugins.mjs:84

  • The new alphabetical check only covers agents and skills. plugin:clean and the documented plugin manifest schema also support commands, so a plugin with unsorted or invalid commands entries will still pass plugin:validate, which means canonical ordering is only enforced for two of the three spec arrays.

This issue also appears on line 93 of the same file.

  const specs = {
    agents: { prefix: "./agents/", suffix: ".md", repoDir: "agents", repoSuffix: ".agent.md" },
    skills: { prefix: "./skills/", suffix: "/", repoDir: "skills", repoFile: "SKILL.md" },
  };

eng/validate-plugins.mjs:95

  • This sortedness check runs before the element-type validation below. If a manifest contains a non-string entry, sortPluginEntries() will call localeCompare on that value and abort the whole validation run instead of reporting the existing field[i] must be a string error.
    if (!arraysEqual(arr, sortPluginEntries(arr))) {
      errors.push(`${field} must be sorted alphabetically`);
    }
  • Files reviewed: 26/26 changed files
  • Comments generated: 2

Comment on lines +7 to +12
"./agents/gem-designer-mobile.md",
"./agents/gem-designer.md",
"./agents/gem-devops.md",
"./agents/gem-documentation-writer.md",
"./agents/gem-implementer-mobile.md",
"./agents/gem-designer-mobile.md",
"./agents/gem-mobile-tester.md"
"./agents/gem-implementer.md",
Comment thread eng/clean-materialized-plugins.mjs Outdated
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@aaronpowell aaronpowell merged commit a119752 into staged May 4, 2026
5 checks passed
@aaronpowell aaronpowell deleted the plugin-automation-tidy-up branch May 4, 2026 02:00
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.

2 participants