Repository source: docs/concepts/shared_composer.md
Shared composer
Purpose: One partial renders every writing form (new post, compact board and QDB add, reply) so field names, signing, drafts, Outbox and attachments behave the same everywhere, while each placement chooses only what it shows.
Scenario: On the New post page a member sees the body first, then the Post row with the ··· menu, then the optional Title and the tags (and event, when enabled) below it. On a phone the body starts at the compact form's height and nothing is reserved between it and Post, so when the keyboard opens both stay on screen; long drafts scroll inside the body. The paned board's New Thread dialog renders the same full form. The board, board list and QDB add render the compact form (body and Post only, Title and tags hidden). Replies render body and Post reply, with the phone reply docking on top where enabled.
Sources: the composer partial (source unavailable) (order and modes), new post options (source unavailable), reply options (source unavailable), compose styles (source unavailable) (phone rules under 640px), composer browser test (source unavailable) (order assertion), layout stability test (source unavailable) (--phone-fit-only: 13 themes at phone and desktop sizes).
Placements may fix fields: the calendar day page sets the event date read-only and presets the tag, and gives the form its own draft scope (data-compose-draft-scope) so a draft from another composer never overwrites those fields (calendar).
Format: the ··· menu holds a Markdown box (unticked by default; markdown_detect.js ticks it when the draft looks like Markdown until the author sets it by hand; unticked posts are plain) and a Formatting help link; signed, unsigned and Outbox submissions all carry the choice as body_format (post body formatting).