Review page and home page polish, plus "last activity" ordering of the repositories.
Merge request page
Title, facts and description in one card; the header a shade lighter than the description. Issues share it.
Unified / Split / Collapse all in one view menu (the existing details.menu component); u, d and x still work, escape closes menus on every page and the focus goes back to the menu button.
Wide mode on every page with w (listed in ?), kept in localStorage; store.js loads without defer and sets it before the first paint.
Hunk headers and hidden-line rows are quieter (background and border), text keeps its contrast.
A shift + click range is one block (one border, none between its lines, per side in split); the form title names the whole range (a.go:21-149); lines loaded later from a gap inside the range are selected too.
Home page
Inbox button next to the logo, home page only, with a mailbox icon (Lucide) and a darker count badge.
Default order is the last activity: push (incl. merge), merge request opened / merged / closed / ready, comment on a merge request, issue opened / approved / closed / reopened / commented. Moderation (submissions, rejections) stays owner-only and does not count.
The row of a repository with activity moves to the top live (activity order only; CI updates do not move it).
Storage
Repo.ActiveAt (storage proto field 8; falls back to the later of pushed and created).
RepoMetaStore.Update is replaced by Mutate: a compare-and-swap on the version read, retried up to 8 times. The previous Update checked the version read at write time, so a read-modify-write could overwrite a concurrent change (e.g. a visibility change).
No change to ermite-api.
Checks: go vet ./..., go test ./..., go test -race on usecase and kvstore, JS tests (160), golden pages refreshed, manual checks on the dev server. Reviewed by Go and JS reviewers; findings fixed.