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.
Name branches after the account, and labels after the display
474a812d199a109ba894124cd6f26be12c73285d · Keenan Nemetz · 15d ago · parent ade6107e
Name branches after the account, and labels after the display
A contributor's folder was `refs/heads/contrib/<account-id>/`, which told a
reader nothing without decoding a ULID. It is now the account name,
refs/heads/contrib/<name>/<branch>
and the name is therefore fixed at creation: renaming an account would strand
every ref under its old folder, so `vole admin user rename` is gone and the
users row itself — kept after retirement — is what stops a name being reissued.
What people see is now a separate, mutable display name, validated by the same
rules wherever it is set (CLI, remote admin, registration, `/account`) and shown
on pages, approvals, listings and refusals. Nothing is authorized by it and
nothing on disk is keyed by it: metadata authors stay account names because the
push boundary resolves them for ownership, and approvals stay account ids.
`user_names`, `Snapshot.Reserved` and `Account.Former` are dropped: with a fixed
name there are no former names to remember, and the UNIQUE column already does
the reserving. Opening an older roster adds the `display` column and drops the
alias table in place; contributor refs written under the old id namespace are
left where they are, readable, and landable by a maintainer.
docs/cli.md +6−2
| @@ -54,7 +54,7 @@ The pre-admin spellings `vole user`, `vole repo`, `vole acl`, `vole index` and | |||
| 54 | 54 | ### Users | |
| 55 | 55 | ||
| 56 | 56 | ```sh | |
| 57 | vole admin user create [--key <file|->] <name> | ||
| 57 | vole admin user create [--key <file|->] [--display <label>] <name> | ||
| 58 | 58 | vole admin user invite <name|id> | |
| 59 | 59 | vole admin user credentials <name|id> | |
| 60 | 60 | vole admin user rm-credential <name|id> <credential-id> | |
| @@ -62,7 +62,7 @@ vole admin user sessions <name|id> | |||
| 62 | 62 | vole admin user revoke-sessions [--all | <name|id>] | |
| 63 | 63 | vole admin user add-key --key <file|-> <name|id> | |
| 64 | 64 | vole admin user rm-key <name|id> <fingerprint> | |
| 65 | vole admin user rename <name|id> <new-name> | ||
| 65 | vole admin user display <name|id> <display-name> | ||
| 66 | 66 | vole admin user retire <name|id> | |
| 67 | 67 | vole admin user grant-admin <name|id> | |
| 68 | 68 | vole admin user revoke-admin <name|id> | |
| @@ -76,6 +76,10 @@ Omitting `--key` creates a browser-only account and prints a one-time enrollment | |||
| 76 | 76 | link. `user invite` issues a fresh link for an existing account. `user backup` | |
| 77 | 77 | writes a file on the host, so it is local-only. | |
| 78 | 78 | ||
| 79 | `--display` sets an optional human-friendly label; `vole admin user display` | ||
| 80 | changes or clears it later. The account name cannot be changed: it is the folder a | ||
| 81 | contributor's branches live under, so it is fixed at creation and never reissued. | ||
| 82 | |||
| 79 | 83 | ### Repositories | |
| 80 | 84 | ||
| 81 | 85 | ```sh | |