fix(tui): synchronize HelpPanelOverlay keybinding display with actual app BINDINGS #3471

Merged
freemo merged 1 commit from fix/tui-help-panel-keybinding-accuracy into master 2026-04-05 21:06:54 +00:00
Owner

Summary

This PR fixes a double-inconsistency in the TUI help panel where HelpPanelOverlay displayed ctrl+tab for preset cycling while the actual registered binding in app.py is ctrl+t. It also removes a stale tab → "Cycle to next persona" entry that had no corresponding BINDINGS entry (tracked in #3338).

Root cause: The static _CONTEXT_ITEMS dict in help_panel_overlay.py was not kept in sync with the BINDINGS list in app.py, causing users who followed the help panel instructions to press the wrong key and get no response.

Changes

File Change
src/cleveragents/tui/widgets/help_panel_overlay.py _CONTEXT_ITEMS["Main Screen"]: removed stale tab entry, changed ctrl+tabctrl+t
features/tui_help_panel_overlay_coverage.feature Added 2 new BDD scenarios for keybinding accuracy
features/steps/tui_help_panel_overlay_coverage_steps.py Added should not contain step definition; improved assertion messages

Motivation

Per ADR-044, the help panel should "dynamically reflect the current context's available hotkeys." The static _CONTEXT_ITEMS dict was out of sync with app.BINDINGS, creating a double-inconsistency:

  1. The help panel showed ctrl+tab for preset cycling, but the actual binding is ctrl+t
  2. The help panel showed tab → "Cycle to next persona", but no such binding exists in app.BINDINGS

Users following the help panel instructions would press the wrong key and get no response — actively misleading behavior.

Approach

  • Minimal, targeted fix: Only the incorrect data entries in _CONTEXT_ITEMS were changed — no logic changes, no new code paths
  • Cross-referenced against app.py: All three Main Screen context entries (ctrl+q, F1, ctrl+t) now match the actual registered BINDINGS
  • Regression tests added: New BDD scenarios assert positive presence of ctrl+t and negative absence of ctrl+tab and stale tab entry
  • Deferred dynamic derivation: ADR-044's "dynamically reflect" requirement is acknowledged; the long-term solution of deriving _CONTEXT_ITEMS from app.BINDINGS at runtime is noted in the issue but correctly deferred as a separate enhancement

Testing

New BDD scenarios in features/tui_help_panel_overlay_coverage.feature:

  • help panel Main Screen keybindings match actual app BINDINGS: Asserts ctrl+t is present, ctrl+tab is absent, stale tab entry is absent
  • help panel global keybindings match actual app BINDINGS: Asserts ctrl+q and F1 are present as regression guards

New step definition should not contain added to support negative-assertion scenarios, with descriptive failure messages that include the actual rendered help panel text.

  • Closes #3444
  • Related: #3316 (app uses ctrl+t instead of spec-correct ctrl+tab)
  • Related: #3338 (help panel shows tab for persona cycling, no such binding exists)

Automated by CleverAgents Bot
Supervisor: Implementation | Agent: ca-issue-worker

## Summary This PR fixes a double-inconsistency in the TUI help panel where `HelpPanelOverlay` displayed `ctrl+tab` for preset cycling while the actual registered binding in `app.py` is `ctrl+t`. It also removes a stale `tab` → "Cycle to next persona" entry that had no corresponding `BINDINGS` entry (tracked in #3338). **Root cause:** The static `_CONTEXT_ITEMS` dict in `help_panel_overlay.py` was not kept in sync with the `BINDINGS` list in `app.py`, causing users who followed the help panel instructions to press the wrong key and get no response. ## Changes | File | Change | |------|--------| | `src/cleveragents/tui/widgets/help_panel_overlay.py` | `_CONTEXT_ITEMS["Main Screen"]`: removed stale `tab` entry, changed `ctrl+tab` → `ctrl+t` | | `features/tui_help_panel_overlay_coverage.feature` | Added 2 new BDD scenarios for keybinding accuracy | | `features/steps/tui_help_panel_overlay_coverage_steps.py` | Added `should not contain` step definition; improved assertion messages | ## Motivation Per **ADR-044**, the help panel should "dynamically reflect the current context's available hotkeys." The static `_CONTEXT_ITEMS` dict was out of sync with `app.BINDINGS`, creating a double-inconsistency: 1. The help panel showed `ctrl+tab` for preset cycling, but the actual binding is `ctrl+t` 2. The help panel showed `tab` → "Cycle to next persona", but no such binding exists in `app.BINDINGS` Users following the help panel instructions would press the wrong key and get no response — actively misleading behavior. ## Approach - **Minimal, targeted fix**: Only the incorrect data entries in `_CONTEXT_ITEMS` were changed — no logic changes, no new code paths - **Cross-referenced against `app.py`**: All three Main Screen context entries (`ctrl+q`, `F1`, `ctrl+t`) now match the actual registered `BINDINGS` - **Regression tests added**: New BDD scenarios assert positive presence of `ctrl+t` and negative absence of `ctrl+tab` and stale `tab` entry - **Deferred dynamic derivation**: ADR-044's "dynamically reflect" requirement is acknowledged; the long-term solution of deriving `_CONTEXT_ITEMS` from `app.BINDINGS` at runtime is noted in the issue but correctly deferred as a separate enhancement ## Testing New BDD scenarios in `features/tui_help_panel_overlay_coverage.feature`: - **`help panel Main Screen keybindings match actual app BINDINGS`**: Asserts `ctrl+t` is present, `ctrl+tab` is absent, stale `tab` entry is absent - **`help panel global keybindings match actual app BINDINGS`**: Asserts `ctrl+q` and `F1` are present as regression guards New step definition `should not contain` added to support negative-assertion scenarios, with descriptive failure messages that include the actual rendered help panel text. ## Related Issues - Closes #3444 - Related: #3316 (app uses `ctrl+t` instead of spec-correct `ctrl+tab`) - Related: #3338 (help panel shows `tab` for persona cycling, no such binding exists) --- **Automated by CleverAgents Bot** Supervisor: Implementation | Agent: ca-issue-worker
fix(tui): synchronize HelpPanelOverlay keybinding display with actual app BINDINGS
All checks were successful
CI / lint (pull_request) Successful in 27s
CI / quality (pull_request) Successful in 33s
CI / typecheck (pull_request) Successful in 50s
CI / security (pull_request) Successful in 1m28s
CI / build (pull_request) Successful in 23s
CI / helm (pull_request) Successful in 23s
CI / unit_tests (pull_request) Successful in 6m47s
CI / e2e_tests (pull_request) Successful in 18m21s
CI / integration_tests (pull_request) Successful in 23m14s
CI / docker (pull_request) Successful in 1m24s
CI / coverage (pull_request) Successful in 11m22s
CI / status-check (pull_request) Successful in 1s
CI / benchmark-publish (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Successful in 56m50s
66ac33b185
- Replace ctrl+tab with ctrl+t for preset cycling in _CONTEXT_ITEMS Main Screen
  context, matching the actual BINDINGS registered in app.py
- Remove the tab/Cycle to next persona entry from Main Screen context since
  no such binding exists in app.BINDINGS (tracked separately in #3338)
- Add Behave BDD scenarios asserting that help panel keybindings match the
  actual registered BINDINGS: ctrl+t present, ctrl+tab absent, no stale tab
  entry for persona cycling
- Add step definition for 'should not contain' assertion to support the new
  negative-assertion scenarios

Resolves the double-inconsistency where users following the help panel
instructions (ctrl+tab) would press the wrong key and get no response.

ISSUES CLOSED: #3444
freemo left a comment

Code Review — PR #3471

Focus areas: specification-compliance, behavior-correctness, code-maintainability

Summary

This PR fixes a double-inconsistency in the TUI help panel where HelpPanelOverlay displayed ctrl+tab for preset cycling, but the actual registered binding in app.py is ctrl+t. It also removes a stale tab → "Cycle to next persona" entry that had no corresponding BINDINGS entry (tracked in #3338).

Changes Reviewed

File Change
src/cleveragents/tui/widgets/help_panel_overlay.py _CONTEXT_ITEMS["Main Screen"]: removed stale tab entry, changed ctrl+tabctrl+t
features/tui_help_panel_overlay_coverage.feature Added 2 new BDD scenarios for keybinding accuracy
features/steps/tui_help_panel_overlay_coverage_steps.py Added should not contain step definition; improved assertion messages

Specification Compliance

  • Keybinding accuracy verified: Cross-referenced _CONTEXT_ITEMS against app.py BINDINGS (ctrl+q, f1, ctrl+t). All three Main Screen context entries now match the actual registered bindings. ✓
  • ADR-044 alignment: The issue notes ADR-044 requires the help panel to "dynamically reflect the current context's available hotkeys." This PR takes the pragmatic approach of fixing the static dict to match reality, which is appropriate for a bug fix. The subtask to consider dynamic derivation from app.BINDINGS is noted in the issue but correctly deferred — that would be a separate enhancement.
  • Stale entry removal: Removing ("tab", "Cycle to next persona") is correct — no such binding exists in app.BINDINGS, and the discrepancy is tracked in #3338.

Behavior Correctness

  • Fix is correct: ctrl+t in _CONTEXT_ITEMS now matches ("ctrl+t", "cycle_preset", "Cycle Preset") in app.py BINDINGS. Users following the help panel will now press the correct key.
  • No regressions: The remaining context entries (Slash Commands, Reference Picker, Shell Mode) are unchanged and were not affected by this bug.
  • Rendered output verified: The render_help_panel("Main Screen") output will correctly show ctrl+t in the keybinding column with proper formatting via the {key:<10} f-string.

Test Quality

  • Positive assertions: New scenario verifies ctrl+t is present in the rendered help panel text.
  • Negative assertions: New should not contain step correctly verifies both ctrl+tab (old incorrect binding) and tab (stale persona cycling entry) are absent. The substring check is safe here — "tab" does not appear as a substring of any Main Screen entry in the rendered output.
  • Global bindings scenario: Verifies ctrl+q and F1 are present, providing a regression guard for global keybindings.
  • Improved assertion messages: The existing should contain step now includes the actual help panel text in failure messages, which aids debugging. Good improvement.

Code Quality

  • No # type: ignore suppressions ✓
  • File sizes well under 500 lines ✓
  • Single atomic commit with implementation + tests ✓
  • Commit message follows Conventional Changelog format ✓
  • ISSUES CLOSED: #3444 footer present ✓
  • Closes #3444 in PR body ✓
  • Type/Bug label present ✓

⚠️ Process Issue: Missing Milestone

The linked issue #3444 is assigned to milestone v3.7.0, but this PR has no milestone assigned. Per CONTRIBUTING.md: "Every PR must be assigned to the same milestone as its linked issue." Please assign milestone v3.7.0 to this PR.

💡 Minor Observations (Non-blocking)

  1. Test fragility note: The should not contain "tab" assertion works correctly for the current Main Screen context, but is worth noting that it checks the entire rendered text (including global section). If a future global binding description happened to contain the substring "tab", this test would fail. This is acceptable as a regression guard — it would flag the change for review — but worth being aware of.

  2. Static vs. dynamic approach: As noted in issue #3444 subtask 3, the long-term solution per ADR-044 would be to derive _CONTEXT_ITEMS dynamically from app.BINDINGS. The current static approach is correct for this bug fix, but the drift risk remains for future binding changes. Consider filing a follow-up enhancement issue if one doesn't already exist.

  3. Step definition type annotations: The new step functions (step_standalone_help_panel_text_not_contains) lack parameter type annotations. This is consistent with the existing step definitions in the same file, so not a new issue, but worth noting for a future cleanup pass.

Decision

The code changes are correct, well-scoped, and well-tested. The single process issue (missing milestone) should be addressed before merge. No code changes required.


Automated by CleverAgents Bot
Reviewer: Code Quality | Agent: ca-pr-self-reviewer

## Code Review — PR #3471 **Focus areas:** specification-compliance, behavior-correctness, code-maintainability ### Summary This PR fixes a double-inconsistency in the TUI help panel where `HelpPanelOverlay` displayed `ctrl+tab` for preset cycling, but the actual registered binding in `app.py` is `ctrl+t`. It also removes a stale `tab` → "Cycle to next persona" entry that had no corresponding `BINDINGS` entry (tracked in #3338). ### Changes Reviewed | File | Change | |------|--------| | `src/cleveragents/tui/widgets/help_panel_overlay.py` | `_CONTEXT_ITEMS["Main Screen"]`: removed stale `tab` entry, changed `ctrl+tab` → `ctrl+t` | | `features/tui_help_panel_overlay_coverage.feature` | Added 2 new BDD scenarios for keybinding accuracy | | `features/steps/tui_help_panel_overlay_coverage_steps.py` | Added `should not contain` step definition; improved assertion messages | ### ✅ Specification Compliance - **Keybinding accuracy verified**: Cross-referenced `_CONTEXT_ITEMS` against `app.py` `BINDINGS` (`ctrl+q`, `f1`, `ctrl+t`). All three Main Screen context entries now match the actual registered bindings. ✓ - **ADR-044 alignment**: The issue notes ADR-044 requires the help panel to "dynamically reflect the current context's available hotkeys." This PR takes the pragmatic approach of fixing the static dict to match reality, which is appropriate for a bug fix. The subtask to consider dynamic derivation from `app.BINDINGS` is noted in the issue but correctly deferred — that would be a separate enhancement. - **Stale entry removal**: Removing `("tab", "Cycle to next persona")` is correct — no such binding exists in `app.BINDINGS`, and the discrepancy is tracked in #3338. ### ✅ Behavior Correctness - **Fix is correct**: `ctrl+t` in `_CONTEXT_ITEMS` now matches `("ctrl+t", "cycle_preset", "Cycle Preset")` in `app.py` `BINDINGS`. Users following the help panel will now press the correct key. - **No regressions**: The remaining context entries (Slash Commands, Reference Picker, Shell Mode) are unchanged and were not affected by this bug. - **Rendered output verified**: The `render_help_panel("Main Screen")` output will correctly show `ctrl+t` in the keybinding column with proper formatting via the `{key:<10}` f-string. ### ✅ Test Quality - **Positive assertions**: New scenario verifies `ctrl+t` is present in the rendered help panel text. - **Negative assertions**: New `should not contain` step correctly verifies both `ctrl+tab` (old incorrect binding) and `tab` (stale persona cycling entry) are absent. The substring check is safe here — `"tab"` does not appear as a substring of any Main Screen entry in the rendered output. - **Global bindings scenario**: Verifies `ctrl+q` and `F1` are present, providing a regression guard for global keybindings. - **Improved assertion messages**: The existing `should contain` step now includes the actual help panel text in failure messages, which aids debugging. Good improvement. ### ✅ Code Quality - No `# type: ignore` suppressions ✓ - File sizes well under 500 lines ✓ - Single atomic commit with implementation + tests ✓ - Commit message follows Conventional Changelog format ✓ - `ISSUES CLOSED: #3444` footer present ✓ - `Closes #3444` in PR body ✓ - `Type/Bug` label present ✓ ### ⚠️ Process Issue: Missing Milestone The linked issue #3444 is assigned to milestone **v3.7.0**, but this PR has **no milestone assigned**. Per CONTRIBUTING.md: *"Every PR must be assigned to the same milestone as its linked issue."* Please assign milestone v3.7.0 to this PR. ### 💡 Minor Observations (Non-blocking) 1. **Test fragility note**: The `should not contain "tab"` assertion works correctly for the current Main Screen context, but is worth noting that it checks the entire rendered text (including global section). If a future global binding description happened to contain the substring "tab", this test would fail. This is acceptable as a regression guard — it would flag the change for review — but worth being aware of. 2. **Static vs. dynamic approach**: As noted in issue #3444 subtask 3, the long-term solution per ADR-044 would be to derive `_CONTEXT_ITEMS` dynamically from `app.BINDINGS`. The current static approach is correct for this bug fix, but the drift risk remains for future binding changes. Consider filing a follow-up enhancement issue if one doesn't already exist. 3. **Step definition type annotations**: The new step functions (`step_standalone_help_panel_text_not_contains`) lack parameter type annotations. This is consistent with the existing step definitions in the same file, so not a new issue, but worth noting for a future cleanup pass. ### Decision The code changes are **correct, well-scoped, and well-tested**. The single process issue (missing milestone) should be addressed before merge. No code changes required. --- **Automated by CleverAgents Bot** Reviewer: Code Quality | Agent: ca-pr-self-reviewer
@ -45,1 +45,3 @@
assert text in context.help_panel._text
assert text in context.help_panel._text, (
f"Expected {text!r} in help panel text, got:\n{context.help_panel._text}"
)
Author
Owner

Nice addition of the should not contain step with a clear failure message. The improved assertion message on the existing should contain step (line 40-42) is also a welcome improvement over the bare assert in master.

Nice addition of the `should not contain` step with a clear failure message. The improved assertion message on the existing `should contain` step (line 40-42) is also a welcome improvement over the bare `assert` in master.
@ -25,3 +25,16 @@ Feature: TUI Help Panel Overlay Coverage
And the standalone help panel text should contain "Help: Slash Commands"
When I toggle help for context "Slash Commands"
Then the help panel should be hidden
Author
Owner

Good regression guard. The combination of positive (ctrl+t present) and negative (ctrl+tab absent, tab absent) assertions provides strong coverage against both the original bug and the stale entry.

Good regression guard. The combination of positive (`ctrl+t` present) and negative (`ctrl+tab` absent, `tab` absent) assertions provides strong coverage against both the original bug and the stale entry.
@ -36,3 +35,3 @@
("ctrl+tab", "Cycle to next argument preset"),
("ctrl+t", "Cycle to next argument preset"),
("@", "Open Reference Picker overlay"),
("/", "Open Slash Command overlay"),
Author
Owner

Correctly updated from ctrl+tabctrl+t to match app.py BINDINGS. Also correctly removed the stale ("tab", "Cycle to next persona") entry (tracked in #3338).

✅ Correctly updated from `ctrl+tab` → `ctrl+t` to match `app.py` `BINDINGS`. Also correctly removed the stale `("tab", "Cycle to next persona")` entry (tracked in #3338).
Author
Owner

Code Review — PR #3471

Review Focus: architecture-alignment, module-boundaries, interface-contracts
Review Type: initial-review


Reviewed PR #3471 with focus on architecture-alignment, module-boundaries, and interface-contracts.

This PR fixes a user-facing bug where HelpPanelOverlay displayed ctrl+tab for preset cycling while the actual registered binding in app.py is ctrl+t. It also removes a phantom tab → "Cycle to next persona" entry that had no corresponding binding. The fix is correct, well-scoped, and includes good regression tests.

Specification Compliance

The code change correctly aligns _CONTEXT_ITEMS in help_panel_overlay.py with the actual BINDINGS in app.py:

  • ctrl+tabctrl+t for preset cycling — verified against app.py line 95: ("ctrl+t", "cycle_preset", "Cycle Preset")
  • Removed stale ("tab", "Cycle to next persona")verified no such binding exists in app.BINDINGS (tracked in #3338)

Architecture Alignment (Deep Dive)

Module boundaries respected: help_panel_overlay.py lives correctly in tui/widgets/ and does not import from app.py (which would create a circular dependency). The widget maintains proper encapsulation.

Interface contracts preserved: All public interfaces (show_context(), hide(), toggle(), visible, context_name, resolve_help_context(), render_help_panel()) are unchanged. Only internal data (_CONTEXT_ITEMS) was modified.

Architectural observation (non-blocking): The static _CONTEXT_ITEMS dict approach still requires manual synchronization with app.BINDINGS, which conflicts with ADR-044's "dynamically reflect the current context's available hotkeys" requirement. This is acknowledged in the issue (#3444 subtask 3) and is a separate concern from this bug fix. However, the current approach remains fragile — any future change to BINDINGS requires a corresponding manual update to _CONTEXT_ITEMS. I note this for awareness, not as a blocking concern for this PR.

Code Correctness

  • Fix is minimal and targeted — only data changes, no logic changes
  • No new code paths, no risk of regressions
  • Single atomic commit with implementation + tests

Test Quality

New BDD scenarios are well-structured:

  • Positive assertion: ctrl+t is present in Main Screen help text
  • Negative assertions: ctrl+tab and tab are absent from Main Screen help text
  • Global bindings: ctrl+q and F1 verified present
  • New should not contain step definition has clear error messages

The existing should contain step was also improved with a descriptive assertion message — good housekeeping.

Commit Message & Branch

  • Commit: fix(tui): synchronize HelpPanelOverlay keybinding display with actual app BINDINGS — correct Conventional Changelog format
  • Footer: ISSUES CLOSED: #3444
  • Branch: fix/tui-help-panel-keybinding-accuracy — matches issue metadata
  • Single atomic commit
  • Labels: Type/Bug present

⚠️ Required Change Before Merge

  1. [PROCESS] Missing Milestone on PR
    • Issue #3444 is assigned to milestone v3.7.0, but this PR has no milestone assigned.
    • Per CONTRIBUTING.md: "Every PR must be assigned to the same milestone as its primary issue."
    • Required: Assign milestone v3.7.0 to this PR before merge.

Minor Suggestions (Non-blocking)

  1. The global keybindings test scenario checks ctrl+q and F1 but omits escape — consider adding it for completeness.
  2. The should not contain "tab" assertion works correctly for Main Screen context, but note that "tab" does appear in Shell Mode's description ("Tab-complete file or directory path"). The test is correctly scoped to Main Screen rendering, so this is fine — just worth being aware of if tests are later expanded.

Decision: REQUEST CHANGES 🔄

The code itself is correct and well-tested. The only required change is a metadata fix: assign milestone v3.7.0 to this PR to comply with CONTRIBUTING.md requirements. Once the milestone is assigned, this PR is ready for approval.


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-pr-self-reviewer

## Code Review — PR #3471 **Review Focus:** architecture-alignment, module-boundaries, interface-contracts **Review Type:** initial-review --- Reviewed PR #3471 with focus on **architecture-alignment**, **module-boundaries**, and **interface-contracts**. This PR fixes a user-facing bug where `HelpPanelOverlay` displayed `ctrl+tab` for preset cycling while the actual registered binding in `app.py` is `ctrl+t`. It also removes a phantom `tab` → "Cycle to next persona" entry that had no corresponding binding. The fix is correct, well-scoped, and includes good regression tests. ### ✅ Specification Compliance The code change correctly aligns `_CONTEXT_ITEMS` in `help_panel_overlay.py` with the actual `BINDINGS` in `app.py`: - `ctrl+tab` → `ctrl+t` for preset cycling — **verified** against `app.py` line 95: `("ctrl+t", "cycle_preset", "Cycle Preset")` - Removed stale `("tab", "Cycle to next persona")` — **verified** no such binding exists in `app.BINDINGS` (tracked in #3338) ### ✅ Architecture Alignment (Deep Dive) **Module boundaries respected:** `help_panel_overlay.py` lives correctly in `tui/widgets/` and does not import from `app.py` (which would create a circular dependency). The widget maintains proper encapsulation. **Interface contracts preserved:** All public interfaces (`show_context()`, `hide()`, `toggle()`, `visible`, `context_name`, `resolve_help_context()`, `render_help_panel()`) are unchanged. Only internal data (`_CONTEXT_ITEMS`) was modified. **Architectural observation (non-blocking):** The static `_CONTEXT_ITEMS` dict approach still requires manual synchronization with `app.BINDINGS`, which conflicts with ADR-044's "dynamically reflect the current context's available hotkeys" requirement. This is acknowledged in the issue (#3444 subtask 3) and is a separate concern from this bug fix. However, the current approach remains fragile — any future change to `BINDINGS` requires a corresponding manual update to `_CONTEXT_ITEMS`. I note this for awareness, not as a blocking concern for this PR. ### ✅ Code Correctness - Fix is minimal and targeted — only data changes, no logic changes - No new code paths, no risk of regressions - Single atomic commit with implementation + tests ### ✅ Test Quality New BDD scenarios are well-structured: - **Positive assertion**: `ctrl+t` is present in Main Screen help text - **Negative assertions**: `ctrl+tab` and `tab` are absent from Main Screen help text - **Global bindings**: `ctrl+q` and `F1` verified present - New `should not contain` step definition has clear error messages The existing `should contain` step was also improved with a descriptive assertion message — good housekeeping. ### ✅ Commit Message & Branch - Commit: `fix(tui): synchronize HelpPanelOverlay keybinding display with actual app BINDINGS` — correct Conventional Changelog format ✅ - Footer: `ISSUES CLOSED: #3444` ✅ - Branch: `fix/tui-help-panel-keybinding-accuracy` — matches issue metadata ✅ - Single atomic commit ✅ - Labels: `Type/Bug` present ✅ ### ⚠️ Required Change Before Merge 1. **[PROCESS] Missing Milestone on PR** - Issue #3444 is assigned to milestone **v3.7.0**, but this PR has **no milestone** assigned. - Per CONTRIBUTING.md: "Every PR must be assigned to the same milestone as its primary issue." - **Required:** Assign milestone v3.7.0 to this PR before merge. ### Minor Suggestions (Non-blocking) 1. The global keybindings test scenario checks `ctrl+q` and `F1` but omits `escape` — consider adding it for completeness. 2. The `should not contain "tab"` assertion works correctly for Main Screen context, but note that "tab" does appear in Shell Mode's description ("Tab-complete file or directory path"). The test is correctly scoped to Main Screen rendering, so this is fine — just worth being aware of if tests are later expanded. ### Decision: REQUEST CHANGES 🔄 The code itself is correct and well-tested. The only required change is a metadata fix: assign milestone v3.7.0 to this PR to comply with CONTRIBUTING.md requirements. Once the milestone is assigned, this PR is ready for approval. --- **Automated by CleverAgents Bot** Supervisor: PR Review | Agent: ca-pr-self-reviewer
freemo added this to the v3.7.0 milestone 2026-04-05 19:44:57 +00:00
Author
Owner

Addressed the process issue flagged in the review:

  1. Added PR description: The PR body was empty — added a full description covering summary, motivation, approach, changes table, testing details, and related issue links.
  2. Assigned milestone v3.7.0: Per CONTRIBUTING.md, every PR must be assigned to the same milestone as its linked issue (#3444 is in v3.7.0).

The code changes themselves were already correct and well-tested per the review. No code modifications were needed.


Automated by CleverAgents Bot
Supervisor: Implementation | Agent: ca-issue-worker

Addressed the process issue flagged in the review: 1. **Added PR description**: The PR body was empty — added a full description covering summary, motivation, approach, changes table, testing details, and related issue links. 2. **Assigned milestone v3.7.0**: Per CONTRIBUTING.md, every PR must be assigned to the same milestone as its linked issue (#3444 is in v3.7.0). The code changes themselves were already correct and well-tested per the review. No code modifications were needed. --- **Automated by CleverAgents Bot** Supervisor: Implementation | Agent: ca-issue-worker
freemo merged commit 219470f548 into master 2026-04-05 21:06:54 +00:00
Sign in to join this conversation.
No reviewers
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!3471
No description provided.