fix(actors): distinguish namespace/name from provider/model in actor name parsing #11255

Merged
CoreRasurae merged 5 commits from bugfix/m3-namespace-provider-name-collision into master 2026-05-23 13:31:18 +00:00

5 Commits

Author SHA1 Message Date
HAL9000 f1a4858a29 fix(memory): use **kwargs to avoid Pyright param name mismatch
CI / push-validation (pull_request) Successful in 34s
CI / helm (pull_request) Successful in 37s
CI / build (pull_request) Successful in 43s
CI / lint (pull_request) Successful in 1m1s
CI / typecheck (pull_request) Successful in 1m20s
CI / quality (pull_request) Successful in 1m19s
CI / security (pull_request) Successful in 1m24s
CI / integration_tests (pull_request) Successful in 3m37s
CI / unit_tests (pull_request) Successful in 4m50s
CI / docker (pull_request) Successful in 1m23s
CI / coverage (pull_request) Successful in 10m5s
CI / status-check (pull_request) Successful in 5s
CI / lint (push) Successful in 36s
CI / build (push) Successful in 44s
CI / quality (push) Successful in 48s
CI / typecheck (push) Successful in 57s
CI / security (push) Successful in 57s
CI / push-validation (push) Successful in 24s
CI / helm (push) Successful in 40s
CI / benchmark-regression (push) Failing after 36s
CI / e2e_tests (push) Successful in 45s
CI / integration_tests (push) Successful in 3m26s
CI / unit_tests (push) Successful in 4m24s
CI / docker (push) Successful in 1m24s
CI / coverage (push) Successful in 10m7s
CI / status-check (push) Successful in 3s
CI / benchmark-publish (push) Successful in 1h37m21s
langchain-community renamed connection_string → connection, but
the locally installed stubs only know connection_string while CI
has the newer API. Build kwargs dict dynamically to satisfy both
environments without # type: ignore annotations.
2026-05-23 13:14:21 +00:00
HAL9000 190606d7e6 fix(memory): handle langchain-community SQLChatMessageHistory API rename
CI / push-validation (pull_request) Successful in 34s
CI / helm (pull_request) Successful in 44s
CI / build (pull_request) Successful in 49s
CI / lint (pull_request) Successful in 1m4s
CI / typecheck (pull_request) Failing after 1m5s
CI / quality (pull_request) Successful in 1m6s
CI / security (pull_request) Successful in 1m12s
CI / integration_tests (pull_request) Successful in 4m9s
CI / unit_tests (pull_request) Successful in 6m17s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
langchain-community >= 0.3 renamed connection_string to connection
in SQLChatMessageHistory.__init__(). Use the new 'connection' kwarg
first and fall back to 'connection_string' for older versions.

Also updates the test assertion in memory_service_coverage_steps.py
to accept either parameter name.

Fixes CI errors in:
- plan_service_coverage.feature:128,141
- consolidated_misc.feature:1531
2026-05-23 12:22:51 +00:00
CoreRasurae cdbe504b2c fix(test): use shared in-memory SQLite URI in _ensure_memory_database_url
CI / push-validation (pull_request) Successful in 36s
CI / helm (pull_request) Successful in 44s
CI / build (pull_request) Successful in 48s
CI / lint (pull_request) Successful in 1m10s
CI / typecheck (pull_request) Successful in 1m21s
CI / security (pull_request) Successful in 1m20s
CI / quality (pull_request) Successful in 1m26s
CI / integration_tests (pull_request) Successful in 7m53s
CI / unit_tests (pull_request) Failing after 9m56s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 4s
Replace sqlite:///:memory: with sqlite:///file::memory:?cache=shared to
ensure all SQLAlchemy connections within the same process share a single
in-memory database. This prevents isolation issues where SQLChatMessageHistory
and EntityStore would each create separate in-memory databases, avoiding
unexpected errors in CI parallel execution.
2026-05-23 12:20:11 +01:00
HAL9000 73d3bed2da test(persistence): remove stale @tdd_issue tags from EntityStore persistence tests
CI / lint (pull_request) Successful in 49s
CI / push-validation (pull_request) Successful in 33s
CI / helm (pull_request) Successful in 36s
CI / build (pull_request) Successful in 49s
CI / quality (pull_request) Successful in 59s
CI / typecheck (pull_request) Successful in 1m9s
CI / security (pull_request) Successful in 1m27s
CI / integration_tests (pull_request) Successful in 4m28s
CI / unit_tests (pull_request) Failing after 5m42s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 4s
The _load_from_persistence() and _persist_if_needed() stubs have been
replaced with real SQLite persistence implementations, fixing bug #10455.
All five scenarios now pass as regular regression tests.

Refs: #10455
2026-05-23 00:01:44 +00:00
CoreRasurae 3e13411fcf fix(actors): distinguish namespace/name from provider/model in actor name parsing
CI / lint (pull_request) Successful in 1m17s
CI / typecheck (pull_request) Successful in 2m2s
CI / security (pull_request) Successful in 2m5s
CI / quality (pull_request) Successful in 1m12s
CI / push-validation (pull_request) Successful in 47s
CI / helm (pull_request) Successful in 1m1s
CI / build (pull_request) Successful in 1m8s
CI / integration_tests (pull_request) Successful in 4m52s
CI / unit_tests (pull_request) Failing after 6m20s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
When action YAML references actors using namespace/name format (e.g.
`strategy_actor: local/my-strategist`), `_parse_actor_name()` incorrectly
treated the namespace prefix as a provider name, causing
`ValueError: Unknown provider type: local`.

Changes:

- `_is_known_provider()`: New utility function (strategy_resolution.py)
  that checks whether a slash-separated first segment matches a known
  `ProviderType` value (openai, anthropic, etc.). Consolidated into a
  single implementation; llm_actors.py now imports from
  strategy_resolution.py.

- `_parse_actor_name()`: When the first segment IS a known provider,
  preserves existing behaviour (provider/model). When it is NOT a known
  provider, treats the input as namespace/name and returns the full name
  as the model identifier with the default provider. Callers SHOULD
  pre-resolve namespace/name references via the actor registry before
  calling this function. Both implementations (strategy_resolution.py
  and llm_actors.py) updated; ProviderType import moved to top level.

- `PlanLifecycleService.resolve_actor_provider_model()`: New method
  that resolves a namespaced actor name (e.g. local/my-strategist) to
  provider/model format by looking up the actor record and extracting
  its provider and model fields.

- `LifecycleService` Protocol (strategy_resolution.py): Added
  `resolve_actor_provider_model` to the protocol, eliminating the
  need for `# type: ignore[union-attr]` at call sites.

- `PlanLifecycleProtocol` (llm_actors.py): Added
  `resolve_actor_provider_model` to the protocol.

- Caller pre-resolution: StrategyActor, LLMStrategizeActor,
  LLMExecuteActor, SessionWorkflow._resolve_llm(), and CLI session
  commands now pre-resolve actor names through the lifecycle service
  or via injected actor_resolver callables before calling
  `_parse_actor_name()`, ensuring namespace/name references are
  correctly mapped to their underlying LLM providers.

- `_build_actor_resolver()` (cli/commands/session.py) and
  `_build_actor_resolver_for_session_workflow()` (a2a/facade.py):
  Moved `_is_known_provider` imports to top level; removed redundant
  `except (NotFoundError, Exception)`; added warning logging for
  outer exception handlers.

- `make_mock_lifecycle()` (mock_strategy_llm.py) and
  `_make_mock_lifecycle()` (llm_actors_coverage_steps.py): Added
  `resolve_actor_provider_model` to mock lifecycle services for
  test compatibility.

- Added `@tdd_issue @tdd_issue_11254` tags to all new BDD scenarios
  related to namespace/name disambiguation in llm_actors_coverage,
  strategy_actor_llm, and plan_lifecycle_service_coverage_boost_r4
  feature files.

- Updated docs/CHANGELOG.md with the fix entry.

ISSUES CLOSED: #11254
2026-05-22 20:42:25 +01:00