Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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.

#151

Give every account a profile page and a directory of people

merged · by keenan 8d ago · merged into main at 4739664b by keenan 7d ago

docs/accounts-and-access.md +38

@@ -21,6 +21,44 @@ Names are never reused: because the account row outlives retirement, retiring
21 21 someone keeps their name attached to them. An old reference can never silently
22 22 point at a different person.
23 23
24 ## Profiles and the user directory
25
26 Account names are public on an instance. `/u` lists everyone who has an account,
27 and `/u/<name>` is that person's profile: what they have opened, reviewed and
28 commented on, and the repositories that work is in. Retiring an account keeps its
29 page, marked as no longer active, because every closed issue and merged change
30 still refers to the name.
31
32 The directory is a table of every account and its visible counts. Search it by
33 name, narrow it to active or retired accounts, and order it from a column header
34 — by name, repositories, issues, changes, reviews or joining date. The search, the
35 filter, the order and the page are all in the URL, so a view can be linked and
36 paging cannot change the question.
37
38 What a profile counts is not public. Every number and every event is limited to
39 the repositories the reader may open, so two people can see different totals for
40 the same account, and a private repository's work contributes nothing to a
41 stranger's view. The page says what its numbers cover instead of pretending they
42 are the whole history. The same rule covers the counts beside a name in the
43 directory.
44
45 A profile is derived, not stored. The numbers and the feed are read from the web
46 index (`data/index.db`), which is rebuilt from Git and from the CI records; no
47 profile is written to `data/users.db`. Keys, passkeys, sessions and a person's
48 instance role are not shown, with one exception: an instance admin sees the role
49 on the profile, because they can already see it on the admin pages. Git commit
50 authors are shown as text and never counted, because a commit's author is a name
51 someone typed, not the credential that proves an account.
52
53 Writing `@name` in an issue, a comment, a change request, or a release note links
54 to that account's profile. It is the same mention syntax a workflow's `mentioned`
55 filter evaluates ([Workflows](workflows.md)), so a name that reads as an address
56 on the page is the name a job sees. A name that does not belong to an account
57 stays plain text, and a mention inside a code sample is not a mention.
58
59 Both pages ask crawlers to leave them out of an index. The names are public; a
60 scraped roster is not what public has to mean.
61
24 62 Account data lives in `data/users.db`. It also holds passkeys, one-time
25 63 enrollment links, browser sessions, repository access rules, and file locks.
26 64 Credentials are public keys, and session or enrollment-link tokens are stored