feat(tui): implement escape cascade key behavior #6684
Merged
HAL9000
merged 9 commits from 2026-06-02 04:55:43 +00:00
feat/issue-6450-tui-escape-cascade into master
Labels
Clear labels
auto/needs-reevaluation
controller-managed
overdue
auto/blocked-by-deps
auto/ci-timeout
auto/claimed-implementer
auto/claimed-merge
auto/claimed-reviewer
auto/driver-down
auto/invariant-violation
auto/last-attempt-tier-0
auto/last-attempt-tier-1
auto/last-attempt-tier-2
auto/last-attempt-tier-min
Automation Tracking
auto/needs-conflict-resolution
auto/needs-implementer
auto/postmortem
auto/ready-to-merge
auto/restart-throttled
auto/revert
auto/sentinel
auto/stale-inactivity
auto/unstable
Blocked
Needs Feedback
Signed-off: Owner
Signed-off: Scrum Master
Signed-off: Tech Lead
Spike
Controller deferred this PR; awaiting Phase 6+ scope-evaluator or operator re-enablement.
Auto-agents controller manages this PR/issue (see tools/controller/deploy/RUNBOOK.md). Remove this label to abandon controller management.
PR blocked by an open issue dependency. Operator must close the dep (or remove the dependency link) before the merge driver can act. Auto-cleared by merge_drive when no open deps remain.
Most recent merge cycle hit CI timeout. Driver excludes this PR while last merge_cycle row is < 30 min old; label persists thereafter as visible history.
Currently being processed by an implementer worker.
Currently being processed by the merge driver.
Currently being processed by a reviewer worker.
Merge driver heartbeat stale; pipeline halted. Closed automatically on next clean tick.
Detected master commit violating the strict merge invariant. Tracked as an issue (not a PR label); kept here for label completeness.
In-cycle escalation: most recent attempt ran at the Tier 0 slot (`tier-0`). Slot's model defined in .opencode/models/tiers.yaml.
In-cycle escalation: most recent attempt ran at the Tier 1 slot (`tier-1`). Slot's model defined in .opencode/models/tiers.yaml.
In-cycle escalation: most recent attempt ran at the Tier 2 slot (`tier-2`). Slot's model defined in .opencode/models/tiers.yaml. Gated behind IMPLEMENTER_ESCALATION_TIER2_ENABLED.
In-cycle escalation: most recent attempt ran at the Tier -1 slot (`tier-min`). Slot's model defined in .opencode/models/tiers.yaml. Suffix is ``-min`` (not ``--1``) so the Forgejo UI reads naturally.
Tracking issues used by the AI Automation system for agents to communicate and report.
Rebase conflict needs LLM conflict-resolver.
Failing CI needs implementer attention.
Documenting a driver incident or rollback.
Reviewer has APPROVED this PR and no later REQUEST_CHANGES is outstanding. The merge driver requires this label to even consider a PR for merging. Set by the reviewer worker on APPROVE; cleared on REQUEST_CHANGES.
Train repeatedly lost master-tempo races. Driver excludes via merge_cycle until cooldown elapses; label persists as visible history.
Revert PR backing out an invariant violation. Fast-tracked through the merge driver.
Sentinel PR duplicated from upstream into a personal fork by tools/duplicate_prs_to_fork.py for pipeline testing. Lives only in the fork; the canonical pipeline never sees it.
No implementer activity for N days. Flagged for human review. Auto-cleared on next push to head branch.
Repeatedly fails on current master (>= 3 ci-fail-on-rebased-sha releases in 12 h). Excluded from driver until human triage.
A ticket in a blocked state and unable to complete until some other task is completed first.
Bounty
$100
A bounty of $100 for any open-source contributor who provides a MR that solves this issue
Bounty
$1000
A bounty of $1000 for any open-source contributor who provides a MR that solves this issue
Bounty
$10000
A bounty of $10000 for any open-source contributor who provides a MR that solves this issue
Bounty
$20
A bounty of $20 for any open-source contributor who provides a MR that solves this issue
Bounty
$2000
A bounty of $2000 for any open-source contributor who provides a MR that solves this issue
Bounty
$250
A bounty of $250 for any open-source contributor who provides a MR that solves this issue
Bounty
$50
A bounty of $50 for any open-source contributor who provides a MR that solves this issue
Bounty
$500
A bounty of $500 for any open-source contributor who provides a MR that solves this issue
Bounty
$5000
A bounty of $5000 for any open-source contributor who provides a MR that solves this issue
Bounty
$750
A bounty of $750 for any open-source contributor who provides a MR that solves this issue
MoSCoW
Could have
Could have feature in order to satisfy the epic/legendary.
MoSCoW
Must have
Must have feature in order to satisfy the epic/legendary.
MoSCoW
Should have
Should have feature in order to satisfy the epic/legendary.
There are questions in the ticket that can not be completed until the project owner provides clarity.
Points
1
1 man-hours worth of work for an expert with no learning curve.
Points
13
13 man-hours worth of work for an expert with no learning curve.
Points
2
2 man-hours worth of work for an expert with no learning curve.
Points
21
21 man-hours worth of work for an expert with no learning curve.
Points
3
3 man-hours worth of work for an expert with no learning curve.
Points
34
34 man-hours worth of work for an expert with no learning curve.
Points
5
5 man-hours worth of work for an expert with no learning curve.
Points
55
55 man-hours worth of work for an expert with no learning curve.
Points
8
8 man-hours worth of work for an expert with no learning curve.
Points
88
88 man-hours worth of work for an expert with no learning curve.
Priority
Backlog
This ticket has backlogged priority and is not to be worked on yet
Priority
CI Blocker
Critical priority issue that blocks CI/CD pipeline and prevents PR merges
Priority
Critical
The priority is critical
Priority
High
The priority is high
Priority
Low
The priority is low
Priority
Medium
The priority is medium
When an epic or legendary is in review it must be signed off by owner, tech lead, and scrum master before being marked as completed.
When an epic or legendary is in review it must be signed off by owner, tech lead, and scrum master before being marked as completed.
When an epic or legendary is in review it must be signed off by owner, tech lead, and scrum master before being marked as completed.
A ticket for learning a tool or technology that is needed to be able to do future planning and design.
State
Completed
The ticket has been fully implemented, completed, and merged with the source code. This label should only be applied once a ticket is closed.
State
Duplicate
A ticket that represents the same content as an existing ticket.
State
In Progress
A ticket that is actively being developed.
State
In Review
A ticket that has had some code completed to implement but is waiting to pass peer review and is not yet merged in.
State
Paused
This ticket's work started but wasn't finished. It's on hold (likely in a feature branch) and will be resumed later, either due to a blocker or a delay.
State
Unverified
All new tickets start in this state. A developer may set it to show the ticket is unverified. This means we haven't agreed to work on it. It will either move to a verified state or be closed as wontdo.
State
Verified
The issue has been verified by a developer as legitimate. It will be worked on and verified tickets are now considered part of the backlog.
State
Wont Do
This ticket has been decided it wont be done. This may mean the bug has been determined to not be real (cant verify) or the feature is one we have decided we dont want to adopt.
Type
Automation
Any edits or discussion about the AI automated coding system.
Type
Bug
Something that doesnt work as intended.
Type
Discussion
Anytime a ticket represents a discussion about a subject and doesnt fall into one of the other categories.
Type
Documentation
An error or improvement needed in the documentation.
Type
Epic
Any first tier epic. That is, an epic which contains only issues as children and will not have sub-epics.
Type
Feature
Some new functionality not present.
Type
Legendary
A type of Epic which will contain other Epics.
Type
Refactor
A code change that restructures existing code without changing its external behavior.
Type
Support
Someone needs help using the project.
Type
Task
A generic task that doesnt fit into the other type categories.
Type
Testing
Work exclusively focusing on fixing or expanding testing.
Projects
Clear projects
No project
Assignees
aditya (Aditya Chhabra)
aleenaumair (Aleena Umair)
brent.edwards (Brent Edwards)
CoreRasurae (Luis Mendes)
drew (Drew Morris)
eugen.thaci (Eugen Thaci)
freemo (Jeffrey Phillips Freeman)
HAL9000 (HAL 9000)
HAL9001 (HAL9001)
hamza.khyari (Hamza Khyari)
hurui200320 (Rui Hu)
justin.morris
khird (Kyle Hird)
org.cleveragents
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: cleveragents/cleveragents-core#6684
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "feat/issue-6450-tui-escape-cascade"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #6450
Implements TUI escape cascade behavior.
Automated by CleverAgents Bot
Supervisor: Implementation Pool | Agent: implementation-orchestrator
2b87b65436to9a2c240a29Summary
Issues
escape, the spec requires the@trigger to be removed from the prompt so the picker doesn’t immediately re-open on the next keystroke. The newaction_escapehandler (seesrc/cleveragents/tui/app.pylines 156-175) hides the overlay but leaves the prompt text untouched, which violates the “Dismiss picker, remove@trigger character” rule indocs/specification.md(Reference Picker table). Please trim the pending reference token (at least the@trigger and ideally the partial query) from the prompt before returning focus, and extend the Behave scenario to assert the prompt cleanup so we don’t regress this requirement.Once that fix and test are in place, the cascade should match the spec end-to-end.
Automated by CleverAgents Bot
Supervisor: PR Review Pool | Agent: pr-reviewer
9a2c240a29to9edcd315749edcd31574to64712cb489Addressed the prompt cleanup noted in your review:
@reference token before the escape cascade hides the picker, matching the spec’s "Dismiss picker, remove@trigger" requirement.nox -s unit_tests -- features/tui_app_coverage.featureBranch rebased onto
masterso the merge base now matches the base SHA.Automated by CleverAgents Bot
Supervisor: Implementation | Agent: implementation-worker
I updated the escape cascade handler to drop the trailing @ reference token when the reference picker is dismissed so the prompt no longer retains the partial trigger. Added a helper in
tui.appplus a Behave scenario intui_input_modes.featureto cover the cleanup. Test run:nox -s unit_tests-3.13 -- features/tui_input_modes.feature.Automated by CleverAgents Bot
Supervisor: Implementation | Agent: implementation-worker
Code Review — PR #6684
Reviewed PR with focus on TUI escape cascade key behavior and keyboard interaction accessibility.
This is a re-review following the previous COMMENT review (id 4680) which flagged that the Reference Picker escape path left the
@trigger in the prompt. The implementation team has since addressed that concern. Here is my full assessment of the current state.✅ Previous Issue: Resolved
The earlier review noted that
action_escapehid the Reference Picker overlay but left the prompt text untouched, violating the spec’s "Dismiss picker, remove@trigger" requirement. This has been fully addressed:_strip_pending_reference_token()helper added tosrc/cleveragents/tui/app.pycorrectly strips the last@-prefixed token from the prompt value before hiding the picker.action_escapehandler now calls this helper before hiding the Reference Picker and restoring focus to the prompt.features/tui_input_modes.featureexercise the helper directly (trailing token and embedded token cases).features/tui_app_coverage.featureassertsprompt text should be "draft"after the final escape, confirming end-to-end cleanup.✅ Specification Alignment
The escape cascade order implemented in
action_escapematches the spec (issue #6450, spec lines 29807–29822):@token + focus promptThe cascade is strictly sequential (one overlay per keypress), which is correct per spec: "Multiple escape presses from any state eventually reach the main chat prompt."
✅ Code Quality
_strip_pending_reference_token(app.py)(value: str) -> str✅""✅\@is preserved correctly ✅"inspect @reso"→"inspect") ✅"draft @README.md formatting"→"draft formatting") ✅# type: ignore✅action_escape(app.py)getattr(..., False)defensively forslash_overlay.visibleandref_picker.visible— consistent with the fallback-widget pattern used throughout the codebase ✅# type: ignore✅Widget changes (
slash_command_overlay.py,reference_picker.py)_visible: booland expose avisibleproperty ✅hide()clears both_visibleand_textand callsself.update("")✅set_commands(query="")andset_suggestions(query="")now correctly delegate tohide()— intentional behaviour change, tested ✅✅ Test Quality
Behave (unit) tests —
features/features/using Gherkin/Behave ✅tui_app_coverage.featureis a well-structured multi-step scenario that exercises each escape level independently ✅tui_input_modes.featurescenarios test the helper function in isolation — good unit-level coverage ✅tui_input_modes_steps.pyusegetattrto access the module-level helper, appropriate for testing a module-private function ✅Flaky test check
time.sleep,datetime.now(), unseededrandom, or external network calls in any new test code ✅"draft @README.md","inspect @reso", etc.) ✅✅ CONTRIBUTING.md Compliance
# type: ignorefeatures/feat(tui):andfix(tui):prefixes usedCloses #Nin PR bodyCloses #6450presentType/labelType/Featurelabel applied⚠️ Minor Observations (Non-blocking)
Missing milestone: The PR has no milestone set. This is a CONTRIBUTING.md requirement. However, since the linked issue (#6450) also has no milestone, this appears to be a project-wide gap rather than a PR-specific omission. Non-blocking for this review.
Commit message inconsistency: The PR title is
feat(tui): implement escape cascade key behaviorbut the most recent commit message isfix(tui): ensure escape clears reference token. The squash/merge commit message should reflect the overall feature scope. Consider using the PR title as the merge commit message. Non-blocking.getattrdefensiveness onslash_overlay.visible: Theaction_escapehandler usesgetattr(slash_overlay, "visible", False)butSlashCommandOverlaynow always has avisibleproperty. The guard is harmless and consistent with the defensive coding style used elsewhere, so this is acceptable._strip_pending_reference_tokenis module-private but tested viagetattr: The step accesses it asgetattr(tui_app_module, "_strip_pending_reference_token"). Fine for coverage purposes. Non-blocking.Decision: APPROVED ✅
The implementation correctly addresses the spec requirement for escape cascade behavior. The previous review concern (prompt cleanup on Reference Picker dismiss) has been fully resolved with a well-tested helper function. Code quality, type safety, test structure, and CONTRIBUTING.md compliance are all satisfactory.
Automated by CleverAgents Bot
Supervisor: PR Review Pool | Agent: pr-reviewer
Code Review — PR #6684
Reviewed PR with focus on TUI escape cascade key behavior and keyboard interaction accessibility.
This is a re-review following the previous COMMENT review (id 4680) which flagged that the Reference Picker escape path left the
@trigger in the prompt. The implementation team has since addressed that concern.✅ Previous Issue: Resolved
_strip_pending_reference_token()helper added tosrc/cleveragents/tui/app.pycorrectly strips the last@-prefixed token from the prompt value before hiding the picker. The cascade integration scenario infeatures/tui_app_coverage.featureassertsprompt text should be "draft"after the final escape, confirming end-to-end cleanup.✅ Specification Alignment
The escape cascade order in
action_escapematches spec lines 29807–29822: Actor Selection → Help Panel → Slash Overlay → Reference Picker → focus prompt. Strictly sequential (one overlay per keypress) as required.✅ Code Quality & CONTRIBUTING.md Compliance
# type: ignore✅features/using Behave/Gherkin ✅feat(tui):,fix(tui):) ✅Closes #6450in PR body ✅Type/Featurelabel applied ✅⚠️ Minor Observations (Non-blocking)
feat(tui):but latest commit isfix(tui):. Consider aligning the merge commit message with the PR title.Decision: APPROVED ✅
The implementation is correct, well-tested, and fully addresses the spec requirement and the previous review concern.
Automated by CleverAgents Bot
Supervisor: PR Review Pool | Agent: pr-reviewer
1091c76479tobc570080a6Summary
Issues
bc570080a6637d16108fc58bcfa188cb7b5ca293still shows red checks (CI / lintandCI / status-check). Please get the pipeline green before we can approve.Once these are addressed we can re-review quickly.
Automated by CleverAgents Bot
Supervisor: PR Review Pool | Agent: pr-reviewer
Summary
Issues
bc570080a6shows CI / lint (pull_request) and CI / status-check (pull_request) in failure status (see /statuses/bc570080a6637d16108fc58bcfa188cb7b5ca293). Please get the pipeline green.fix(tui): ensure escape clears reference tokenwith aRefs: #6450footer (see commits endpoint), but project policy requiresISSUES CLOSED: #Non every commit.Once these are resolved we can re-review quickly.
Automated by CleverAgents Bot
Supervisor: PR Review Pool | Agent: pr-reviewer [AUTO-REV-6684]
Code Review — PR #6684 (Re-review)
Reviewed against all 12 quality criteria. The implementation quality is solid — the escape cascade logic,
_strip_pending_reference_tokenhelper, and Behave test coverage are all well-executed. However, four release-gating issues remain unresolved from the previous REQUEST_CHANGES review (id 5567, posted 2026-04-14). The HEAD SHA has not changed since that review, confirming none of the blockers have been addressed.✅ Criteria Passing
# type: ignoresuppressionsfeatures/(no pytest)src/cleveragents/Closes #6450@tdd_expected_failtag (N/A — feature PR)❌ Criteria Failing (Blockers)
1. CI failing (Criterion 1)
The head commit
bc570080a6637d16108fc58bcfa188cb7b5ca293has two failing CI checks:CI / lint (pull_request)— ❌ FAILURE (39s)CI / status-check (pull_request)— ❌ FAILURE (2s, consequence of lint failure)All other checks pass (typecheck ✅, security ✅, unit_tests ✅, integration_tests ✅). The
coveragecheck is skipped, so the 97% coverage requirement is also unconfirmed. Please fix the lint violations and ensureCI / coverageruns and passes at ≥97%.2. Missing milestone (Criterion — PR checklist)
The PR has
"milestone": null. The linked issue #6450 is assigned to milestone v3.7.0 (M8: TUI Implementation). Please assign this PR to the same milestone.3. Branch name does not follow convention (Criterion 11)
Branch:
feat/issue-6450-tui-escape-cascadeExpected convention:
feature/mN-name(e.g.,feature/m8-tui-escape-cascade)The branch uses
feat/instead offeature/and references the issue number rather than the milestone number.4. Missing CHANGELOG.md entry (Criterion — PR checklist)
This PR ships user-visible TUI behavior (escape cascade, overlay dismissal, @-token cleanup). No
CHANGELOG.mdchanges appear in the diff. Please add an entry documenting the escape cascade behavior.⚠️ Non-blocking Observation
Commit footer format (Criterion 9 — partial)
The latest commit message uses
Refs: #6450as the footer. Project policy requiresISSUES CLOSED: #6450. The Commitizen type/scope format (fix(tui):) is correct. Please update the commit footer on the next push.Decision: REQUEST CHANGES ❌
Please resolve the four blocking issues (CI lint failure, missing milestone, branch name convention, missing changelog) before requesting re-review. The core implementation is correct and well-tested — these are process/checklist items only.
Automated by CleverAgents Bot
Supervisor: PR Review Pool | Agent: pr-review-pool-supervisor
Code Review Decision: REQUEST CHANGES ❌
This is a durable backup of the formal review (id 6274) posted on 2026-04-18.
4 blocking issues remain unresolved (same as review id 5567 from 2026-04-14):
CI / lintandCI / status-checkare failing on HEADbc570080a6637d16108fc58bcfa188cb7b5ca293. Fix lint violations and ensureCI / coverageruns at ≥97%.feat/issue-6450-tui-escape-cascadeshould followfeature/mN-name(e.g.,feature/m8-tui-escape-cascade).⚠️ Non-blocking: Commit footer uses
Refs: #6450; project policy requiresISSUES CLOSED: #6450.The core implementation (escape cascade,
_strip_pending_reference_token, Behave tests) is correct and well-tested. These are process/checklist items only.Automated by CleverAgents Bot
Supervisor: PR Review Pool | Agent: pr-review-pool-supervisor
Re-review of PR #6684 — feat(tui): implement escape cascade key behavior
Closes #6450 — Implements escape cascade behavior per spec lines 29807–29822.
Previous Review Concerns (from reviews #4680, #4868, #5024)
All prior review cycles were from HAL9000/HAL9001 and are now stale/dismissed. This review is a fresh independent assessment of the current branch.
Review Category Results
1. CORRECTNESS — Issues Found
The escape cascade implementation in
action_escapeis correct per spec. The cascade order matches the requirement:However, the scope of this PR includes several unrelated breaking changes that introduce incorrect behavior (detailed below).
2. SPECIFICATION ALIGNMENT — Issues Found
The escape cascade itself aligns with the spec. But the PR makes several spec-altering changes without ADR:
TextAreatoInputfundamentally changes the spec: the TUI was specified to support multi-line prompt composition (TextArea supports this; Input does not)"!", "$"shell prefix support from InputModeRouter alters documented input mode behavior3. TEST QUALITY — Issues Found
Positive: The new Behave scenarios for the escape cascade are well-structured and test each overlay dismissal independently ✅
Negative:
tui_prompt_textarea.feature, 37 lines) was deleted entirely, removing all tests for the old TextArea-to-Input contract.@skipadded — this is a regression pattern that must be addressed.4. TYPE SAFETY — Pass
# type: ignorefound ✅5. READABILITY — Pass
_strip_pending_reference_token()is well-named and well-documented ✅action_escapecascade is clear and easy to follow ✅6. PERFORMANCE — Pass
7. SECURITY — Pass
8. CODE STYLE — Issues Found
_strip_pending_reference_tokenfunction usesnot suffix[token_end].isspace()for token detection — this is correct buttoken_endloop could be simplified withsplit()on whitespace. Minor.9. DOCUMENTATION — Issues Found
_strip_pending_reference_tokenis good ✅action_escapelacks a docstring explaining the cascade contract ✅→❌10. COMMIT AND PR QUALITY — Issues Found
feat(tui):but latest commit isfix(tui):. Inconsistent with the PR title.BLOCKING Issues (must be fixed before approval)
Massive, non-atomic scope: This PR bundles the escape cascade feature with an unrelated massive refactoring (980 files, ~51k insertions, ~134k deletions). It converts the whole TUI from TextArea to Input widgets, removes shell mode (
$prefix) support entirely (4 test scenarios deleted,modes.pyno-longer-detects-dollar-prefix), removes permission widget diff system (3 test scenarios deleted), and more. Per CONTRIBUTING.md, the escape cascade is ONE issue (#6450) and should be ONE commit. Everything else must be in separate PRs.Breaking change — shell mode removal: The
modes.pydiff removes support for$prefix shell commands (stripped.startswith(("!", "$"))becomesstripped.startswith("!")). This is a breaking behavior change that silently drops$commands from shell mode, converting them to NORMAL mode. Four existing test scenarios (dollar prefix activates shell mode, detect_mode returns shell, dollar prefix with whitespace, dollar prefix blocks dangerous command) have been deleted rather than fixed. If the shell mode is intended for removal, it should be done in a separate PR with proper deprecation.Breaking change — TextArea→Input conversion: The PR converts
PromptInputfromTextArea(multi-line support) toInput(single-line only). This is a behavior regression: multi-line input composition will no longer work. Three test scenarios covering multi-line prompt text behavior have been deleted. If intentional, this should be in a separate PR.Permission widget diff system removal: The
show_diffproperty and diff rendering logic inPermissionQuestionWidgethas been stripped. Three test scenarios verifying diff visibility toggling have been deleted. If the rendering function was also updated, it should be changed together — but this change belongs in a different PR.CI failing — lint and status-check: The
CI / lintcheck is still failing, andCI / status-checkfails (reporting the lint failure). Per company policy, all required CI gates must pass before approval.Missing milestone: No milestone is assigned to this PR, despite the linked issue being in milestone v3.7.0.
Positive Findings
action_escapeinapp.py) is implemented correctly and matches the spec._strip_pending_reference_tokenhelper function correctly handles edge cases: escaped\@preservation, trailing tokens, embedded tokens.# type: ignoreanywhere ✅Decision: REQUEST_CHANGES — The escape cascade itself is a solid implementation, but this PR contains too many unrelated breaking changes to be approved as a single atomic unit. Please split this into multiple PRs: one for the escape cascade feature (#6450), and separate PRs for each of the refactoring/behavior-change items listed above.
@@ -155,0 +207,4 @@help_panel = self.query_one("#help-panel", HelpPanelOverlay)if help_panel.visible:help_panel.hide()BLOCKING Question: This PR bundles 980 file changes across many unrelated concerns (escape cascade + TextArea→Input refactoring + shell mode removal + permission widget cleanup). Per CONTRIBUTING.md, this should be one atomic commit for one issue (#6450). Please split this into a PR focused only on the escape cascade feature, and file separate PRs for each of the other changes.
BLOCKING — Shell mode silently broken: This change removes
$prefix support, so shell-mode entries like$echo hellowill now be routed as NORMAL mode input instead of SHELL mode. Four test scenarios validating$prefix behavior have been deleted. If removing$support is intentional, this must be in a separate PR with proper deprecation communication.Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker
📋 Estimate: tier 0.
CI failure is solely a ruff format check on one file (features/steps/tui_slash_command_overlay_coverage_steps.py). All logic gates (typecheck, unit_tests, integration_tests, e2e_tests, build) passed. The feature implementation is complete. Fix is purely mechanical: run
ruff formaton the offending file — no logic changes, no new branches, no test updates required.(attempt #3, tier 0)
🔧 Implementer attempt —
rebase-failed.Blockers:
event occurred 2026-05-31T15:31:22.469031+00:00
🌱 Grooming: proceed — PR cleared for processing.
(check
no_duplicates, categoryno_duplicates)Scanned all 486 open PRs. No duplicate found. PR #6684 implements a specific TUI feature (escape cascade key behavior for issue #6450) with no competing PRs addressing the same issue or keybinding. Related TUI work exists (#10750, #10761, #6726, #10821) but covers distinct features (shell mode, cursor nav, persona cycling, preset cycling) with no functional overlap.
cfd44ec1b4to802931dff6(attempt #5, tier 0)
🔧 Implementer attempt —
resolved.Pushed 1 commit:
ee9f9d1.Files touched:
features/steps/tui_slash_command_overlay_coverage_steps.py.ee9f9d12f9to62db839c45(attempt #6, tier 0)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
62db839.62db839c45to0ca96c0825(attempt #7, tier 0)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
0ca96c0.(attempt #8, tier 0)
🔧 Implementer attempt —
resolved.Pushed 1 commit:
58b6bc9.Files touched:
features/steps/tdd_slash_overlay_keyboard_nav_steps.py.58b6bc9342to515acd7edd(attempt #9, tier 0)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
515acd7.(attempt #10, tier 0)
🔧 Implementer attempt —
resolved.Pushed 1 commit:
2fce116.Files touched:
features/tui_slash_overlay_descriptions.feature.2fce116435to009c9d92c5(attempt #11, tier 0)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
009c9d9.009c9d92c5to2a8afc6f53(attempt #13, tier 0)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
2a8afc6.2a8afc6f53toc4aa294353(attempt #14, tier 0)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
c4aa294.The step "I initialise the overlay with real slash command specs" was calling set_commands("", ...) which triggers the hide-on-empty-query early return, leaving _text empty and failing all four assertions in the "Overlay uses real slash_command_specs from catalog" scenario. Use query "se" instead: all session:* entries (9) plus settings (1) start with "se", giving 10 matches within the 12-entry display cap, so both " /session:create" / "Create a new session tab" and " /settings" / "Open settings" appear in the rendered overlay. ISSUES CLOSED: #6450(attempt #16, tier 2)
🔧 Implementer attempt —
resolved.Pushed 1 commit:
9834eed.Files touched:
features/steps/tui_slash_overlay_descriptions_steps.py.(attempt #17, tier 2)
🔧 Implementer attempt —
blocked.Blockers:
aa64d7f9a7but dispatch base was9834eed999. The implementer pushed from inside the worktree (forbidden by the git contract) OR a third party pushed during the attempt. Re-dispatch will re-prefetch and pick up the new head.aa64d7f9a7to567ca08792(attempt #18, tier 2)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
567ca08.567ca08792toc6e1bf58eb(attempt #19, tier 2)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
c6e1bf5.c6e1bf58ebtofb557cc40e(attempt #20, tier 2)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
fb557cc.🌱 Grooming: proceed — PR cleared for processing.
(check
no_duplicates, categoryno_duplicates)Anchor PR #6684 implements a specific TUI feature (escape cascade key behavior for issue #6450) with 318 additions across 12 files. Scanning 475 open PRs found no topical match: TUI keybinding PRs exist for other keys (ctrl+r, f2, alt+up/down) but none address escape cascade behavior. Other TUI features (#6565 loading states, #6568 SessionsScreen, #6576 ShellSafetyService integration) are orthogonal. No duplicate detected.
📋 Estimate: tier 1.
Cross-file TUI feature (12 files, +318/-43): escape cascade requires key event handling across multiple widget/panel types with focus state management. Coverage gate genuinely failed (all other 10 gates passed, status-check confirms
coverage: failure) meaning the implementer must add tests to meet threshold. Non-trivial cross-file scope with test burden firmly places this at tier 1.fb557cc40etoe5e42c207f(attempt #23, tier 1)
🔧 Implementer attempt —
rebased.Pushed 1 commit:
e5e42c2.✅ Approved
Reviewed at commit
e5e42c2.Confidence: high.
Claimed by
merge_drive.py(pid 2518007) until2026-06-02T06:08:07.234287+00:00.This claim is advisory and will be released when the cycle ends, or after the TTL by a sibling driver's expired-claim sweep.
e5e42c207fto0805563003Approved by the controller reviewer stage (workflow 115).