{"record":{"id":"e8c9c1a750bbbfff","repo":"facebook/relay","slug":"expected-key-arg-to-have-been-previously-validated","errorCode":null,"errorMessage":"Expected key_arg to have been previously validated.","messagePattern":"Expected key_arg to have been previously validated\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs","lineNumber":221,"sourceCode":"    handle_field_directive: &Directive,\n    hanlder_arg_name: ArgumentName,\n    default_handler: Option<StringKey>,\n    default_filters: Option<Vec<StringKey>>,\n) -> HandleFieldDirectiveValues {\n    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,","sourceCodeStart":203,"sourceCodeEnd":239,"githubUrl":"https://github.com/facebook/relay/blob/668b1b85e06261aa3b58dabfc51f8b5524a70955/compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs#L203-L239","documentation":"Unwrap guard in extract_values_from_handle_field_directive_helper: key_arg must already be a string literal because the @handle_field @connection arguments were validated earlier by the validate_connections validation step. Firing means the directive reached transform code without that validation pass, e.g. an externally injected or malformed @handle_field directive lacking a literal key.","triggerScenarios":"Thrown at compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs:221 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure validate_connections runs before handle_fields transforms in the compiler pipeline","Verify @handle_field directives are only introduced internally with literal string keys","Add a pre-check for string literal keys and emit a proper diagnostic instead of panicking"],"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"}