Why
The Clone control lived in two different tab page headers, and Site lived in two more. Both describe the repository as a whole, not the tab that happens to be open, so they moved around and read as tab actions.
What changed
- One Clone control in the repository header, right-aligned with the repository name on every repository tab.
- The HTTPS URL and the SSH command each have their own copy button; previously only HTTPS had one.
- Site joins the header only when a site would answer:
pages_domainis set, the repository is publicly readable, and itspages_refbranch (defaultpages) exists. A configured domain alone no longer links to a 404. - Removed the per-tab Clone popovers and the Overview/Code Site buttons.
- Copy feedback restores
innerHTML, so the icon survives “Copied” and a repeated click cannot capture “Copied” as the original label. - Documented the header placement in
docs/ui-plan.mdand the deploy-only Site link indocs/sites.md.
Testing
./vole workflow check./vole workflow run verify— format, vet, build, govulncheck, packaging, markdown links, and the full test suite- New
TestHeaderOffersSiteOnlyAfterADeploycovers the absence of a Site link before the pages branch exists and the correct link after the push.