{"record":{"id":"e9c6299a782033c8","repo":"hasura/graphql-engine","slug":"cannot-create-migrations-directory-w","errorCode":null,"errorMessage":"cannot create migrations directory: %w","messagePattern":"cannot create migrations directory: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/cli.go","lineNumber":750,"sourceCode":"\n\tec.Config.HTTPClient.SetHeaders(ec.requestHeaders)\n\n\t// this populates the ec.Config.ServerConfig.HasuraServerInternalConfig\n\terr = ec.Config.GetHasuraInternalServerConfig(httpClient)\n\tif err != nil {\n\t\t// If config API is not enabled log it and don't fail\n\t\tec.Logger.Debugf(\n\t\t\t\"cannot get config information from server, this might be because config API is not enabled: %v\",\n\t\t\terr,\n\t\t)\n\t}\n\n\t// set name of migration directory\n\tec.MigrationDir = filepath.Join(ec.ExecutionDirectory, ec.Config.MigrationsDirectory)\n\tif _, err := os.Stat(ec.MigrationDir); stderrors.Is(err, fs.ErrNotExist) {\n\t\terr = os.MkdirAll(ec.MigrationDir, os.ModePerm)\n\t\tif err != nil {\n\t\t\treturn errors.E(op, fmt.Errorf(\"cannot create migrations directory: %w\", err))\n\t\t}\n\t}\n\n\tec.SeedsDirectory = filepath.Join(ec.ExecutionDirectory, ec.Config.SeedsDirectory)\n\tif _, err := os.Stat(ec.SeedsDirectory); stderrors.Is(err, fs.ErrNotExist) {\n\t\terr = os.MkdirAll(ec.SeedsDirectory, os.ModePerm)\n\t\tif err != nil {\n\t\t\treturn errors.E(op, fmt.Errorf(\"cannot create seeds directory: %w\", err))\n\t\t}\n\t}\n\n\tif ec.Config.Version >= V2 && ec.Config.MetadataDirectory != \"\" {\n\t\tif len(ec.Config.MetadataFile) > 0 {\n\t\t\tec.MetadataFile = filepath.Join(ec.ExecutionDirectory, ec.Config.MetadataFile)\n\t\t\tif _, err := os.Stat(ec.MetadataFile); stderrors.Is(err, fs.ErrNotExist) {\n\t\t\t\terr := os.WriteFile(ec.MetadataFile, []byte(\"\"), os.ModePerm)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn errors.E(op, err)","sourceCodeStart":732,"sourceCodeEnd":768,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/cli/cli.go#L732-L768","documentation":"A generic error signalling that some feature used in the metadata is not supported (yet) by this resolver/version. The message string carries the specifics of which feature was rejected.","triggerScenarios":"Using metadata constructs that are parsed but not implemented by the current resolver version (e.g. experimental syntax, newer metadata features on an older build), which the resolver detects and reports via UnsupportedFeature.","commonSituations":"Upgrading metadata to a newer format while the engine/resolver is older; enabling beta features without the corresponding feature flag; using constructs documented for a different edition.","solutions":["Read the message text to identify the unsupported feature and remove or replace it","Upgrade the engine/resolver to a version that supports the feature","Check feature flags that gate the feature"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"// treat as a capability probe: catch and degrade\nmatch resolve_metadata(&md) {\n    Err(e) if matches!(e, ResolveError::UnsupportedFeature { .. }) => fallback_metadata_without_feature(&md),\n    r => r,\n}","preventionTips":["Pin the metadata format version to what your engine build supports","Gate experimental features behind flags and test them in a staging environment first"],"tags":["metadata","unsupported-feature","compatibility"],"backgroundTag":"unsupported-metadata-feature","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}