{"record":{"id":"1eb960a3f388ae33","repo":"hashicorp/packer","slug":"w-the-checksum-entries-of-this-version-carry-no-p","errorCode":null,"errorMessage":"%w\nThe checksum entries of this version carry no plugin protocol version in their names, so the mirrored version must include its manifest.json, as published on releases.hashicorp.com","messagePattern":"%w\nThe checksum entries of this version carry no plugin protocol version in their names, so the mirrored version must include its manifest\\.json, as published on releases\\.hashicorp\\.com","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packer/plugin-getter/remote/getter.go","lineNumber":198,"sourceCode":"\t}\n\tversion := opts.VersionString()\n\tif _, ok := idx.versions[version]; !ok {\n\t\treturn nil, \"\", fmt.Errorf(\n\t\t\t\"version %s of %s is not listed in %s/%s/index.json\",\n\t\t\tversion, idx.pluginType, g.BaseURL, dir)\n\t}\n\treturn idx, g.BaseURL + \"/\" + dir + \"/\" + version, nil\n}\n\n// resolveProtocolVersion reads the plugin protocol version from a version's\n// manifest.json and caches it for Validate.\nfunc (g *Getter) resolveProtocolVersion(versionURL, pluginType, version string) error {\n\tif _, ok := g.protVersions[version]; ok {\n\t\treturn nil\n\t}\n\tdata, err := g.fetch(versionURL + \"/\" + pluginType + \"_\" + version + \"_manifest.json\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\n\t\t\t\"%w\\nThe checksum entries of this version carry no plugin protocol version in their names, so the mirrored version must include its manifest.json, as published on releases.hashicorp.com\", err)\n\t}\n\tvar meta plugingetter.ManifestMeta\n\tif err := json.Unmarshal(data, &meta); err != nil {\n\t\treturn fmt.Errorf(\"malformed manifest.json for version %s: %w\", version, err)\n\t}\n\tif meta.Metadata.ProtocolVersion == \"\" {\n\t\treturn fmt.Errorf(\"manifest.json for version %s declares no protocol_version\", version)\n\t}\n\tif g.protVersions == nil {\n\t\tg.protVersions = map[string]string{}\n\t}\n\tg.protVersions[version] = \"x\" + meta.Metadata.ProtocolVersion\n\treturn nil\n}\n\nfunc (g *Getter) Get(what string, opts plugingetter.GetOptions) (io.ReadCloser, error) {\n\tlog.Printf(\"[TRACE] Getting %s of %s plugin from %s\", what, opts.PluginRequirement.Identifier, g.Name)","sourceCodeStart":180,"sourceCodeEnd":216,"githubUrl":"https://github.com/hashicorp/packer/blob/eb36e3c3e48a036f3e8cc94087636ee72e1303c9/packer/plugin-getter/remote/getter.go#L180-L216","documentation":"Remote-mirror getter error from resolveProtocolVersion: fetching the version's manifest.json failed, and because the mirror's checksum entries don't embed a protocol version, the manifest is the only way to learn it — so the mirror must serve the manifest exactly as published on releases.hashicorp.com.","triggerScenarios":"Thrown at packer/plugin-getter/remote/getter.go:198 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add the {plugin}_{version}_manifest.json file to the mirror, matching the official release","Use the official releases.hashicorp.com endpoint instead of the mirror"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"eb36e3c3e48a036f3e8cc94087636ee72e1303c9","analyzedAt":"2026-09-05T13:20:43.127Z","contentChangedAt":"2026-09-05T13:20:43.127Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}