# Glossary terminology TODO Working list from a repo-wide audit of where code/docs use a different word for a concept that [glossary.md](glossary.md) already gives a canonical name. Nothing here has been changed yet, this is a collection point before any renaming/edit work starts. Grouped by glossary term; only real inconsistencies are listed, not every correct usage that was checked and cleared. ## Backend - `frontend/src/federation.js` — the whole module (`class ServerSet`, `add(server)`, every request method) talks about "server" throughout where the concept is a **Backend**. - `frontend/src/store.js` — `getHomeServers`, `getFriendServers`, `getAllKnownServers`, `setAllFriendsServers`/`all_friends_servers`, `home_servers`, `lookupServer` (~line 313, 325, 332, 359, 76-77, 107-108, 334). - `frontend/src/views/Friends.vue:16,43` — user-visible table column labeled "Server". - `docs/design-in-progress/tags.md` (lines 10, 20, 45, 76-78, 117, 204, 228-229) — "server" used throughout for what the glossary calls Backend (same looseness federation.md already has, but worth normalizing here too since tags.md is in active editing). - `issues.md:58` — "federated home servers" / "user identity" conflation. - `deploy/dev/docker-compose.yml` (`instance_a`/`instance_b`) and `docs/development.md:106-108` — "instance"/"backend instance" as a near-synonym for Backend. - `cli-client/toolshed-client.py:11-70`, `README.md:92` — `--host`/`self.host` for "which backend to talk to". ## Discovery - `frontend/src/store.js:313` — `lookupServer` action *is* the discovery operation, never named "discovery". - `frontend/src/store.js:347` — `could not resolve server for friend` — "resolve" used instead. - `docs/design-in-progress/items-labels.md:99`, `docs/development.md:108` — describe the discovery operation via "resolves"/"direct the frontend to the correct backend" without naming it (minor, but candidates for a one-word tightening). ## Handle / User handle - ~~`backend/authentication/models.py` (`class KnownIdentity`...), `signature_auth.py` (`author_identity`...), `frontend/src/identity.js` (`serializeIdentityRecord`...)~~ — no longer a finding: the glossary now has an explicit **Identity** entry (handle + keypair, held together as the unit a backend trusts), and this is exactly what these already name. No renaming needed here; if anything, these are the parts of the codebase the new Identity entry should point to as reference implementations. - `backend/toolshed/serializers.py:49-57` (`FriendSerializer`) — API field is literally named `"username"` but its value is a full handle (`username + '@' + domain`). Already self-acknowledged in a comment at `frontend/src/store.js:404`. **Highest-value single fix** — it's a live API contract, not just an internal name. - `frontend/src/store.js` — several action params destructured as `{username}` that actually carry a full handle: `lookupServer` (313), `getFriendServers` (359), `fetchFriendProfile` (401-405), `login` (276-282). - `frontend/src/views/Login.vue` (lines 24, 27-28, 82-83, 102-105, 115-117) — form label/variable "Username" for a field that must be a full user handle (`user@domain`, per its own validation message at line 103). - `frontend/src/router.js:51` — route param `/inventory/shared/:user/:id` uses `:user` for what's meant to eventually be a full handle; contrast with the sibling route at line 61 which already correctly uses `:handle`. (Already called out by items-labels.md itself, so low-risk to leave as-is, but listed for completeness.) ## Availability policy, Friend/Friendship, Signature/Signing, Strict resolution, Actor, Targeted sharing No real inconsistencies found — implemented code already uses the glossary's own terms consistently (`availability_policy` field name throughout backend+frontend; `friend`/`befriend` consistently; `Signature`/`sign`/`verify` consistently; `_HandleNotFound`/`_resolve_handle` in `backend/toolshed/offlinedata.py` implement strict resolution faithfully without needing to name it; Actor and Targeted sharing are unimplemented with no competing name anywhere). - Checked and cleared, not a real conflict: `frontend/src/neigbors.js`'s `NeighborsCache`/ "neighbor" vocabulary — refers to unreachable backend *domains* during discovery, not to friendship, despite reading like a synonym at a glance. ## Group / Group handle / Membership list - `backend/backend/settings.py:36` — `django.contrib.auth` ships a built-in `Group` model, shown as "Groups" in the Django admin. Not unregistered anywhere. Will collide by name with the proposed actor-type Group once that's implemented — worth a decision now (unregister the built-in admin Group, or otherwise disambiguate) before the real feature lands. - `issues.md` (issue #3, "Group Concept", ~lines 62-156) — a standalone proposal that conflicts with the already-settled `docs/design-in-progress/groups.md` design on three points at once: - `Group.public_key`/`private_key` fields (contradicts "does a group need its own keypair? No"). - `GroupMembership` backed by a signed `membership_certificate` rather than a plain membership list (contradicts the glossary's Membership list entry). - Bare `Group.handle` strings with no `#` prefix, e.g. `"makerspace-nord"`, and a `GroupInvitationIncoming.group_handle` field/API surface (`POST /api/groups/` etc., ~lines 65-66, 117-121, 150-156) that never uses the `#groupname@domain` shape. This is a design-conflict issue, not a wording tweak — `issues.md` should be reconciled with (or explicitly marked superseded by) `groups.md` before anyone implements from it. ## Keypair / Private key / Public key - Wire-format drift on the one field that actually crosses the network: `befriender_key` is used for a public key at `frontend/src/store.js:435,449` and `backend/toolshed/api/friend.py:107`, while the model field, serializer field, and UI all call the same value `befriender_public_key`/`public_key` (`backend/authentication/models.py:144`, `backend/toolshed/serializers.py:65`, `backend/toolshed/api/friend.py:118`, `frontend/src/views/Friends.vue:81`). - `cli-client/toolshed-client.py` (`--key`, `TOOLSHED_KEY`, `self.signing_key`, ~lines 12, 52, 57) and `README.md:92` — never say "private key," just "key"/"Toolshed key", even though it's specifically the private half. ## Origin - `backend/configure.py:130` ("Identifier set {} already imported, skipping") and the model `ImportedIdentifierSets` (`backend/hostadmin/models.py:13-19`) — call an imported origin dataset an "identifier set". - `issues.md:206-210` — Instance Admin TODO list: "identifier-sets" for **Origin** and bare "identifiers" for **Classification handle**, both alternate terms not matching glossary names. ## Alias - `backend/shared_data/ee_packages.json:40,64` — two tags already carry an `"alias"` field in real data (e.g. `SOT54` → `alias: "TO-92"`), but shaped as a bare name string, not an `origin#type:name` handle pointer, and with no unit-conversion concept. It's silently dropped on import today (`Tag`/`TagSerializer` have no `alias` field). Not a different-word issue, but the design doc (which calls Alias "Proposed") doesn't acknowledge this pre-existing, inert precedent — worth reconciling either the data or the doc. ## Tag / Property / Category - `frontend/src/components/workflow/workflows/BulkItemImportWorkflow.vue:495` — CSV column-auto-mapping heuristic treats `"type"` as a synonym for Category: `lowerColumn.includes('category') || lowerColumn.includes('type')`. ## Item Handle - `frontend/src/views/Search.vue:30,52,110` — a field literally named `handle` is computed here (`e.owner==this.user ? e.id : "shared/"+e.owner+"/"+e.id`), but it's a router-path fragment, not an Item Handle: no domain-qualified `user@domain.tld:id` shape, and `e.owner` is a bare username. Whoever implements the real Item Handle later is likely to collide with this existing variable. ## Item Label - `frontend/src/components/workflow/workflows/FotoFirstBulkImportWorkflow.vue:567-572,822` and `FotoFirstBulkImportWorkflow2.vue:593-598,847` — checkbox "Generate QR codes for items" / `importOptions.generate_qr_codes` names exactly the Item Label concept but never uses that term (and the option is currently unwired — declared and defaulted `true` but never read elsewhere). ## Item URL / Local id / Domain / Frontend / Definition fingerprint / Fragmentation / Handle collision / Classification handle No real inconsistencies found — each already uses consistent, glossary-matching vocabulary (`id`/`item_id` for Local id; `origin` kept cleanly separate from `domain` everywhere it's used; `get_handle()` consistently for Classification handle; no competing names found anywhere for Fragmentation, Handle collision, or Definition fingerprint, which also doesn't collide with the unrelated `File.hash` content-hash field despite both being called "hash").