vole
Clone
Read only, no credentials:
https://rodent.software/git/vole.git
Write over SSH with a registered key:
git clone ssh://git@0.0.0.0:2222/vole.git
A free and open-source forge that lives in your Git repo.
Identify accounts by their registered name
62576fa8157d431dcf2d360f3ebe481de77bda03 · Keenan Nemetz · 14d ago · parent 642e5994
Identify accounts by their registered name Drop the internal account id and display name. Users, keys, passkeys, invites, sessions, ACL entries, approvals, locks and CI records now all use the registered name as the single identity. The roster migrates in place: old id-keyed tables are rebuilt around the name, and access-rule/lock references are rewritten through the same mapping. Display-name editing and whoami --id are removed.
docs/change-requests.md +6−6
| @@ -9,7 +9,7 @@ so if the branch changes after approval, the approval no longer applies. | |||
| 9 | 9 | ```text | |
| 10 | 10 | requests/<ulid>/request.md # title, state, author, base, head | |
| 11 | 11 | requests/<ulid>/comments/<ulid>.md # discussion | |
| 12 | requests/<ulid>/approvals/<account-id>.md # one approval per account | ||
| 12 | requests/<ulid>/approvals/<account-name>.md # one approval per account | ||
| 13 | 13 | ``` | |
| 14 | 14 | ||
| 15 | 15 | ## Opening and landing a request | |
| @@ -19,7 +19,7 @@ A contributor opens a request from the web after pushing a branch under | |||
| 19 | 19 | repository's change-request page lists their namespaced branches; the browser | |
| 20 | 20 | builds the request from the branch's current commit. A contributor cannot name an | |
| 21 | 21 | arbitrary commit or another account's branch. The namespace is the account name, | |
| 22 | which is fixed at creation, so changing a display name never moves a branch. CI | ||
| 22 | which is fixed at creation. CI | ||
| 23 | 23 | for that commit is held until a maintainer allows the exact tip from the | |
| 24 | 24 | repository page. | |
| 25 | 25 | ||
| @@ -58,13 +58,13 @@ or a merge of that commit with the current branch. That is why "merge, then push | |||
| 58 | 58 | works, but adding an extra commit after approval does not. | |
| 59 | 59 | ||
| 60 | 60 | An approval can also be recorded from the request page in the browser when the | |
| 61 | signed-in account has maintain access. The approver is the session's account id, not | ||
| 61 | signed-in account has maintain access. The approver is the session's account name, not | ||
| 62 | 62 | a name from the page. | |
| 63 | 63 | ||
| 64 | An approval is stored at `approvals/<account-id>.md`. Only the account named in | ||
| 64 | An approval is stored at `approvals/<account-name>.md`. Only the account named in | ||
| 65 | 65 | that path can create, change, or remove it. `request.md` records the author's | |
| 66 | account name in `author` and their id in `author_id`; the page shows the author's | ||
| 67 | display name, but neither field carries authority. An admin can repair an | ||
| 66 | account name in `author`; that is the only author field and it is what blocks | ||
| 67 | self-approval. An admin can repair an | ||
| 68 | 68 | approval, and the override is recorded in `data/audit.log`. | |
| 69 | 69 | ||
| 70 | 70 | The request page has three tabs. **Conversation** holds the description, | |