ADR 0026: Markdown — поверхности превью и размещение (workspace.toml)¶
Статус: Superseded
Дата: 2026-04-08
Обновлено: 2026-04-11 — подраздел «Внутренние отсылки»; ортогонально 0023. Подробности — § История.
Superseded — актуальный канон: ADR 0069 (MFD tool surface, renderer-first, без
forward_split). Ниже — история размещения черезworkspace.tomlи внутренние отсылки; для новых решений опираться только на 0069.
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0010 | workspace.toml, merge бандла UiModes/ и overlay репозитория .cascade/workspace.toml |
| 0021 | превью как вторичная поверхность относительно лобового редактирования |
| 0017 | отдельное окно как второй TopLevel |
| 0022 | перспектива вкладки/региона на MFD |
| 0023 | LSP, диаграммы, Kroki, export — ортогонально размещению виджета превью |
Резюме¶
- Исторический канон размещения Markdown preview (
workspace.toml,forward_split). - Не использовать для новых решений — см. callout и 0069.
Замена прежних формулировок¶
- Этот ADR superseded новым каноном в 0069: preview больше рассматривается как отдельный tool surface с renderer/placement decoupling, а
forward_splitснят с канона. - Исторический канон по размещению превью Markdown — этот ADR; актуальный канон для surface/renderer-decoupling — 0069.
- Ранее единственное упоминание «Markdown preview» в контексте UX в 0023 § «Детали UX» снято с канона там и заменено ссылкой сюда (0023 остаётся про языковой опыт и диаграммы).
- 0023 не superseded целиком — только пересечение по «где показывать превью».
Контекст¶
Нужна одна точка правды для где в UI монтируется отрендеренный Markdown: рядом с текстом во forward (лобовое), в отдельном окне, или в зоне MFD (вторичное внимание). Это решение про хром и топологию виджета, а не про LSP, include или Kroki.
Конфигурация логично живёт в workspace.toml вместе с остальными глобальными метриками хрома (0010): один merge-слой с бандлом и overlay репозитория, без обратной записи динамического ресайза в шипнутые файлы.
Решение¶
-
Ключ TOML:
markdown_preview_placementв корне mergedUiWorkspaceToml(модель и snake_case → PascalCase — как у остальных полейworkspace.toml). -
Допустимые строковые значения (регистр строки для пользователя не важен; в коде парсинг нормализует):
forward_split— вторая колонка у активного документа редактора (EditorContentGridвDockDocumentView), inlineMarkdownScrollViewer. Неактивные вкладки держат ширину колонки превью нулевой, чтобы не копить «залипшую» раскладку на фоне.separate_windowили синонимwindow— существующее окноMarkdownPreviewWindow(вторичныйTopLevelв смысле 0017, без обязательной привязки к мультиоконной дорожной карте целиком).-
mfd— целевое размещение во вкладке/регионе зоны MFD (0021, перекрёстно с 0022). Пока отдельная вкладка под превью в MFD не подключена, поведение — явный fallback на отдельное окно (как зафиксировано в коде и комментариях), без молчаливого «как forward». -
Значение по умолчанию до загрузки merged TOML и при сбросе тестов:
forward_split(MarkdownPreviewPlacementRuntime). -
Связь с моделью внимания 0021: превью остаётся вторичной поверхностью относительно набора текста в лобовом редакторе; выбор
markdown_preview_placementменяет только геометрию монтирования, не переопределяя семантику зон PFD/MFD/EICAS. -
Не путать с будущим ключом общей «топологии презентации» нескольких
TopLevel(обсуждение в 0010 / 0017):markdown_preview_placement— узкий ключ только для превью Markdown.
Глубина превью (намерение для v1)¶
Превью в IDE — вспомогательная поверхность (0021): целевая планка «достаточно хорошо, чтобы доверять черновику и диаграммам» (структура, кодовые блоки, ссылки, рендер диаграмм по правилам приватности/Kroki), а не отдельный продукт-класса Typora/GitHub.
Выше приоритетом, чем «ещё круче визуально в панели превью», держим контракт публикации: собранный/развёрнутый документ для наружу — 0023 (export expanded, include, согласованность с внешним Markdown).
Не цель v1 (пока нет явного запроса и боли): пиксель-в-пиксель как GitHub, полноценный WYSIWYG вместо редактора, тяжёлый синхронный скролл с подсветкой блока «как в редакторах только превью». Узкий forward_split заведомо отнимает ширину у редактора — кто принципиально не хочет делить лобовое место, выбирает separate_window / window или (когда будет) mfd.
Внутренние отсылки в длинных документах (peek / «Show Definition»)¶
Проблема: в ADR и длинных спеках часто встречаются отсылки «см. п. 6 выше» / «п. 6» без якорной ссылки — читателю или автору приходится крутить документ, чтобы вспомнить содержание пункта.
Намерение (не смешивать с языковым слоем 0023): в виджете превью (тот же хост, что задаётся markdown_preview_placement выше) — UX в духе Peek Definition / hover: наведение или жест на отсылку к внутреннему фрагменту текущего файла показывает краткий оверлей с целевым абзацем (или переход по клику), без обязательной прокрутки редактора.
Резолв цели:
- Предпочтительно в авторинге: обычные Markdown-ссылки —
[см. п. 6](#adrNNNN-p6)к якорю<a id="adrNNNN-p6"></a>в том же ADR; канон имён — snippets/adr-anchors-policy.md (краткая отсылка: README ADR). - Эвристика (опционально): распознавание текста вида «п. 6» / «§6» относительно нумерованного списка в секции «Решение» и подобных — только если явно окупает поддержку; при неоднозначности — на стороне пользователя (выбор из кандидатов или переход к якорю), без обязательной магии «лучший экран».
Приоритет: ниже базового качества превью и контракта публикации (0023, export); может войти в последующую итерацию после стабильного рендера и размещения по этому ADR.
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0017 | отдельное окно превью — уже вторичный TopLevel |
| --- |
Реализация (ориентир по коду)¶
- Модель:
UiWorkspaceToml.MarkdownPreviewPlacement, merge:UiWorkspaceTomlMerger. - Рантайм:
MarkdownPreviewPlacement,MarkdownPreviewPlacementParser,MarkdownPreviewPlacementRuntime; подключение при загрузке каталога режимов —UiModeCatalog(рядом сUiWorkspaceLayoutRuntimeMetrics,AttentionZonePanelRuntime). - UI:
DockDocumentView— сетка редактора и inline-превью;MainWindow— ветвление команд превью поMarkdownPreviewPlacementRuntime.Current.
Последствия¶
- Документация для агента/MCP: при смене размещения снимок UI может показывать превью в разных регионах; контракт мульти-корня (0017) применим к отдельному окну превью.
- Расширение
mfdбез изменения ключа: отдельная поставка — вкладка/хост в MFD shell и снятие fallback. - Реализация внутренних отсылок (подраздел выше): парсер/хост превью или слой поверх рендера; при необходимости — договорённости для авторов ADR (якоря vs «п. N») в README индекса ADR, без нового ADR.
Отклонённые альтернативы¶
- Держать размещение превью только в пользовательском
settings.toml— отклонено для пресета «как у проекта»: команда должна иметь возможность зафиксировать поведение в repo overlay рядом с остальнымworkspace.toml. - Сливать с 0023 одним ADR — отклонено: смешивает языковой опыт и геометрию UI, усложняет навигацию и эволюцию по независимым осям.
История изменений¶
| Дата | Изменение |
|---|---|
| 2026-04-08 | подраздел «Глубина превью»: целевая планка v1, non-goals, приоритет export из 0023. |
| 2026-04-11 | подраздел «Внутренние отсылки» (hover/peek по «см. п. N» и якорям); ортогонально 0023. |