# 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.