The `plan execute` CLI command only performed phase transitions
(Strategize → Execute) without ever invoking the `PlanExecutor` to
drive the strategize or execute actors. `PlanExecutor.__init__`
unconditionally created `StrategizeStubActor()` and
`ExecuteStubActor()` which parse text locally and return empty
changesets — no real LLM call was made.
Added `_get_plan_executor()` helper that resolves `ProviderRegistry`
from the DI container and constructs `LLMStrategizeActor` /
`LLMExecuteActor` for real LLM invocations via LangChain. Updated
`execute_plan` CLI command to detect plan phase/state and
automatically run the appropriate actor:
- Strategize/queued → run strategize actor → transition to Execute
- Strategize/complete → phase transition only (backward compat)
- Execute/queued → run execute actor → mark complete
New `llm_actors.py` module provides `LLMStrategizeActor` (task
decomposition into numbered steps) and `LLMExecuteActor` (code
generation with FILE: blocks). Both resolve `provider/model` actor
names (e.g. `openai/gpt-4`) to live LangChain LLM instances.
`PlanExecutor.__init__` now accepts optional `strategize_actor` and
`execute_actor` parameters, falling back to stubs when None.
Existing mock-based BDD tests remain backward-compatible via duck-
typing fallback (MagicMock.phase is not a PlanPhase, so the legacy
`service.execute_plan()` path is taken).
Includes Behave BDD scenarios testing custom actor injection into
PlanExecutor.
ISSUES CLOSED: #960
The `action create` CLI command was the only action subcommand missing
the `--format`/`-f` parameter. All other action subcommands (`list`,
`show`, `archive`) already accepted `--format` and routed through
`_print_action()`. Running `action create --config action.yaml
--format plain` failed with a Typer unrecognized-option error.
Added the `fmt` parameter (with `--format`/`-f` aliases, defaulting
to `rich`) to the `create()` function signature and passed it through
to the existing `_print_action()` helper which already handles all
output formats. Added Behave BDD scenarios for `--format plain` and
`--format json` to `action_cli_spec_alignment.feature`.
ISSUES CLOSED: #959
Add Robot Framework E2E test suite robot/e2e/m2_acceptance.robot exercising
M2 acceptance criteria with zero mocking. Test creates a temp git repo with
sample project files, registers a custom actor via CLI, sets up resource and
project, creates an action referencing the actor, and runs the full plan
lifecycle (use → execute strategize → execute → diff → apply). Validates
actor YAML compilation, skill registry, tool lifecycle, and LLM integration
through real CLI invocations with real provider API keys. Uses flexible
structural assertions and expected_rc=None for LLM-dependent commands.
ISSUES CLOSED: #742