Follow-up to !453, from your four points on the tab layout.
- Bookmarks tab.
repo bookmarkstakes no owner and lists the caller's, so the tab is offered on your own profile only; on anyone else's the URL is a 404. Making them public would be a capability and a privacy change, so I did not./bookmarksredirects to the tab and the rail points at it, rather than two pages showing the same rows. - Order. About · Repositories · Bookmarks · Snippets · People.
/{owner}is About, so the first tab is the landing page the way a tab bar normally works. #242's finding still holds: what it asked for is that the sections be separate pages rather than one stack a long About pushes the repositories off the bottom of. - Activity inside About, with a log of the newest 30 events under
the graph. The log counts what the graph over it counts —
UserPublicEventskeys on the actor for a user, matchingActivityByDay, while an org keepsOwnerPublicEvents, matchingOrgActivityByDay. Both public repositories only. Keying a user's log on their repositories instead printed "3 in the last year" over "Nothing yet."activity.atomis still the feed that goes back further. - Snippets render inside the profile with its header and tab bar, not on a page of their own. A snippet itself is still its own page.
owner.html's page struct is a named type now: the handler and the
tests must agree on it field for field, and the anonymous struct in two
places drifted three times while this was written.
Verified on a local instance with all four tabs populated, and the full e2e suite passes locally (238s).
Parity: the profile prose rewritten, a bookmarks-on-your-profile row.