{"record":{"id":"6e67fcf9d39e74dd","repo":"github/spec-kit","slug":"invalid-version-specifier-expected-a-string-got","errorCode":null,"errorMessage":"Invalid version specifier: expected a string, got {type(required).__name__} ({required!r})","messagePattern":"Invalid version specifier: expected a string, got (.+?) \\((.+?)\\)","errorType":"exception","errorClass":"CompatibilityError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/extensions/__init__.py","lineNumber":2029,"sourceCode":"            speckit_version: Current spec-kit version\n\n        Returns:\n            True if compatible\n\n        Raises:\n            CompatibilityError: If extension is incompatible\n        \"\"\"\n        required = manifest.requires_speckit_version\n\n        # 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(","sourceCodeStart":2011,"sourceCodeEnd":2047,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/extensions/__init__.py#L2011-L2047","documentation":"Error \"Invalid version specifier: expected a string, got {type(required).__name__} ({required!r})\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/extensions/__init__.py:2029 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set requires.speckit_version in the manifest to a string version specifier such as '>=0.0.70'."],"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-15T22:17:37.221Z"}