{"record":{"id":"4edc17a801cec879","repo":"dagger/dagger","slug":"parse-rendered-as-sdk-for-q-w","errorCode":null,"errorMessage":"parse rendered as-sdk for %q: %w","messagePattern":"parse rendered as-sdk for %q: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/workspace/config_document.go","lineNumber":417,"sourceCode":"\tnames := make([]string, 0, len(modules))\n\tfor name, entry := range modules {\n\t\t// Preserve the marker even when empty: presence of AsSDK = \"this\n\t\t// install is an SDK,\" whether or not anything is authored yet.\n\t\tif entry.AsSDK != nil {\n\t\t\tnames = append(names, name)\n\t\t}\n\t}\n\tsort.Strings(names)\n\n\tfor _, name := range names {\n\t\tvar rendered strings.Builder\n\t\twriteModuleAsSDK(&rendered, \"modules.\"+formatConfigPathSegment(name), modules[name].AsSDK)\n\t\tif rendered.Len() == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tasSDKDoc, parseErr := tomledit.Parse(strings.NewReader(rendered.String()))\n\t\tif parseErr != nil {\n\t\t\treturn nil, fmt.Errorf(\"parse rendered as-sdk for %q: %w\", name, parseErr)\n\t\t}\n\t\tdoc.Sections = append(doc.Sections, asSDKDoc.Sections...)\n\t}\n\n\tvar buf bytes.Buffer\n\tvar formatter tomledit.Formatter\n\tif err := formatter.Format(&buf, doc); err != nil {\n\t\treturn nil, fmt.Errorf(\"format config after as-sdk rewrite: %w\", err)\n\t}\n\treturn buf.Bytes(), nil\n}\n\n// isModuleAsSDKHeading reports whether a section heading targets a module's\n// as-sdk sub-block (e.g. [modules.go-sdk.as-sdk], [[modules.go-sdk.as-sdk.modules]]).\nfunc isModuleAsSDKHeading(key []string) bool {\n\tif len(key) < 3 || key[0] != \"modules\" {\n\t\treturn false\n\t}","sourceCodeStart":399,"sourceCodeEnd":435,"githubUrl":"https://github.com/dagger/dagger/blob/82ba2681dbe30d3547a1dc50ea495900ab5b6047/core/workspace/config_document.go#L399-L435","documentation":"After stripping existing as-sdk sections, rewriteModuleAsSDKSections renders each module's as-sdk block into fresh TOML text and parses it back with tomledit before merging. If the internally-rendered TOML cannot be parsed, the error is wrapped as \"parse rendered as-sdk for %q\". This indicates generated TOML (from ModuleEntry.AsSDK) is invalid — usually a bug or corrupted module metadata, not user TOML.","triggerScenarios":"UpdateConfigBytes where writeModuleAsSDK renders an as-sdk block for a module and tomledit.Parse(strings.NewReader(rendered.String())) fails — e.g. a module name or nested as-sdk key/value that renders into invalid TOML (unescaped quotes or dots in segment names).","commonSituations":"A module whose name or as-sdk content contains characters requiring quoting that the renderer did not escape; Dagger CLI version mismatch where stored as-sdk state no longer renders validly.","solutions":["Check the module name in dagger.json for characters needing quoting and rename it to a bare-safe name.","Clear the corrupted as-sdk state: remove the module entry and re-add it via `dagger mod use` / CLI so as-sdk is regenerated.","Update the Dagger CLI to the latest version — a renderer bug producing invalid TOML may already be fixed."],"exampleFix":"// before: unescaped quote in rendered key makes generated TOML invalid\n[modules.bad]\n[modules.bad.as-sdk]\n\"ke\"y = true\n\n// after: safe names render valid TOML\n[modules.bad.as-sdk]\nkey = true","handlingStrategy":"validation","validationCode":"rendered := renderAsSDKTOML(entry) // replicate what writeModuleAsSDK emits\nif _, err := toml.Parse([]byte(rendered)); err != nil {\n    return fmt.Errorf(\"module %q as-sdk state renders invalid TOML: %w\", name, err)\n}","typeGuard":null,"tryCatchPattern":"if err := UpdateConfigBytes(...); err != nil {\n    if strings.Contains(err.Error(), \"parse rendered as-sdk\") {\n        // drop the offending module's as-sdk block from dagger.json and re-add via CLI\n    }\n}","preventionTips":["Rename modules whose names contain quotes or dots; unsafe names break generated TOML.","Keep the Dagger CLI and stored dagger.json as-sdk state from the same version generation.","After upgrading Dagger, re-run `dagger mod sync` so as-sdk state is regenerated cleanly."],"tags":["toml","config","as-sdk","codegen"],"backgroundTag":"toml-parse-error","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"}