{"record":{"id":"00a2e64f4d879dcf","repo":"dagger/dagger","slug":"unsupported-recipe-input-literal-t","errorCode":null,"errorMessage":"unsupported recipe input literal %T","messagePattern":"unsupported recipe input literal %T","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"dagql/call_request_input.go","lineNumber":266,"sourceCode":"\tcase *call.LiteralObject:\n\t\tfields := make([]*ResultCallArg, 0, v.Len())\n\t\tfor _, field := range v.Args() {\n\t\t\tconverted, err := resultCallLiteralFromRecipeLiteral(ctx, field.Value(), memo)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"field %q: %w\", field.Name(), err)\n\t\t\t}\n\t\t\tfields = append(fields, &ResultCallArg{\n\t\t\t\tName:        field.Name(),\n\t\t\t\tIsSensitive: field.IsSensitive(),\n\t\t\t\tValue:       converted,\n\t\t\t})\n\t\t}\n\t\treturn &ResultCallLiteral{\n\t\t\tKind:         ResultCallLiteralKindObject,\n\t\t\tObjectFields: fields,\n\t\t}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unsupported recipe input literal %T\", lit)\n\t}\n}\n\nfunc resultCallArgFromInput(ctx context.Context, name string, input Input, sensitive bool) (*ResultCallArg, error) {\n\tif input == nil {\n\t\treturn nil, fmt.Errorf(\"nil input for arg %q\", name)\n\t}\n\tlit, err := resultCallLiteralFromInput(ctx, input)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"arg %q: %w\", name, err)\n\t}\n\treturn &ResultCallArg{\n\t\tName:        name,\n\t\tIsSensitive: sensitive,\n\t\tValue:       lit,\n\t}, nil\n}\n","sourceCodeStart":248,"sourceCodeEnd":284,"githubUrl":"https://github.com/dagger/dagger/blob/82ba2681dbe30d3547a1dc50ea495900ab5b6047/dagql/call_request_input.go#L248-L284","documentation":"This error is returned by resultCallLiteralFromRecipeLiteral when the recipe literal's concrete type matches none of the supported call.Literal variants (null, bool, int, float, string, bytes, enum, digested string, ID, list, object). The %T verb prints the actual Go type, making this an internal invariant violation: a new call.Literal implementation was added without extending this conversion switch.","triggerScenarios":"A *call.Argument's Value() returns a call.Literal implementation not covered by the switch — typically a newly added literal type from a newer engine while the conversion code is older, or a custom literal type injected in tests.","commonSituations":"SDK/engine version mismatch during upgrades; custom dagql extensions implementing call.Literal; corrupted or hand-crafted call IDs whose literal bytes deserialize into an unexpected type.","solutions":["Align SDK and Dagger engine versions so the literal type is one both sides know","Check the %T output in the message and verify whether it is a valid call.Literal type your Dagger version should support","If you maintain custom literals, extend resultCallLiteralFromRecipeLiteral with a case for the type","Report/upgrade if it is a core literal type — this indicates a missing conversion case"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"switch lit.(type) {\ncase *call.LiteralNull, *call.LiteralBool, *call.LiteralInt, *call.LiteralFloat,\n     *call.LiteralString, *call.LiteralBytes, *call.LiteralEnum,\n     *call.LiteralDigestedString, *call.LiteralID, *call.LiteralList, *call.LiteralObject:\n    // supported\ndefault:\n    return fmt.Errorf(\"unsupported literal %T\", lit)\n}","typeGuard":"func isSupportedLiteral(lit call.Literal) bool {\n    switch lit.(type) {\n    case nil, *call.LiteralNull, *call.LiteralBool, *call.LiteralInt,\n        *call.LiteralFloat, *call.LiteralString, *call.LiteralBytes,\n        *call.LiteralEnum, *call.LiteralDigestedString, *call.LiteralID,\n        *call.LiteralList, *call.LiteralObject:\n        return true\n    }\n    return false\n}","tryCatchPattern":"if err != nil && strings.HasPrefix(err.Error(), \"unsupported recipe input literal \") {\n    // check SDK/engine version mismatch; upgrade the older side\n}","preventionTips":["Keep SDK and engine versions in lockstep","Never inject custom call.Literal implementations into core paths","Pin Dagger CLI and SDK to compatible versions","Regenerate SDKs after engine upgrades"],"tags":["dagql","literal-conversion","version-skew"],"backgroundTag":"unsupported-literal-type","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"}