memos/docs/glossary.md
amblued 9d2b77ced8 feat(space): add client-defined UIDs and identity cues
- Generate UUID v4 values in the client with validated custom UID
  support.\n- Show immutable UIDs where Space titles need
  disambiguation.\n- Standardize Space surfaces on the Lucide Astroid
  icon.
2026-08-28 00:33:09 +08:00

145 lines
7.5 KiB
Markdown

# Memos Domain Glossary
This glossary defines product and domain language shared across Memos design documents. Protocol, Unicode, and parser-specific terms remain in the ADRs
that use them.
## Users and usernames
### User
A durable Memos account. Its stable identity is an internal user ID, not its mutable username or display name.
### Username
A user-selected, case-sensitive public account identifier used for authentication, user resource names, lookup, and references. Username spelling is
case-preserving, is not implicitly trimmed or normalized, and equality is exact ASCII byte equality, so `Alice` and `alice` are distinct usernames. A
username is distinct from both a display name and the user's internal ID. Its spelling does not grant a role or establish that the user is trusted.
### Writable username
A username accepted for account creation, rename, or automatic provisioning. It is 1 through 36 ASCII letters, digits, or hyphens; begins and ends with an
ASCII letter or digit; and may contain repeated interior hyphens without an additional restriction. Numeric spelling has no special meaning, so a value
containing only digits is also a writable username. Internationalized human-readable naming belongs to the user's display name.
### Legacy username
A stored username that does not satisfy the writable format but remains readable and addressable for compatibility. Legacy usernames are not accepted by
new write validation or added to new reference syntaxes.
### Username reference
Source text that names an exact, case-sensitive username so Memos can attempt to resolve it to a user ID. The source spelling alone is not a durable user
binding. Stability across username rename and reuse requires additional persisted identity that the current username-reference specification does not
define.
### Mention candidate
An eligible memo Markdown source span formed by an ASCII `@` followed by one complete writable username. Recognition also applies the boundary and opaque
Markdown-context rules in the active username-reference specification. The same ASCII letters, digits, and hyphen admitted inside a username define the
mention boundaries: they block a mention immediately to their right and are consumed as part of the complete candidate to their left. Other characters
receive no special boundary handling.
### Resolved mention
A mention candidate whose exact username resolves to a user under the consuming operation's existing account-status and visibility policy. User-targeted
effects apply to the resolved user ID, not to unresolved source text.
## Spaces
### Space
An instance-scoped collaboration boundary for accepted members and memo placement. A Space is not a tenant, folder, or application-wide authorization
role.
### Space ID
The stable internal identity of a Space. It is distinct from the public Space UID and the mutable Space title.
### Space UID
The immutable, instance-wide public identifier assigned when a Space is created. It may be user-defined or generated automatically.
### Space resource name
The API identity of a Space in the form `spaces/{space UID}`.
### Space title
The mutable, non-unique display label of a Space.
## Tags
### Tag
A classification value in a memo tag set, derived from one or more tag occurrences either as a direct tag value or as an implied ancestor. A tag is not a
durable entity and cannot be independently created or renamed. Changing a tag's spelling requires editing the relevant memo source occurrences.
### Tag introducer
An ASCII `#` character (U+0023) that is not part of a matched fully-qualified emoji sequence and starts a tag candidate. Visually similar fullwidth and small
number-sign characters are not introducers.
### Tag occurrence
An eligible source span in memo Markdown formed by a tag introducer and its consumed source spelling. The spelling emits a tag identifier, which is the
direct tag value. Recognition rules, including excluded Markdown contexts, are defined by the active tag-syntax profile.
### Eligible tag text
A contiguous original-source range with no intervening Markdown syntax boundary, classified as textual content by GFM 0.29-gfm or explicitly exposed as
ordinary text by a Memos Markdown extension. Extension nodes are opaque by default, so their source does not produce tags unless the extension definition
opts in.
### Source spelling
The exact source substring consumed after the `#` introducer. It includes default-ignorable code points outside matched fully-qualified emoji sequences and
ignored leading combining marks before each segment's starter, both of which the lexer ignores. Inline rendering and source-preserving operations use this
spelling.
### Direct tag value
The identifier emitted from one tag occurrence before hierarchy expansion. `book/fiction` is the direct value produced by `#book/fiction`.
Default-ignorable code points outside matched fully-qualified emoji sequences and ignored leading combining marks before each segment's starter are
consumed from the source spelling but omitted from this value.
### Implied ancestor tag
A slash-delimited prefix derived from a direct tag value. A direct value of `book/fiction/history` implies the ancestor tags `book` and `book/fiction`.
### Tag segment
A non-empty component of a hierarchical tag identifier. `/` separates segments and is consumed only when another non-empty segment follows. A leading slash
produces no tag; a trailing or repeated slash terminates the identifier before that slash. `-`, `+`, and `&` are ordinary segment units: they may appear at
any position, repeat, or form a complete segment. Default-ignorable code points and ignored leading combining marks do not make a segment non-empty.
### Tag identifier
The non-empty Unicode code-point sequence emitted from a tag source spelling. The identifier excludes the introducer and all ignored source code points.
### Display value
The direct or implied value presented as a derived tag label. Memos does not normalize or case-fold emitted code points for identity, but ignored
default-ignorable code points and ignored leading combining marks are not part of the display value.
### Comparison key
The value used for deduplication, counting, filtering, navigation, and exact metadata matching. It is identical to the emitted display value. Two tags
compare as equal only when those emitted Unicode code-point sequences are identical; case and canonical or compatibility-equivalent spellings remain
distinct. Source spellings that differ only by ignored default-ignorable code points or ignored leading combining marks compare equal. Inputs to exact
value filters and metadata lookups are already tag values and are compared as supplied; they are not re-lexed as source spellings.
### Memo tag set
The union of direct tag values and their implied ancestor tags for one memo, exposed as `Memo.tags`. It is rebuildable from the memo's Markdown and is not an
authoritative source of tags. Each exactly equal emitted value appears once, even when produced both directly and as an ancestor. Different source
spellings remain separate only when they emit different code-point sequences.
### Tag metadata rule
User configuration that selects tag values and supplies presentation or behavior metadata, such as color or content blurring. A metadata rule may match
multiple values and does not create, own, or rename a tag.
### Tag count
The number of memo tag sets containing an exactly equal direct or implied tag value, not the number of textual occurrences. A memo containing only
`#book/fiction` contributes one to both the `book` and `book/fiction` counts.