Full import-graph walk per page: filter-chip and plan-section icon
buttons gain their first accessible names, per-state description maps
for git/docs/finding/priority badges, truncation-gated full-value tips,
disabled buttons explain their gate. Stateful Radix triggers use the
task-tabs data-state re-assertion pattern.
The Branch value in the task-detail card and the Branch/PR badges in the task
list were static text. Make them open the real thing on GitHub, keeping their
exact look:
- New repo-url helper normalizes a project git_url (https/ssh, with/without
.git) into web URLs for a branch (/tree/<branch>) and PR (/pull/<n>),
returning null so callers fall back to a plain label.
- Task-detail Branch card: the branch is now a link to its GitHub tree URL and
gains a copy button (reuses CopyButton); PR was already linked.
- List-row git badge (git-status-badge): the PR badge links to task.pr_url
(or the built pull URL) and the Branch badge links to the branch tree URL.
The row's click handler already ignores <a> clicks, so opening a branch/PR
never toggles the row. git_url is threaded via a projectGitUrls map from the
tasks page, alongside the existing projectNames map.
panel typecheck + eslint clean.