Перейти к содержанию

ADR 0032: HUD над редактором — настраиваемое содержимое и грамматика (как у presentation)

Статус: Proposed (намерение зафиксировано; реализация — по плану).
Дата: 2026-04-11

Связанные ADR

ADR Роль
0021 PFD / MFD — модель внимания кокпита Cascade IDE
0085 термины Editor HUD vs HUD banner — этот ADR про конфиг баннера
0017 строка presentation, секция [presentation_grammar], EBNF в ADR
0028 settings.toml
0029 канон на диске, UI как фасад
0030 ортогонально командам

Контекст

По 0021 HUD — слой внутри лобового (редактора), не четвёртый пространственный якорь; в него входят inline-диагностика, ghost text, полоса над текстом и т.п. Это уже было здесь буквально; 0085 не меняет тот канон, а даёт имена Editor HUD (весь такой слой) и HUD banner (только file-level полоса), чтобы не отождествлять «HUD» с одной полоской. Этот ADR — про настраиваемость именно баннера: сейчас текст полосы над редактором задаётся кодом (сводка по диагностикам активного файла, фиксированные формулировки) — см. MainWindowViewModel (частичный класс с HUD).

Параллельно для топологии экранов уже принят паттерн: строка в настройках (presentation / zone_screen_layout) + настраиваемые токены в TOML ([presentation_grammar]), парсер с тестами, спецификация в виде EBNF в 0017.

Идея продукта: вынести в пользовательский конфиг, что и в каком виде показывает HUD banner (полосу над редактором), и по возможности использовать тот же архитектурный приём, что и для presentation: канон в settings.toml, опциональная секция грамматики, явная семантика источников данных.

Решение (намерение)

  1. Слой хранения: как и для presentation, описание содержимого HUD bannerпрежде всего в пользовательском settings.toml (0028); не дублировать логику «репозиторий vs личные настройки» иначе, чем в существующих ADR по конфигу.

  1. Два уровня настройки (целевой минимум):
  2. Семантика: какие источники могут участвовать в строке HUD banner (например сводка диагностик по активному документу, позже — другие сигналы), вкл/выкл, приоритет при конфликте площади или внимания — в духе Dark Cockpit из 0021 §9.
  3. Представление: шаблон строки и/или мини-DSL для порядка фрагментов (плейсхолдеры вроде чисел ошибок/предупреждений, разделители); человекочитаемые строки по умолчанию — из i18n-слоя (0033), не из обязательной простыни в TOML.

  1. Грамматика по аналогии с presentation: опциональная секция в TOML (рабочее имя — например [hud_grammar] или согласованное с моделью CascadeIdeSettings) задаёт литералы и разделители, если строка конфигурации HUD banner становится разбираемой мини-языком (скобки, склейка блоков, запрет «магических» символов только в коде). Дефолты должны совпадать с текущим поведением там, где оно станет каноном.

  1. EBNF и реализация: грамматика документируется в ADR (как для presentation в 0017) для ревью и справки. Реализация — прагматично: небольшой ручной парсер + тесты, пока язык узкий; подключение генераторов из EBNF или тяжёлых библиотек парсинга — только если DSL расширится настолько, что ручная поддержка становится дороже зависимости (аналогично обоснованию для presentation, где уже используется явный парсер, а не ANTLR).

  1. Границы: этот ADR не меняет семантику зон внимания (0021, 0025) и не обещает конкретный набор плейсхолдеров до проектирования; не смешивать конфиг HUD banner с размещением окон (0017).

Последствия

  • Появится явный контракт в коде: модель настроек (CascadeIdeSettings или вложенный тип), разбор шаблона/DSL, тесты парсера и регрессии текста баннера.
  • Документация пользователя (когда будет слой User Guide) сможет ссылаться на один канон в TOML вместо «как захардкожено в сборке».

Отклонённые / отложенные альтернативы

  • Только UI без канона на диске — противоречит 0029; точечный UI возможен как фасад, но источник истины — TOML.
  • Сразу генератор парсера из EBNF — избыточно для первой итерации; пересмотреть при росте DSL (п. 4).

Открытые вопросы

  • Точные имена ключей TOML и полей в CascadeIdeSettings (согласовать с snake_case и merge-слоем из 0028).
  • Нужна ли отдельная строка-шаблон или достаточно структурированных булевых флагов + один шаблон форматирования чисел.
  • Формулировки UI по умолчанию для HUD и прочих поверхностей — из слоя локализации (0033), а не обязательные длинные переводы в TOML.