Gnome toolbar for Tangled code review.

feat(menu): repo badges and verdict pills in the menu, lined up from the header down #29

Merged permadeath.com
targeting main from azurite-frogmouth.test.pds.did.bot/gnome-shell-extension-tangled-reviewer:claude/repo-pills
Merged opened by and assigned to permadeath.com
targeting main from azurite-frogmouth.test.pds.did.bot/gnome-shell-extension-tangled-reviewer:claude/repo-pills

Repo groups in the menu now show their verdicts as the top bar's pills, instead of text like "5 ready · 4 conflicted · 4 pending". Every row also gets a badge. The pills sit in columns that line up from the section title down. Every pill is the same width, with room for three digits, so a count going from 9 to 10 or 99 to 100 resizes nothing, and a verdict a repo hasn't got shows as an unfilled circle in its slot. Each repo shows its website's favicon, from the website its manifest names (did.bot, atgc.codes and vibescrobble.com do), else Tangled's sheep. The section title keeps an empty slot so it lines up with the badges. Screen readers still hear the counts in words. The pills count every PR, like the old text, even with "Count conflicted and failing PRs" off.

Before After

With three-digit counts (a generated fixture of 360 PRs):

Three digits

The helper fetches each favicon (extension/helper/favicon.js), so the panel never touches the network. It reads the site's <link rel="icon"> tags and prefers SVG, then PNG, falling back to /favicon.ico. Inline data: icons work too. The result is kept in favicons/ in the state dir for a week, and a site with no usable icon is asked again after a day. New state for review: items gain an optional repoIcon (a local file path), and RepoInfo gains website. It also adds a request or two per site to the sites the repos name, once a week. Tested by tests/favicon.test.js (link ranking against the three real sites' markup, data: URIs, image sniffing, and fetching once from a local server), by a live run that saved SVGs for all three sites, and by the headless smoke test. 91 tests pass.

🤖 Generated with Claude Code

Commits 0