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, опциональная секция грамматики, явная семантика источников данных.
Решение (намерение)¶
- Слой хранения: как и для
presentation, описание содержимого HUD banner — прежде всего в пользовательскомsettings.toml(0028); не дублировать логику «репозиторий vs личные настройки» иначе, чем в существующих ADR по конфигу.
- Два уровня настройки (целевой минимум):
- Семантика: какие источники могут участвовать в строке HUD banner (например сводка диагностик по активному документу, позже — другие сигналы), вкл/выкл, приоритет при конфликте площади или внимания — в духе Dark Cockpit из 0021 §9.
- Представление: шаблон строки и/или мини-DSL для порядка фрагментов (плейсхолдеры вроде чисел ошибок/предупреждений, разделители); человекочитаемые строки по умолчанию — из i18n-слоя (0033), не из обязательной простыни в TOML.
- Грамматика по аналогии с
presentation: опциональная секция в TOML (рабочее имя — например[hud_grammar]или согласованное с модельюCascadeIdeSettings) задаёт литералы и разделители, если строка конфигурации HUD banner становится разбираемой мини-языком (скобки, склейка блоков, запрет «магических» символов только в коде). Дефолты должны совпадать с текущим поведением там, где оно станет каноном.
- EBNF и реализация: грамматика документируется в ADR (как для
presentationв 0017) для ревью и справки. Реализация — прагматично: небольшой ручной парсер + тесты, пока язык узкий; подключение генераторов из EBNF или тяжёлых библиотек парсинга — только если DSL расширится настолько, что ручная поддержка становится дороже зависимости (аналогично обоснованию дляpresentation, где уже используется явный парсер, а не ANTLR).
- Границы: этот 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.