github/spec-kit · error · ValidationError

Extension commands conflict with installed extensions:\n- {n

Error message

Extension commands conflict with installed extensions:\n- {name} (already provided by extension '{installed_names[name]}')

What it means

Error "Extension commands conflict with installed extensions:\n- {name} (already provided by extension '{installed_names[name]}')" thrown in github/spec-kit.

Source

Thrown at src/specify_cli/extensions/__init__.py:1200

                    if isinstance(alias, str):
                        installed_names.setdefault(alias, ext_id)

        return installed_names

    def _validate_install_conflicts(self, manifest: ExtensionManifest) -> None:
        """Reject installs that would shadow core or installed extension commands."""
        declared_names = self._collect_manifest_command_names(manifest)
        installed_names = self._get_installed_command_name_map(
            exclude_extension_id=manifest.id
        )

        collisions = [
            f"{name} (already provided by extension '{installed_names[name]}')"
            for name in sorted(declared_names)
            if name in installed_names
        ]
        if collisions:
            raise ValidationError(
                "Extension commands conflict with installed extensions:\n- "
                + "\n- ".join(collisions)
            )

    @staticmethod
    def _load_extensionignore(
        source_dir: Path,
    ) -> Optional[Callable[[str, List[str]], Set[str]]]:
        """Load .extensionignore and return an ignore function for shutil.copytree.

        The .extensionignore file uses .gitignore-compatible patterns (one per line).
        Lines starting with '#' are comments. Blank lines are ignored.
        The .extensionignore file itself is always excluded.

        Pattern semantics mirror .gitignore:
        - '*' matches anything except '/'
        - '**' matches zero or more directories
        - '?' matches any single character except '/'

View on GitHub (pinned to bf88c9f9a8)

Solutions

  1. Rename the conflicting commands in the extension manifest, or remove the already-installed extension that provides those names.

When it happens

Trigger: Thrown at src/specify_cli/extensions/__init__.py:1200 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of github/spec-kit@bf88c9f9a8 (2026-08-14). Data as JSON: /api/errors/316b55d5a8b8cf7a. Report an issue: GitHub.