{"record":{"id":"a747def8fdb116ec","repo":"github/copilot-sdk","slug":"unknown-askuservariant-value-value","errorCode":null,"errorMessage":"Unknown AskUserVariant value: + value","messagePattern":"Unknown AskUserVariant value: \\+ value","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"java/sdk/src/main/java/com/github/copilot/rpc/AskUserVariant.java","lineNumber":57,"sourceCode":"     *\n     * @param value\n     *            the wire-format value\n     * @return the matching variant, or {@code null} when {@code value} is\n     *         {@code null}\n     * @throws IllegalArgumentException\n     *             if the value is not {@code legacy} or {@code elicitation}\n     */\n    @JsonCreator\n    public static AskUserVariant fromValue(String value) {\n        if (value == null) {\n            return null;\n        }\n        for (AskUserVariant variant : values()) {\n            if (variant.value.equals(value)) {\n                return variant;\n            }\n        }\n        throw new IllegalArgumentException(\"Unknown AskUserVariant value: \" + value);\n    }\n}\n","sourceCodeStart":39,"sourceCodeEnd":60,"githubUrl":"https://github.com/github/copilot-sdk/blob/cd8cf15dc3f9e762615790aaed0a771a0f392755/java/sdk/src/main/java/com/github/copilot/rpc/AskUserVariant.java#L39-L60","documentation":"AskUserVariant.fromValue converts a protocol string into its AskUserVariant enum constant. When the input matches none of the known variant values, it throws IllegalArgumentException. It exists to reject unrecognized ask-user prompt variants early rather than silently misclassifying them.","triggerScenarios":"Calling AskUserVariant.fromValue with an unknown string — a typo, wrong casing, or a variant added in a newer protocol/SDK version than the one in use.","commonSituations":"Deserializing RPC payloads from a newer server; hard-coded variant strings that drifted from the enum; user-configurable prompt variants validated only at runtime.","solutions":["Print the offending value and list AskUserVariant.values() to see accepted strings.","Correct the spelling/casing to match a documented variant.","Upgrade the SDK if the variant is from a newer protocol version.","Catch IllegalArgumentException around fromValue and fall back to a default variant for resilience against future values."],"exampleFix":"// before\nAskUserVariant v = AskUserVariant.fromValue(payload.variant);\n\n// after\nAskUserVariant v;\ntry {\n    v = AskUserVariant.fromValue(payload.variant);\n} catch (IllegalArgumentException e) {\n    v = AskUserVariant.DEFAULT;\n}","handlingStrategy":"validation","validationCode":"static boolean isKnownAskUserVariant(String v) {\n    for (AskUserVariant x : AskUserVariant.values()) {\n        if (x.name().equalsIgnoreCase(v)) return true;\n    }\n    return false;\n}","typeGuard":null,"tryCatchPattern":"try {\n    variant = AskUserVariant.fromValue(value);\n} catch (IllegalArgumentException e) {\n    variant = AskUserVariant.DEFAULT;\n}","preventionTips":["Normalize user/model-supplied variant strings before fromValue","Validate at deserialization boundaries so errors surface early","Pin SDK version to the server protocol version","Add an exhaustive test enumerating all accepted variant strings"],"tags":["java","enum","rpc","validation"],"backgroundTag":"invalid-enum-value","analyzedSha":"cd8cf15dc3f9e762615790aaed0a771a0f392755","analyzedAt":"2026-09-09T18:32:31.973Z","contentChangedAt":"2026-09-09T18:32:31.973Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}