UAT: PluginManager missing get_extension_point(name) method — feature tests require name-based lookup but only list_extension_points() exists #5990

Open
opened 2026-04-09 13:12:01 +00:00 by HAL9000 · 1 comment
Owner

Bug Report

Feature Area: Plugin Architecture
Severity: High
Milestone: v3.6.0 (plugin architecture scope)

What Was Tested

Code-level analysis of src/cleveragents/infrastructure/plugins/manager.py against the Behave feature tests in features/plugin_extension_points.feature.

Expected Behavior (from spec / feature tests)

The plugin_extension_points.feature file contains these scenarios that require name-based extension point lookup:

Scenario: Extension point lookup by name returns the correct point
  Given a PluginManager with all extension points registered
  When I look up extension point "context.strategy"
  Then the looked-up extension point name should be "context.strategy"

Scenario: Lookup of non-existent extension point returns None
  Given a PluginManager with all extension points registered
  When I look up extension point "nonexistent.point"
  Then the looked-up extension point should be None

These scenarios require a get_extension_point(name: str) -> ExtensionPoint | None method on PluginManager.

Actual Behavior (from code)

PluginManager only exposes:

  • register_extension_point(extension_point) — registers one
  • list_extension_points() — returns all as a list

There is no get_extension_point(name) method. The internal _extension_points dict is keyed by name, so the lookup would be trivial to implement, but it is absent from the public API.

Code Location

src/cleveragents/infrastructure/plugins/manager.pyPluginManager class, extension point section (lines ~80–100).

The _extension_points dict is dict[str, ExtensionPoint] keyed by name, but no public accessor for individual lookup exists.

Steps to Reproduce

  1. Instantiate PluginManager()
  2. Call register_all_extension_points(manager)
  3. Attempt manager.get_extension_point("context.strategy")AttributeError: 'PluginManager' object has no attribute 'get_extension_point'

Impact

  • Feature tests in plugin_extension_points.feature that test name-based lookup will fail
  • Consumers of the plugin API cannot efficiently look up a specific extension point without iterating the full list
  • The ACMSPipeline wiring scenario (which checks for specific extension points) cannot work correctly

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

## Bug Report **Feature Area**: Plugin Architecture **Severity**: High **Milestone**: v3.6.0 (plugin architecture scope) ## What Was Tested Code-level analysis of `src/cleveragents/infrastructure/plugins/manager.py` against the Behave feature tests in `features/plugin_extension_points.feature`. ## Expected Behavior (from spec / feature tests) The `plugin_extension_points.feature` file contains these scenarios that require name-based extension point lookup: ```gherkin Scenario: Extension point lookup by name returns the correct point Given a PluginManager with all extension points registered When I look up extension point "context.strategy" Then the looked-up extension point name should be "context.strategy" Scenario: Lookup of non-existent extension point returns None Given a PluginManager with all extension points registered When I look up extension point "nonexistent.point" Then the looked-up extension point should be None ``` These scenarios require a `get_extension_point(name: str) -> ExtensionPoint | None` method on `PluginManager`. ## Actual Behavior (from code) `PluginManager` only exposes: - `register_extension_point(extension_point)` — registers one - `list_extension_points()` — returns all as a list There is **no** `get_extension_point(name)` method. The internal `_extension_points` dict is keyed by name, so the lookup would be trivial to implement, but it is absent from the public API. ## Code Location `src/cleveragents/infrastructure/plugins/manager.py` — `PluginManager` class, extension point section (lines ~80–100). The `_extension_points` dict is `dict[str, ExtensionPoint]` keyed by name, but no public accessor for individual lookup exists. ## Steps to Reproduce 1. Instantiate `PluginManager()` 2. Call `register_all_extension_points(manager)` 3. Attempt `manager.get_extension_point("context.strategy")` → `AttributeError: 'PluginManager' object has no attribute 'get_extension_point'` ## Impact - Feature tests in `plugin_extension_points.feature` that test name-based lookup will fail - Consumers of the plugin API cannot efficiently look up a specific extension point without iterating the full list - The `ACMSPipeline` wiring scenario (which checks for specific extension points) cannot work correctly --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: uat-tester
HAL9000 added this to the v3.2.0 milestone 2026-04-09 13:39:37 +00:00
Author
Owner

Label compliance fix applied:

  • Added missing labels and/or milestone to bring issue into compliance with CONTRIBUTING.md

Automated by CleverAgents Bot
Supervisor: Backlog Grooming | Agent: backlog-groomer

Label compliance fix applied: - Added missing labels and/or milestone to bring issue into compliance with CONTRIBUTING.md --- **Automated by CleverAgents Bot** Supervisor: Backlog Grooming | Agent: backlog-groomer
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.

Reference
cleveragents/cleveragents-core#5990
No description provided.