{"record":{"id":"8a36cf65adbc0a2a","repo":"apache/iceberg","slug":"error-8a36cf","errorCode":null,"errorMessage":"==================================================================================\nAPI/ABI breaks detected.\nAdding RevAPI breaks should only be done after going through a deprecation cycle.\nPlease make sure to follow the deprecation rules defined in\nhttps://github.com/apache/iceberg/blob/main/CONTRIBUTING.md#semantic-versioning.\n==================================================================================","messagePattern":"==================================================================================\nAPI/ABI breaks detected\\.\nAdding RevAPI breaks should only be done after going through a deprecation cycle\\.\nPlease make sure to follow the deprecation rules defined in\nhttps://github\\.com/apache/iceberg/blob/main/CONTRIBUTING\\.md#semantic-versioning\\.\n==================================================================================","errorType":"console","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"build.gradle","lineNumber":150,"sourceCode":"subprojects {\n  if (it.name == 'iceberg-bom') {\n    // the BOM does not build anything, the code below expects \"source code\"\n    return\n  }\n\n  apply plugin: 'java-library'\n\n  if (project.name in REVAPI_PROJECTS) {\n    apply plugin: 'org.revapi.revapi-gradle-plugin'\n    revapi {\n      oldGroup = project.group\n      oldName = project.name\n      oldVersion = \"1.11.0\"\n    }\n\n    tasks.register('showDeprecationRulesOnRevApiFailure') {\n      doLast {\n        throw new RuntimeException(\"==================================================================================\" +\n                \"\\nAPI/ABI breaks detected.\\n\" +\n                \"Adding RevAPI breaks should only be done after going through a deprecation cycle.\" +\n                \"\\nPlease make sure to follow the deprecation rules defined in\\n\" +\n                \"https://github.com/apache/iceberg/blob/main/CONTRIBUTING.md#semantic-versioning.\\n\" +\n                \"==================================================================================\")\n      }\n      onlyIf {\n        tasks.revapi.state.failure != null\n      }\n    }\n\n    tasks.configureEach { rootTask ->\n      if (rootTask.name == 'revapi') {\n        rootTask.finalizedBy showDeprecationRulesOnRevApiFailure\n      }\n    }\n    \n    tasks.named(\"revapiAnalyze\").configure {","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/build.gradle#L132-L168","documentation":"When RevAPI detects API/ABI breaks, this task rethrows a RuntimeException with a detailed banner pointing to the project's semantic-versioning deprecation rules. RevAPI failures must be addressed via deprecation cycles or explicit break file updates.","triggerScenarios":"Running revApiCheck (or build with revapi enabled) after changing a public API in a module with revapi baseline checks, without updating the revapi breaks file.","commonSituations":"Renaming or removing public methods, changing method signatures, adding abstract interface methods without defaults in modules covered by revapi.","solutions":["Revert the breaking change or make it non-breaking (add a default method, keep old overload)","Deprecate the old API first and stage removal for a later major version","If the break is intentional and approved, update the revapi break/filter configuration with justification","Run ./gradlew revApiCheck locally before pushing"],"exampleFix":"// before: removing a public method directly\n// after\ndeprecated void oldMethod() { }\nvoid newMethod() { ... }","handlingStrategy":"validation","validationCode":"./gradlew revApiCheck --continue  # run before every push touching public APIs","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add default implementations to new interface methods","Deprecate before removal per semantic versioning rules","Run revApiCheck locally in pre-commit for API modules","Document approved breaks in revapi filter files with justification"],"tags":["revapi","api-compatibility","build"],"backgroundTag":"deprecated-api-usage","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}