{"record":{"id":"f89b5c151aa269e5","repo":"microsoft/aspire","slug":"aspire-skills-bundle-manifest-must-specify-supported-aspire","errorCode":null,"errorMessage":"Aspire skills bundle manifest must specify supported Aspire versions.","messagePattern":"Aspire skills bundle manifest must specify supported Aspire versions\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundleProvider.cs","lineNumber":630,"sourceCode":"        foreach (var sourceFile in Directory.GetFiles(sourceDirectory, \"*\", SearchOption.AllDirectories))\n        {\n            var relativePath = Path.GetRelativePath(sourceDirectory, sourceFile);\n            var targetFile = Path.Combine(targetDirectory, relativePath);\n            var targetFileDirectory = Path.GetDirectoryName(targetFile);\n            if (!string.IsNullOrEmpty(targetFileDirectory))\n            {\n                Directory.CreateDirectory(targetFileDirectory);\n            }\n\n            File.Copy(sourceFile, targetFile, overwrite: true);\n        }\n    }\n\n    private static void ValidateCompatibility(SkillBundleSupports? supports, string currentCliVersion, string currentSdkVersion)\n    {\n        if (supports is null)\n        {\n            throw new InvalidOperationException(\"Aspire skills bundle manifest must specify supported Aspire versions.\");\n        }\n\n        if (string.IsNullOrWhiteSpace(supports.AspireCli))\n        {\n            throw new InvalidOperationException(\"Aspire skills bundle manifest must specify supports.aspireCli.\");\n        }\n\n        if (!IsVersionInRange(currentCliVersion, supports.AspireCli))\n        {\n            throw new InvalidOperationException(string.Format(\n                CultureInfo.InvariantCulture,\n                \"Aspire skills bundle supports Aspire CLI versions '{0}', but the current CLI version is '{1}'.\",\n                supports.AspireCli,\n                currentCliVersion));\n        }\n\n        if (!string.IsNullOrWhiteSpace(supports.AspireSdk) &&\n            !IsVersionInRange(currentSdkVersion, supports.AspireSdk))","sourceCodeStart":612,"sourceCodeEnd":648,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundleProvider.cs#L612-L648","documentation":"ValidateCompatibility requires the bundle's skill-manifest.json to declare a 'supports' object describing compatible Aspire versions. If supports is absent (null), the provider refuses to install the bundle because it cannot verify CLI/SDK compatibility.","triggerScenarios":"Installing a bundle whose skill-manifest.json omits the supports node entirely; ValidateCompatibility is invoked from CreateBundle after loading the manifest.","commonSituations":"Hand-authored or older bundle manifests predating the supports schema, manifests copied from templates that omit optional-looking fields, or schema drift after the CLI added compatibility checking.","solutions":["Add a supports section with aspireCli (and optionally aspireSdk) to skill-manifest.json in the bundle","Regenerate the bundle using the current bundle authoring tooling so the manifest includes supports","Use a bundle version known to target your CLI"],"exampleFix":"// before (skill-manifest.json)\n{\n  \"name\": \"my-skills\"\n}\n// after\n{\n  \"name\": \"my-skills\",\n  \"supports\": {\n    \"aspireCli\": \">=9.0.0\",\n    \"aspireSdk\": \">=9.0.0\"\n  }\n}","handlingStrategy":"validation","validationCode":"var manifest = JsonSerializer.Deserialize<SkillBundleManifest>(json);\nif (manifest?.Supports is null)\n    throw new InvalidOperationException(\"skill-manifest.json must include a 'supports' object before distribution.\");","typeGuard":"bool HasSupports(SkillBundleManifest? m) => m?.Supports is not null;","tryCatchPattern":"try\n{\n    await installer.InstallAsync(bundleRef);\n}\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"must specify supported Aspire versions\"))\n{\n    logger.LogError(ex, \"Bundle manifest lacks a supports section; request a manifest update from the bundle author.\");\n}","preventionTips":["Include a supports block in every skills bundle manifest","Validate manifests against the bundle schema in CI before publishing","Regenerate bundles with current authoring tooling after schema changes"],"tags":["cli","skills-bundle","manifest-validation","versioning"],"backgroundTag":"missing-required-config-field","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}