{"record":{"id":"5d0163a41baf179b","repo":"dagger/dagger","slug":"parse-module-registry-w","errorCode":null,"errorMessage":"parse module registry: %w","messagePattern":"parse module registry: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/cmd/dagger/mod.go","lineNumber":102,"sourceCode":"\t// The module is recommended when any pattern matches at least one file.\n\t// An empty list means never recommended.\n\tRecommend []string `json:\"recommend,omitempty\"`\n}\n\n// embeddedModuleRegistry is the registry baked in at build time.\n//\n//go:embed modules.json\nvar embeddedModuleRegistry []byte\n\n// loadModuleRegistry returns the embedded module registry.\nfunc loadModuleRegistry() ([]registryModule, error) {\n\treturn parseModuleRegistry(embeddedModuleRegistry)\n}\n\nfunc parseModuleRegistry(data []byte) ([]registryModule, error) {\n\tvar mods []registryModule\n\tif err := json.Unmarshal(data, &mods); err != nil {\n\t\treturn nil, fmt.Errorf(\"parse module registry: %w\", err)\n\t}\n\treturn mods, nil\n}\n\n// searchModuleRegistry returns modules whose name or description match query\n// (case-insensitive substring), sorted by name. An empty query returns all.\nfunc searchModuleRegistry(mods []registryModule, query string) []registryModule {\n\tout := make([]registryModule, 0, len(mods))\n\tq := strings.ToLower(query)\n\tfor _, m := range mods {\n\t\tif q == \"\" ||\n\t\t\tstrings.Contains(strings.ToLower(m.Name), q) ||\n\t\t\tstrings.Contains(strings.ToLower(m.Description), q) {\n\t\t\tout = append(out, m)\n\t\t}\n\t}\n\tsort.Slice(out, func(i, j int) bool { return out[i].Name < out[j].Name })\n\treturn out","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/dagger/dagger/blob/82ba2681dbe30d3547a1dc50ea495900ab5b6047/internal/cmd/dagger/mod.go#L84-L120","documentation":"This error wraps any failure to parse the embedded JSON module registry into a list of registryModule entries. It is thrown by parseModuleRegistry when json.Unmarshal of the compiled-in registry data fails. Because the registry data is embedded at build time, this almost always indicates a corrupted or malformed registry blob rather than a user-actionable problem.","triggerScenarios":"Calling parseModuleRegistry (directly or via loadModuleRegistry) when the embedded module registry JSON is malformed, has an unexpected schema (e.g. fields not matching registryModule), or fails to unmarshal into []registryModule.","commonSituations":"Corrupted build artifact or stale embedded registry after a schema change; a registry regeneration script emitted invalid JSON; running tests (TestParseModuleRegistry/TestEmbeddedModuleRegistryParses) against a hand-edited registry file.","solutions":["Regenerate or restore the embedded registry JSON so it is valid JSON matching []registryModule","Run 'dagger mod registry' style tests (TestParseModuleRegistry) to confirm the embedded data parses","Rebuild the binary so the embedded registry matches the current registryModule struct"],"exampleFix":"// before\nvar mods []registryModule\nif err := json.Unmarshal(data, &mods); err != nil {\n\treturn nil, fmt.Errorf(\"parse module registry: %w\", err)\n}\n// after\n// fix the source data instead of code:\n// regenerate embeddedModuleRegistry so that `json.Unmarshal(data, &[]registryModule{})` succeeds","handlingStrategy":"try-catch","validationCode":"var probe []registryModule\nif err := json.Unmarshal(embeddedModuleRegistry, &probe); err != nil {\n\t// surface build-time registry corruption early\n\tlog.Fatalf(\"embedded module registry invalid: %v\", err)\n}","typeGuard":"func isValidRegistry(data []byte) bool {\n\tvar mods []registryModule\n\treturn json.Unmarshal(data, &mods) == nil\n}","tryCatchPattern":"mods, err := parseModuleRegistry(embeddedModuleRegistry)\nif err != nil {\n\tvar ue *json.UnmarshalTypeError\n\tif errors.As(err, &ue) { /* schema mismatch handling */ }\n\treturn fmt.Errorf(\"registry unavailable: %w\", err)\n}","preventionTips":["Validate the embedded registry in CI (TestParseModuleRegistry) at build time","Regenerate the registry via the standard script instead of hand-editing JSON","Add a schema check whenever registryModule struct fields change"],"tags":["json","registry","parsing","embedded-data"],"backgroundTag":"json-unmarshal-failed","analyzedSha":"82ba2681dbe30d3547a1dc50ea495900ab5b6047","analyzedAt":"2026-09-05T07:21:37.930Z","contentChangedAt":"2026-09-05T07:21:37.930Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}