{"record":{"id":"61c4b28b92c46add","repo":"facebook/relay","slug":"expected-handler-arg-to-have-been-previously-valid-61c4b2","errorCode":null,"errorMessage":"Expected handler_arg to have been previously validated or a default to have been provided.","messagePattern":"Expected handler_arg to have been previously validated or a default to have been provided\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs","lineNumber":226,"sourceCode":"    let HandleFieldDirectiveArgs {\n        handler_arg,\n        filters_arg,\n        key_arg,\n        dynamic_key_arg,\n        handle_args_arg,\n    } = extract_handle_field_directive_args_helper(handle_field_directive, hanlder_arg_name);\n\n    // We expect these values to be available since they should've been\n    // validated first as part of validate_connections validation step.\n    let key = match key_arg {\n        Some((_, value)) => value\n            .get_string_literal()\n            .expect(\"Expected key_arg to have been previously validated.\"),\n        None => \"\".intern(),\n    };\n    let handle= match handler_arg {\n         Some((_, value)) => value.get_string_literal().expect(\"Expected handler_arg to have been previously validated.\"),\n         None => default_handler.expect(\"Expected handler_arg to have been previously validated or a default to have been provided.\"),\n     };\n    let filters = match filters_arg {\n        Some((_, value)) => match value {\n            ConstantValue::List(list_val) => Some(\n                list_val\n                    .iter()\n                    .map(|val| {\n                        val.get_string_literal()\n                            .expect(\"Expected filters_arg to have been previously validated.\")\n                    })\n                    .collect::<Vec<_>>(),\n            ),\n            ConstantValue::Null() => None,\n            _ => unreachable!(\"Expected filters_arg to have been previously validated.\",),\n        },\n        None => default_filters,\n    };\n    let dynamic_key = match dynamic_key_arg {","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/facebook/relay/blob/668b1b85e06261aa3b58dabfc51f8b5524a70955/compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs#L208-L244","documentation":"Unwrap guard in extract_values_from_handle_field_directive_helper: handler_arg must be a string literal because either the caller supplied a default handler or validate_connections validated it. Firing means neither a validated literal handler nor a usable default was present, i.e. the directive reached transform without validation and without a default.","triggerScenarios":"Thrown at compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs:226 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass default_handler when building handle field directives without an explicit handler argument","Guarantee validate_connections runs first so handler_arg is a validated string literal","Replace the expect with a diagnostic error surfacing the offending directive location"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"668b1b85e06261aa3b58dabfc51f8b5524a70955","analyzedAt":"2026-09-02T19:57:20.783Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}