{"record":{"id":"b4d65c237b1bda4e","repo":"elastic/elasticsearch","slug":"transportversion-fromname-was-used-at-bu","errorCode":null,"errorMessage":"TransportVersion.fromName(\"{}\") was used at {}, but lacks a transport version definition. If this is a new transport version, run './gradlew generateTransportVersion'.","messagePattern":"TransportVersion\\.fromName\\(\"(.+?)\"\\) was used at (.+?), but lacks a transport version definition\\. If this is a new transport version, run '\\./gradlew generateTransportVersion'\\.","errorType":"exception","errorClass":"VerificationException","httpStatus":null,"severity":"error","filePath":"build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionReferencesTask.java","lineNumber":56,"sourceCode":"    @InputDirectory\n    @Optional\n    @PathSensitive(PathSensitivity.RELATIVE)\n    public Path getDefinitionsDir() {\n        return getTransportResources().get().getDefinitionsDir();\n    }\n\n    @InputFile\n    @PathSensitive(PathSensitivity.RELATIVE)\n    public abstract RegularFileProperty getReferencesFile();\n\n    @TaskAction\n    public void validateTransportVersions() throws IOException {\n        Path namesFile = getReferencesFile().get().getAsFile().toPath();\n        TransportVersionResourcesService resources = getTransportResources().get();\n\n        for (var tvReference : TransportVersionReference.listFromFile(namesFile)) {\n            if (resources.referableDefinitionExists(tvReference.name()) == false) {\n                throw new VerificationException(\n                    \"TransportVersion.fromName(\\\"\"\n                        + tvReference.name()\n                        + \"\\\") was used at \"\n                        + tvReference.location()\n                        + \", but lacks a transport version definition. \"\n                        + \"If this is a new transport version, run './gradlew generateTransportVersion'.\"\n                );\n            }\n        }\n    }\n}\n","sourceCodeStart":38,"sourceCodeEnd":68,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionReferencesTask.java#L38-L68","documentation":"Thrown by ValidateTransportVersionReferencesTask, which scans a generated list of every TransportVersion.fromName(\"...\") call site in the source tree and confirms each referenced name has a corresponding transport-version definition. A missing definition means the source references a version name that the versioning machinery does not know about, so bwc serialization would fail at runtime.","triggerScenarios":"A developer adds TransportVersion.fromName(\"my_new_thing\") in server/module code but never ran './gradlew generateTransportVersion' to emit the definition and upper-bound resource files. The validation task reads the references file (collected by a codegen/scan task) and fails the build on the first unknown name.","commonSituations":"New wire-format change introduced without regenerating version resources; a typo in the version name string; rebasing onto a branch where the referenced definition was removed or renamed; CI running the validate task before the generate task in a dirty tree.","solutions":["Run './gradlew generateTransportVersion' from the repo root — this creates the definition and upper-bound entries the reference needs.","If the reference is itself the mistake (typo or leftover from a refactor), correct or remove the TransportVersion.fromName(...) call at the location printed in the message.","Commit the newly generated resource files alongside the source change so the validate task passes on CI."],"exampleFix":"// before\nprivate static final TransportVersion FOO = TransportVersion.fromName(\"foo_bar_added\");\n// missing definition -> run:\n//   ./gradlew generateTransportVersion\n// after: definition + upper bound files generated and committed","handlingStrategy":"validation","validationCode":"// After adding any TransportVersion.fromName(\"...\") call, run:\n//   ./gradlew generateTransportVersion\n// then commit the generated resource files before running the validate task.","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always run './gradlew generateTransportVersion' immediately after introducing a new TransportVersion.fromName reference.","Add a pre-commit check that fails if a fromName reference lacks a definition file.","Keep generated transport-version resources committed in the same PR as the source change."],"tags":["build","gradle","transport-version","versioning","codegen"],"backgroundTag":null,"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}