Forge
markdowndeeb25a2
1# ADR 0171: Presentation tiers — Compact (standard IDE) vs Cockpit
2
3**Статус:** Accepted · Implemented (P0–P4)
4**Дата:** 2026-07-10
5
6## Резюме
7
8CIDE проектировалась с **трёхмониторным cockpit** `(P)(F)(M)` и **пространственным scan pattern** (P → F → M). На **1–2 обычных мониторах** (16:9, ноутбук) попытка «впихнуть кабину» даёт узкие колонки, ложные PFD/MFD в `MainGrid` и плохой UX — при том же harness под капотом.
9
10**Принято направление:**
11
121. Два **presentation tier**: **`compact`** (обычная IDE) и **`cockpit`** (полный P/F/M).
132. **1–2 стандартных экрана** → default **`compact`**: не симулировать трёхзонную кабину колонками в одном окне.
143. **`cockpit`** — **3 монитора** или **cockpit-capable** холст (UltraWide и аналоги с достаточной шириной для фиксированных якорей).
154. **Harness** (MCP, Intercom, AEE, FM, KB in-proc) — **одинаковый** в обоих tier; меняется только **presentation policy** и acceptance по scan/checklist.
165. Авиационная **дисциплина внимания** (ANC, dark cockpit для приборов) — в обоих tier; **пространственный scan** и scan-checklist — **только cockpit**.
17
18[0168](0168-presentation-two-screen-pf-m-layout-policy.md) остаётся полезным **переходным** policy для topology `(P+F)(M)`; этот ADR задаёт **продуктовый tier** выше: на `compact` P+F split **не обязателен**.
19
20---
21
22## Связанные ADR
23
24| ADR | Роль |
25|-----|------|
26| [0017](0017-multi-window-workspace-and-agent-surfaces.md) | `presentation`, topology, host windows |
27| [0021](0021-pfd-mfd-cockpit-attention-model.md) | PFD / Forward / MFD, внимание, scan |
28| [0046](0046-presentation-layout-authority-and-cockpit-invariants.md) | `CockpitPresentationLayoutPolicy` |
29| [0066](0066-cockpit-ui-vs-ide-presentation-layer.md) | Cockpit UI vs IDE chrome |
30| [0120](0120-primary-work-surface-intercom-or-editor.md) | Intercom vs Editor в Forward |
31| [0166](0166-agent-centric-harness-model-comfort-and-pay-per-token-economics.md) | Harness ≠ habitat; economics |
32| [0168](0168-presentation-two-screen-pf-m-layout-policy.md) | 2-screen P+F collapsed — interim внутри cockpit-топологии |
33| [0170](0170-intercom-feed-readability-mlp.md) | Читаемость ленты — оба tier |
34
35### Вне ADR
36
37| Документ | Роль |
38|----------|------|
39| [playbook-layout-presentation-intercom-troubleshooting-v1](https://github.com/KarataevDmitry/agent-notes/blob/main/knowledge/work/projects/door-to-singularity/cascade-ide/playbook-layout-presentation-intercom-troubleshooting-v1.md) | Симптомы layout; § tier |
40| [kb-aviation-pfd-mfd-efis-eicas-fundamentals-v1](https://github.com/KarataevDmitry/agent-notes/blob/main/knowledge/worlds/aviation-human-factors/kb-aviation-pfd-mfd-efis-eicas-fundamentals-v1.md) | Метафора PFD/MFD |
41| Comet note: cascade attention architecture (agent-notes personal) | Scan pattern как инвариант **cockpit** |
42
43---
44
45## Контекст
46
47### 1.1 North-star vs реальность оператора
48
49| Конфигурация | Канон до ADR | Опыт оператора |
50|--------------|--------------|----------------|
51| **3 × 16:9** | `(P)(F)(M)`, hosts, full-width Intercom на F | Эталон; scan pattern раскрывается |
52| **2 × 16:9** | `(P+F)(M)`, [0168](0168-presentation-two-screen-pf-m-layout-policy.md) | P+F делят экран → «полоска», сырой чат на фоне layout |
53| **1 × 16:9** | веса в одном `MainGrid` | Симуляция кабины без пространства |
54
55Операторский feedback (2026-07): CIDE **интересна как harness**, но **много сырого** в Intercom и layout; на **2 мониторах** неудобно по сравнению с привычной IDE.
56
57### 1.2 Число кабелей ≠ tier
58
59**UltraWide** (32:9, 49", два логических canvas) — не «один монитор» в смысле compact, если ширина позволяет **стабильные якоря** с предсказуемым scan. Критерий — **cockpit-capable width**, не `Screen.Count == 3`.
60
61### 1.3 Что не меняется
62
63- Intercom wire, attachments, topics, slash, AEE, in-proc MCP.
64- `[workspace] primary_work_surface` — default **`intercom`** (conversation-first); **`editor`** в Forward — compact presentation с Intercom в side/bottom panel.
65- Авиация как **язык дисциплины** (не смешивать критичное с побочным) — не отменяется.
66
67---
68
69<a id="adr0171-decision"></a>
70
71## Решение
72
73### 2.1 Два tier
74
75| Tier | Когда (default) | UX-обещание |
76|------|-----------------|-------------|
77| **`compact`** | 1–2 стандартных монитора; ноутбук; узкий 21:9 | **IDE-scan, conversation-first**: Intercom в Forward по умолчанию; редактор — toggle; Explorer / Problems / Terminal в dock; при editor-forward — Intercom в side/bottom panel |
78| **`cockpit`** | 3 монитора `(P)(F)(M)`; или `cockpit_capable` UltraWide | Полный **P / F / M**, host windows, **пространственный scan**, semantic map / deck на своих якорях, dark cockpit для приборов. |
79
80### 2.2 Выбор tier
81
82Настройка (целевая):
83
84```toml
85[display.presentation]
86tier = "auto" # auto | compact | cockpit
87
88# Пороги для auto → cockpit на одном физическом экране (эвристика, уточняется)
89cockpit_min_total_width_px = 4800
90cockpit_min_anchor_width_px = 1280
91```
92
93**`auto` (MLP):**
94
95| Условие | Tier |
96|---------|------|
97| `topology` явно `(P)(F)(M)` и ≥3 physical screens | `cockpit` |
98| `(P+F)(M)` или 2 screens | `compact` (MFD — dock/host по выбору, не split P+F в main) |
99| 1 screen, width &lt; порога | `compact` |
100| 1 screen, width ≥ `cockpit_min_total_width_px` и зоны ≥ `cockpit_min_anchor_width_px` | предложить **`cockpit`** (wizard), не silent |
101
102Оператор всегда может **`tier = cockpit`** или **`compact`** вручную.
103
104### 2.3 Compact — поведение (норматив)
105
106| Элемент | Cockpit (было default mindset) | Compact |
107|---------|----------------------------------|---------|
108| Main `MainGrid` P/M колонки | 220 / 340 при якорях | **0** слева; **IDE-scan** слоты ниже |
109| PFD semantic map / SE | default на 3-screen / слева | **Правая колонка** при `IsPfdRegionExpanded`; иначе палитра (Ctrl+P) |
110| Intercom | Forward full-width | **Правая панель** (`ChatPanelView` напрямую, без `MfdShellPage.Chat`) |
111| MFD (terminal, build, git) | правая колонка / host | **Нижний dock** при видимом contour content |
112| Scan checklist (acceptance) | обязателен для release cockpit | **не применяется** |
113| `CockpitPresentationLayoutPolicy` coercion P/M | инварианты якорей | **relaxed** / bypass для compact tier |
114| Host windows Pfd/Mfd | типично | опционально; не default при старте |
115
116**Compact IDE-scan (presentation slots, семантика зон сохраняется):**
117
118| Зона (команда) | Слот на 1 мониторе |
119|----------------|-------------------|
120| **Forward** | Центр — Intercom по умолчанию (`primary_work_surface = intercom`); редактор — toggle/reveal |
121| **PFD** | Правая колонка (Solution Explorer) при раскрытии |
122| **Intercom** | Forward (default) или правая/нижняя панель при `primary_work_surface = editor` |
123| **MFD** | Нижний dock — Terminal / Build / Git / Problems |
124
125`compact_intercom_placement`: `side` (default) — Intercom справа; `bottom` — Intercom снизу (над MFD при обоих видимых). **Chat focus:** `toggle_primary_work_surface` / `primary_work_surface = intercom` — Intercom на весь Forward (как Cursor maximize chat).
126
127Команды (`set_mfd_shell_page`, `focus_forward`, `/build`) по-прежнему адресуют **зону**, не пиксели; compositor tier `compact` выбирает слот из таблицы выше.
128
129**Инвариант compact:** пользователь узнаёт раскладку **VS Code / Rider / Cursor** — один главный canvas, панели по краям.
130
131### 2.4 Cockpit — без изменений north-star
132
133- `(P)(F)(M)` на трёх экранах — эталон [0017](0017-multi-window-workspace-and-agent-surfaces.md).
134- Scan pattern P → F → M — **design invariant** (Comet note; [0021](0021-pfd-mfd-cockpit-attention-model.md)).
135- [0168](0168-presentation-two-screen-pf-m-layout-policy.md): если оператор **явно** держит cockpit tier на 2 экранах — PFD collapsed, SE/map на MFD; это **исключение**, не default path для новых пользователей.
136
137### 2.5 UltraWide
138
139Один кабель, **cockpit-capable**:
140
141- Три **логические зоны** с фиксированными min-width на одном canvas **или** два logical viewport (OS «two displays on one panel»).
142- Wizard: «Cockpit layout on ultrawide» vs «Compact».
143- Не смешивать с compact только из-за `Screen.Count == 1`.
144
145### 2.6 Связь с harness (0166)
146
147| Плоскость | Compact | Cockpit |
148|-----------|---------|---------|
149| Model / FM | ✅ | ✅ |
150| Tools / MCP | ✅ | ✅ |
151| Memory / KB | ✅ | ✅ |
152| Verify / AEE | ✅ | ✅ |
153| Lifecycle / checkpoint | ✅ (product hooks) | ✅ + scan ritual |
154
155**Anti-pattern:** откладывать читаемость Intercom [0170](0170-intercom-feed-readability-mlp.md) «пока не cockpit» — **compact** как раз **первый** приоритет UX.
156
157---
158
159<a id="adr0171-phases"></a>
160
161## Фазы
162
163| Фаза | Содержание | Критерий |
164|------|------------|----------|
165| **P0** | `tier` в settings + **compact defaults** для 1–2 screens; скрыть P/M колонки в main при `compact` | Нет «полосы по центру» на 2 mon без ручного cockpit |
166| **P1** | First-run wizard: count screens + width → recommend tier | Новый пользователь не попадает в `(0.25P+0.75F)` silent |
167| **P2** | Intercom **side panel** layout в compact; editor primary | Паритет ощущений с «обычной IDE» |
168| **P3** | UltraWide cockpit zones на одном canvas | Scan checklist green |
169| **P4** | Документация + playbook; deprecate «всё через triple» в onboarding | README / samples |
170
171---
172
173<a id="adr0171-non-goals"></a>
174
175## Не цели
176
177- Удаление cockpit tier или ADR 0017/0021.
178- Отдельный продукт «CIDE Lite» — один бинарник, два presentation preset.
179- Авто-migrate Cursor users в cockpit на ноутбуке.
180- Vim/Emacs keymap — [0169](0169-keymap-contributions-and-pluggable-input-schemes.md).
181
182---
183
184<a id="adr0171-consequences"></a>
185
186## Последствия
187
188- `defaults-settings.toml`: при отсутствии явного `topology` для 1–2 screens — **`tier = compact`**, не `(0.25P + 0.75F) (M)` как единственный default.
189- `CockpitPresentationLayoutPolicy`: ветка **`compact`** — не применять coercion «нельзя скрыть P/M якорь» [0046](0046-presentation-layout-authority-and-cockpit-invariants.md).
190- Playbook layout: симптом «узкая полоса» на 2 mon → проверить **`tier`**; fix = **compact**, не только collapse PFD [0168](0168-presentation-two-screen-pf-m-layout-policy.md).
191- Тесты: `PresentationTier.Compact` → `IsPfdColumnVisible == false`, `IsMfdColumnVisible == false` в main at startup.
192- Marketing / README: **cockpit** — power-user / 3-screen; **compact** — default для большинства.
193
194---
195
196<a id="adr0171-history"></a>
197
198## История
199
200| Дата | Событие |
201|------|---------|
202| 2026-07-10 | Proposed: operator feedback — не впихивать cockpit на 1–2 mon; UltraWide — отдельный кейс; harness общий |
203| 2026-07-10 | Accepted · Implemented: tier resolver, compact shell, ultrawide layout, first-run wizard, defaults |
204
View only · write via MCP/CIDE