fix: reject Java optimizations with unused additions and unchanged target method#1947
fix: reject Java optimizations with unused additions and unchanged target method#1947mashraf-222 wants to merge 1 commit intomainfrom
Conversation
…rget method Adds a wiring check in replace_function() that detects when the AI generates "optimizations" adding fields/helpers that the target method never references. Previously these passed through because benchmark noise produced fake speedups. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Claude finished @mashraf-222's task in 2m 32s —— View job PR Review Summary
Prek ChecksAll clean — Code ReviewBug: logger.info(
"Rejecting optimization: target method '%s' is unchanged and new additions %s are unreferenced.",
"target", # ← always logs "target", not the actual method name
addition_names,
)The function Misleading test name (
Logic correctness: the check is sound for the described cases The identity check (whitespace-normalized comparison), the word-boundary regex search, and the Duplicate DetectionNo duplicates detected. Python and JavaScript language modules have no equivalent Test CoverageAll 5 new tests pass. The test suite covers the key matrix:
One gap: no test for Last updated: 2026-04-01 |
Problem
The AI optimizer sometimes generates "optimizations" that add new fields or helper methods to a Java class without changing the target method at all. Because benchmark noise produces small timing variations, these fake optimizations pass the speedup critic and create PRs with no real improvement.
Example: 4 commons-lang PRs each added
private static final Supplier<String> NULL_SUPPLIER = Suppliers.nul();but the target methods (getJavaAwtHeadless,getJavaIoTmpdir, etc.) were never modified to use it — yet reported 7-151% speedups.Root Cause
replace_function()inreplacement.pyaccepts any optimization that changes the file, even if the target method body is identical to the original. The dedup check compares the entire candidate (function + helpers/fields), so adding a new field makes it "different" from the original, bypassing the identity check.Fix
Added
_has_unused_additions()inreplacement.pythat:This causes
replace_function_definitions_for_language()to returnFalse(no update), which skips the candidate.Validation
/home/ubuntu/e2e-sessions/2026-04-01_15-45_cf1081-unused-additions/Test Coverage
New
TestUnusedAdditionsRejectionclass with 5 tests:test_unchanged_method_with_unused_field_rejected— unchanged method + unused field → rejectedtest_unchanged_method_with_unused_helper_rejected— unchanged method + unused helper → rejectedtest_changed_method_with_used_field_accepted— changed method + used field → acceptedtest_changed_method_without_additions_accepted— normal optimization → acceptedtest_unchanged_method_with_used_helper_accepted— method uses new helper → acceptedCloses CF-1081