Repository navigation
fix: reduce wasted 0.0 children from bad transposes and bare harness calls - #880
Merged
Merged
Conversation
…calls Two independent causes of children that die before warming the JIT (0.0 score): 1. BlockTransposerMutator moved a random 3-statement block to a random position with no regard for name dependencies, frequently placing a variable/class/function use before its definition -> UnboundLocalError. It now only moves a block that is INDEPENDENT of the rest of the body (no bound/loaded name crosses the block boundary), which is safe by construction. 2. Only the uop seed family wrapped the harness invocation. The bug_pattern family wrapped the harness body but called it bare, and synthesize had no wrapping, so ordinary breakage (use-before-def, TypeError, IndexError) escaped to module level and exited the process 1. bug_pattern/synthesize seeds now emit a wrapped call, and FuzzerSetupNormalizer wraps any bare top-level uop_harness_*() call so existing corpus lineages self-heal. On a reproduction over the real corpus these raised the clean-run rate from 58% to 93% (all escaping UnboundLocalError/TypeError/IndexError eliminated). Closes #879 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to the 0.0-score investigation. Two independent causes of children that die before warming the JIT:
BlockTransposerMutatorcreated use-before-def. It moved a random 3-statement block to a random position with no regard for name dependencies, frequently placing a variable/class/function use before its definition →UnboundLocalError. It now only moves a block that is independent of the rest of the body (no bound/loaded name crosses the block boundary) — safe by construction.2/3 seed families invoked the harness bare. Only the
uopfamily wrapped the call;bug_patternwrapped the harness body but called it bare, andsynthesizehad no wrapping — so ordinary breakage (use-before-def,TypeError,IndexError) escaped to module level and exited the process 1.bug_pattern/synthesizeseeds now emit a wrapped call, andFuzzerSetupNormalizerwraps any bare top-leveluop_harness_*()call so existing corpus lineages self-heal.Impact (reproduction over the real jit_run9 corpus, 200 children / 8 parents)
Test plan
BlockTransposerMutator:_collect_names, skips cross-dependency transpose, keeps independent transpose, runtime no-UnboundLocalError.FuzzerSetupNormalizer: wraps a bareuop_harness_*()call; leaves the uop for/try loop untouched.jit_seeds: bug_pattern and synthesize invocations are wrapped in try/except.ruffclean;mypy lafleur/adds no new errors.Closes #879
🤖 Generated with Claude Code