| 1 | # ADR 0171: Presentation tiers — Compact (standard IDE) vs Cockpit |
| 2 | |
| 3 | **Статус:** Accepted · Implemented (P0–P4) |
| 4 | **Дата:** 2026-07-10 |
| 5 | |
| 6 | ## Резюме |
| 7 | |
| 8 | CIDE проектировалась с **трёхмониторным cockpit** `(P)(F)(M)` и **пространственным scan pattern** (P → F → M). На **1–2 обычных мониторах** (16:9, ноутбук) попытка «впихнуть кабину» даёт узкие колонки, ложные PFD/MFD в `MainGrid` и плохой UX — при том же harness под капотом. |
| 9 | |
| 10 | **Принято направление:** |
| 11 | |
| 12 | 1. Два **presentation tier**: **`compact`** (обычная IDE) и **`cockpit`** (полный P/F/M). |
| 13 | 2. **1–2 стандартных экрана** → default **`compact`**: не симулировать трёхзонную кабину колонками в одном окне. |
| 14 | 3. **`cockpit`** — **3 монитора** или **cockpit-capable** холст (UltraWide и аналоги с достаточной шириной для фиксированных якорей). |
| 15 | 4. **Harness** (MCP, Intercom, AEE, FM, KB in-proc) — **одинаковый** в обоих tier; меняется только **presentation policy** и acceptance по scan/checklist. |
| 16 | 5. Авиационная **дисциплина внимания** (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] |
| 86 | tier = "auto" # auto | compact | cockpit |
| 87 | |
| 88 | # Пороги для auto → cockpit на одном физическом экране (эвристика, уточняется) |
| 89 | cockpit_min_total_width_px = 4800 |
| 90 | cockpit_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 < порога | `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 | |