ADR 0139: Hot-reload типографики [fonts] — только режим Ground
Статус: Proposed · Ground-only (обсуждение до реализации)
Дата: 2026-05-21
Связанные ADR
| ADR |
Роль |
| 0028 |
%LocalAppData%\CascadeIDE\settings.toml |
| 0123 |
Skia Intercom + MFD typography |
| 0127 |
Chrome navigation — не смешивать с reload settings |
| 0010 |
UiModes / слои продукта |
Резюме
- Сделать: при сохранении
settings.toml (или явном «Применить») перечитывать [fonts.intercom] / [fonts.editor] и проталкивать в VM → Skia (IntercomPanelFontsChanged) + Avalonia MFD (ChatPanelTypographyApplier), с инвалидацией IntercomFontDefaults.
- Не делать в Take Off: фоновый watcher файла, debounce, частичный merge без перезапуска IDE, hot-reload всего
CascadeIdeSettings, hot-reload display.screens / topology.
- Почему Ground: смена pt/family без перезапуска — настройка и калибровка (как темы/UiModes на земле), а не полётный контур, где гонки reload vs layout/presentation недопустимы.
Контекст
После embedded Settings/defaults-settings.toml (0028) типографика стабильна при старте, но правка %LocalAppData%\CascadeIDE\settings.toml требует полного перезапуска IDE. Оператору неудобно подбирать prose_pt, panel_*, editor size_pt.
Решение (направление)
- Триггер:
SettingsService.Save успешно записал файл и секция [fonts] изменилась (или первый load после edit в UI настроек, если появится).
- Путь данных:
SettingsDefaultsLoader.DeserializeEffective(diskToml) → сравнить Fonts → если diff → event FontsSettingsChanged.
- Подписчики:
MainWindowViewModel / ChatPanelViewModel.SetIntercomFontsSettings, IntercomFontDefaults.Reset(), InvalidateVisual на IntercomSkiaSurface.
- Редактор:
DockDocumentView.ApplyEditorFontFromSettings для открытых документов (опционально v1 — только активный editor).
- Не в scope v1: FileSystemWatcher; reload при внешнем редактировании toml в Notepad.
Отклонено (Take Off)
| Идея |
Почему |
Watcher на settings.toml |
Непредсказуемый reload mid-flight, конфликт с Save merge presentation |
| Hot-reload всего settings |
Слишком широко; display/ai требуют отдельных ADR |
| Reload без invalidation кэша |
Риск stale IntercomFontDefaults |
Критерий готовности (когда Accepted)
- Изменить
prose_pt в user settings.toml, нажать Save (или переключить фокус с сохранением) — без перезапуска обновляются Skia-лента и MFD Chat.
- Forward
prose_pt_forward и MFD prose_pt расходятся корректно после reload.
- Регрессия: embedded defaults при отсутствии user-файла не ломаются.
История
| Дата |
Изменение |
| 2026-05-21 |
Proposed: Ground-only; отложено до завершения 0127 A/B. |