This commit is contained in:
j3d1 2026-08-27 20:41:19 +02:00
parent 2bb6624d50
commit 7276750c66
15 changed files with 552 additions and 169 deletions

View file

@ -80,15 +80,17 @@ is first trusted for that handle. Currently only exists between users; groups ha
groups befriending groups, are proposed extensions of the same mechanism, not a new one.
*See: [federation.md](federation.md#cryptography), [groups.md](design-in-progress/groups.md#should-a-group-be-able-to-grant-read-access-to-non-members-group-friends)*
**Group** (Proposed)
**Group** (Implemented)
A second kind of [actor](#actor), modeling collective ownership (a club, workshop, or company)
rather than any one person owning something. All members hold equal edit rights over what the group
owns; membership itself is the privilege, there's no separate owner/member distinction within a
group. Backed by a [membership list](#membership-list) rather than a [keypair](#keypair-private-key-public-key),
and identified by a [group handle](#group-handle).
and identified by a [group handle](#group-handle). Groups can own items and storage locations today
(`owner_group` on both); a group having its own friends, or befriending another group, is not
implemented, so a group is not yet a full [actor](#actor) in every sense of that entry.
*See: [groups.md](design-in-progress/groups.md#what-a-group-is)*
**Group handle** (Proposed)
**Group handle** (Implemented)
A [group](#group)'s handle: a name and [domain](#domain) written like a [user handle](#user-handle)
but prefixed with `#`, e.g. `#groupname@toolsheddomain.tld`. The prefix keeps groups and users in
disjoint namespaces on the same domain (no squatting collision between a user and a group wanting
@ -114,11 +116,16 @@ signatures. Only user handles carry a keypair, not groups, classification handle
User-Qualified IDs.
*See: [federation.md](federation.md#cryptography)*
**Membership list** (Proposed)
The record of which [user handles](#user-handle) currently belong to a [group](#group), maintained
by whichever backend is authoritative for the group's handle. What backs a group's identity in
place of a keypair: a request "as the group" is a normal signed request from a current member, plus
a check against this list, not a request signed by some shared group key.
**Membership list** (Implemented)
The authoritative record of which [user handles](#user-handle) currently belong to a
[group](#group), maintained by whichever backend is authoritative for the group's handle
(`Group.members` in `authentication/models.py`). What backs a group's identity in place of a
keypair: a request "as the group" is a normal signed request from a current member, plus a check
against this list, not a request signed by some shared group key. Distinct from
`authentication.models.GroupMembership`, a second, member-side record kept on a *member's own* home
backend mirroring the bare fact of belonging (analogous to how a friendship is independently
recorded on both sides) — that pointer is not itself authoritative, it exists so a member's own
backend can list groups it believes the member belongs to without querying every other backend.
*See: [groups.md](design-in-progress/groups.md#does-a-group-need-its-own-keypair)*
**Signature / Signing** (Implemented)
@ -195,10 +202,11 @@ server or a domain, it can equally be a shared reference dataset (like the files
*See: [federation.md](federation.md#tags-properties-and-categories)*
**Tag / Property / Category** (Implemented)
The three kinds of classification entity an item can reference, each identified by a
[classification handle](#classification-handle). A property additionally carries unit metadata
(`unit_symbol`/`unit_name`), though property *values* on an item are plain, undeclared-type
strings today.
The three kinds of classification entity an item can reference, collectively called a
**classifier**, each identified by a [classification handle](#classification-handle). A property
additionally carries unit metadata (`unit_symbol`/`unit_name`), though property *values* on an item
are plain, undeclared-type strings today. A single [origin](#origin) (e.g. one
`backend/shared_data/*.json` file) typically defines many classifiers at once.
*See: [federation.md](federation.md#tags-properties-and-categories), [tags.md](design-in-progress/tags.md)*
## Items & Physical Labels