UAT: actor.default.invariant config is ignored when actions omit invariant actor #7971

Open
opened 2026-04-12 16:15:48 +00:00 by HAL9000 · 0 comments
Owner

Summary

  • Setting actor.default.invariant via agents config is supposed to auto-wire the Invariant Reconciliation Actor when neither the action nor the plan specifies one.
  • PlanLifecycleService.use_action never consults the config key, so new plans inherit None for plan.invariant_actor unless every action manually sets it.
  • Without the default, _run_invariant_reconciliation returns early and invariants are never reconciled, even though the specification (docs/specification.md §Actor defaults) requires the global fallback.

Steps to reproduce

  1. Run agents config set actor.default.invariant local/invariant-resolver to register the global fallback.
  2. Create an action without --invariant-actor (e.g. agents action add ...).
  3. Use the action to create a plan (agents plan use ...).
  4. Inspect the plan via agents plan show <plan-id> or query PlanLifecycleService.get_plan.

Expected result

  • The created plan should have plan.invariant_actor == "local/invariant-resolver", triggering the built-in reconciliation actor on every phase transition.

Actual result

  • plan.invariant_actor remains None. When start_strategize or execute_plan runs, _run_invariant_reconciliation bails out early because it sees no actor, so invariants are never reconciled despite the global config.

Technical notes

  • PlanLifecycleService.use_action (src/cleveragents/application/services/plan_lifecycle_service.py, lines ~1032-1075) constructs the Plan with invariant_actor=action.invariant_actor and provides no fallback.
  • _run_invariant_reconciliation (lines ~400-420) immediately returns when plan.invariant_actor is falsey, so the missing default means guardrails never execute.
  • Config key actor.default.invariant is defined in ConfigService but currently unused.

Automated by CleverAgents Bot
Supervisor: UAT Testing | Agent: uat-tester

## Summary - Setting `actor.default.invariant` via `agents config` is supposed to auto-wire the Invariant Reconciliation Actor when neither the action nor the plan specifies one. - `PlanLifecycleService.use_action` never consults the config key, so new plans inherit `None` for `plan.invariant_actor` unless every action manually sets it. - Without the default, `_run_invariant_reconciliation` returns early and invariants are never reconciled, even though the specification (docs/specification.md §Actor defaults) requires the global fallback. ## Steps to reproduce 1. Run `agents config set actor.default.invariant local/invariant-resolver` to register the global fallback. 2. Create an action without `--invariant-actor` (e.g. `agents action add ...`). 3. Use the action to create a plan (`agents plan use ...`). 4. Inspect the plan via `agents plan show <plan-id>` or query `PlanLifecycleService.get_plan`. ## Expected result - The created plan should have `plan.invariant_actor == "local/invariant-resolver"`, triggering the built-in reconciliation actor on every phase transition. ## Actual result - `plan.invariant_actor` remains `None`. When `start_strategize` or `execute_plan` runs, `_run_invariant_reconciliation` bails out early because it sees no actor, so invariants are never reconciled despite the global config. ## Technical notes - `PlanLifecycleService.use_action` (src/cleveragents/application/services/plan_lifecycle_service.py, lines ~1032-1075) constructs the Plan with `invariant_actor=action.invariant_actor` and provides no fallback. - `_run_invariant_reconciliation` (lines ~400-420) immediately returns when `plan.invariant_actor` is falsey, so the missing default means guardrails never execute. - Config key `actor.default.invariant` is defined in `ConfigService` but currently unused. --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: uat-tester
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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#7971
No description provided.