{"record":{"id":"4fb604c79ab0c6dd","repo":"github/spec-kit","slug":"extension-requires-spec-kit-required-but-speck","errorCode":null,"errorMessage":"Extension requires spec-kit {required}, but {speckit_version} is installed.\\nUpgrade spec-kit with: {REINSTALL_COMMAND}","messagePattern":"Extension requires spec-kit (.+?), but (.+?) is installed\\.\\\\nUpgrade spec-kit with: (.+?)","errorType":"exception","errorClass":"CompatibilityError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/extensions/__init__.py","lineNumber":2039,"sourceCode":"        # Parse version specifier (e.g., \">=0.1.0,<2.0.0\")\n        # Defense in depth: the manifest validator now rejects a non-string\n        # requires.speckit_version, but this method is public and also reachable\n        # with a hand-built manifest object. ``InvalidSpecifier`` alone does not\n        # cover a non-string -- scalars raise TypeError from the constructor, and\n        # a list/dict is iterable so it constructs here and only breaks inside\n        # .contains(). Reject up front so this always reports a CompatibilityError.\n        if not isinstance(required, str):\n            raise CompatibilityError(\n                \"Invalid version specifier: expected a string, got \"\n                f\"{type(required).__name__} ({required!r})\"\n            )\n        try:\n            SpecifierSet(required)  # Just to validate\n        except InvalidSpecifier:\n            raise CompatibilityError(f\"Invalid version specifier: {required}\")\n\n        if not version_satisfies(speckit_version, required):\n            raise CompatibilityError(\n                f\"Extension requires spec-kit {required}, \"\n                f\"but {speckit_version} is installed.\\n\"\n                f\"Upgrade spec-kit with: {REINSTALL_COMMAND}\"\n            )\n\n        return True\n\n    def install_from_directory(\n        self,\n        source_dir: Path,\n        speckit_version: str,\n        register_commands: bool = True,\n        priority: int = 10,\n        link_commands: bool = False,\n        force: bool = False,\n    ) -> ExtensionManifest:\n        \"\"\"Install extension from a local directory.\n","sourceCodeStart":2021,"sourceCodeEnd":2057,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/extensions/__init__.py#L2021-L2057","documentation":"Error \"Extension requires spec-kit {required}, but {speckit_version} is installed.\\nUpgrade spec-kit with: {REINSTALL_COMMAND}\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/extensions/__init__.py:2039 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Upgrade spec-kit with the printed reinstall command, or install an extension version compatible with the installed spec-kit."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c","analyzedAt":"2026-08-14T19:43:37.150Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}