Skip to content

Add an All tab for the open issues of several GitHub owners - #11

Open
NoSync wants to merge 5 commits into
ajma:mainfrom
Klartika:feat/all-owners-view
Open

NoSync wants to merge 5 commits into
ajma:mainfrom
Klartika:feat/all-owners-view

Conversation

@NoSync

@NoSync NoSync commented Oct 22, 2026 •

Copy link
Copy Markdown

Based on #10 (sorting): both change the table header, the page RPC and the settings, so this branch is stacked on it. Its first commit is #10's; review the second one, "Add an All tab…". Once #10 merges, this diff shrinks to that commit.

Adds an All tab before the project tabs that lists the open issues of several GitHub owners at once, for people who work across a few organizations.

  • Setting. A new Owners setting takes GitHub organizations or users, separated by commas (up to 20). Empty, the default, hides the tab. With owners set, the tab row shows even with one project, and All is picked when no project on the host is on GitHub.
  • Search. One search per page: user:<owner> for each owner (GitHub ORs repeated qualifiers; user: matches organizations as well as users, org: only organizations), plus the search box, the sort order and paging as in the project tabs. The search API limits are unchanged: 30 searches a minute, and 1,000 results across all the owners, which the docs now say.
  • Rows. Each row names its repository (owner/repo #12 opened …). The server marks each issue with its repository and, when the host has a project on it, that project and its coverage. Those issues get Create workspace in that project, or Open workspace. Any other issue gets Open on GitHub. Rows, menus and the pending create are keyed by issue URL now, since numbers repeat across repositories.
  • PR status for the page is one aliased GraphQL query across its repositories (issues.pull-requests also takes issues: [{repo, number}]). A repository GitHub refuses is left out and the others keep their status; only a page where nothing loads shows the error.
  • Filter menus. Labels, milestones and assignable people belong to each repository, and fetching them for every repository of an organization would cost many requests. So in the All tab:
    • Labels offers the labels on the issues shown, plus any already in the search. It costs no extra calls.
    • Author and Assignees offer you, plus any login you type.
    • Types offers the owners' organization issue types, one GraphQL call per owner, cached like the other options.
    • Milestones is hidden.
  • Out of scope. The All tab has no assigned-to-me count badge, and issues in a project that only another host has link to GitHub rather than creating there.

The last commit applies #12's hardening (-f and owner/repo validation for filter options) to this branch's version of that code.

Tested:

  • npm run typecheck and npm test, with new server, shared, settings and screen tests.
  • Installed on a Paseo host and called through the daemon:
    • issues.page with three organizations, several sorts and pages. Rows matched local projects and coverage; issues in other repositories came back with projectId: null.
    • issues.filter-options for those organizations.
    • an invalid owner, which the RPC rejects.
  • Existing saved settings kept their values after the upgrade; the new keys took their defaults.

🤖 Generated with Claude Code

NoSync and others added 3 commits October 22, 2026 19:07
The sort menu offers GitHub's orders: newest, oldest, recently updated,
least recently updated, most commented and most reactions. The choice is
saved with the other host settings and passed to the search API as its
sort and order parameters, which were fixed to created/desc.

Closes ajma#4

Co-Authored-By: Claude Opus 5.5 <[email protected]>
A new Owners setting lists GitHub organizations or users. When it is set,
an All tab before the project tabs searches their open issues in one
search (user:<owner> for each, which GitHub ORs), with the same search
box, sort order and paging. Each row names its repository.

The server marks each issue with its repository and, when this host has
a project on it, that project and its coverage. Those issues get Create
workspace in that project; the others link to GitHub instead. Rows are
told apart by URL, since numbers repeat across repositories, and PR
status is fetched per repository.

Labels, milestones and assignable people belong to each repository, so
the All tab's Labels menu offers the labels on the issues shown plus any
already in the search, Author and Assignees offer you and any typed
login, Types offers the organizations' issue types, and Milestones is
hidden.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…need

- PR status for a page across repositories is one aliased GraphQL query
  (issues.pull-requests takes `issues`), instead of one gh process per
  repository. A repository GitHub refuses is left out; only a page where
  nothing loads is an error.
- An empty All page returns before listing projects and running git.
- The screen falls back to the All tab only once other hosts' projects
  are known, so it does not search past a project another host has.
- Row test ids name the repository, since numbers repeat across them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
NoSync and others added 2 commits October 22, 2026 19:17
The same hardening as ajma#12, on this branch's filter options: -f instead
of -F for the repository's owner and name, and owner/repo validation.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
- issues.assigned-counts also takes the owners and counts their open
  issues assigned to me under `*`, in the same GraphQL request; the All
  tab shows it like the project tabs. Counts wait for the projects, so
  no request goes out with an empty list.
- GitHub's search sometimes times out on a search across several
  owners and answers with zero results marked incomplete_results. The
  table then said "0 Open". searchPage asks once more, then reports the
  timeout as an error instead.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
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