Skip to content

skill-validator: bump per-plugin aggregate description cap from 15K to 20K (and document its informal origin)#655

Open
Evangelink wants to merge 2 commits into
dotnet:mainfrom
Evangelink:evang/bump-aggregate-description-cap
Open

skill-validator: bump per-plugin aggregate description cap from 15K to 20K (and document its informal origin)#655
Evangelink wants to merge 2 commits into
dotnet:mainfrom
Evangelink:evang/bump-aggregate-description-cap

Conversation

@Evangelink
Copy link
Copy Markdown
Member

What

Bumps MaxAggregateDescriptionLength in eng/skill-validator/src/Check/SkillProfiler.cs from 15,000 → 20,000 characters and adds a comment block documenting the origin of the cap and a follow-up TODO.

Why now

The dotnet-test plugin (22 skills) is now at ~14K aggregate description characters and bumping into the 15,000 ceiling on every meaningful description change. Recent PRs (#647, #652) had to micro-trim wording purely to stay under the limit. The next plugin growth will hit the cap regardless of authoring intent.

The cap is not a Copilot constraint

This is a local repo guardrail, not a documented Copilot/agentskills constraint. Evidence:

  1. Spec status: the agentskills.io specification defines per-skill description (1024), compatibility (500), and name (64) limits. It does not define any aggregate per-plugin cap. The MaxDescriptionLength = 1024 constant in this same file already cites the spec; the aggregate constant carried no citation comment.

  2. Origin: git log -S MaxAggregateDescriptionLength traces to PR Enforce description size limits and add spec conformance checks #238, which references issue Measure/limit "description" material #222. Issue Measure/limit "description" material #222 verbatim:

    "users may apply a limit to the total size of 'description' across all skills in a plugin (...). 15K characters was mentioned, we could choose smaller."

    Picked because it "was mentioned", with the issue itself acknowledging the value is approximate.

What this PR does

  • Bumps to 20,000. Round value, ~30 % headroom over the largest current plugin (dotnet-test ~14K) without making the cap meaningless.
  • Adds a TODO comment that (a) cites the agentskills.io spec, (b) records the informal origin (issue Measure/limit "description" material #222), and (c) flags the need to validate the guardrail against literature on skill-routing degradation and to run actual experiments before keeping or removing the check.

What we should investigate next (not this PR)

  • Literature: are there published studies on how aggregate description footprint affects router/selection accuracy in tool/skill ecosystems? Anthropic's "skill" routing, OpenAI tool-calling at scale, MCP servers — each has constraints we can mine.
  • Experiments: skill-validator already has the infrastructure to A/B measure activation accuracy with and without noise (see the --noise-skills-dir flag). We could deliberately inflate descriptions and measure the activation regression curve, then set the cap at an empirically-derived inflection point.

The cost concern in #222 is real (every description is loaded at startup for routing) — we just do not have evidence for the right ceiling. Until that evidence exists, the cap should be loose enough not to obstruct legitimate authoring.

What this PR does NOT do

  • Does not remove the cap.
  • Does not change per-skill limits.
  • Does not relax the per-skill 1024-char limit (which IS spec-mandated).

Validation

  • dotnet build eng/skill-validator/src passes.
  • dotnet test eng/skill-validator/tests 545/545 pass, including the four CheckCommandAggregateDescriptionTests cases (they reference the constant symbolically and continue to verify Under/At/Over/MultiplePlugins behaviour).

…o 20K

The dotnet-test plugin (22 skills) is now at ~14K aggregate description

characters and bumping into the 15,000 cap on every meaningful description

change. This blocks legitimate plugin growth on what is, on inspection, an

informal repo guardrail rather than a documented Copilot constraint.

Origin of the 15K number

Traced via 'git log -S MaxAggregateDescriptionLength' to PR dotnet#238,

which references issue dotnet#222. The issue verbatim says:

  `users may apply a limit to the total size of 'description' across`

  `all skills in a plugin (...). 15K characters was mentioned, we`

  `could choose smaller.`

So the value is informal — picked because it `was mentioned` and

explicitly leaving room to `choose smaller`.

Spec status

The agentskills.io specification (https://agentskills.io/specification)

documents per-skill description (1024), compatibility (500), and name

(64) limits. It does NOT define any aggregate per-plugin cap. The

`MaxDescriptionLength = 1024` constant in this same file already cites

the spec; the aggregate constant carried no citation comment.

What this PR does

- Bumps `MaxAggregateDescriptionLength` from 15,000 to 20,000. Picks a

  round value that gives ~30% headroom over the largest current plugin

  (dotnet-test ~14K) without making the cap meaningless.

- Adds a comment documenting the origin (informal, issue dotnet#222),

  the absence of a spec source, and a TODO to validate this guardrail

  against literature on skill-routing degradation and to run experiments

  (skill-validator already has the infrastructure to A/B-measure

  description noise vs activation accuracy).

What this PR does NOT do

- It does not remove the cap. The cost concern in dotnet#222 is real (every

  description is loaded at agent startup for routing); we just don't yet

  have evidence for the right ceiling.

- It does not change per-skill limits.

Validation

All 545 tests pass; the existing `CheckCommandAggregateDescriptionTests`

reference the constant symbolically and continue to pass with the new

value.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 15, 2026 15:49
@github-actions
Copy link
Copy Markdown
Contributor

Note

This PR is from a fork and modifies infrastructure files (eng/ or .github/).

Changes to infrastructure typically need to be submitted from a branch in dotnet/skills (not a fork) so that CI workflows run with the correct permissions and secrets.

Please consider recreating this PR from an upstream branch. If you don't have push access to dotnet/skills, ask a maintainer to push your branch for you.

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

Updates the skill-validator’s per-plugin aggregate description length guardrail to reduce friction as plugins (notably dotnet-test) grow, and documents the historical/unspecified nature of the aggregate cap relative to the agentskills.io spec.

Changes:

  • Increase MaxAggregateDescriptionLength from 15,000 to 20,000 characters.
  • Add explanatory comments documenting that the aggregate cap is a local repo policy (not a spec limit) and capturing its informal origin + follow-up TODOs.
Show a summary per file
File Description
eng/skill-validator/src/Check/SkillProfiler.cs Raises the aggregate description cap and adds context/TODO commentary about the cap’s origin and intent.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread eng/skill-validator/src/Check/SkillProfiler.cs Outdated
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 15, 2026 16:06
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.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment on lines +37 to +40
// spec defines per-skill description limits (1024 chars) but no aggregate
// limit. The original 15,000 was introduced in #238 / discussed in #222
// ("15K characters was mentioned, we could choose smaller") as an informal
// guardrail against bloated metadata costs at startup.
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