diff --git a/CHANGELOG.md b/CHANGELOG.md index c472412de..e66a1c586 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ Changed `wf10_batch.robot` to be less likely to create files, and `final_validation_results` fields on the result model, DI container ## [Unreleased] +- **TUI ActorSelectionOverlay render method rename** (#11042): Renamed `ActorSelectionOverlay._render()` to `_refresh_display()` to avoid shadowing the Textual Widget's internal `_render` method. The overlay class inherits from `textual.widgets.Static`, which has its own `_render` implementation used for rendering widget content. Shadowing this caused incorrect repaint behavior and interfered with Textual's layout pass. - **Structural Component Output Validation** (#8164): Replaces exact character matching with structural component checking for output validation. Implements three validators covering plan tree output, decision CLI dicts, and structured session snapshots. The `validate_plan_tree` function validates node dicts for required keys (`decision_id`, `type`, `sequence`, `question`, `children`), ULID format, correct types, and sibling ordering. The `validate_decision_dict` function validates decision CLI output against the `Decision.as_cli_dict()` schema with field presence, type, ULID pattern, confidence range [0..1], and boolean field checks. The `validate_structured_output` function validates the StructuredOutput envelope for `command`, `session_id` (ULID), status membership, `exit_code`, and elements integrity. A unified dispatcher (`validate_structured_component_output`) enables routing by target_type. BDD test coverage added in `features/structural_validation.feature`. [Epic #8137](https://git.cleverthis.com/cleveragents/cleveragents-core/issues/8137) - **Fixed `agents actor add --config` crash with nested `actors:` map and `config.actor` combined shorthand** (#11189): The diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index bf1d924b9..cce2ff67e 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -10,6 +10,7 @@ * Rui Hu # Details +* HAL 9000 has contributed rename of `ActorSelectionOverlay._render` to `_refresh_display` to avoid shadowing Textual Widget internal method (PR #11042). Below are some of the specific details of various contributions. diff --git a/src/cleveragents/tui/widgets/actor_selection_overlay.py b/src/cleveragents/tui/widgets/actor_selection_overlay.py index d515924d8..597f3ecfb 100644 --- a/src/cleveragents/tui/widgets/actor_selection_overlay.py +++ b/src/cleveragents/tui/widgets/actor_selection_overlay.py @@ -145,7 +145,7 @@ class ActorSelectionOverlay(_StaticBase): self._confirmed = False self._selected_actor = None self._visible = True - self._render() + self._refresh_display() def hide(self) -> None: """Hide the overlay and clear its content.""" @@ -161,14 +161,14 @@ class ActorSelectionOverlay(_StaticBase): if not self._filtered_actors: return self._selected_index = (self._selected_index - 1) % len(self._filtered_actors) - self._render() + self._refresh_display() def move_down(self) -> None: """Move the selection cursor down by one position (wraps).""" if not self._filtered_actors: return self._selected_index = (self._selected_index + 1) % len(self._filtered_actors) - self._render() + self._refresh_display() # ------------------------------------------------------------------ # Search / filter @@ -191,7 +191,7 @@ class ActorSelectionOverlay(_StaticBase): else: self._filtered_actors = list(self._actors) self._selected_index = 0 - self._render() + self._refresh_display() # ------------------------------------------------------------------ # Confirmation @@ -218,7 +218,7 @@ class ActorSelectionOverlay(_StaticBase): # Internal rendering # ------------------------------------------------------------------ - def _render(self) -> None: + def _refresh_display(self) -> None: content = render_actor_selection( self._filtered_actors, self._selected_index,