feat(list): hide resolved by default, group by project, row counter #35

Merged
David merged 1 commit from feat/list-exclude-resolved into main 2026-05-14 20:09:21 +02:00
Owner

Summary

Three UX changes to yt list from the same investigation. Reported against an org with 192 assigned issues where most were closed; the default view drowned the live work in archaeology and gave no signal of the total count.

Hide resolved by default

The default structured query now prepends #Unresolved. YouTrack's tag-style filter matches any state that is not marked resolved in the project config, so yt list shows "what's on my plate" rather than "every issue ever assigned to me." --include-resolved opts back in. Raw --query is untouched: when the caller supplies their own query, the CLI hands it through verbatim with no auto-prepend.

Group by project

--group-by project is the new default. Rows are sorted by issue id prefix, then by issue number within the prefix, so every project's issues sit together and within each project run in ascending id order. --group-by none preserves the server response order. The flag is intentionally narrow for now (project / none); state, assignee, and type can land later without changing the flag shape.

Row counter and total

The table gains a leading # column with 1-indexed row numbers, and a N issue(s) summary prints below the table so the count is visible without | wc -l or Nushell's | length. Display-only; --json is unchanged so scripted callers keep their existing shape.

Test plan

  • cargo fmt --all
  • cargo clippy --all-targets --all-features -- --deny warnings
  • cargo test --all-targets (209 passed; was 204)
  • New tests: default-includes-Unresolved, --include-resolved opt-out, project-prefix sort with multi-segment ids, --group-by none preserves server order
  • Manual: yt list against the 192-issue org returns only the unresolved subset, grouped by project, with a row count visible at the bottom
  • Manual: yt list --include-resolved | from json (after JSON conversion) still shows the resolved tail
## Summary Three UX changes to `yt list` from the same investigation. Reported against an org with 192 assigned issues where most were closed; the default view drowned the live work in archaeology and gave no signal of the total count. ### Hide resolved by default The default structured query now prepends `#Unresolved`. YouTrack's tag-style filter matches any state that is not marked resolved in the project config, so `yt list` shows "what's on my plate" rather than "every issue ever assigned to me." `--include-resolved` opts back in. Raw `--query` is untouched: when the caller supplies their own query, the CLI hands it through verbatim with no auto-prepend. ### Group by project `--group-by project` is the new default. Rows are sorted by issue id prefix, then by issue number within the prefix, so every project's issues sit together and within each project run in ascending id order. `--group-by none` preserves the server response order. The flag is intentionally narrow for now (`project` / `none`); state, assignee, and type can land later without changing the flag shape. ### Row counter and total The table gains a leading `#` column with 1-indexed row numbers, and a `N issue(s)` summary prints below the table so the count is visible without `| wc -l` or Nushell's `| length`. Display-only; `--json` is unchanged so scripted callers keep their existing shape. ## Test plan - [x] `cargo fmt --all` - [x] `cargo clippy --all-targets --all-features -- --deny warnings` - [x] `cargo test --all-targets` (209 passed; was 204) - [x] New tests: default-includes-Unresolved, `--include-resolved` opt-out, project-prefix sort with multi-segment ids, `--group-by none` preserves server order - [ ] Manual: `yt list` against the 192-issue org returns only the unresolved subset, grouped by project, with a row count visible at the bottom - [ ] Manual: `yt list --include-resolved | from json` (after JSON conversion) still shows the resolved tail
feat(list): hide resolved by default, group by project, add row counter
All checks were successful
Check / fmt + clippy + build + tests (pull_request) Successful in 14s
Create release / Create release from merged PR (pull_request) Has been skipped
cca8f6977b
Three UX changes to `yt list` that fall out of the same investigation. Reported against an org with 192 assigned issues where most were closed; the default view drowned the live work in archaeology and offered no signal of the total count.

Default query now prepends `#Unresolved`. YouTrack's tag-style filter matches any state that is not marked resolved in the project config, which is what "what's on my plate" almost always means. `--include-resolved` opts back into the old behavior. Raw `--query` is untouched: when the caller supplies their own query, we hand it through verbatim and never auto-prepend.

Default grouping is now `--group-by project`. Rows are sorted by the issue id prefix, then by issue number within the prefix, so every project's issues sit together and within each project run in ascending id order. `--group-by none` preserves the server response order for callers that wanted the old layout. The set of group keys is intentionally narrow for now; state, assignee, and type can land later without breaking the flag shape.

The rendered table gains a `#` column showing the 1-indexed row number, and a `N issue(s)` summary prints below the table so the count is visible without piping through `wc -l` or Nushell's `| length`. Both are display-only; `--json` is unchanged so scripted callers keep their existing shape.

Six new tests cover the default-includes-Unresolved query, the `--include-resolved` opt-out, project-prefix sorting (including multi-segment ids like `MY-PROJ-42`), and the `--group-by none` no-op. The three existing query-matcher tests are updated to expect the `#Unresolved` prefix.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
David merged commit e8d0053d4d into main 2026-05-14 20:09:21 +02:00
David deleted branch feat/list-exclude-resolved 2026-05-14 20:09:21 +02:00
Sign in to join this conversation.
No reviewers
No labels
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
pandoras-box/youtrack-cli!35
No description provided.