mirror of
https://github.com/block/buzz.git
synced 2026-11-06 09:21:45 +00:00
Extract behavior B from #7114 after the spacing fix. Preserve ambiguous-name rejection across chat, edits, forum and onboarding; keep exact labels through team selection and automatic addressing. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com> (cherry picked from commit 46f9b75bcc3e735d351e0587cefc105e66d6da2c) Signed-off-by: Logan Johnson <loganj@squareup.com> (cherry picked from commit 86b4e6cef624289a6e2c033327a241c2f6031274) Signed-off-by: Logan Johnson <loganj@squareup.com>
38 lines
2.2 KiB
Markdown
38 lines
2.2 KiB
Markdown
# Mention editor contract
|
|
|
|
Autocomplete inserts a full literal label followed by a separator. Full labels
|
|
may contain spaces; internal spaces must not be mistaken for the final boundary.
|
|
The immediate next typed character goes after the separator even if the browser
|
|
remaps the DOM caret to the highlight edge. Explicit ArrowLeft or click cancels
|
|
that settlement so users can intentionally edit a mention. Plain typed tokens
|
|
retain their existing behavior; this does not change recipient resolution.
|
|
|
|
Regression coverage: `mentionHighlightExtension.test.mjs` simulates chip-edge and
|
|
whitespace-run rewrites, internal spaces, and deliberate motion. The ordinary
|
|
member browser cases in `mention-spacing.spec.ts` test immediate typing and
|
|
ArrowLeft without requiring remote discovery or invitation; `mentions.spec.ts`
|
|
also covers clicking chip edges and insertion before existing text.
|
|
|
|
## Exact recipient labels
|
|
|
|
A selected label is a binding to one exact public key, not a lookup by the latest
|
|
profile name. Selecting a second identity with the same name reserves a qualified
|
|
label containing its full key (and, if needed, a collision suffix). Team members
|
|
reserve labels sequentially. Automatic addressing inserts/restores/removes that
|
|
registered label, never a different recipient with the same name.
|
|
|
|
Manually typed member names with multiple exact-key matches are rejected with a
|
|
visible instruction to use the mention picker. Chat, edits and standalone forum
|
|
composition retain their draft and publish nothing on this error. An edit may
|
|
remove an ambiguous historical label; when the old content cannot be resolved,
|
|
all recipients in the valid replacement are revalidated. Selection stays bound
|
|
across profile renames. This does not expand eligibility or change relay
|
|
revalidation, invitation or publication authorization.
|
|
|
|
Coverage: `useMentions.test.mjs`, `useAgentAddressLockPicker.test.mjs`,
|
|
`submitMessageEdit.test.mjs`, `mention-recipients.spec.ts`, and the existing
|
|
same-name agent case in `mentions.spec.ts`. The integration-project
|
|
`onboarding.spec.ts` checks that an ambiguous Fizz mention cannot complete the
|
|
welcome flow, then selects the exact newly started starter and asserts its sole
|
|
recipient tag before checking the original completion and layout behavior.
|