Desktop Material

Publish organization picker

The Publish repository dialog uses a searchable listbox to choose who will own the new GitHub repository. The first choice is always None — publish to my personal account; every organization returned for the selected account follows in a case-insensitive login sort.

Behavior

Sizing and accessibility

The listbox has a non-collapsing 128–176 px viewport. It owns its vertical scroll while the dialog content owns the page scroll, so a short window keeps both the list and the Publish/Cancel footer reachable. Search controls wrap below 480 px, long organization logins truncate inside their row, and the control never creates page-level horizontal scrolling.

The listbox keeps a stable accessible name, active-descendant relationship, visible focus treatment, 44 px option targets, and an explicit no-match state. The None row ensures there is still a valid publishing destination when an account belongs to no organizations.

Configuration

There is no separate preference page. Filter mode persistence uses the search-surface key filter-mode/publish-organizations; language, theme, density, fonts, and funny levels continue to come from the normal application preferences.

Failure modes

Security and privacy

Matching is local and bounded by the shared safe-regex implementation. Organization logins and sample text are not sent to a third party, and the picker does not persist search text. Avatar URLs come only from the signed-in provider response; verification fixtures use loopback-only synthetic data. Selecting an organization changes only the reviewed publication settings—it does not create or publish a repository until the dialog's final action runs.

Verification

Focused tests cover explicit None selection, controlled organization selection, all three filter modes, invalid-regex preservation, result counts, keyboard movement, bilingual copy, active-descendant semantics, and defensive scrolling. Source-level layout contracts require a nonzero listbox floor, contained scrolling, narrow-width wrapping, and long-label truncation.

The real production build is also exercised on an isolated off-screen Windows desktop. Its acceptance scene checks the bilingual picker at 390×844 and the restored 1440×960 window, including listbox geometry, visible rows or the explicit empty state, horizontal containment, and bottom-row reachability.

This feature adds no HTTP endpoint, so no Postman collection is applicable.