Skip to content

feat(LAN-0): add an all issues view of every project issue - #22

Open
cornedor wants to merge 3 commits into
mainfrom
issue/LAN-0-all-issues-view
Open

cornedor wants to merge 3 commits into
mainfrom
issue/LAN-0-all-issues-view

Conversation

@cornedor

@cornedor cornedor commented Nov 12, 2026 •

Copy link
Copy Markdown
Owner

A view of every issue of the board's project, open and closed, like Jira's issue list but sorted and filtered locally, offline too. In the terminal it's the view after Backlog; in the browser also a page of its own (/issues/PROJECT/BOARD, All issues in the top bar). List only: lanes make no sense with thousands of issues.

  • internal/mirror keeps the project in the index: the first open reads it whole in the background, newest first (the title row says how far it got), after that only what changed (updated >= -Nm), and hourly the keys to drop deleted or moved issues. The browser polls while the first read runs; the TUI and the web share the index.
  • / search and F filter run over the whole project. The assignee filter, mine and the quick filters ask Jira which keys they find (jira.Keys, keys only, 5000 a page), so they mean what they mean on the board; offline the index answers what it can and says what it left out.
  • Cards carry Resolution and Resolved: resolution: and resolved<7d terms, a resolved sort, columns in the browser, a ✕ Won't Do mark in the TUI list.
  • The filter builder counts each value over what the rest of the search leaves, so it never offers a value that finds nothing (both apps).
  • The TUI list draws only the rows near the screen and measures its column widths only when the rows change. At 10,000 cards a cursor move went from 55ms to 3.3ms and a search keystroke from 213ms to 52ms (the existing 600-card list benchmark: 3.9ms to 0.5ms).
  • Both demos get an index of their own, so the view shows there; without an index (hosted) it's left out.
  • Second commit: a button in the filter inputs (board, planning, my work) that opens the filter builder.

Tests: internal/mirror, internal/index, TestAllIssues*, TestLongListDrawsRowsOnSight, TestFilterBuilderCountsFollowSearch, TestResolvedSearchAndSort, TestAllIssuesCards (web endpoint), cardquery/cardsort JS tests. TestBulkUndo (e2e/tui) now picks Sam by name: with the demo's index the assignee picker ranks people it has seen first, which moved him. Locally the TUI e2e and the board, views, global, search, planning, work, bulk and typing Playwright specs pass.

Not measured: the first read of a big real project (only the 23-issue demo), and the browser with 10,000 issues (its list is virtual, but each refresh fetches every card).

The contract recording predates cards asking for resolution and resolutiondate, so those paths are in internal/contract/testdata/allow.txt for now; re-recording on corne-team (go test ./internal/contract -run TestRecord -record corne-team -project LAN,LWC) verifies them and can drop the lines.

Every issue of the board's project, open and closed, in a list that sorts
and filters locally, offline too, from a mirror of the project in the
index (internal/mirror): read whole once in the background, then only what
changed. The assignee and quick filters ask Jira for the keys they find.
Cards carry resolution and resolved, as search terms, a sort and columns.
The filter builder counts each value over what the rest of the search
leaves. The terminal list draws only the rows near the screen, so a list
of thousands stays quick.

This branch has not been deployed

No deployments
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