Forge
markdowndeeb25a2
1# ADR 0170: Intercom feed readability MLP — типографика, роли, flat feed
2
3**Статус:** Accepted · Implemented (P0 defaults + метки)
4**Дата:** 2026-06-28
5
6## Резюме
7
8Лента Intercom в Forward и MFD должна **удобно читаться** при длинных ответах агента: достаточный кегль, ясные метки роли/audience, flat feed без визуального шума ([intercom-ux-reference](../design/intercom-ux-reference-slack-mattermost-v1.md) §лента).
9
10**Принято направление (MLP):**
11
121. **`feed_metrics = comfortable`** по умолчанию (`[intercom] feed_metrics` в settings.toml).
132. **Prose 14pt** (parity с редактором); межстрочный интервал и отступы между репликами ↑.
143. **Метки audience:** в role rail **`Локально`** вместо **`Система`** + убрать мелкий badge «только ты» в meta slash.
154. **P1:** markdown-структура в ленте (списки, заголовки) — [0129](0129-intercom-message-body-markdown-and-fenced-code.md); participant lens — [0143](0143-intercom-feed-participant-lens.md).
16
17---
18
19## Связанные ADR
20
21| ADR | Роль |
22|-----|------|
23| [0057](0057-chat-surface-pipeline-adoption.md) | Skia chat surface pipeline |
24| [0123](0123-intercom-full-skia-surface-evolution.md) | Flat feed, `SkiaChatFeedLayout` |
25| [0129](0129-intercom-message-body-markdown-and-fenced-code.md) | MD / fenced в теле |
26| [0143](0143-intercom-feed-participant-lens.md) | Фильтр human/agent/system |
27| [0168](0168-presentation-two-screen-pf-m-layout-policy.md) | Узкий Forward — measure width |
28| [0119](0119-chat-slash-commands-intercom-surface.md) | `IntercomMessageAudience.SelfOnly` |
29
30---
31
32## Контекст
33
34Операторский feedback: **мелкий шрифт**, непонятные метки **«Система» / «только ты»**, слабое **отображение тела сообщений**.
35
36Технически:
37
38- default `[intercom] feed_metrics = compact` + `prose_pt_forward = 12` + `SkiaChatDensity` сжимали ленту в Forward;
39- `ComfortableFeed` был реализован, но **выключен** по умолчанию;
40- role rail 48–56px @ ~9pt — обрезка «Система»;
41- slash SelfOnly: role «Система» + badge «только ты» 9pt справа — дублирование и низкая контрастность.
42
43---
44
45## Решение
46
47### 1. Comfortable — default
48
49| Setting | Было | Стало |
50|---------|------|--------|
51| `[intercom] feed_metrics` | `compact` | **`comfortable`** |
52| `[fonts.intercom] prose_pt` | 13 | **14** |
53| `[fonts.intercom] prose_pt_forward` | 12 | **14** (при compact — по-прежнему forward кегль) |
54
55`FeedUsesForwardMetrics = ForwardHost && !ComfortableFeed` — при comfortable Forward использует MFD-метрики ленты.
56
57### 2. Метки роли и audience
58
59| Ситуация | Было | MLP |
60|----------|------|-----|
61| Slash + `SelfOnly` | role «Система», badge «только ты» | role **«Локально»**, badge **убран** |
62| Slash + Channel | «Команда» | без изменений |
63| User / Agent / … | «Ты» / «Агент» / … | без изменений; role rail **шире и крупнее** |
64
65`IntercomMessageAudience` не меняется; меняется **copy** в `BuildMessageTitle` и Skia meta.
66
67### 3. Метрики `SkiaChatFeedLayout` (comfortable / MFD)
68
69- Role rail width ↑, role label **11pt** (было ~9–9.5);
70- prose line height **18px** (было 15);
71- segment gap и gap между группами реплик ↑.
72
73### 4. Фазы
74
75| Фаза | Содержание |
76|------|------------|
77| **P0** | defaults + метки + layout metrics (этот PR) |
78| **P1** | lists/headers в `SkiaMarkdownLayout`; контраст prose |
79| **P2** | «Focus read» → full MD preview; lens collapse tool rows |
80
81---
82
83## Последствия
84
85- Пользователи с user `feed_metrics = compact` сохраняют плотный режим.
86- Help/intercom-help: «локальное сообщение» согласовано с меткой **Локально**.
87
88## Открытые вопросы
89
901. Inline meta «Агент · 12:34» вместо бокового rail — отдельная итерация?
912. `compact` переименовать в UI settings в «Плотный (Forward)»?
92
93---
94
95## История
96
97| Дата | Изменение |
98|------|-----------|
99| 2026-06-28 | Proposed; P0: comfortable default, Локально, typography |
100
View only · write via MCP/CIDE