May 20th, 2026

Composer Pillar 4: история отправок через ArrowUp/Down

Что изменилось

Первая из пяти «polish»-возможностей Composer Pillar 4 реализована: история отправленных сообщений с навигацией через стрелки клавиатуры — как в Shell или браузерной адресной строке.

  • ArrowUp из пустого поля показывает последнее отправленное сообщение. Повторное нажатие — предыдущее. Стек хранит до 100 записей с FIFO-вытеснением старых.
  • Scratch-буфер: если вы начали набирать текст и нажали ArrowUp, незавершённый ввод сохраняется. ArrowDown в конце стека восстанавливает его — ничего не теряется.
  • Дедупликация: если вы отправили то же сообщение, что и предыдущее, дубликат не добавляется в стек — история остаётся чистой.
  • Изоляция по сессии: при переключении на другую сессию стек очищается. История каждой сессии независима.
  • Конфликт с меню: если открыто slash-меню или mention-меню, ArrowUp обрабатывается ими. История активируется только из пустого поля без открытого меню.
  • 10 unit-кейсов на чистый reducer, 5 RTL integration-сценариев на компонент. Coverage 94%.

Где попробовать

Откройте любую сессию, напишите и отправьте 2-3 сообщения. Нажмите ArrowUp в пустом поле композера — появится последнее. Навигируйте вверх/вниз. Попробуйте начать новый текст и нажать ArrowUp — scratch сохранится.

Технические детали: состояние реализовано как чистый функциональный reducer без мутаций. Интеграция с FreeFormInput использует useReducer + useCallback для мемоизации keyboard handlers. Ownership matrix решена: при открытом slash-меню или mention-меню ArrowUp передаётся меню, не истории — никаких конфликтов навигации.

Связанное

Дорожная карта: Чат и Композер v2. Следующие: emphasis toolbar (B/I/code/strike), line-numbers gutter, paste-image dialog.