New-message composer: overlay, shared editor, mentions and queue #192
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fase-5-composer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Compose a new Mattermost message to a channel or person, independent of a saved
card, and send it now (with a pre-send undo window) or schedule it - consuming
the existing outgoing-message backend.
Composer
components/Modal.vue: focus-trapa send-now / schedule split-button. Content and target autosave to a concept; you can work on several concepts
at once. During the undo window the pending send locks its concept (hidden
from Concepten, not reopenable); the concept is deleted only after Mattermost
accepted the message, so a failed send or a crash never loses composed text
or attachments.
a debounced people search to start a DM. The search matches every typed token
against the channel name and its team name ("off topic groep x").
cshortcut, behind adevice-local single-key-shortcuts preference (WCAG 2.1.4).
Shared editor + mentions
emoji picker + optional @-mention autocomplete, used by both the reply
composer and the new-message composer so they cannot drift.
target channel for a new message (new
GET /api/mm/mention-candidates, sharingthe reply endpoint's member/autocomplete logic).
Backend
POST /api/messages,/api/scheduled-posts) and per-usernew-message drafts (multiple concepts per user). The composer-facing API is renamed from "cardless"
to "new message"; the data-layer term (a row with
card_id IS NULL)deliberately stays "card-less".
MAX_FILE_REFSfor the attachment cap. A dev Mattermost mock behind adedicated
dev_mm_mockflag makes the composer testable locally without a realserver, committed with full coverage.
Housekeeping
AttachmentChipList(image thumbnails everywhere) and auseMessageComposerattachment core remove duplication between the twocomposers.
Undo is a pre-send delay toast (
lib/delayedSend), not a post-send delete.Review round
A deep multi-agent review of everything since v2026.7.24 (with adversarial
verification per finding) confirmed 28 issues; all are fixed in the six
commits from
c512a6ato77a8839. Highlights:destroyed the concept (draft delete reaped the parked files before the
delayed send fired). The concept now lives until the send succeeded.
post (dedupe keyed on an idempotency key that exports never carry) - the
message fired twice. Dedupe now uses content-shaped keys.
instead of retrying outside Mattermost's 30s dedupe cache, the runner claim
is an atomic state-guarded UPDATE, replies carry a pending_post_id, and the
composers reuse one dedupe key across retries.
restored as a concept, including server, target and attachments.
deterministic migration downgrade, silent-autosave feedback, a11y fixes
(Server select name, error-text contrast) and authorization tests for
mention-candidates.
a4db9cb9181a0e760f87Card-less composer: new-message overlay + queue integrationto New-message composer: overlay, shared editor, mentions and queue814b79ce9c0fd75a9814