Skip to content

[Bug]:  integration upgrade overwrites extension-and preset- provided Copilot skills #3849

Description

@dtimon

Bug Description

When an extension or preset provides a command override, the command is correctly registered in Copilot skills mode. However, running:

specify integration upgrade --force

regenerates  .github/skills/*/SKILL.md  from the core command templates and removes the command content supplied by installed extensions or presets.

Environment

• Spec Kit:  0.14.2 
• Integration: Copilot
• Mode:  --integration-options="--skills" 
• Affected assets: extensions and presets that provide command overrides

Steps to Reproduce

specify extension add --dev /path/to/extension

or

specify preset add --dev /path/to/preset

Verify that the generated skill contains custom command content. Then run:

specify integration upgrade --force

Inspect the skill again:

grep -n "custom marker or command-specific text" \ .github/skills/<skill-name>/SKILL.md

The extension- or preset-specific content is gone.

Expected Behavior

 integration upgrade  should preserve the effective command content from all active layers:

  1. Project overrides
  2. Presets
  3. Extensions
  4. Core templates

Generated  SKILL.md  files should reflect the highest-priority effective command, including  wrap ,  prepend , and  append  composition strategies.

Actual Behavior

 integration upgrade  rewrites skills from the core command templates only. This removes active extension and preset command overrides, even though those assets remain installed and registered.

The registry may still list the corresponding entries under  registered_skills , but the generated files no longer contain their effective content.

Specify CLI Version

0.14.2

AI Agent

GitHub Copilot

Operating System

macOS 26.5.1

Python Version

3.14.6

Error Logs

Additional Context

Root cause

Extension and preset installation paths perform command registration and skill reconciliation. The integration upgrade path regenerates integration files afterward but does not reconcile the active extension and preset command layers.

Suggested fix

After an integration upgrade regenerates agent skills, run the same reconciliation logic used after extension and preset installation/removal.

The reconciliation should:

• Resolve the effective command for each registered command.
• Apply the complete extension/preset/core composition stack.
• Generate the corresponding  SKILL.md  with the correct integration frontmatter.
• Preserve user-managed files according to the existing manifest/hash rules.
• Avoid changing unrelated integrations or skills.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions