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

7.5 KiB

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.