Skip to content

BACK-565 - Repair TUI task composer UX and navigation - #833

Merged
MrLesk merged 6 commits into
mainfrom
tasks/back-565-ux-clean
Aug 7, 2026
Merged

BACK-565 - Repair TUI task composer UX and navigation#833
MrLesk merged 6 commits into
mainfrom
tasks/back-565-ux-clean

Conversation

@MrLesk

@MrLesk MrLesk commented Aug 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • replace the tall, weakly grouped composer with a compact responsive Title/Description/Details/Actions hierarchy
  • add spatial arrow navigation while preserving text caret and multiline behavior, and make Tab/Shift+Tab inert
  • keep canonical task/Draft persistence, validation/retry, cancellation, watcher reconciliation, board refresh, and created-task focus semantics intact
  • expand focused regression coverage for layout, navigation, selectors, actions, persistence, and resizing

Supersedes #791.

Verification

  • bun test src/test/tui-task-composer.test.ts — 51 pass
  • bun test — 1884 pass, 5 skip, 0 fail
  • bunx tsc --noEmit
  • bun run check .
  • bun run build
  • rendered PTY QA at 100x30, 80x24, and 50x18 covering discovery, editing, arrow navigation, inert Tab, selectors, task/Draft creation, cancellation, and live resizing

@MrLesk
MrLesk force-pushed the tasks/back-565-ux-clean branch from 97cfe30 to 43f3c1a Compare August 2, 2026 21:47

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 97cfe30a0e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/ui/components/task-composer.ts Outdated
@MrLesk
MrLesk force-pushed the tasks/back-565-ux-clean branch from 43f3c1a to 2a65949 Compare August 2, 2026 22:25

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2a659497c0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/ui/components/help-popup.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 81f361bb8c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/ui/components/task-composer.ts
Comment thread src/ui/board.ts
Comment thread src/ui/components/help-popup.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f393b63f5b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/ui/components/help-popup.ts
Comment thread src/ui/board.ts
Comment thread src/ui/unified-view.ts
Comment thread src/ui/components/task-composer.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5e5ae93ad0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/ui/components/task-composer.ts Outdated
Comment thread src/ui/components/task-composer.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4b80fe51d2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/ui/components/task-composer.ts
@MrLesk
MrLesk merged commit 38d6afa into main Aug 7, 2026
10 checks passed
@MrLesk
MrLesk deleted the tasks/back-565-ux-clean branch August 7, 2026 20:48
MrLesk added a commit that referenced this pull request Aug 9, 2026
…888)

## Summary

The TUI's single-select filter popups could not be navigated with vim
keys. `j` and `k` now
move the selection in every filter popup, alongside the arrow keys.

This originates from **[PR
#809](#809) by
@janosmiko**. That PR's status-picker fix already landed via BACK-565 /
#833; vi navigation was
the remaining piece. The extracted filter-popup hunk is the first commit
here, kept under his
authorship; the second commit is the adaptation.

## What changed

| | |
|---|---|
| `openSingleSelectFilterPopup` | `j` / `k` bound explicitly on the
picker (status, priority and milestone filters, plus the task composer's
Status/Type/Priority pickers) |
| `openMultiSelectFilterPopup` | help row no longer claims arrows-only —
this popup is a `GenericList` and has navigated with `j`/`k` since
BACK-584 |

## Why not `vi: true`

That is what #809 used, and it does work, but the library's `vi` flag
does not bind `j`/`k`
alone: on a list it also binds `l`=select, `q`=cancel, `g`/`G`,
`H`/`M`/`L` and
`Ctrl+B`/`U`/`D`/`F`. No other list in the TUI behaves that way —
`generic-list.ts`, which backs
the multi-select filter popup, hand-wires the vim keys to plain up/down.
So the flag was
replaced with two explicit bindings that call the list's clamping
`select()`, which is exactly
what `ArrowUp`/`ArrowDown` already do in that popup.

Consequences worth stating: arrow and Enter behaviour is untouched,
`j`/`k` behave identically
to the arrows, and each popup keeps its own pre-existing boundary
behaviour — the single-select
picker clamps at both ends, the `GenericList`-backed multi-select wraps,
which is what their
arrow keys already did and what BACK-584 deliberately left in place for
popups. Neither popup
contains a text input, and the board's screen-level `j`/`k` are already
guarded by
`filterPopupOpen`, so nothing else can swallow or double-handle the
keys.

## Verification

- `src/test/tui-vim-boundary-navigation.test.ts` gained a `vim keys
navigate the filter popups`
block driving real key events through both popups on a real screen:
`j`/`k` step the
single-select picker and clamp at both ends (Enter then returns the
`j`/`k`-selected value,
not the preselected one), and `j`/`k` step the wrapping multi-select
picker so Space+Enter
  applies the `j`/`k`-selected label.
- Mutation control: with `src/ui/components/filter-popup.ts` reverted to
`main`, the
  single-select test fails (5 pass / 1 fail).
- Real-PTY check with `expect` (board TUI in a temp project, 140x40):
`p` to open the Priority
Filter popup, then `j`, then Enter leaves the header button on `high`;
the same script with no
navigation key leaves it on `All`; and the same script with `j` against
`main` also leaves it
  on `All`.
- `bunx tsc --noEmit` clean, `bun run check .` clean, `bun run test`
2144 pass / 6 skip / 0 fail.

Closes BACK-616. Supersedes the filter-popup half of #809.

---------

Co-authored-by: János Mikó <mixe3y@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant