diff --git a/CHANGELOG.md b/CHANGELOG.md index 32b3d8161..ff686c00b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,55 @@ All notable changes to this project will be documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +Changed `wf10_batch.robot` to be less likely to create files, and +`plan_generation_graph.robot` to give more test answers. + +- Hardened the TDD bug-fix quality gate for issue #629: PR parsing now + requires whole-word closing keywords (avoids false positives like + "prefixes #12"), TDD bug tag discovery now uses exact token matching + (avoids `@tdd_bug_42` matching `@tdd_bug_420`), and gate evaluation now + requires expected-fail tag removal to be present in the PR diff. CI + integration now fetches the PR base branch for diff analysis and includes + `tdd_quality_gate` in `status-check` requirements for pull requests. + Review-round fixes: `check_expected_fail_removed` now uses word-boundary + matching via `_contains_tag_token` (avoids false positives on partial tag + names); diff expected-fail removal detection now tracks flags at file level + instead of per-hunk (fixes false negatives when tags span different hunks); + `parse_bug_refs` filters out issue number zero; redundant double error + reporting eliminated; regex compilation cached via `lru_cache`; nox session + no longer installs the full project (script uses stdlib only); CI checkout + uses `fetch-depth: 0` for reliable merge-base resolution. + Review-round 2 fixes: diff expected-fail removal detection now requires the + removed line to contain both the expected-fail tag and the specific bug tag + (fixes false positives when two bugs' TDD tests reside in the same file); + `check_expected_fail_removed` error messages now use the correct tag prefix + per file type (`@tdd_bug_N` for `.feature`, `tdd_bug_N` for `.robot`); + `bool` values are now rejected by bug-number validation guards; file-read + error handling in `find_tdd_tests` and `check_expected_fail_removed` now + catches `UnicodeDecodeError` (root-safe unreadable-file handling); temp + directory cleanup added to `after_scenario` hook; 8 new Behave scenarios + covering bool guards, co-located bug false-positive, `run_quality_gate` + argument validation, and `main()` CLI entry point. + Review-round 3 fixes: synthetic PR diff helper now auto-detects `.robot` + vs `.feature` file type and generates the matching diff format (fixes + under-tested robot-format diff code path); `check_expected_fail_removed` + test step now filters files by bug tag via `find_tdd_tests` before + checking (matches the production code path); `after_scenario` temp + directory cleanup no longer sets `context.temp_dir = None` (fixes + cleanup conflict with `cli_init_yes_flag_steps.py`); 2 new Behave + scenarios covering multi-line PR description parsing and non-string + `pr_diff` type guard. +- Added Fix-then-Revalidate orchestration loop for required validations: + bounded retry with configurable limits (0--100 per Safety Profile), + strategy revision escalation via `auto_strategy_revision` float + threshold, user escalation via `needs_user_escalation` result flag, + and domain events (`VALIDATION_FIX_ATTEMPTED`, `VALIDATION_FIX_SUCCEEDED`, + `VALIDATION_FIX_EXHAUSTED`). Validation errors are treated as required + failures regardless of mode. Includes `auto_validation_fix` threshold, + per-resource retry tracking, early-exit signalling via `None` return from + `FixCallback`, event bus circuit breaker with lock-protected failure + counter, spec-required `validation_summary` and + `final_validation_results` fields on the result model, DI container ## [Unreleased] @@ -15,13 +64,13 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - **`agents session tell` invokes real LLM orchestrator actor** (#5784): Replaced the M3 echo-stub with real actor invocation via `SessionWorkflow`, routing through - `LangChainSessionCaller` → `ToolCallingRuntime.run_tool_loop()`. The user prompt + `LangChainSessionCaller` → `ToolCallingRuntime.run_tool_loop()`. The user prompt is sent to the session's bound orchestrator actor (or `--actor` override), the assistant's response is persisted via `SessionService.append_message()`, and token - usage is tracked via `SessionService.update_token_usage()`. Output includes a + usage is tracked via `SessionService.update_token_usage()`. Output includes a **Usage** panel (Rich/Plain) or `usage` object (JSON/YAML) with input tokens, - output tokens, estimated cost, and duration. The `--stream` flag produces real - LLM streaming output. A `SessionActorNotConfiguredError` is raised with exit + output tokens, estimated cost, and duration. The `--stream` flag produces real + LLM streaming output. A `SessionActorNotConfiguredError` is raised with exit code 1 when no actor is configured. ### Added @@ -72,12 +121,12 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). scenario was previously fixed in #4300; the test ensures the fix remains in place and prevents future regressions. -- **Actor configuration validation incorrectly requires top-level provider field** (#4300): - Actor configuration in V3 is now obtained from the nested configuration - parameter, according to the specification. - Removed the legacy V2 fallback support and the tests affected by that - removal. Mocked existing steps to allow remaining V2 features to be - covered/tested. +- **Actor configuration validation incorrectly requires top-level provider field** (#4300): + Actor configuration in V3 is now obtained from the nested configuration + parameter, according to the specification. + Removed the legacy V2 fallback support and the tests affected by that + removal. Mocked existing steps to allow remaining V2 features to be + covered/tested. - **TUI Prompt Symbol Mode Awareness** (#6431): The prompt widget now displays a mode-dependent symbol (`❯` normal, `/` command, `$` shell, `☰` multi-line), @@ -86,47 +135,47 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). available, and a `_FallbackPromptInput` otherwise. Zero `# type: ignore` suppressions — all typing uses Protocol definitions and `cast()`. - **Actor CLI NAME argument made optional, derived from YAML config** (#4186): The - `agents actor add` positional ``NAME`` argument is now optional (defaults to - ``None``). When omitted, the actor name is derived from the ``name`` field in - the config file. Raises ``BadParameter`` if neither the argument nor the config - ``name`` field is provided. Updated docstring signature to - ``agents actor add [--config|-c ] []`` and added config-only usage - examples. Added Behave scenario for the ``BadParameter`` error path - (``actor add without NAME and without config name field raises BadParameter``) - in ``features/actor_add_name_positional.feature`` with corresponding step + `agents actor add` positional `NAME` argument is now optional (defaults to + `None`). When omitted, the actor name is derived from the `name` field in + the config file. Raises `BadParameter` if neither the argument nor the config + `name` field is provided. Updated docstring signature to + `agents actor add [--config|-c ] []` and added config-only usage + examples. Added Behave scenario for the `BadParameter` error path + (`actor add without NAME and without config name field raises BadParameter`) + in `features/actor_add_name_positional.feature` with corresponding step definition. Updated step definitions in - ``features/steps/actor_add_update_enforcement_steps.py`` and - ``features/steps/actor_add_name_positional_steps.py`` to pass ``context.actor_name`` + `features/steps/actor_add_update_enforcement_steps.py` and + `features/steps/actor_add_name_positional_steps.py` to pass `context.actor_name` as a positional argument for compatibility. - **Improved parallel test suite isolation** (#4186): Replaced deprecated - ``tempfile.mktemp`` with ``tempfile.mkstemp`` in ``features/environment.py`` + `tempfile.mktemp` with `tempfile.mkstemp` in `features/environment.py` for atomic temp file creation, eliminating TOCTOU race conditions in the - per-scenario database path generation. Added ``fcntl.flock`` file locking to - ``_ensure_template_db()`` to prevent race conditions when multiple - ``behave-parallel`` workers attempt to create the template database + per-scenario database path generation. Added `fcntl.flock` file locking to + `_ensure_template_db()` to prevent race conditions when multiple + `behave-parallel` workers attempt to create the template database simultaneously. - **Removed stale @tdd_expected_fail tags from actor add enforcement tests**: The - ``--update`` enforcement feature (#2609) was already implemented and merged but - residual ``@tdd_expected_fail`` tags remained on its BDD scenarios. These tags - were cleaned up in ``features/actor_add_update_enforcement.feature`` so the + `--update` enforcement feature (#2609) was already implemented and merged but + residual `@tdd_expected_fail` tags remained on its BDD scenarios. These tags + were cleaned up in `features/actor_add_update_enforcement.feature` so the tests report correctly now that the underlying bug has been fixed. - **Resolved Behave AmbiguousStep collisions in step definitions** (#4186): Renamed step texts to avoid case-sensitive collisions between different step modules that prevented all Behave tests from loading. Renamed steps in - ``edge_case_plan_steps.py``, ``plan_executor_coverage_boost_steps.py``, - ``plan_explain_steps.py``, ``plan_model_steps.py``, ``project_repository_steps.py``, - ``service_retry_wiring_steps.py``, and ``session_model_steps.py``. - Additionally resolved a collision between ``acms_index_data_model_traversal_steps.py`` - and ``security_audit_steps.py`` for ``Then the count should be``, and fixed - ``pr_compliance_checklist_steps.py`` project-root resolution (``parents[3]`` → - ``parents[2]``). Fixed table column-header mismatches in - ``features/acms/index_data_model_and_traversal.feature`` and guarded - ``cli_init_yes_flag_steps.py`` cleanup against ``None`` temp_dir. Annotated - ``features/architecture.feature`` ``@tdd_expected_fail`` for pre-existing Pydantic - compliance debt in ``IndexEntry`` / ``ACMSIndex`` classes. + `edge_case_plan_steps.py`, `plan_executor_coverage_boost_steps.py`, + `plan_explain_steps.py`, `plan_model_steps.py`, `project_repository_steps.py`, + `service_retry_wiring_steps.py`, and `session_model_steps.py`. + Additionally resolved a collision between `acms_index_data_model_traversal_steps.py` + and `security_audit_steps.py` for `Then the count should be`, and fixed + `pr_compliance_checklist_steps.py` project-root resolution (`parents[3]` → + `parents[2]`). Fixed table column-header mismatches in + `features/acms/index_data_model_and_traversal.feature` and guarded + `cli_init_yes_flag_steps.py` cleanup against `None` temp_dir. Annotated + `features/architecture.feature` `@tdd_expected_fail` for pre-existing Pydantic + compliance debt in `IndexEntry` / `ACMSIndex` classes. - **Cross-actor subgraph cycle detection reads actor_ref field** (#1431): Fixed `_detect_subgraph_cycles()`, `_map_node()`, and the `compile_actor()` main loop @@ -251,7 +300,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). flags as B608 (SQL injection risk). The constant is hardcoded and safe, but the f-string pattern blocks tightening the bandit severity gate from HIGH to MEDIUM (issue #9945). Replaced with `"INSERT INTO _v3_plans_new (" + - _ALL_DATA_COLUMNS + ") " "SELECT " + _ALL_DATA_COLUMNS + " FROM v3_plans"`. +_ALL_DATA_COLUMNS + ") " "SELECT " + _ALL_DATA_COLUMNS + " FROM v3_plans"`. - **Diagnostics spec examples expanded to all 9 providers** (#5320): Updated the `agents diagnostics` command examples in the specification to show all 9 supported @@ -300,15 +349,15 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). :mod:`cleveragents.shared.redaction`, and transaction-based sandbox strategy using BEGIN/COMMIT/ROLLBACK wrappers for safe, isolated database operations. SQLite-specific checkpoint and rollback support with SAVEPOINT semantics. Support for multiple backends (PostgreSQL, SQLite, MySQL, DuckDB) via unified "DatabaseResourceHandler" and type-specific routing. BDD test - coverage in ``features/database_resources.feature`` (connection validation, CRUD workflows, + coverage in `features/database_resources.feature` (connection validation, CRUD workflows, transaction/rollback behavior, error handling, credential masking verification) and - Robot Framework integration tests in ``robot/database_resources.robot``. + Robot Framework integration tests in `robot/database_resources.robot`. - **TransactionSandbox infrastructure for database resource isolation** (#8608): - Implemented ``TransactionSandbox`` class with BEGIN/COMMIT/ROLLBACK lifecycle - management for transaction-based sandbox strategy. Wired into ``SandboxFactory`` - as the strategy resolver for database resource types. Added ``database`` resource type - registration in bootstrap builtin types and updated ``_resource_registry_data.py`` + Implemented `TransactionSandbox` class with BEGIN/COMMIT/ROLLBACK lifecycle + management for transaction-based sandbox strategy. Wired into `SandboxFactory` + as the strategy resolver for database resource types. Added `database` resource type + registration in bootstrap builtin types and updated `_resource_registry_data.py` to recognize database resource categories. ### Fixed @@ -343,9 +392,9 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). between the class docstring ("Callers are responsible for commit") and the implementation. Input validation for the `trace` argument was also added. Two new BDD scenarios verify the session contract: `Repository save() calls flush not commit` and `LLM trace rolled - back when UnitOfWork transaction rolls back`. +back when UnitOfWork transaction rolls back`. -- **git_tools._get_base_env() TOCTOU Race Condition** (#7619): Fixed a +- **git_tools.\_get_base_env() TOCTOU Race Condition** (#7619): Fixed a Time-Of-Check-To-Time-Of-Use race condition in `git_tools._get_base_env()` where two concurrent threads could both observe `_BASE_ENV is None`, both snapshot `os.environ`, and write potentially different snapshots. The fix @@ -360,26 +409,26 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - **Unified provider factory: eliminate divergence between `create_llm()` and `create_ai_provider()`** (#10949): Introduced `_create_provider_instance()` as the single internal factory so that - both public methods delegate to one place. Creating a new provider now + both public methods delegate to one place. Creating a new provider now requires changes in exactly one method. - - **Fixed API key regression**: the unified factory now explicitly passes - the validated API key to all LangChain constructors (OpenAI, Anthropic, - Google / Gemini, Azure, Groq, Together, Cohere, and OpenRouter). Users - who configure providers via `CLEVERAGENTS_`-prefixed variables are no - longer silently failed when LangChain falls back to raw environment - variable lookup. Pre-validated keys are forwarded through the - `api_key` kwarg to avoid a second settings lookup in the factory - closure. (Closes #10949) - - **Fixed mock provider accessibility in production**: `ProviderType.MOCK` - is now gated by the `CLEVERAGENTS_ALLOW_MOCK_PROVIDER=true` sentinel - environment variable. Without this flag, both `create_llm()` and - `create_ai_provider()` raise `ValueError` when MOCK is requested, - preventing accidental or malicious use of the fake LLM in production. - `resolve_provider_by_name("mock")` now also respects the guard and - `is_provider_configured(ProviderType.MOCK)` returns `True` as expected. - - **Fixed type annotation**: `create_llm()` now declares `**kwargs: Any` - instead of `**kwargs: object`, restoring correct Pyright inference for - forwarded keyword arguments. + - **Fixed API key regression**: the unified factory now explicitly passes + the validated API key to all LangChain constructors (OpenAI, Anthropic, + Google / Gemini, Azure, Groq, Together, Cohere, and OpenRouter). Users + who configure providers via `CLEVERAGENTS_`-prefixed variables are no + longer silently failed when LangChain falls back to raw environment + variable lookup. Pre-validated keys are forwarded through the + `api_key` kwarg to avoid a second settings lookup in the factory + closure. (Closes #10949) + - **Fixed mock provider accessibility in production**: `ProviderType.MOCK` + is now gated by the `CLEVERAGENTS_ALLOW_MOCK_PROVIDER=true` sentinel + environment variable. Without this flag, both `create_llm()` and + `create_ai_provider()` raise `ValueError` when MOCK is requested, + preventing accidental or malicious use of the fake LLM in production. + `resolve_provider_by_name("mock")` now also respects the guard and + `is_provider_configured(ProviderType.MOCK)` returns `True` as expected. + - **Fixed type annotation**: `create_llm()` now declares `**kwargs: Any` + instead of `**kwargs: object`, restoring correct Pyright inference for + forwarded keyword arguments. - **`create_llm()` raises `Unsupported provider type: openrouter`** (#10948): Fixed `ProviderRegistry._create_provider_llm()` missing an `OPENROUTER` branch, which @@ -440,7 +489,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). `agents actor run` silently returning empty output for v3 `type:llm` actors. `_build_from_v3()` and `_build()` now synthesise a default single-node graph route when agents are created without explicit routes, ensuring - `run_single_shot()` can invoke the LLM via `GraphExecutor`. The nested + `run_single_shot()` can invoke the LLM via `GraphExecutor`. The nested `actors:` map format also translates the v3 `actor: "provider/model"` key into separate `provider` and `model` keys so the correct LLM provider is instantiated. @@ -456,7 +505,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). YAML values (e.g. `unsafe: "no"`) from being treated as unsafe. - **UKO Runtime Layer 2 (Paradigm) Indexing** (#9351): Added missing `rdf:type - uko-oo:Class` triple emission in `PythonAnalyzer._extract_class()` so that +uko-oo:Class` triple emission in `PythonAnalyzer._extract_class()` so that Python class definitions are now correctly classified at layer 2 (paradigm/OO) in addition to layer 3 (technology). Added the corresponding Behave scenario `Indexing a Python file populates layer 2 (paradigm)` to @@ -465,10 +514,10 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - **Actor CLI v3 YAML Schema Support** (#6283): Fixed three components to add full v3 `ActorConfigSchema` support to the actor CLI registration and - execution paths. `ActorConfiguration.from_blob()` now detects v3 format + execution paths. `ActorConfiguration.from_blob()` now detects v3 format (top-level `type` key of `llm`/`graph`/`tool`) and correctly extracts provider, model, and graph descriptors — including `type: tool` actors - without a `model` field. `ActorRegistry.add()` validates against the full + without a `model` field. `ActorRegistry.add()` validates against the full Pydantic v2 schema, persists `skills`/`lsp`/`description` in the config blob, and compiles graph actors with proper metadata. `ReactiveConfigParser._build_from_v3()` now uses correct `source`/`target` @@ -477,9 +526,9 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). `env_vars`/`response_format`/`lsp_capabilities`/`lsp_context_enrichment` into agent configs, and validates `entry_node` against the nodes map. Exception handling narrowed from broad `except Exception` to specific - `NotFoundError` and `ActorCompilationError`. v3 registration logic + `NotFoundError` and `ActorCompilationError`. v3 registration logic extracted to `v3_registry.py` to keep `registry.py` under the 500-line - limit. 19 BDD scenarios cover all v3 paths including tool actors, + limit. 19 BDD scenarios cover all v3 paths including tool actors, update mode, LSP dict bindings, and field propagation. - **TDD Non-AssertionError Guard Visibility** (#8294): `apply_tdd_inversion` in @@ -496,8 +545,8 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - **Parallel Behave Runner Log Noise Reduction** (#8351): The parallel behave runner now suppresses captured stdout/stderr for passing worker chunks and - only replays diagnostics for failed, errored, or crashed chunks. This makes - failure output significantly easier to spot in CI and local runs. A worker + only replays diagnostics for failed, errored, or crashed chunks. This makes + failure output significantly easier to spot in CI and local runs. A worker crash (unhandled exception) is detected via an all-zero summary and the captured traceback is always surfaced. @@ -568,14 +617,14 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Wired `StrategyActor` into the real plan execution path: `_get_plan_executor` in `plan.py` now resolves the strategy actor via `resolve_strategy_actor()` (reading the `actor.default.strategy` config key) instead of always - constructing `LLMStrategizeActor`. `run_strategize` in `PlanExecutor` now + constructing `LLMStrategizeActor`. `run_strategize` in `PlanExecutor` now passes `resources` (derived from `plan.project_links`) and `project_context` - to the actor so the LLM prompt receives full project context. Strategy + to the actor so the LLM prompt receives full project context. Strategy decisions are serialised as JSON in `plan.error_details["strategy_decisions_json"]` so `_build_decisions` can reconstruct the full hierarchy (dependency ordering, parent/child structure) during Execute instead of rebuilding from - `definition_of_done`. `StrategizeStubActor.execute` accepts `**kwargs` for - forward-compatibility. Added BDD coverage for the stored-JSON path, + `definition_of_done`. `StrategizeStubActor.execute` accepts `**kwargs` for + forward-compatibility. Added BDD coverage for the stored-JSON path, corrupt-JSON fallback, resource-passing, and stub extra-kwargs scenarios. (#828) - **Decision Recording Hook in Strategize Phase** (#8522): Implemented @@ -593,15 +642,15 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - **TDD Issue-Capture Test Activation** (#7025): Replaced 234 bare `@skip` tags across 82 Behave feature files with the correct `@tdd_expected_fail @tdd_issue - @tdd_issue_` tag system. Scenarios whose referenced bugs were already fixed +@tdd_issue_` tag system. Scenarios whose referenced bugs were already fixed had `@tdd_expected_fail` removed and now run as permanent regression guards. Net result: 629 features active in CI (up from ~545), zero `@skip` tags remain. - **Git Worktree Sandbox Apply** (#4454): The `plan apply` command now merges LLM-generated changes via `git merge` from an isolated worktree branch - instead of flat `shutil.copy2`. Displays spec-aligned Apply Summary + instead of flat `shutil.copy2`. Displays spec-aligned Apply Summary (plan ID, artifacts, insertions/deletions, project, timestamp), Sandbox - Cleanup panel, and `✓ OK Changes applied` footer. Non-git projects fall + Cleanup panel, and `✓ OK Changes applied` footer. Non-git projects fall back to the original flat file copy. - **Context Hydration Fix** (#4454): Fixed `ContextFragment` metadata types @@ -679,7 +728,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - **Documentation Writer Tracking** (`docs-writer`): The documentation writer now participates in the automation tracking system by creating individual `[AUTO-DOCS] - Documentation Report (Cycle N)` issues every 10 cycles (~3.3 hours). The manager applies +Documentation Report (Cycle N)` issues every 10 cycles (~3.3 hours). The manager applies the mandatory `Automation Tracking` label automatically, while teams may add additional workflow labels as needed. See `docs/development/automation-tracking.md` and the new `docs/development/docs-writer.md` reference. @@ -787,7 +836,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - **ContextTierService Thread Safety** (#7547): Added `threading.RLock` to `ContextTierService` to prevent `RuntimeError: dictionary changed size during - iteration` and data corruption under concurrent plan execution. All public +iteration` and data corruption under concurrent plan execution. All public methods (`store`, `get`, `promote`, `demote`, `evict_lru`, `enforce_staleness`, `get_metrics`, `get_all_fragments`, `get_hot_fragments`, `get_for_actor`, `get_scoped_view`, `get_scoped_by_resource`, `get_scoped_metrics`) now acquire @@ -881,6 +930,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Workers now dispatch and verify correctly, preventing incorrect session deletion. --- + ### Fixed - **CLI (`agents actor remove`)** (#6491): Restores output parity with the @@ -897,10 +947,10 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Wired Invariant Reconciliation Actor auto-invocation into `PlanLifecycleService` phase transitions (`start_strategize`, - `execute_plan`, `apply_plan`). Reconciliation failures now block + `execute_plan`, `apply_plan`). Reconciliation failures now block the transition with `ReconciliationBlockedError` and emit - `INVARIANT_VIOLATED` events. Post-correction reconciliation runs - via `CORRECTION_APPLIED` event subscription (best-effort). Added + `INVARIANT_VIOLATED` events. Post-correction reconciliation runs + via `CORRECTION_APPLIED` event subscription (best-effort). Added `InvariantService` Singleton provider in the DI container. - **TUI -- Shell danger detection**: The TUI shell mode (`!` prefix) now detects dangerous command patterns before execution. A configurable pattern registry @@ -912,4 +962,3 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). renders permission requests directly in the conversation stream for single-file operations. Users can allow/reject with single-key shortcuts (`a`/`A`/`r`/`R`), navigate with arrow keys, confirm with `Enter`, or press `v` to open the full - diff --git a/robot/e2e/wf10_batch.robot b/robot/e2e/wf10_batch.robot index 94d2e2fa0..427f135e9 100644 --- a/robot/e2e/wf10_batch.robot +++ b/robot/e2e/wf10_batch.robot @@ -81,7 +81,10 @@ Write Action Config ... description: "Reformat Python source files for consistent style" ... strategy_actor: ${actor} ... execution_actor: ${actor} - ... definition_of_done: "All Python files are consistently formatted" + ... definition_of_done: > + ... All Python files are consistently formatted without creating new files. + ... Creating .flake8, .pre-commit-config.yaml or a new pyproject.toml + ... file is forbidden. ... automation_profile: full-auto ... reusable: true ... state: available diff --git a/robot/plan_generation_graph.robot b/robot/plan_generation_graph.robot index 431fc608e..57e0a334e 100644 --- a/robot/plan_generation_graph.robot +++ b/robot/plan_generation_graph.robot @@ -379,7 +379,7 @@ Workflow Invoke Method Returns Complete State ... from cleveragents.agents.plan_generation import PlanGenerationGraph ... from langchain_community.llms import FakeListLLM ... from cleveragents.domain.models.core import Project, Plan, Context - ... graph = PlanGenerationGraph(llm=FakeListLLM(responses=['test']*3)) + ... graph = PlanGenerationGraph(llm=FakeListLLM(responses=['test']*12)) ... project = Project(id=1, name='test_project', path=Path('/tmp/test_project')) ... plan = Plan(id=1, project_id=1, name='Logging Plan', prompt='Add logging') ... contexts = [Context(plan_id=plan.id, path='app.py', content='def main(): pass')] @@ -409,7 +409,7 @@ Workflow Stream Method Yields Events ... from cleveragents.agents.plan_generation import PlanGenerationGraph ... from langchain_community.llms import FakeListLLM ... from cleveragents.domain.models.core import Project, Plan, Context - ... graph = PlanGenerationGraph(llm=FakeListLLM(responses=['test']*3)) + ... graph = PlanGenerationGraph(llm=FakeListLLM(responses=['test']*12)) ... project = Project(id=1, name='test_project', path=Path('/tmp/test_project')) ... plan = Plan(id=1, project_id=1, name='Feature Plan', prompt='Add feature') ... contexts = [Context(plan_id=plan.id, path='app.py', content='# app')]