Desktop Material

Private-repository lock badge

Delivery status — July 27, 2026: the implementation, focused tests, TypeScript checks, production build, and isolated real-window capture pass locally. The source is merged and pushed through 2abccae8fd; Pages and wiki publication and packaged Windows E2E are verified. Installer/Release evidence remained pending at that dated checkpoint; archived Linux TUI compatibility work is outside the current Windows acceptance boundary.

Desktop Material shows a separate filled lock beside a repository's normal leading glyph when GitHub metadata explicitly identifies the repository as private. The lock does not replace a fork glyph, custom repository logo, or ordinary repository icon.

Historical repository-picker acceptance showing a private-repository lock beside the repository logo at immutable source commit 2abccae8fddcf2eb79edd18724454bb9b6530f67

香港粵語速讀。 GitHub 明確話個 repo 係 private,repo 行就會另外顯示一個 鎖仔;原本嘅 fork、custom logo 或 repo icon 照樣保留。唔會靠網址、登入失敗或者 本機路徑亂估私隱狀態。鎖仔可以用鍵盤聚焦,英文、廣東話同雙語模式都有清楚名稱。

Behavior

The repository picker renders the badge only when gitHubRepository.isPrivate === true:

The badge is independent of the repository's primary visual identity. It stays visible beside a fork glyph or custom image and contributes Private repository to the list row's accessible name.

Configuration

There is no user override for the badge. It reflects the provider metadata already associated with the repository and updates when that repository model is refreshed. Language mode and density use the app's existing persisted settings:

Failure modes

Unknown or unavailable provider metadata fails closed as an unknown display state: no privacy claim is painted. The UI does not infer a private repository from an access error, sign-in state, URL shape, remote name, filesystem path, or whether a clone operation succeeded.

A missing custom logo affects only the leading repository image and does not remove a valid lock. Conversely, a custom logo never creates a lock without explicit private metadata.

Security and privacy

The badge is a presentation of metadata that is already in the in-memory repository model. Rendering it performs no network request, reads no credentials, and persists no new repository data. Avoiding inference matters: an error or inaccessible remote is not proof that a repository is private, and showing a false lock could misrepresent the repository's actual visibility.

Accessibility and layout

The lock exposes role="img", a localized accessible label, keyboard focus, and a localized tooltip. The containing repository option also includes the privacy label, so screen-reader users hear the state without having to move focus to the badge.

The badge uses fixed 22 px geometry in normal density and 20 px in compact density. It does not expand with localized text, and the tooltip supplies the full bilingual wording without widening or clipping the repository row.

Verification

The dedicated unit suite passed 3/3 and covers exact-true rendering, false/unknown suppression, bilingual keyboard tooltip behavior, and the canonical list-row accessible name. Adjacent repository-list, logo, sync, and localization tests passed 40/40. The feature also participated in the combined 652/652 across 53 files gate, clean full TypeScript checking, and the successful Windows production build.

The accepted 960×660 capture above came from the real built repository picker on an isolated hidden Win32 desktop. A disposable repository model supplied exact isPrivate: true metadata without a network account or credential. The original-resolution image passed clipping, overlap, sizing, and private-data inspection.

The source and accepted image are pushed through 2abccae8fddcf2eb79edd18724454bb9b6530f67; the image above renders that immutable historical blob, not mutable main and not the current refresh. Pages/wiki publication and packaged Windows E2E were verified at that dated checkpoint. Installer/Release verification remained pending then; the archived TUI correction is outside the supported-product gate.

API applicability

This is an in-process repository-list presentation feature. It adds no HTTP API, so a Postman collection is not applicable.