{"record":{"id":"90bf5506349a1806","repo":"golangci/golangci-lint","slug":"dependency-q-hasn-t-been-loaded-yet","errorCode":null,"errorMessage":"dependency %q hasn't been loaded yet","messagePattern":"dependency %q hasn't been loaded yet","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/goanalysis/runner_loadingpackage.go","lineNumber":240,"sourceCode":"}\n\nfunc (lp *loadingPackage) loadFromExportData() error {\n\tpkg := lp.pkg\n\n\t// Call NewPackage directly with explicit name.\n\t// This avoids skew between golist and go/types when the files'\n\t// package declarations are inconsistent.\n\t// Subtle: we populate all Types fields with an empty Package\n\t// before loading export data so that export data processing\n\t// never has to create a types.Package for an indirect dependency,\n\t// which would then require that such created packages be explicitly\n\t// inserted back into the Import graph as a final step after export data loading.\n\tpkg.Types = types.NewPackage(pkg.PkgPath, pkg.Name)\n\n\tpkg.IllTyped = true\n\tfor path, pkg := range pkg.Imports {\n\t\tif pkg.Types == nil {\n\t\t\treturn fmt.Errorf(\"dependency %q hasn't been loaded yet\", path)\n\t\t}\n\t}\n\n\tif pkg.ExportFile == \"\" {\n\t\treturn fmt.Errorf(\"no export data for %q\", pkg.ID)\n\t}\n\n\tf, err := os.Open(pkg.ExportFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tr, err := gcexportdata.NewReader(f)\n\tif err != nil {\n\t\treturn err\n\t}\n","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/golangci/golangci-lint/blob/ed7a235d2d771152056fdc142a9855567c5796a9/pkg/goanalysis/runner_loadingpackage.go#L222-L258","documentation":"While rebuilding types from export data, every imported package must already have its Types package materialized. If an import was not processed earlier in the load order, golangci-lint refuses to continue because it cannot link the type graph. This is an internal invariant violation of the export-data loading pass.","triggerScenarios":"pkg.Imports contains an entry whose Types is nil when loadFromExportData iterates imports — i.e. the dependency was not loaded before this package in the export-data pass (called via loadImportedPackageWithFacts).","commonSituations":"Build-cache/export-file inconsistencies after a Go upgrade; parallel loading race in exotic setups; vendored or replace directives producing unexpected load order.","solutions":["Run `go clean -cache` and retry the lint","Update golangci-lint to the latest version (this loader has had ordering fixes)","Verify go.mod replace/vendor directives don't create cycles or missing entries","Reproduce with GOFLAGS/GODEBUG off and minimal config to isolate tooling interference"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// treat as transient infra failure: clean cache and retry\nif strings.Contains(err.Error(), \"hasn't been loaded yet\") {\n    go clean -cache; rerun golangci-lint\n}","preventionTips":["Keep golangci-lint updated (loader ordering fixes)","Avoid unusual replace/vendor setups that break load order","Run lint in a clean, warmed CI environment"],"tags":["golangci-lint","export-data","package-loading"],"backgroundTag":"dependency-not-loaded","analyzedSha":"ed7a235d2d771152056fdc142a9855567c5796a9","analyzedAt":"2026-09-02T18:47:33.865Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}