vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software:2222/vole.git
A free and open-source forge that lives in your Git repo.
Unify terminology across the web UI and docs
ab326d3ac1fd947a9df45f31f6dc10ab38627882 · Keenan Nemetz · 14d ago · parent 5b814e99
Unify terminology across the web UI and docs Use account, repository, change request, enrollment link, instance admin, and sign in/out consistently. Rename the access guide to accounts-and-access.md, update its links, and record the canonical terms and retained command/URL spellings in the documentation index.
docs/ui-plan.md +30−29
| @@ -28,7 +28,7 @@ deliberately rather than by drift. | |||
| 28 | 28 | ||
| 29 | 29 | Global bar (slim): `vole` · `Runners` · `Activity` · search · account menu. The | |
| 30 | 30 | wordmark is home, so there is no separate Repositories link. The account menu | |
| 31 | carries Account, Admin for instance admins, Status, and Log out; the current | ||
| 31 | carries Account, Admin for instance admins, Status, and Sign out; the current | ||
| 32 | 32 | destination is marked. Search is a field on wide screens and takes its own row | |
| 33 | 33 | on narrow ones. | |
| 34 | 34 | ||
| @@ -37,7 +37,7 @@ tabs at the home-page header scale, with a lock for a private repository or a | |||
| 37 | 37 | globe for a public one. The tab's own header is a smaller section title because | |
| 38 | 38 | the tabs, not the page, are the navigation. The tabs are: | |
| 39 | 39 | ||
| 40 | `Overview` · `Activity` · `Code` · `Issues` · `Changes` · `Releases` · `Runs` · `Locks` · `Settings` | ||
| 40 | `Overview` · `Activity` · `Code` · `Issues` · `Change requests` · `Releases` · `Runs` · `Locks` · `Settings` | ||
| 41 | 41 | ||
| 42 | 42 | No sidebar. A sidebar only pays for its width when there are many persistent | |
| 43 | 43 | destinations; here the repository has seven and the global bar has two, and they | |
| @@ -51,7 +51,7 @@ action lives. | |||
| 51 | 51 | ||
| 52 | 52 | The repository tab opens Overview: README in the main column; recent commits, | |
| 53 | 53 | recent runs, releases, contributors, languages, and size in the sidebar. Activity is the | |
| 54 | chronological feed: issues, changes, comments, and releases with type filters. Code is an editor-style browser: a persistent tree on the left and the | ||
| 54 | chronological feed: issues, change requests, comments, and releases with type filters. Code is an editor-style browser: a persistent tree on the left and the | ||
| 55 | 55 | open file in the large right-hand pane; file and folder links swap only that pane | |
| 56 | 56 | through HTMX. Markdown opens as source; a Source/Preview toggle renders it at full | |
| 57 | 57 | pane width. The branch crumb returns to the Code overview rather than opening a | |
| @@ -65,7 +65,7 @@ Status: `done` exists today · `wip` in progress · `todo` missing. | |||
| 65 | 65 | ### Global | |
| 66 | 66 | ||
| 67 | 67 | - done — repository list (`/`) | |
| 68 | - done — login, registration, enrollment link | ||
| 68 | - done — sign-in, registration, enrollment link | ||
| 69 | 69 | - done — account (name, keys, passkeys, sessions) | |
| 70 | 70 | - done — runners and queue | |
| 71 | 71 | - done — styled 404 page everywhere, including missing detail resources and | |
| @@ -74,14 +74,14 @@ Status: `done` exists today · `wip` in progress · `todo` missing. | |||
| 74 | 74 | recovered into it, and the detail is logged rather than rendered | |
| 75 | 75 | - done — search across visible repositories, by name and description, from the | |
| 76 | 76 | chrome on every page | |
| 77 | - done — landing page at `/`: instance identity, project cards with top | ||
| 78 | language, last commit, issue/change counts, and latest release, with a short | ||
| 77 | - done — landing page at `/`: instance identity, repository cards with top | ||
| 78 | language, last commit, issue/change-request counts, and latest release, with a short | ||
| 79 | 79 | activity rail beside them | |
| 80 | 80 | - done — instance-wide activity feed at `/activity`, merged from every | |
| 81 | 81 | repository the viewer can read, with the repository named on each event, a | |
| 82 | 82 | type filter, and 50-event pages | |
| 83 | - done — instance admin: repository creation and access rules, users, | ||
| 84 | invitations, admin grants, keys, and sessions | ||
| 83 | - done — instance admin: repository creation and access rules, accounts, | ||
| 84 | enrollment links, admin grants, keys, and sessions | ||
| 85 | 85 | - done — health/status page at `/status`; `/healthz` stays the plain-text probe | |
| 86 | 86 | ||
| 87 | 87 | ### Repository | |
| @@ -90,12 +90,12 @@ Status: `done` exists today · `wip` in progress · `todo` missing. | |||
| 90 | 90 | line numbers, raw, markdown source with an explicit full-width preview | |
| 91 | 91 | - done — commit history, commit view, parent links, diff | |
| 92 | 92 | - done — issues list/detail, comments, filters, close/reopen, labels and assignees (create and edit) | |
| 93 | - done — changes list/detail with Conversation, Files and Runs tabs; one-level threaded discussion UI, approvals, file tree and diff, inline review comments, close/reopen | ||
| 93 | - done — change-request list/detail with Conversation, Files and Runs tabs; one-level threaded discussion UI, approvals, file tree and diff, inline review comments, close/reopen | ||
| 94 | 94 | - done — releases list/detail, artifacts, archives | |
| 95 | 95 | - done — locks | |
| 96 | 96 | - done — run detail, log, artifacts | |
| 97 | 97 | - done — runs list per repository (`/r/{name}/runs`) with status filters | |
| 98 | - done — repository activity feed on `/r/{name}/activity`: issues, changes, | ||
| 98 | - done — repository activity feed on `/r/{name}/activity`: issues, change requests, | ||
| 99 | 99 | comments, releases, type filters, and HTMX fragment updates | |
| 100 | 100 | - done — activity events from metadata-log state changes (closed/reopened), | |
| 101 | 101 | actor filter, and assignee filter | |
| @@ -126,23 +126,24 @@ Status: `done` exists today · `wip` in progress · `todo` missing. | |||
| 126 | 126 | ## Slice order | |
| 127 | 127 | ||
| 128 | 128 | 1. ~~**Foundations**~~ — embedded template files, tokenised CSS, slim shell, | |
| 129 | repo tabs, styled 404 and 500. | ||
| 129 | repository tabs, styled 404 and 500. | ||
| 130 | 130 | 2. **Code browsing** — done: overview/code split, stats, contributors, runs | |
| 131 | 131 | list, editor-style tree, HTMX navigation, line-numbered blobs, commit/diff, | |
| 132 | 132 | syntax highlighting. | |
| 133 | 3. **Issues and changes** — done: list/detail layout, composer, filters, | ||
| 133 | 3. **Issues and change requests** — done: list/detail layout, composer, filters, | ||
| 134 | 134 | close/reopen, discussion, label/assignee triage, writing inline review | |
| 135 | 135 | comments. | |
| 136 | 136 | 4. **Activity and settings** — done: repository activity feed with state | |
| 137 | changes and actor/assignee filters, repository settings (description, default | ||
| 137 | change requests and actor/assignee filters, repository settings (description, default | ||
| 138 | 138 | branch, visibility, danger zone), and the instance-admin access section on the | |
| 139 | 139 | same Settings page. | |
| 140 | 140 | 5. **Instance admin** — done: repository create at `/repos/new`, access rules on | |
| 141 | 141 | each repository's Settings tab, rename/delete for repository admins, and | |
| 142 | `/users` for invitations, admin grants, retirement, keys, and sessions. | ||
| 142 | `/users` for accounts, enrollment links, admin grants, retirement, keys, and | ||
| 143 | sessions. | ||
| 143 | 144 | 6. **CI** — done: workflow/job list, cancel a queued run, rerun a finished | |
| 144 | 145 | one as another attempt. | |
| 145 | 7. **Polish** — done: repository search, code search, issue/change pagination, | ||
| 146 | 7. **Polish** — done: repository search, code search, issue/change-request pagination, | ||
| 146 | 147 | empty states, a light token block, skip link, focus-visible outlines, and | |
| 147 | 148 | narrow-screen table handling. Remaining: a deliberate responsive and | |
| 148 | 149 | accessibility audit at 1440/1024/390 px with a real browser. | |
| @@ -158,7 +159,7 @@ every page. Interactions are converted one flow at a time: | |||
| 158 | 159 | visible save button. | |
| 159 | 160 | - done — change approval updates the sidebar, comments update the discussion | |
| 160 | 161 | fragment, and close/reopen are page actions. | |
| 161 | - done — Issues and Changes filters swap their list fragment and push the URL. | ||
| 162 | - done — Issues and Change requests filters swap their list fragment and push the URL. | ||
| 162 | 163 | - done — repository activity feed swaps its event fragment for type filters and | |
| 163 | 164 | pushes the URL. | |
| 164 | 165 | - done — diff lines open an anchored composer in place; posted anchors are | |
| @@ -173,33 +174,33 @@ from the server, it does not manage client-side chip state or credential APIs. | |||
| 173 | 174 | ||
| 174 | 175 | ## Activity feed | |
| 175 | 176 | ||
| 176 | No notification table and no per-user inbox. The feed is derived from Git, the | ||
| 177 | No notification table and no per-account inbox. The feed is derived from Git, the | ||
| 177 | 178 | metadata branch, tags, and the run queue. Events carry a type, time, actor, | |
| 178 | title, link, and (for issue/change events) assignees, so the same feed can be | ||
| 179 | title, link, and (for issue/change-request events) assignees, so the same feed can be | ||
| 179 | 180 | filtered by actor and assignee. | |
| 180 | 181 | ||
| 181 | Repository feed is done on `/r/{name}/activity`; Overview stays the project | ||
| 182 | Repository feed is done on `/r/{name}/activity`; Overview stays the repository | ||
| 182 | 183 | summary. The instance feed is `/activity`, over visible repositories, with the | |
| 183 | 184 | repository named on each event, a type filter, and 50-event pages. The landing | |
| 184 | page shows the ten most recent events as a rail beside the project grid, because | ||
| 185 | a forge's front door should show its projects first. State changes such as closed and reopened | ||
| 185 | page shows the ten most recent events as a rail beside the repository grid, | ||
| 186 | because a forge's front door should show its repositories first. State changes such as closed and reopened | ||
| 186 | 187 | come from the metadata branch log, which carries a canonical | |
| 187 | 188 | `issue: <id> <state>` and `request: <id> <state>` subject. The feed covers | |
| 188 | issues, changes, comments, approvals, state changes, and releases. Commits and | ||
| 189 | issues, change requests, comments, approvals, state changes, and releases. Commits and | ||
| 189 | 190 | CI runs are not events: the overview and the runs tab already show them. | |
| 190 | 191 | ||
| 191 | 192 | ## Admin scope | |
| 192 | 193 | ||
| 193 | 194 | Instance admin covers the operations that used to be CLI-only: | |
| 194 | 195 | ||
| 195 | - users: create by invitation, retire, grant/revoke admin; inspect/revoke keys | ||
| 196 | and sessions | ||
| 196 | - accounts: create with an enrollment link, retire, grant/revoke admin; | ||
| 197 | inspect/revoke keys and sessions | ||
| 197 | 198 | - repositories: create, rename, delete | |
| 198 | 199 | - per-repository ACL: set roles, default role, approvals, checks, runners | |
| 199 | 200 | ||
| 200 | The Users page will not ask an admin to paste a user's SSH key. Account creation | ||
| 201 | uses the existing `identity.CreateWithInvite` path and returns a one-time | ||
| 202 | enrollment link; browser auth must be enabled for that link to work. | ||
| 201 | The Accounts page will not ask an admin to paste an account's SSH key. Account | ||
| 202 | creation uses the existing `identity.CreateWithInvite` path and returns a | ||
| 203 | one-time enrollment link; browser sign-in must be enabled for that link to work. | ||
| 203 | 204 | ||
| 204 | 205 | Repository admins still own repository settings (description, default branch, | |
| 205 | 206 | visibility, danger zone). Instance admins see an additional access section on the | |
| @@ -207,8 +208,8 @@ same Settings page: roles, the default role, approvals, checks, and runners. | |||
| 207 | 208 | Repository creation stays an instance-admin operation, but it is a standalone | |
| 208 | 209 | page reached from the home page rather than a repository-list admin screen. | |
| 209 | 210 | ||
| 210 | Accounts live at `/users`, reached from a Users item in the top navigation that | ||
| 211 | is shown only to instance admins. Every admin write uses the existing stores, | ||
| 211 | Accounts live at `/users`, reached from an Accounts item in the top navigation | ||
| 212 | that is shown only to instance admins. Every admin write uses the existing stores, | ||
| 212 | 213 | CSRF, and the audit log; the web is a second surface over the same operations, | |
| 213 | 214 | not a second implementation. | |
| 214 | 215 | ||