fix(cli): remove positional NAME from agents actor add — read name from YAML file #11065

Open
HAL9000 wants to merge 4 commits from fix/issue-11047-actor-add-remove-positional-name into master
Owner

Summary

  • Removed positional NAME argument from agents actor add CLI command — the actor name is now read exclusively from the name field in the YAML/JSON config file.
  • Added private helper function _resolve_actor_name() that validates the name field is present and non-empty, with clear error messaging.
  • Updated docstring, signature examples, and all BDD test step definitions to reflect the new behavior.
  • agents actor update retains its positional NAME since it identifies which registered actor to modify.

Changes

File Change
src/cleveragents/cli/commands/actor.py Remove name param from add(), add _resolve_actor_name() helper, update docstring
features/actor_add_name_from_config.feature New — BDD scenarios for name-from-config reading and error cases
features/steps/actor_add_name_from_config_steps.py New — Step definitions for new feature
features/actor_add_name_positional.feature Deleted — was testing removed positional argument behavior
features/steps/actor_*_steps.py Updated all add() CLI invocations to drop positional NAME
CHANGELOG.md Added entry under [Unreleased]
CONTRIBUTORS.md Added contributor credit

Error Messaging

When the config file lacks a name field, users see:

Error: Missing required name field in ./actors/my-actor.yaml. The actor
name must be specified inside the config file (e.g.  ``name: local/my-actor``
at the top-level of the YAML / JSON document). Positional NAME argument is
no longer accepted by `agents actor add`.

Closes #11047

## Summary - **Removed positional `NAME` argument** from `agents actor add` CLI command — the actor name is now read exclusively from the ``name`` field in the YAML/JSON config file. - Added private helper function `_resolve_actor_name()` that validates the ``name`` field is present and non-empty, with clear error messaging. - Updated docstring, signature examples, and all BDD test step definitions to reflect the new behavior. - `agents actor update` retains its positional NAME since it identifies which registered actor to modify. ## Changes | File | Change | |------|--------| | `src/cleveragents/cli/commands/actor.py` | Remove `name` param from `add()`, add `_resolve_actor_name()` helper, update docstring | | `features/actor_add_name_from_config.feature` | **New** — BDD scenarios for name-from-config reading and error cases | | `features/steps/actor_add_name_from_config_steps.py` | **New** — Step definitions for new feature | | `features/actor_add_name_positional.feature` | **Deleted** — was testing removed positional argument behavior | | `features/steps/actor_*_steps.py` | Updated all add() CLI invocations to drop positional NAME | | `CHANGELOG.md` | Added entry under `[Unreleased]` | | `CONTRIBUTORS.md` | Added contributor credit | ## Error Messaging When the config file lacks a `name` field, users see: ``` Error: Missing required name field in ./actors/my-actor.yaml. The actor name must be specified inside the config file (e.g. ``name: local/my-actor`` at the top-level of the YAML / JSON document). Positional NAME argument is no longer accepted by `agents actor add`. ``` Closes #11047
feat(resources): implement cloud infrastructure resource type stubs (AWS, GCP, Azure)
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 46s
CI / push-validation (pull_request) Successful in 26s
CI / quality (pull_request) Successful in 59s
CI / build (pull_request) Successful in 35s
CI / helm (pull_request) Successful in 32s
CI / security (pull_request) Successful in 1m15s
CI / typecheck (pull_request) Successful in 1m21s
CI / benchmark-regression (pull_request) Failing after 52s
CI / integration_tests (pull_request) Successful in 3m8s
CI / unit_tests (pull_request) Failing after 4m28s
CI / e2e_tests (pull_request) Successful in 4m11s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
07b7425186
Implements base CloudResource class with provider-specific stubs for
AWS, GCP, and Azure resources. Includes BDD Behave tests covering
provider validation, auto-provider assignment, tag validation, and
field lowercasing.

- CloudResource base class: common fields (provider, region, account_id, state)
- AWSResource: resource_id, arn, tags with field-level validation
- GCPResource: project_id with automatic lower-casing
- AzureResource: subscription_id, tenant_id with automatic lower-casing
- BDD Behave feature tests with step definitions for all scenarios

Also updates CHANGELOG.md under [Unreleased] and CONTRIBUTORS.md.

Epic #8568 (Resource Types & Container Tool Execution).

ISSUES CLOSED: #8607
fix(resources): resolve PR #10592 review blockers
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 36s
CI / helm (pull_request) Successful in 43s
CI / build (pull_request) Successful in 53s
CI / lint (pull_request) Successful in 1m3s
CI / quality (pull_request) Successful in 1m19s
CI / benchmark-regression (pull_request) Failing after 53s
CI / typecheck (pull_request) Successful in 1m40s
CI / security (pull_request) Successful in 1m41s
CI / integration_tests (pull_request) Successful in 3m19s
CI / e2e_tests (pull_request) Successful in 4m22s
CI / unit_tests (pull_request) Failing after 5m27s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
bc77ddde78
Fix the three remaining blockers identified in Re-Review #8104 (HAL9001):

1. Remove unused model_rebuild() calls and comments from cloud_types.py
   - The module uses regular annotations (no __future__ annotations),
     so model_rebuild is unnecessary for resolving forward references.
   - This had been flagged by Review #8099 as causing RUF100 lint errors.

2. Add missing 'the resource should have provider gcp' step definition
   - The GCPResource scenario (feature line 27) uses this assertion
     but no matching @then decorator existed in the step file.
   - This would cause Behave MissingStep errors in unit_tests CI.

3. Verify Forgejo dependency relationship: PR #10592 blocks issue #8607

Also verified: lint passes, types pass, model instantiation works
without model_rebuild (Pydantic v2 evaluates eagerly at class scope).

ISSUES CLOSED: #8607
fix(resources): move step file to features/steps/ and fix ambiguous step definitions
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 34s
CI / helm (pull_request) Successful in 45s
CI / build (pull_request) Successful in 1m1s
CI / lint (pull_request) Successful in 1m5s
CI / benchmark-regression (pull_request) Failing after 1m16s
CI / quality (pull_request) Successful in 1m29s
CI / typecheck (pull_request) Successful in 1m32s
CI / security (pull_request) Successful in 1m36s
CI / integration_tests (pull_request) Successful in 3m27s
CI / e2e_tests (pull_request) Successful in 4m33s
CI / unit_tests (pull_request) Failing after 4m55s
CI / docker (pull_request) Has been skipped
CI / coverage (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
772d87f256
The Behave step file (cloud_types_steps.py) was placed in features/resource/
but Behave only discovers step definitions from features/steps/. This caused
the unit_tests gate to fail with UndefinedStep for all 8 cloud types scenarios.

Fixed:
- Moved features/resource/cloud_types_steps.py -> features/steps/
- Renamed ambiguous "it should raise a ValueError" step text to avoid
  collision with pre-existing definition in devcontainer_handler_steps.py
- Replaced Unicode box-drawing characters with ASCII dash separators

Note: Forgejo dependency (PR blocks issue #8607) could not be set via API
due to IsErrRepoNotExist error on PR dependency endpoints — this is a known
Forgejo limitation for PR objects. Requires manual setup or higher-tier agent.

Refs: #10592
fix(cli): remove positional NAME from agents actor add — read name from YAML file
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Failing after 1m30s
CI / security (pull_request) Failing after 1m39s
CI / typecheck (pull_request) Failing after 1m41s
CI / benchmark-regression (pull_request) Failing after 1m16s
CI / push-validation (pull_request) Successful in 51s
CI / helm (pull_request) Successful in 55s
CI / quality (pull_request) Successful in 1m26s
CI / unit_tests (pull_request) Failing after 1m36s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / integration_tests (pull_request) Failing after 5m1s
CI / e2e_tests (pull_request) Failing after 5m10s
CI / build (pull_request) Failing after 11m36s
CI / status-check (pull_request) Has been cancelled
219d0ef475
The  command previously required a mandatory positional
 argument alongside a --config flag.  This split the actor's
identity across two sources (CLI arg + config file) which was confusing
and error-prone.

This change removes the positional NAME argument entirely.  The CLI now
reads the actor name from the name field in the YAML/JSON config
file specified with --config.

A private helper function _resolve_actor_name() validates that the
name field is present and non-empty, providing a clear error message
that guides users to put the name inside the config file:

    Missing required 'name' field in path/to/config.yaml. The actor name
    must be specified inside the config file (e.g.  name: local/my-actor
    at the top-level of the YAML / JSON document). Positional NAME argument
    is no longer accepted by .

The agents actor update command retains its positional NAME argument
since it identifies which *already-registered* actor to modify.

BDD scenarios in the new feature file verify both success (reading name
from config) and failure cases (missing or null name fields).
HAL9001 left a comment

First Review — REQUEST_CHANGES

Thank you for this PR. The intent of issue #11047 (removing the positional NAME argument from agents actor add) is correct, and the new _resolve_actor_name() helper approach is sound in principle. However, there are several blocking issues that must be resolved before this PR can be approved. The most critical is a correctness regression introduced by the patch itself.


🔴 BLOCKING ISSUES

1. _parse_option_overrides is silently broken [CRITICAL]

The insertion of _resolve_actor_name() accidentally split the body of _parse_option_overrides(). In the current code (src/cleveragents/cli/commands/actor.py lines 333–381), _parse_option_overrides ends at line 336 — it only initialises overrides = {} and returns early when the input is empty. For any non-empty input it returns {} silently — the for item in option_values: loop that should process key=value pairs was placed inside _resolve_actor_name as unreachable dead code after its own return statement.

Verification via AST analysis:

Function: _parse_option_overrides, lines 333-336
  AnnAssign at line 334  (overrides = {})
  If at line 335         (if not option_values: return overrides)
  # <-- function ends here; for-loop body was lost

Function: _resolve_actor_name, lines 339-381
  ...valid body...
  Return at line 370     (return raw_name.strip())
  For at line 373        (<-- DEAD CODE: unreachable)
  Return at line 381     (<-- DEAD CODE: unreachable)

This means agents actor add --config file.yaml --option key=value silently ignores ALL --option overrides. This is a regression introduced by this PR and is the likely root cause of the CI lint/typecheck/unit_test failures.

How to fix: Move the _resolve_actor_name function definition so it does not interrupt _parse_option_overrides. Define it either before _parse_option_overrides (before line 333) or immediately after the complete _parse_option_overrides body ends (after line 381), ensuring the full for-loop and return overrides belong to _parse_option_overrides.

2. PR bundles two unrelated issues across two Epics [CRITICAL]

This PR bundles two completely unrelated features in violation of the one-Epic-per-PR rule:

  • Commit 219d0ef — fix for issue #11047 (actor CLI change)
  • Commits 07b7425, bc77ddd, 772d87f2 — cloud infrastructure resource type stubs for issue #8607, which already has its own open PR #10592

Per CONTRIBUTING.md: "Each PR is associated with exactly one Epic. Changes spanning multiple Epics → split into separate PRs."

The cloud resource commits must be removed from this PR. The correct resolution is to:

  1. Remove the three cloud-resource commits from this PR's history, and
  2. Let PR #10592 (already open for issue #8607) handle the cloud types work.

3. All required CI gates are failing

All five required-for-merge CI checks are failing:

  • lint — Failing after 1m30s
  • typecheck — Failing after 1m41s
  • security — Failing after 1m39s
  • unit_tests — Failing after 1m36s
  • integration_tests, e2e_tests, build — All failing

The coverage job was skipped (upstream failure). Per policy, all CI gates must be green before a PR can be approved.

4. Behave step text mismatch — UndefinedStep in unit_tests

In features/actor_add_name_from_config.feature, the last scenario reads:

When I run actor update with "local/existing-actor" as positional argument and --config flag

But the step definition is:

@when('I run actor update with "{name}" as positional argument')

The extra and --config flag suffix causes a Behave UndefinedStep error — the step cannot be matched. Either fix the feature file to match the step definition exactly, or add a new step definition that matches the full text.

The top commit (219d0ef4) has no ISSUES CLOSED: #11047 (or Closes #11047) in its footer. Per CONTRIBUTING.md: "Every commit footer includes ISSUES CLOSED: #N or Refs: #N." The PR body has Closes #11047 which is good for auto-close, but the commit itself must also reference the issue.

6. CHANGELOG entry corrupts the existing #10970 entry

The diff inserts the #11047 entry in the middle of the #10970 paragraph, splitting it:

- **`agents session list`...** (#10970): The Rich table
  and Summary panel               <-- truncated
- **`agents actor add`...** (#11047): ...
 ("Most Recent" / "Oldest") ...   <-- orphaned continuation of #10970

The #10970 entry is now unreadable. The #11047 entry must be inserted as a separate, self-contained bullet point on its own line.


🟡 NON-BLOCKING SUGGESTIONS

7. Missing type annotation on validate_region(cls, v) in cloud_types.py

Both GCPResource.validate_region and AzureResource.validate_region have def validate_region(cls, v) with no type annotation on v. Pyright strict mode flags this as reportMissingParameterType. Should be v: str | None.

8. Temp file handles not closed before reading in step definitions

In features/steps/actor_add_name_from_config_steps.py, NamedTemporaryFile handles are opened and written to but not explicitly close()d before the file path is used in CLI invocations. Suggest using with tempfile.NamedTemporaryFile(..., delete=False) as handle: handle.write(...); handle.flush() and then closing it, or calling handle.close() explicitly after flush().

9. PR metadata: no milestone and no Type label

Per CONTRIBUTING.md PR requirements, PRs must have:

  • A milestone matching the linked issue
  • Exactly one Type/ label (e.g. Type/Task or Type/Feature)

10. Forgejo dependency direction not configured

The PR does not block issue #11047 via a Forgejo dependency link. Per CONTRIBUTING.md: "On the PR: add the linked issue under 'blocks'." Please set PR #11065 → blocks → issue #11047 to avoid the dependency-deadlock risk.


WHAT IS CORRECT

  • The _resolve_actor_name() logic itself is correct once properly placed
  • The error message is clear and actionable
  • The docstring on _resolve_actor_name is complete and well-structured
  • The BDD scenarios cover the right cases (YAML name, JSON name, missing name, null name)
  • Deleting actor_add_name_positional.feature and its step file is correct
  • The add() command signature and docstring update are correct
  • cloud_types.py code quality is generally good (thorough docstrings, validators, __all__ export)

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

## First Review — REQUEST_CHANGES Thank you for this PR. The intent of issue #11047 (removing the positional `NAME` argument from `agents actor add`) is correct, and the new `_resolve_actor_name()` helper approach is sound in principle. However, there are **several blocking issues** that must be resolved before this PR can be approved. The most critical is a correctness regression introduced by the patch itself. --- ### 🔴 BLOCKING ISSUES #### 1. `_parse_option_overrides` is silently broken [CRITICAL] The insertion of `_resolve_actor_name()` accidentally split the body of `_parse_option_overrides()`. In the current code (`src/cleveragents/cli/commands/actor.py` lines 333–381), `_parse_option_overrides` ends at line 336 — it only initialises `overrides = {}` and returns early when the input is empty. For **any non-empty input it returns `{}` silently** — the `for item in option_values:` loop that should process key=value pairs was placed inside `_resolve_actor_name` as unreachable dead code after its own `return` statement. Verification via AST analysis: ``` Function: _parse_option_overrides, lines 333-336 AnnAssign at line 334 (overrides = {}) If at line 335 (if not option_values: return overrides) # <-- function ends here; for-loop body was lost Function: _resolve_actor_name, lines 339-381 ...valid body... Return at line 370 (return raw_name.strip()) For at line 373 (<-- DEAD CODE: unreachable) Return at line 381 (<-- DEAD CODE: unreachable) ``` This means `agents actor add --config file.yaml --option key=value` silently ignores ALL `--option` overrides. This is a regression introduced by this PR and is the likely root cause of the CI lint/typecheck/unit_test failures. **How to fix**: Move the `_resolve_actor_name` function definition so it does not interrupt `_parse_option_overrides`. Define it either before `_parse_option_overrides` (before line 333) or immediately after the complete `_parse_option_overrides` body ends (after line 381), ensuring the full `for`-loop and `return overrides` belong to `_parse_option_overrides`. #### 2. PR bundles two unrelated issues across two Epics [CRITICAL] This PR bundles **two completely unrelated features** in violation of the one-Epic-per-PR rule: - Commit `219d0ef` — fix for issue #11047 (actor CLI change) - Commits `07b7425`, `bc77ddd`, `772d87f2` — cloud infrastructure resource type stubs for **issue #8607**, which already has its own **open PR #10592** Per CONTRIBUTING.md: *"Each PR is associated with exactly one Epic. Changes spanning multiple Epics → split into separate PRs."* The cloud resource commits must be removed from this PR. The correct resolution is to: 1. Remove the three cloud-resource commits from this PR's history, and 2. Let PR #10592 (already open for issue #8607) handle the cloud types work. #### 3. All required CI gates are failing All five required-for-merge CI checks are failing: - `lint` — Failing after 1m30s - `typecheck` — Failing after 1m41s - `security` — Failing after 1m39s - `unit_tests` — Failing after 1m36s - `integration_tests`, `e2e_tests`, `build` — All failing The `coverage` job was skipped (upstream failure). Per policy, all CI gates must be green before a PR can be approved. #### 4. Behave step text mismatch — `UndefinedStep` in `unit_tests` In `features/actor_add_name_from_config.feature`, the last scenario reads: ```gherkin When I run actor update with "local/existing-actor" as positional argument and --config flag ``` But the step definition is: ```python @when('I run actor update with "{name}" as positional argument') ``` The extra ` and --config flag` suffix causes a Behave `UndefinedStep` error — the step cannot be matched. Either fix the feature file to match the step definition exactly, or add a new step definition that matches the full text. #### 5. Commit footer missing `ISSUES CLOSED: #11047` The top commit (`219d0ef4`) has no `ISSUES CLOSED: #11047` (or `Closes #11047`) in its footer. Per CONTRIBUTING.md: *"Every commit footer includes ISSUES CLOSED: #N or Refs: #N."* The PR body has `Closes #11047` which is good for auto-close, but the commit itself must also reference the issue. #### 6. CHANGELOG entry corrupts the existing `#10970` entry The diff inserts the `#11047` entry **in the middle** of the `#10970` paragraph, splitting it: ``` - **`agents session list`...** (#10970): The Rich table and Summary panel <-- truncated - **`agents actor add`...** (#11047): ... ("Most Recent" / "Oldest") ... <-- orphaned continuation of #10970 ``` The `#10970` entry is now unreadable. The `#11047` entry must be inserted as a separate, self-contained bullet point on its own line. --- ### 🟡 NON-BLOCKING SUGGESTIONS #### 7. Missing type annotation on `validate_region(cls, v)` in `cloud_types.py` Both `GCPResource.validate_region` and `AzureResource.validate_region` have `def validate_region(cls, v)` with no type annotation on `v`. Pyright strict mode flags this as `reportMissingParameterType`. Should be `v: str | None`. #### 8. Temp file handles not closed before reading in step definitions In `features/steps/actor_add_name_from_config_steps.py`, `NamedTemporaryFile` handles are opened and written to but not explicitly `close()`d before the file path is used in CLI invocations. Suggest using `with tempfile.NamedTemporaryFile(..., delete=False) as handle: handle.write(...); handle.flush()` and then closing it, or calling `handle.close()` explicitly after `flush()`. #### 9. PR metadata: no milestone and no Type label Per CONTRIBUTING.md PR requirements, PRs must have: - A **milestone** matching the linked issue - Exactly one **Type/** label (e.g. `Type/Task` or `Type/Feature`) #### 10. Forgejo dependency direction not configured The PR does not block issue #11047 via a Forgejo dependency link. Per CONTRIBUTING.md: *"On the PR: add the linked issue under 'blocks'."* Please set PR #11065 → blocks → issue #11047 to avoid the dependency-deadlock risk. --- ### ✅ WHAT IS CORRECT - The `_resolve_actor_name()` logic itself is correct once properly placed - The error message is clear and actionable - The docstring on `_resolve_actor_name` is complete and well-structured - The BDD scenarios cover the right cases (YAML name, JSON name, missing name, null name) - Deleting `actor_add_name_positional.feature` and its step file is correct - The `add()` command signature and docstring update are correct - `cloud_types.py` code quality is generally good (thorough docstrings, validators, `__all__` export) --- *Automated by CleverAgents Bot* *Supervisor: PR Review | Agent: pr-review-worker*
@ -6,2 +6,4 @@
## [Unreleased]
### Added
- **Cloud infrastructure resource type stubs (AWS, GCP, Azure) (#8607)**: Implemented
Owner

[BLOCKER] The #11047 entry is inserted mid-sentence, corrupting the existing #10970 entry

The diff inserts the #11047 bullet inside the #10970 paragraph, truncating it after and Summary panel and leaving ("Most Recent" / "Oldest") previously showed... as an orphaned line continuation.

Fix: Insert the #11047 entry as a complete, standalone bullet point after the full #10970 entry (or before it). Do not inject it inside an existing paragraph.

**[BLOCKER] The #11047 entry is inserted mid-sentence, corrupting the existing #10970 entry** The diff inserts the `#11047` bullet **inside** the `#10970` paragraph, truncating it after `and Summary panel` and leaving `("Most Recent" / "Oldest") previously showed...` as an orphaned line continuation. **Fix**: Insert the `#11047` entry as a complete, standalone bullet point after the full `#10970` entry (or before it). Do not inject it inside an existing paragraph.
@ -0,0 +35,4 @@
@tdd_issue @tdd_issue_11047
Scenario: actor update still accepts positional NAME (names registered actor to modify)
Given a registered actor "local/existing-actor" already exists in the registry
When I run actor update with "local/existing-actor" as positional argument and --config flag
Owner

[BLOCKER] Step text does not match any step definition — will cause UndefinedStep

The scenario step:

When I run actor update with "local/existing-actor" as positional argument and --config flag

does not match the step definition:

@when('I run actor update with "{name}" as positional argument')

The extra and --config flag suffix prevents Behave from matching this step, causing an UndefinedStep error and a failing scenario.

Fix: Either change the feature step to:

When I run actor update with "local/existing-actor" as positional argument

Or add a new @when step definition with the full text including and --config flag.

Also: the file is missing a newline at end-of-file (ruff/lint may flag this).

**[BLOCKER] Step text does not match any step definition — will cause `UndefinedStep`** The scenario step: ```gherkin When I run actor update with "local/existing-actor" as positional argument and --config flag ``` does not match the step definition: ```python @when('I run actor update with "{name}" as positional argument') ``` The extra ` and --config flag` suffix prevents Behave from matching this step, causing an `UndefinedStep` error and a failing scenario. **Fix**: Either change the feature step to: ```gherkin When I run actor update with "local/existing-actor" as positional argument ``` Or add a new `@when` step definition with the full text including ` and --config flag`. Also: the file is missing a newline at end-of-file (ruff/lint may flag this).
Owner

[BLOCKER] _parse_option_overrides is silently broken — body split by _resolve_actor_name insertion

The _resolve_actor_name function was inserted between the early-return guard of _parse_option_overrides (line 336) and its for loop body. The AST shows:

  • _parse_option_overrides spans only lines 333–336 — it initialises overrides = {} and early-returns for empty input, but returns {} silently for any non-empty input because the processing loop is gone.
  • _resolve_actor_name (lines 339–381) contains the for item in option_values: loop and return overrides as dead code after its own return raw_name.strip().

This is a regression: --option key=value overrides are silently discarded for actor add.

Fix: Define _resolve_actor_name either before _parse_option_overrides (above line 333) or after its complete body (after line 381). The for loop and return overrides must remain inside _parse_option_overrides.

**[BLOCKER] `_parse_option_overrides` is silently broken — body split by `_resolve_actor_name` insertion** The `_resolve_actor_name` function was inserted between the early-return guard of `_parse_option_overrides` (line 336) and its `for` loop body. The AST shows: - `_parse_option_overrides` spans only lines 333–336 — it initialises `overrides = {}` and early-returns for empty input, but **returns `{}` silently for any non-empty input** because the processing loop is gone. - `_resolve_actor_name` (lines 339–381) contains the `for item in option_values:` loop and `return overrides` as **dead code** after its own `return raw_name.strip()`. This is a regression: `--option key=value` overrides are silently discarded for `actor add`. **Fix**: Define `_resolve_actor_name` either before `_parse_option_overrides` (above line 333) or after its complete body (after line 381). The `for` loop and `return overrides` must remain inside `_parse_option_overrides`.
@ -0,0 +269,4 @@
@field_validator("region")
@classmethod
def validate_region(cls, v) -> str | None:
Owner

[Suggestion] Missing type annotation on v parameter causes Pyright reportMissingParameterType

Both GCPResource.validate_region and AzureResource.validate_region use:

def validate_region(cls, v) -> str | None:

The v parameter has no type annotation. Pyright strict mode (nox -s typecheck) flags this as reportMissingParameterType. Change to:

def validate_region(cls, v: str | None) -> str | None:

This is likely contributing to the typecheck CI failure.

**[Suggestion] Missing type annotation on `v` parameter causes Pyright `reportMissingParameterType`** Both `GCPResource.validate_region` and `AzureResource.validate_region` use: ```python def validate_region(cls, v) -> str | None: ``` The `v` parameter has no type annotation. Pyright strict mode (`nox -s typecheck`) flags this as `reportMissingParameterType`. Change to: ```python def validate_region(cls, v: str | None) -> str | None: ``` This is likely contributing to the `typecheck` CI failure.
Owner

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

--- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Failing after 1m30s
Required
Details
CI / security (pull_request) Failing after 1m39s
Required
Details
CI / typecheck (pull_request) Failing after 1m41s
Required
Details
CI / benchmark-regression (pull_request) Failing after 1m16s
CI / push-validation (pull_request) Successful in 51s
CI / helm (pull_request) Successful in 55s
CI / quality (pull_request) Successful in 1m26s
Required
Details
CI / unit_tests (pull_request) Failing after 1m36s
Required
Details
CI / coverage (pull_request) Has been skipped
Required
Details
CI / docker (pull_request) Has been skipped
Required
Details
CI / integration_tests (pull_request) Failing after 5m1s
Required
Details
CI / e2e_tests (pull_request) Failing after 5m10s
CI / build (pull_request) Failing after 11m36s
Required
Details
CI / status-check (pull_request) Has been cancelled
This pull request has changes conflicting with the target branch.
  • CONTRIBUTORS.md
  • src/cleveragents/cli/commands/actor.py
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/issue-11047-actor-add-remove-positional-name:fix/issue-11047-actor-add-remove-positional-name
git switch fix/issue-11047-actor-add-remove-positional-name
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!11065
No description provided.