JS E2E workflows only trigger on JS-related file changes, Python E2E
and unit test workflows skip when only JS/npm files change. Push to
main and workflow_dispatch remain unfiltered.
Generated tests were importing symbols like _EXTENSION_REGISTRY from the
wrong module because helper_function_names only contained first-degree
function/class helpers. The AI had no metadata about where module-level
variables lived, causing incorrect import paths and 0% test coverage.
File discovery used Path.rglob per extension, traversing excluded dirs
(e.g. .venv, node_modules) before filtering. Switch to a single os.walk
pass with in-place dirs[:] pruning. Each language now declares its own
dir_excludes patterns (exact, prefix*, *suffix) on the LanguageSupport
protocol, parsed by parse_dir_excludes() at walk time.
crosshair-tool doesn't support Python 3.15 yet. The dependency is now
conditional on python_version < 3.15, with a runtime guard that skips
concolic test generation when the package is absent.
Extend the publish workflow to handle both codeflash and codeflash-benchmark
releases from a single workflow file, triggered by their respective version
files. Also syncs benchmark __init__.py version to match pyproject.toml.
git_root_dir() searches from CWD (original repo), but in worktree mode
file paths have been remapped to the worktree. This caused relative_to()
to raise ValueError when creating PRs. Search from module_root instead
so root_dir is always in the same path space as the file paths.
In --worktree mode, get_git_diff resolves file paths from cwd (the
original repo), but module_root/project_root are mirrored to the
worktree. This caused filter_functions to reject all diff-discovered
functions as "outside module-root". Use the pre-mirror roots for
filtering, then remap file paths to the worktree for downstream use.
The optimized code removes `import time`, shifting all function lines
up by 1. Update expected_lines from [10-20] to [9-19] to match.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The e2e test expects codeflash to detect and fix the intentional use of
blocking time.sleep() in an async function. Using asyncio.sleep() removes
the optimization opportunity and causes the CI job to fail.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Write all three async decorator implementations into one helper file to
avoid overwrite issues when switching modes. Clean up the helper file in
revert_code_and_helpers and early-exit paths so it doesn't persist in the
user's project root after optimization.
Replace inline code injection with a helper file approach that writes
decorator implementations to a separate codeflash_async_wrapper.py file.
This removes the codeflash package import dependency from instrumented
source files while keeping line numbers stable (only 1 import + 1
decorator line added, same as before).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instead of injecting `from codeflash.code_utils.codeflash_wrap_decorator import ...`
into instrumented source files, inject the decorator function definitions directly.
This removes the hard dependency on the codeflash package being importable at runtime
in the target environment, matching the pattern already used for sync instrumentation.
The cross-region inference profile for Claude Opus 4.6 on Bedrock is
`us.anthropic.claude-opus-4-6-v1`, not `us.anthropic.claude-opus-4-6-v1:0`.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace Azure Foundry authentication with AWS Bedrock OIDC in all
Claude Code GitHub Actions workflows.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace deprecated license table format with modern license-files array
in both main package and codeflash-benchmark subpackage. This resolves
the setuptools deprecation warning about TOML table license format.
Changes:
- Use license-files = ["LICENSE"] instead of license = {text = "BSL-1.1"}
- Add LICENSE file to root directory
- Add LICENSE and README.md to codeflash-benchmark/
Extract shared helpers and remove dead code across the language support area:
- Extract `is_assignment_used()` and move `recurse_sections` to unused_definition_remover.py, replacing duplicated logic in both context files
- Extract `function_sources_to_helpers()` in support.py to unify identical HelperFunction construction
- Remove dead `get_comment_prefix()` method from protocol and all implementations (comment_prefix property serves all callers)