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.
forge/access/store.go +2−2
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | // | |
| 3 | 3 | // The rules live in the instance database beside the roster, not in the repository. | |
| 4 | 4 | // They are configuration: only the instance writes them, only the instance reads them, | |
| 5 | // and they are keyed by account id — so a copy in a clone means nothing without the | ||
| 5 | // and they are keyed by account name — so a copy in a clone means nothing without the | ||
| 6 | 6 | // roster that gives those ids names. Keeping them in git bought a commit, a | |
| 7 | 7 | // compare-and-swap retry and a rev-parse per read to store a handful of rows, and that | |
| 8 | 8 | // is the same argument that moved the roster out of data/system.git. | |
| @@ -28,7 +28,7 @@ type Store struct { | |||
| 28 | 28 | } | |
| 29 | 29 | ||
| 30 | 30 | // Open opens (and creates) the access table in the instance database. It is the same | |
| 31 | // file as the roster: access rules are keyed by account id, so the two have to be | ||
| 31 | // file as the roster: access rules are keyed by account name, so the two have to be | ||
| 32 | 32 | // backed up and restored together or the ids stop resolving. | |
| 33 | 33 | func Open(path string) (*Store, error) { | |
| 34 | 34 | dsn := path + "?_pragma=busy_timeout(5000)&_pragma=journal_mode(WAL)" | |