Aligned the `agents actor run` command signature with the
specification by introducing positional NAME and PROMPT arguments.
The --config/-c option is preserved as an optional fallback for
direct YAML invocation. When NAME is provided without --config,
the actor is resolved from the Actor Registry.
Updated both actor_run.py and actor.py run commands. Added backward
compatibility: if --config is provided, it takes precedence over
name-based resolution.
Review fixes applied (code review round 1):
- P1-1: Narrowed bare `except Exception` to `except NotFoundError`
in _resolve_config_files to avoid masking infrastructure errors.
- P1-2: Moved _resolve_config_files call inside the try block in
run() so container/registry init errors get user-friendly messages.
Added `except click.exceptions.Exit: raise` to let typer.Exit
propagate through the broadened try scope.
- P1-3: Added atexit.register cleanup for temp files created by
_resolve_config_files (resource leak fix).
- P1-4: Added CHANGELOG.md entry for the breaking CLI change.
- P2-1: Extracted duplicated _resolve_config_files to shared module
`_resolve_actor.py`; both actor.py and actor_run.py now import it.
- P2-2: Added guard for actors with no configuration data
(config_blob=None) to produce a clear error instead of invalid YAML.
- P2-3/P2-4: Added 5 BDD scenarios exercising the real
resolve_config_files function (registry path, yaml_text path,
config_blob fallback, no-config-data error, not-found error).
- P2-5: Added @coverage tags to all new BDD scenarios.
- P3-1: Added timeout=120s and on_timeout=kill to Robot tests.
- Fixed rxpy_route_validation.robot tests that used the removed
--prompt/-p option (replaced with positional NAME + PROMPT args).
Review fixes applied (code review round 2):
- P2-1: Aligned actor_run.py exception handler from
`CleverAgentsException` to `CleverAgentsError`, matching actor.py
so infrastructure errors from registry resolution get user-friendly
messages instead of falling through to the generic handler.
- P2-2: Changed `yaml.dump` to `yaml.safe_dump` in _resolve_actor.py
for fail-fast behavior on unexpected types, consistent with the
codebase's dominant pattern.
- P3-6: Replaced defensive `getattr(actor, ...)` calls with direct
Pydantic model attribute access (`actor.yaml_text`, `actor.config_blob`)
for type-checker coverage.
- P3-1: Switched BDD temp file cleanup from post-assertion
`unlink()` to `context.add_cleanup()` for leak-proof teardown.
- P2-3/P3-2/P3-3/P3-4: Added 3 BDD edge-case scenarios
(empty config_blob dict, infrastructure error propagation, empty
string name) and 1 Robot test case (actor_app registry resolution).
Review fixes applied (code review round 3):
- P1-1: Migrated 48 remaining `-p` invocations across 9 Robot test
files to the new positional `NAME PROMPT` pattern (context_delete_all_yes,
load_context_test, scientific_paper_e2e_test, routing_prefix_stripping,
scientific_paper_basic, scientific_paper_writer_test,
context_management_test, initial_next_command_test,
system_prompt_template_rendering).
- P2-1: Documented `--config/-c` as a spec deviation in
`_resolve_actor.py` module docstring (spec lines 4562-4566 define
`actor run` with no --config option; issue #901 AC accepts keeping
it as optional).
- P2-2: Corrected `--config` help text from "fallback" to "overrides
registry-based name resolution" — the option takes precedence, not
the other way around.
- P3-1: Added `.strip()` to `yaml_text` emptiness check in
`_resolve_actor.py` to handle whitespace-only values that would
otherwise bypass the `config_blob` fallback.
- P3-2: Added `from None` to the no-configuration-data
`typer.Exit(code=2)` for consistency with the not-found path.
- P3-3: Added BDD scenario testing `--config` precedence for
`actor_run_app` (was only tested for `actor_app`).
- P3-4: Strengthened config_blob BDD scenario to verify generated
YAML is parseable via `yaml.safe_load` round-trip.
- P3-7: Replaced hardcoded `/tmp/dummy.yaml` with
`tempfile.gettempdir()` for portability.
- P3-8: Moved 5 inline imports to module level per CONTRIBUTING.md
§1292-1294 (3x `import click`, 1x InfrastructureError in steps;
1x `import typer` in robot helper).
- P3-9: Added `encoding="utf-8"` to `_write_yaml` in Robot helper
for consistency with production code.
Review fixes applied (code review round 4):
- P2-1: Wrapped `yaml.safe_dump` in `_resolve_actor.py` with
`try/except yaml.YAMLError` so non-serialisable config_blob values
produce a user-friendly error message instead of a raw traceback.
- P2-2: Moved remaining inline `import yaml` to module level in
`actor_run_signature_steps.py` per CONTRIBUTING.md §1292-1294.
- P2-3: Replaced 3 bare `assert` statements in Robot helper
`helper_actor_run_signature.py` with diagnostic `if/print/sys.exit`
pattern matching the rest of the file, improving failure diagnostics.
Review fixes applied (code review round 5):
- P3-4: Replaced per-call `atexit.register(lambda)` in
`_resolve_actor.py` with a module-level `_temp_files` set and a
single `atexit` handler (`_cleanup_temp_files`) to prevent
unbounded handler accumulation in same-process usage (e.g. test
suites running multiple CliRunner invocations).
- P3-1/P3-2/P3-3: Added 4 BDD scenarios: whitespace-only
`yaml_text` fallback to config_blob, config-precedence
registry-not-consulted assertion for both `actor_app` and
`actor_run_app`, multiple `--config` files with positional NAME.
- P4-1: Strengthened error-path BDD assertions to verify error
message content (not-found, no-config-data, serialisation-error)
alongside exit codes via captured stderr.
- P4-2: Added Robot test case for `actor_app` unknown-name error
path and corresponding helper function.
ISSUES CLOSED: #901
TDD expected-fail tests proving bug #822 exists:
CheckpointService.rollback_to_checkpoint() returns a successful
RollbackResult but does not execute git reset --hard. Files modified
after the checkpoint remain unchanged after rollback.
Also fixes Robot Framework timeout robustness across the entire test
suite: all Run Process calls now use on_timeout=kill (prevents
SIGTERM-induced -15 exit codes under CI load) and timeouts increased
to 120s (prevents premature kills during heavy parallel execution).
ISSUES CLOSED: #839
Remove the Require OpenAI Key keyword and its call from Suite Setup.
Tests now fail with a real error when OPENAI_API_KEY is absent,
providing honest signal instead of silently skipping.
- Fix resource_repository Behave scenario 'Resolve by ULID returns the
resource' by propagating res_type_name through context instead of
relying on fragile list_types() across SQLAlchemy sessions
- Increase subprocess timeouts in Robot Framework integration tests to
prevent SIGTERM kills under parallel execution load (10s->30s, 20s->60s,
30s->60s across 7 robot files)
- Avoid deleting the workspace when OPENAI_API_KEY is unset
by guarding cleanup and initializing CONTEXT_DIR
- Prevents downstream Robot suites from losing .nox venv and
resource files after the basic scientific paper suite is skipped
Three fixes targeting CI integration_tests failures (18 failures on e8aa5ac):
1. Merge duplicate *** Settings *** blocks in 14 robot files into single
blocks. Multiple Settings sections are non-standard RF practice and
may cause resource import failures in certain Robot Framework versions
or CI environments.
2. Replace bare 'python' with ${PYTHON} variable in all Run Process
calls (14 files). Noxfile now passes --variable PYTHON:<venv-path>
to robot so tests use the venv interpreter regardless of PATH. This
fixes '/usr/local/bin/python: No module named cleveragents' on CI.
3. Add comprehensive CI debug output in noxfile.py: file existence
checks for .resource files, PATH/Python resolution, fixture dir
checks, and RF version. This will diagnose any remaining resource
import issues.
Also: remove hardcoded '/app/src' sys.path.insert in
system_prompt_template_rendering.robot (not portable to CI), and
add trailing newline to common.resource.
All 204 tests pass locally (4 excluded: 2 slow, 2 discovery).
- Restore session.env["PATH"] in integration_tests nox session to ensure
Run Process uses venv Python instead of system Python
- Convert bare Resource references to ${CURDIR}/ absolute paths across
30 robot files to fix CI resolution failures
- Add timeout=30s to all Run Process calls in rxpy_route_validation.robot
to prevent hanging tests
- Tag 2 rxpy tests as slow (require running actors unavailable on CI)
- Fix LangGraph test to use correct config file (LANGGRAPH_CONFIG)
- All 204 tests pass (4 excluded: 2 slow + 2 discovery)