Fix actor add --config crash with combined-format config.actor (#11189) #11198

Closed
freemo wants to merge 1 commit from fix/issue-11189-config-actor-format into master
Owner

Summary

Fixes #11189: agents actor add --config crashes when config uses the spec-compliant combined config.actor YAML format (both compact string form and nested-dict form).

Changes

  • Added _detect_nested_config_actor() in schema.py to recognise both forms of config-actor
  • Added _flatten_config_actor() in schema.py to merge nested actor fields to top-level
  • Updated is_v3_yaml() to use new detection function
  • Fixed from_blob() and _extract_v3_actor() in config.py for combined-format support
  • Added early flattening step in CLI add() command
  • New BDD scenarios and unit tests for combined-format registration
  • Updated CHANGELOG.md and CONTRIBUTORS.md

Checklist

  • Fix implemented in schema.py, config.py, CLI actor.py
  • CLI flattens config-actor before v3/schema processing
  • BDD tests cover both string and nested-dict formats
  • Unit tests for detection, flattening, from_blob()
  • CHANGELOG.md updated under [Unreleased]
  • CONTRIBUTORS.md updated
  • Commit footer includes ISSUES CLOSED: #11189
## Summary Fixes #11189: agents actor add --config crashes when config uses the spec-compliant combined config.actor YAML format (both compact string form and nested-dict form). ### Changes - Added _detect_nested_config_actor() in schema.py to recognise both forms of config-actor - Added _flatten_config_actor() in schema.py to merge nested actor fields to top-level - Updated is_v3_yaml() to use new detection function - Fixed from_blob() and _extract_v3_actor() in config.py for combined-format support - Added early flattening step in CLI add() command - New BDD scenarios and unit tests for combined-format registration - Updated CHANGELOG.md and CONTRIBUTORS.md ### Checklist - [x] Fix implemented in schema.py, config.py, CLI actor.py - [x] CLI flattens config-actor before v3/schema processing - [x] BDD tests cover both string and nested-dict formats - [x] Unit tests for detection, flattening, from_blob() - [x] CHANGELOG.md updated under [Unreleased] - [x] CONTRIBUTORS.md updated - [x] Commit footer includes ISSUES CLOSED: #11189
Fix actor add --config crash with combined-format config.actor (#11189)
Some checks failed
CI / push-validation (pull_request) Successful in 44s
CI / helm (pull_request) Successful in 47s
CI / build (pull_request) Successful in 1m15s
CI / integration_tests (pull_request) Failing after 1m35s
CI / lint (pull_request) Failing after 1m45s
CI / quality (pull_request) Successful in 1m51s
CI / security (pull_request) Failing after 1m55s
CI / typecheck (pull_request) Failing after 1m56s
CI / unit_tests (pull_request) Failing after 1m56s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
36450ac0cc
When users register actors via `agents actor add --config` using the
spec-compliant combined config.actor YAML format — either as a compact
string (config:\n  actor: "<provider>/<model>") or as a nested dict
(config:\n  actor:\n    type: llm\n    provider: aws) — the CLI crashed
with click.BadParameter: "Invalid value: 'provider' is required" because
the parser did not detect or flatten the nested structure.

Added:
- _detect_nested_config_actor() in schema.py to recognise both
  compact-string and nested-dict forms of config-actor format.
- _flatten_config_actor() in schema.py to merge config["actor"]
  fields into the dict top-level (removing the wrapper).
- Flattening logic in ActorConfiguration.from_blob() to handle both
  string ("<provider>/<model>") and nested-dict forms of config.actor.
- CLI flattening step at the start of `agents actor add` command.
- New BDD scenarios for combined-format registration.
- Unit tests for detection, flattening, schema-v3 detection, and
  full from_blob() flow.

ISSUES CLOSED: #11189
HAL9000 left a comment

First Review — PR #11198: Fix actor add --config crash with combined-format config.actor

Overview

The fix addresses a genuine and well-understood bug (issue #11189) and the core logic in schema.py and config.py is sound — the _detect_nested_config_actor(), _flatten_config_actor(), and updated _extract_v3_actor() correctly implement both the compact-string and nested-dict forms of the combined config.actor format. However, there are multiple blocking issues that prevent this PR from being merged, chief among them being CI failures across 5 required checks and several structural/quality violations.

CI Status

CI is failing on all required-for-merge checks:

  • CI / lint — failing (likely the 3-space @classmethod indentation issue)
  • CI / typecheck — failing
  • CI / security — failing
  • CI / unit_tests — failing
  • CI / integration_tests — failing
  • CI / build, CI / quality, CI / helm, CI / push-validation — passing

All 5 required CI gates must be green before this PR can be merged.

Blocking Issues Found

See inline comments below for precise locations and suggested fixes. Summary:

  1. _do_git.py committed to repo root — scaffolding script with hardcoded /tmp path and private email must be removed
  2. @classmethod has 3-space indentation instead of 4 in config.py — causes lint failure
  3. Private functions _detect_nested_config_actor and _flatten_config_actor imported in production CLI — violates module boundaries; consolidate flattening in from_blob()
  4. tests/actor/test_config_actor_combined_format.py uses pytest-style classes — wrong framework (must use Behave) and wrong directory (must be in features/)
  5. test_no_flatten_when_not_nested has an always-failing assertion ("config" in blob on a dict that has no config key)
  6. test_nested_dict_with_null_type_still_counts expects True but implementation returns False for type: null
  7. Actor class used but not imported in features/steps/actor_add_combined_config_format_steps.py
  8. Branch name fix/issue-11189-config-actor-format doesn't match required convention bugfix/m3-actor-config-actor-field
  9. Commit message first line doesn't match issue Metadata (must be: fix(actor): handle nested actor type and combined config.actor field in v3 YAML)
  10. PR missing required Type/Bug label and milestone assignment

Non-Blocking Observations

  • The _extract_config_actor() helper added to schema.py appears unused — defined but not called. Remove or document intent.
  • Docstring typo in _detect_nested_config_actor(): "If there happensto be" — missing space.
  • Duplication: from_blob() and the CLI add() function both independently flatten config.actor. Once the CLI call is removed (fix #3 above), this duplication is resolved.

Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

## First Review — PR #11198: Fix actor add --config crash with combined-format config.actor ### Overview The fix addresses a genuine and well-understood bug (issue #11189) and the **core logic in `schema.py` and `config.py` is sound** — the `_detect_nested_config_actor()`, `_flatten_config_actor()`, and updated `_extract_v3_actor()` correctly implement both the compact-string and nested-dict forms of the combined `config.actor` format. However, there are **multiple blocking issues** that prevent this PR from being merged, chief among them being CI failures across 5 required checks and several structural/quality violations. ### CI Status CI is failing on all required-for-merge checks: - ❌ `CI / lint` — failing (likely the 3-space `@classmethod` indentation issue) - ❌ `CI / typecheck` — failing - ❌ `CI / security` — failing - ❌ `CI / unit_tests` — failing - ❌ `CI / integration_tests` — failing - ✅ `CI / build`, `CI / quality`, `CI / helm`, `CI / push-validation` — passing All 5 required CI gates must be green before this PR can be merged. ### Blocking Issues Found See inline comments below for precise locations and suggested fixes. Summary: 1. `_do_git.py` committed to repo root — scaffolding script with hardcoded `/tmp` path and private email must be removed 2. `@classmethod` has 3-space indentation instead of 4 in `config.py` — causes lint failure 3. Private functions `_detect_nested_config_actor` and `_flatten_config_actor` imported in production CLI — violates module boundaries; consolidate flattening in `from_blob()` 4. `tests/actor/test_config_actor_combined_format.py` uses pytest-style classes — wrong framework (must use Behave) and wrong directory (must be in `features/`) 5. `test_no_flatten_when_not_nested` has an always-failing assertion (`"config" in blob` on a dict that has no config key) 6. `test_nested_dict_with_null_type_still_counts` expects `True` but implementation returns `False` for `type: null` 7. `Actor` class used but not imported in `features/steps/actor_add_combined_config_format_steps.py` 8. Branch name `fix/issue-11189-config-actor-format` doesn't match required convention `bugfix/m3-actor-config-actor-field` 9. Commit message first line doesn't match issue Metadata (must be: `fix(actor): handle nested actor type and combined config.actor field in v3 YAML`) 10. PR missing required `Type/Bug` label and milestone assignment ### Non-Blocking Observations - The `_extract_config_actor()` helper added to `schema.py` appears unused — defined but not called. Remove or document intent. - Docstring typo in `_detect_nested_config_actor()`: "If there happensto be" — missing space. - Duplication: `from_blob()` and the CLI `add()` function both independently flatten `config.actor`. Once the CLI call is removed (fix #3 above), this duplication is resolved. --- *Automated by CleverAgents Bot* *Supervisor: PR Review | Agent: pr-review-worker*
@ -47,6 +47,8 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- **Plan Rollback Command** (#8557): Implemented `agents plan rollback <plan-id> [<checkpoint-id>]` 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
Owner

BLOCKING — Commit message first line does not follow required format

The commit first line is:

Fix actor add --config crash with combined-format config.actor (#11189)

This violates two rules:

  1. Does not follow Conventional Changelog format (type(scope): description)
  2. Does not match the Commit Message in issue #11189 Metadata

Issue #11189 Metadata specifies:

Commit Message: fix(actor): handle nested actor type and combined config.actor field in v3 YAML

The commit first line must be verbatim:

fix(actor): handle nested actor type and combined config.actor field in v3 YAML

Please amend the commit with the correct first line.


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — Commit message first line does not follow required format** The commit first line is: ``` Fix actor add --config crash with combined-format config.actor (#11189) ``` This violates two rules: 1. Does not follow Conventional Changelog format (`type(scope): description`) 2. Does not match the `Commit Message` in issue #11189 Metadata Issue #11189 Metadata specifies: > **Commit Message**: `fix(actor): handle nested actor type and combined config.actor field in v3 YAML` The commit first line must be **verbatim**: ``` fix(actor): handle nested actor type and combined config.actor field in v3 YAML ``` Please amend the commit with the correct first line. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
@ -47,6 +47,8 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- **Plan Rollback Command** (#8557): Implemented `agents plan rollback <plan-id> [<checkpoint-id>]` 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
- **Actor add `--config` crashes with combined-format ``config.actor`` YAML** (#11189): Fixed a bug where `agents actor add --config test/actor.yaml` raised ``click.BadParameter: "provider is required"`` when the config file used the spec-compliant combined ``config.actor`` format (both the compact string form ``config:\n actor: "<provider>/<model>"`` and the nested-dict form ``config:\n actor:\n type: llm\n provider: gcp\n model: gemini``). Added ``_detect_nested_config_actor()``, ``_flatten_config_actor()``, and corresponding handling in ``ActorConfiguration.from_blob()`` to transparently flatten the nesting so downstream v3 detection, schema validation, and canonicalisation see a flat dictionary. Includes new BDD scenarios and Python unit tests.
Owner

BLOCKING — PR missing required Type/ label and milestone

Per CONTRIBUTING.md, every PR must have:

  1. Exactly one Type/ label — this PR has no labels. Since it fixes a bug, apply Type/Bug.
  2. A milestone — must match the milestone of the linked issue #11189. Please assign the correct milestone.

Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — PR missing required `Type/` label and milestone** Per `CONTRIBUTING.md`, every PR must have: 1. **Exactly one `Type/` label** — this PR has no labels. Since it fixes a bug, apply `Type/Bug`. 2. **A milestone** — must match the milestone of the linked issue #11189. Please assign the correct milestone. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
@ -0,0 +1,69 @@
"""Minimal git automation script for issue #11189 fix."""
Owner

BLOCKING — Wrong file committed to repository root

This file is automation scaffolding used during development to create the branch and commit. It must not be committed to the repository. It contains:

  1. A hardcoded /tmp/ absolute path: REPO_DIR = "/tmp/cleveragents-1778663951414391933/repo" — will not work on any other machine.
  2. A private email address: GIT_EMAIL = "the@jeffreyfreeman.me" — personal credentials should never be committed.
  3. It serves no purpose for repository users or contributors.

Please remove this file entirely from the commit. If you want to keep a git automation helper, strip the hardcoded values and move it to scripts/ (not the root).


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — Wrong file committed to repository root** This file is automation scaffolding used during development to create the branch and commit. It **must not** be committed to the repository. It contains: 1. A hardcoded `/tmp/` absolute path: `REPO_DIR = "/tmp/cleveragents-1778663951414391933/repo"` — will not work on any other machine. 2. A private email address: `GIT_EMAIL = "the@jeffreyfreeman.me"` — personal credentials should never be committed. 3. It serves no purpose for repository users or contributors. Please remove this file entirely from the commit. If you want to keep a git automation helper, strip the hardcoded values and move it to `scripts/` (not the root). --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
@ -0,0 +1,53 @@
Feature: Actor add CLI supports config-actor combined format (issue #11189)
Owner

BLOCKING — Branch naming convention violation

This PR is on branch fix/issue-11189-config-actor-format but per CONTRIBUTING.md, bug fix branches must follow the format bugfix/mN-<descriptive-name> where N is the milestone number. The branch must also match the Branch field in the linked issue's ## Metadata section.

Issue #11189 Metadata specifies:

Branch: bugfix/m3-actor-config-actor-field

Problems with the current branch name:

  • Wrong prefix: fix/ instead of bugfix/
  • Uses issue number instead of milestone-prefixed descriptive name
  • Does not match the prescribed Branch field in the issue Metadata

Please resubmit from branch: bugfix/m3-actor-config-actor-field


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — Branch naming convention violation** This PR is on branch `fix/issue-11189-config-actor-format` but per `CONTRIBUTING.md`, bug fix branches must follow the format `bugfix/mN-<descriptive-name>` where `N` is the milestone number. The branch must also match the `Branch` field in the linked issue's `## Metadata` section. Issue #11189 Metadata specifies: > **Branch**: `bugfix/m3-actor-config-actor-field` Problems with the current branch name: - Wrong prefix: `fix/` instead of `bugfix/` - Uses issue number instead of milestone-prefixed descriptive name - Does not match the prescribed `Branch` field in the issue Metadata Please resubmit from branch: `bugfix/m3-actor-config-actor-field` --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
@ -0,0 +15,4 @@
from behave.runner import Context
from typer.testing import CliRunner
from cleveragents.actor.config import ActorConfiguration
Owner

BLOCKING — Actor class used but not imported

step_run_actor_add_generic uses Actor at lines 126 and 132:

mock_actor = Actor(
    id=1,
    ...
    config_hash=Actor.compute_hash({"name": name}),

But Actor is not in the import list. This will cause a NameError at runtime for any scenario using the Given I run the actor add command step.

Add the missing import:

from cleveragents.domain.models.core.actor import Actor

This is the same import used in features/steps/actor_add_v3_schema_validation_steps.py (line 23).


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — `Actor` class used but not imported** `step_run_actor_add_generic` uses `Actor` at lines 126 and 132: ```python mock_actor = Actor( id=1, ... config_hash=Actor.compute_hash({"name": name}), ``` But `Actor` is not in the import list. This will cause a `NameError` at runtime for any scenario using the `Given I run the actor add command` step. Add the missing import: ```python from cleveragents.domain.models.core.actor import Actor ``` This is the same import used in `features/steps/actor_add_v3_schema_validation_steps.py` (line 23). --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
Owner

BLOCKING — 3-space indentation on @classmethod decorator

The @classmethod decorator has 3 spaces of indentation instead of 4:

   @classmethod   # 3 spaces — ruff/syntax error
    def from_blob(

This Python indentation inconsistency will cause ruff (lint CI) to fail. Fix by using exactly 4 spaces:

    @classmethod
    def from_blob(

This is very likely the root cause of the CI / lint failure.


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — 3-space indentation on `@classmethod` decorator** The `@classmethod` decorator has **3 spaces** of indentation instead of 4: ```python @classmethod # 3 spaces — ruff/syntax error def from_blob( ``` This Python indentation inconsistency will cause `ruff` (lint CI) to fail. Fix by using exactly 4 spaces: ```python @classmethod def from_blob( ``` This is very likely the root cause of the `CI / lint` failure. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
Owner

BLOCKING — Private functions imported in production CLI code

_detect_nested_config_actor and _flatten_config_actor (underscore-prefixed = private) are imported from schema.py into the CLI layer. This violates the module boundary — callers should not reach into internal helpers.

Moreover, from_blob() already performs the same flattening inline (the config_block/actor_inner handling added in this PR). The CLI-level flattening call is therefore duplicating logic that already exists in from_blob().

Recommended fix: Remove the CLI-level flattening block entirely (if _detect_nested_config_actor(config_blob): ...) and ensure from_blob() alone handles all formats. If public access to these helpers is genuinely needed, rename them without the underscore prefix to make them part of the public API.


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — Private functions imported in production CLI code** `_detect_nested_config_actor` and `_flatten_config_actor` (underscore-prefixed = private) are imported from `schema.py` into the CLI layer. This violates the module boundary — callers should not reach into internal helpers. Moreover, `from_blob()` already performs the same flattening inline (the `config_block`/`actor_inner` handling added in this PR). The CLI-level flattening call is therefore duplicating logic that already exists in `from_blob()`. **Recommended fix:** Remove the CLI-level flattening block entirely (`if _detect_nested_config_actor(config_blob): ...`) and ensure `from_blob()` alone handles all formats. If public access to these helpers is genuinely needed, rename them without the underscore prefix to make them part of the public API. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
@ -0,0 +1,178 @@
"""Unit tests for the config-actor combined format helpers (issue #11189).
Owner

BLOCKING — Wrong test framework and wrong directory

This project uses Behave BDD exclusively for unit tests (per CONTRIBUTING.md). pytest-style test classes (class TestDetectNestedConfigActor: with def test_*(self): methods) are not permitted.

Contributing rules:

Unit test framework: Behave only (no pytest, no xUnit)
Unit test directory: features/ exclusively

Please convert these tests to Behave .feature + step-definition files in features/ and features/steps/. Note that several of the detection/flattening scenarios are already partially scaffolded in features/steps/actor_add_combined_config_format_steps.py (@given/@when/@then steps for _detect_nested_config_actor) — consolidate there.


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — Wrong test framework and wrong directory** This project uses **Behave BDD exclusively** for unit tests (per `CONTRIBUTING.md`). pytest-style test classes (`class TestDetectNestedConfigActor:` with `def test_*(self):` methods) are **not permitted**. Contributing rules: > Unit test framework: **Behave only** (no pytest, no xUnit) > Unit test directory: **`features/` exclusively** Please convert these tests to Behave `.feature` + step-definition files in `features/` and `features/steps/`. Note that several of the detection/flattening scenarios are already partially scaffolded in `features/steps/actor_add_combined_config_format_steps.py` (`@given`/`@when`/`@then` steps for `_detect_nested_config_actor`) — consolidate there. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
@ -0,0 +35,4 @@
"actor": {"type": "llm", "provider": "gcp", "model": "gemini"}
},
}
assert _detect_nested_config_actor(blob) is True
Owner

BLOCKING — Test expectation contradicts the implementation

test_nested_dict_with_null_type_still_counts asserts True but tracing through _detect_nested_config_actor() shows the function returns False for this input:

Input: {"name": "local/test", "config": {"actor": {"type": None, "provider": "gcp"}}}

  1. config is a dict ✓
  2. actor = {"type": None, "provider": "gcp"} — is a dict
  3. inner_type = actor.get("type")None
  4. if inner_type is not None:False (None fails)
  5. ver = config.get("version")None
  6. Returns False

But the test asserts True. This is a contradiction between the test and the code.

The implementation is more defensively correct (type: null should not trigger v3 detection — consistent with how is_v3_yaml() explicitly excludes type: null). Fix the test assertion to is False and update the docstring to reflect the correct behaviour.


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — Test expectation contradicts the implementation** `test_nested_dict_with_null_type_still_counts` asserts `True` but tracing through `_detect_nested_config_actor()` shows the function returns `False` for this input: Input: `{"name": "local/test", "config": {"actor": {"type": None, "provider": "gcp"}}}` 1. `config` is a dict ✓ 2. `actor = {"type": None, "provider": "gcp"}` — is a dict 3. `inner_type = actor.get("type")` → `None` 4. `if inner_type is not None:` → **False** (None fails) 5. `ver = config.get("version")` → `None` 6. Returns **`False`** But the test asserts `True`. This is a contradiction between the test and the code. The implementation is more defensively correct (`type: null` should not trigger v3 detection — consistent with how `is_v3_yaml()` explicitly excludes `type: null`). Fix the test assertion to `is False` and update the docstring to reflect the correct behaviour. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
@ -0,0 +85,4 @@
assert flat["type"] == "llm"
assert flat["provider"] == "gcp"
assert flat["model"] == "gemini"
Owner

BLOCKING — Always-failing assertion in test_no_flatten_when_not_nested

def test_no_flatten_when_not_nested(self):
    blob = {"type": "llm", "provider": "openai"}
    result = _flatten_config_actor(blob)
    # No "config" key — returns shallow copy.
    assert "config" in blob  # THIS ALWAYS FAILS — blob has no config key

The comment says "No config key" but the assertion checks the opposite. The blob dict {"type": "llm", "provider": "openai"} has no config key, so "config" in blob is always False.

Fix to match the intent (verify no mutation):

assert "config" not in blob  # blob has no config key and is not mutated
assert result == dict(blob)   # result is a copy

Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**BLOCKING — Always-failing assertion in `test_no_flatten_when_not_nested`** ```python def test_no_flatten_when_not_nested(self): blob = {"type": "llm", "provider": "openai"} result = _flatten_config_actor(blob) # No "config" key — returns shallow copy. assert "config" in blob # THIS ALWAYS FAILS — blob has no config key ``` The comment says "No config key" but the assertion checks the opposite. The `blob` dict `{"type": "llm", "provider": "openai"}` has no `config` key, so `"config" in blob` is always `False`. Fix to match the intent (verify no mutation): ```python assert "config" not in blob # blob has no config key and is not mutated assert result == dict(blob) # result is a copy ``` --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
Owner

Review submitted — PR #11198 has been reviewed and changes have been requested.

A formal REQUEST_CHANGES review (ID: 8720) has been filed. Please address all 10 blocking issues listed in the review before re-requesting review.


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

**Review submitted** — PR #11198 has been reviewed and changes have been requested. A formal `REQUEST_CHANGES` review (ID: 8720) has been filed. Please address all 10 blocking issues listed in the review before re-requesting review. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
Owner

[GROOMED] Quality analysis complete.

Checks performed:

  • Duplicate detection: No duplicate found. PR #11198 title matches linked issue #11189 exactly -- legitimate work item closing that issue.
  • Hierarchy: Linked issue #11189 has no dependency links from this PR. Orphan flagged.
  • Activity / staleness: PR is fresh (5/13 creation). HAL9000 submitted REQUEST_CHANGES with a formal code review 5/13 -- not stale, but author must address those changes before merge approval.
  • Labels (State / Type / Priority): Had ZERO labels. Added State/In Review (844), Type/Bug (849), Priority/Critical (858), and MoSCoW/Must have (883) via PUT /labels. Linked issue #11189 already had State/Triaged, Type/Bug, Priority/Critical, and MoSCoW/Must have -- confirmed sync.
  • Label contradictions: None. All four labels coherent (Critical Bug + Must Have + In Review).
  • Milestone: PR has NO milestone assigned. Linked issue #11189 is in milestone v3.2.0 (ID 105). This discrepancy needs correction.
  • Closure consistency: Issue #11189 is CLOSED (closed 5/14 via Closes keyword from PR body) while PR remains OPEN. Consistent -- linked issues auto-close on PR merge.
  • Epic completeness: N/A -- this is a PR, not an Epic.
  • Tracking cleanup: N/A -- not an Automation Tracking issue.
  • PR label sync with linked issue: PARTIAL. Type/Bug (849), Priority/Critical (858), and MoSCoW/Must have (883) confirmed synced between PR #11198 and issue #11189. State labels were added to both this pass.
  • Non-code review remarks: HAL9000 submitted REQUEST_CHANGES (review ID 8720) with 10 blocking issues:
    1. _do_git.py scaffolding script committed to repo root
    2. @classmethod has 3-space indent instead of 4 in config.py -- causes lint failure
    3. Private functions imported into production CLI module boundary
    4. pytest-style test classes (wrong framework; must use Behave)
    5. test_no_flatten_when_not_nested has always-failing assertion
    6. test_nested_dict_with_null_type_still_counts expects True but impl returns False
    7. Actor class used but not imported in features/steps/ file
    8. Branch name mismatch: uses fix/ prefix instead of required bugfix/m3- prefix
    9. Commit message first line does NOT match issue Metadata requirements
    10. PR missing Type/Bug label (now added) and milestone assignment

Fixes applied:

  • Added State/In Review, Type/Bug, Priority/Critical, MoSCoW/Must have labels to PR #11198 via PUT /labels.

Notes:

  • REQUEST_CHANGES blocks merge: author must address HAL9000 10-item review before approval. Core fix is sound per reviewer -- all issues are structural/CI-related.
  • Milestone missing on PR: recommend adding v3.2.0 to match linked issue.
  • Branch name convention mismatch noted by reviewer (item 8) -- author should rename or this is accepted deviation.
  • Dependencies API unavailable for creating blocking PR link.

Automated by CleverAgents Bot
Supervisor: Grooming | Agent: grooming-worker

[GROOMED] Quality analysis complete. Checks performed: - Duplicate detection: No duplicate found. PR #11198 title matches linked issue #11189 exactly -- legitimate work item closing that issue. - Hierarchy: Linked issue #11189 has no dependency links from this PR. Orphan flagged. - Activity / staleness: PR is fresh (5/13 creation). HAL9000 submitted REQUEST_CHANGES with a formal code review 5/13 -- not stale, but author must address those changes before merge approval. - Labels (State / Type / Priority): Had ZERO labels. Added State/In Review (844), Type/Bug (849), Priority/Critical (858), and MoSCoW/Must have (883) via PUT /labels. Linked issue #11189 already had State/Triaged, Type/Bug, Priority/Critical, and MoSCoW/Must have -- confirmed sync. - Label contradictions: None. All four labels coherent (Critical Bug + Must Have + In Review). - Milestone: PR has NO milestone assigned. Linked issue #11189 is in milestone v3.2.0 (ID 105). This discrepancy needs correction. - Closure consistency: Issue #11189 is CLOSED (closed 5/14 via Closes keyword from PR body) while PR remains OPEN. Consistent -- linked issues auto-close on PR merge. - Epic completeness: N/A -- this is a PR, not an Epic. - Tracking cleanup: N/A -- not an Automation Tracking issue. - PR label sync with linked issue: PARTIAL. Type/Bug (849), Priority/Critical (858), and MoSCoW/Must have (883) confirmed synced between PR #11198 and issue #11189. State labels were added to both this pass. - Non-code review remarks: HAL9000 submitted REQUEST_CHANGES (review ID 8720) with 10 blocking issues: 1) _do_git.py scaffolding script committed to repo root 2) @classmethod has 3-space indent instead of 4 in config.py -- causes lint failure 3) Private functions imported into production CLI module boundary 4) pytest-style test classes (wrong framework; must use Behave) 5) test_no_flatten_when_not_nested has always-failing assertion 6) test_nested_dict_with_null_type_still_counts expects True but impl returns False 7) Actor class used but not imported in features/steps/ file 8) Branch name mismatch: uses fix/ prefix instead of required bugfix/m3- prefix 9) Commit message first line does NOT match issue Metadata requirements 10) PR missing Type/Bug label (now added) and milestone assignment Fixes applied: - Added State/In Review, Type/Bug, Priority/Critical, MoSCoW/Must have labels to PR #11198 via PUT /labels. Notes: - REQUEST_CHANGES blocks merge: author must address HAL9000 10-item review before approval. Core fix is sound per reviewer -- all issues are structural/CI-related. - Milestone missing on PR: recommend adding v3.2.0 to match linked issue. - Branch name convention mismatch noted by reviewer (item 8) -- author should rename or this is accepted deviation. - Dependencies API unavailable for creating blocking PR link. --- Automated by CleverAgents Bot Supervisor: Grooming | Agent: grooming-worker
HAL9000 added this to the v3.2.0 milestone 2026-05-15 02:51:58 +00:00
HAL9000 closed this pull request 2026-05-15 05:42:24 +00:00
Owner

[GROOMED] Quality analysis complete.

Checks performed:

  • Duplicate detection: DUPLICATE FOUND. PR #11198 is a duplicate of PR #11199 — both attempt to fix already-closed issue #11189. Closed as less-complete duplicate, see PR #11199 for related work (same author freemo, same title).
  • Hierarchy: N/A — not an Epic or regular issue; this is a PR.
  • Activity / staleness: Not stale. Last activity within 7 days.
  • Labels (State / Type / Priority): All required labels present from prior grooming pass: State/In Review, Type/Bug, Priority/Critical, MoSCoW/Must have. These were carried through closure.
  • Label contradictions: Previously had no State/Completed since PR was never merged. Properly handled by explicit closed state for duplicate resolution.
  • Milestone: Correctly v3.2.0 (ID 105) — matches linked issue #11189.
  • Closure consistency: PR closed as duplicate via manual state change. Linked issue #11189 independently completed by merged PR #11193.
  • Epic completeness: N/A.
  • Tracking cleanup: N/A — not Automation Tracking.
  • PR label sync with linked issue: All synced — Type/Bug, Priority/Critical, MoSCoW/Must have all match issue #11189. Milestone matches.
  • Non-code review remarks (HAL9000 REQUEST_CHANGES review ID 8720): 9 of 10 items are source-code-level issues not addressable by groomer. Item 10 (labels/milestone) already resolved by prior grooming pass.

Fixes applied:

  • Closed PR #11198 as duplicate of near-duplicate PR #11199 (both fix issue #11189 which was independently completed by merged PR #11193).
  • State labels carried through on closure action.

Notes:

  • This PR and PR #11199 are both duplicates. Issue #11189 was closed by a third unrelated PR (#11193). Author freemo created multiple PRs for the same issue in near-silous parallel effort. Recommend notifying author that issue is already resolved.
  • Unable to post this [GROOMED] comment via REST API (comments endpoint blocked), but the critical metadata action (closing as duplicate) was successfully applied.

Automated by CleverAgents Bot
Supervisor: Grooming | Agent: grooming-worker

[GROOMED] Quality analysis complete. Checks performed: - Duplicate detection: DUPLICATE FOUND. PR #11198 is a duplicate of PR #11199 — both attempt to fix already-closed issue #11189. Closed as less-complete duplicate, see PR #11199 for related work (same author freemo, same title). - Hierarchy: N/A — not an Epic or regular issue; this is a PR. - Activity / staleness: Not stale. Last activity within 7 days. - Labels (State / Type / Priority): All required labels present from prior grooming pass: State/In Review, Type/Bug, Priority/Critical, MoSCoW/Must have. These were carried through closure. - Label contradictions: Previously had no State/Completed since PR was never merged. Properly handled by explicit closed state for duplicate resolution. - Milestone: Correctly v3.2.0 (ID 105) — matches linked issue #11189. - Closure consistency: PR closed as duplicate via manual state change. Linked issue #11189 independently completed by merged PR #11193. - Epic completeness: N/A. - Tracking cleanup: N/A — not Automation Tracking. - PR label sync with linked issue: All synced — Type/Bug, Priority/Critical, MoSCoW/Must have all match issue #11189. Milestone matches. - Non-code review remarks (HAL9000 REQUEST_CHANGES review ID 8720): 9 of 10 items are source-code-level issues not addressable by groomer. Item 10 (labels/milestone) already resolved by prior grooming pass. Fixes applied: - Closed PR #11198 as duplicate of near-duplicate PR #11199 (both fix issue #11189 which was independently completed by merged PR #11193). - State labels carried through on closure action. Notes: - This PR and PR #11199 are both duplicates. Issue #11189 was closed by a third unrelated PR (#11193). Author freemo created multiple PRs for the same issue in near-silous parallel effort. Recommend notifying author that issue is already resolved. - Unable to post this [GROOMED] comment via REST API (comments endpoint blocked), but the critical metadata action (closing as duplicate) was successfully applied. --- Automated by CleverAgents Bot Supervisor: Grooming | Agent: grooming-worker
Some checks failed
CI / push-validation (pull_request) Successful in 44s
CI / helm (pull_request) Successful in 47s
CI / build (pull_request) Successful in 1m15s
Required
Details
CI / integration_tests (pull_request) Failing after 1m35s
Required
Details
CI / lint (pull_request) Failing after 1m45s
Required
Details
CI / quality (pull_request) Successful in 1m51s
Required
Details
CI / security (pull_request) Failing after 1m55s
Required
Details
CI / typecheck (pull_request) Failing after 1m56s
Required
Details
CI / unit_tests (pull_request) Failing after 1m56s
Required
Details
CI / coverage (pull_request) Has been skipped
Required
Details
CI / docker (pull_request) Has been skipped
Required
Details
CI / status-check (pull_request) Failing after 3s

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core!11198
No description provided.