diff --git a/.forgejo/workflows/benchmark-scheduled.yml b/.forgejo/workflows/benchmark-scheduled.yml index b30be4fd1..55fe12bb0 100644 --- a/.forgejo/workflows/benchmark-scheduled.yml +++ b/.forgejo/workflows/benchmark-scheduled.yml @@ -22,7 +22,7 @@ env: jobs: benchmark-regression: - if: github.event_name == 'schedule' && github.event.schedule == '0 2 * * *' || github.event_name == 'workflow_dispatch' && github.event.inputs.run_full_suite == 'false' + if: forgejo.event_name == 'schedule' && forgejo.event.schedule == '0 2 * * *' || forgejo.event_name == 'workflow_dispatch' && forgejo.event.inputs.run_full_suite == 'false' runs-on: docker timeout-minutes: 120 container: @@ -67,7 +67,7 @@ jobs: - name: Run benchmark regression via nox env: NOX_DEFAULT_VENV_BACKEND: uv - ASV_BASE_SHA: ${{ github.event.inputs.base_sha || 'master' }} + ASV_BASE_SHA: ${{ forgejo.event.inputs.base_sha || 'master' }} run: | mkdir -p build nox -s benchmark_regression 2>&1 | tee build/nox-benchmark-regression-output.log @@ -107,7 +107,7 @@ jobs: retention-days: 90 benchmark-full: - if: github.event_name == 'schedule' && github.event.schedule == '0 3 * * 0' || github.event_name == 'workflow_dispatch' && github.event.inputs.run_full_suite == 'true' + if: forgejo.event_name == 'schedule' && forgejo.event.schedule == '0 3 * * 0' || forgejo.event_name == 'workflow_dispatch' && forgejo.event.inputs.run_full_suite == 'true' runs-on: docker timeout-minutes: 180 container: diff --git a/.forgejo/workflows/master.yml b/.forgejo/workflows/master.yml index 0571f284a..c71b19e08 100644 --- a/.forgejo/workflows/master.yml +++ b/.forgejo/workflows/master.yml @@ -51,8 +51,26 @@ jobs: - name: Run asv continuous via nox env: - ASV_BASE_SHA: ${{ steps.hash.outputs.ASV_BASE_SHA }} + ASV_BASE_SHA: ${{ steps.hash.outputs.ASV_BASE_SHA }} + ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} run: | + mkdir -p build/asv/results + + # Check whether S3 baseline data exists before running benchmarks + HAS_BASELINE=false + if [ -n "${ASV_S3_BUCKET}" ] && [ -n "${AWS_ACCESS_KEY_ID}" ]; then + python -m pip install -q awscli + aws s3 ls "s3://${ASV_S3_BUCKET}/asv/results/" >/dev/null 2>&1 && HAS_BASELINE=true || true + fi + + if [ "${HAS_BASELINE}" = "false" ]; then + echo "Benchmark regression skipped: no S3 baseline results available to compare against." + mkdir -p build/asv/html + exit 0 + fi + nox -s benchmark_regression - name: Archive the results diff --git a/CHANGELOG.md b/CHANGELOG.md index 091344c93..78f1b3d3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -85,16 +85,6 @@ Changed `wf10_batch.robot` to be less likely to create files, and - **A2A module rename BDD test suite** (#8615): Comprehensive Behave tests validating that the ACP→A2A module rename is complete — verifying all 22 A2A symbols are properly exported, no legacy ACP references remain in `.py` files under `cleveragents.a2a/`, and the module docstring uses current A2A naming. The step definitions include self-contained symbol lookups to avoid cross-scenario dependency failures. -- Fixed `ReactiveEventBus.emit()` exception handler to log the full exception - message (`str(exc)`) and enable traceback forwarding (`exc_info=True`). - Previously the handler logged only the exception type name (e.g. - "ValueError") with no diagnostic detail, making production debugging - impossible. The handler now includes the error message text and full - traceback in the structlog warning entry. Removed `@tdd_expected_fail` tag - from the TDD test so both scenarios run as normal regression guards. (#988) - -### Added - - **`pr-review-worker` review-started notification** (#11028): The `first_review` and `re_review` modes now post a "review started" notification comment to the PR at the beginning of the review, giving PR authors immediate visibility @@ -104,6 +94,15 @@ Changed `wf10_batch.robot` to be less likely to create files, and - **Plan Rollback Command** (#8557): Implemented `agents plan rollback []` for checkpoint-based plan state restoration in Epic #8493. The command restores a plan's sandbox to the state captured at a given checkpoint, discarding all decisions made after that checkpoint. The checkpoint can be specified as an optional positional second argument or via the `--to-checkpoint` named option. Supports `--yes/-y` flag to skip confirmation prompts and `--format/-f` for output format selection (rich/plain/json/yaml). Included with comprehensive BDD test coverage (>= 97%) and spec-aligned output formatting showing rollback summary, changes reverted, impact analysis, and post-rollback state panels. ### Fixed + +- Fixed `ReactiveEventBus.emit()` exception handler to log the full exception + message (`str(exc)`) and enable traceback forwarding (`exc_info=True`). + Previously the handler logged only the exception type name (e.g. + "ValueError") with no diagnostic detail, making production debugging + impossible. The handler now includes the error message text and full + traceback in the structlog warning entry. Removed `@tdd_expected_fail` tag + from the TDD test so both scenarios run as normal regression guards. (#988) + - **Guard cleanup_stale against execute/processing and execute/complete plans** (#11121): ``_create_sandbox_for_plan()`` in ``src/cleveragents/cli/commands/plan.py`` now skips ``GitWorktreeSandbox.cleanup_stale()`` when the plan is in