Forge
markdowndeeb25a2
1# ADR 0060: Аккордный слой (FMS-style), S/T и overlay — расширение keyboard-first (ADR 0013)
2
3**Статус:** Accepted (частично: Intent Melody каталог + chord/palette v1; полный FMS T/S overlay — по ADR)
4**Дата:** 2026-04-19
5## Связанные ADR
6
7| ADR | Роль |
8|-----|------|
9| [0013](0013-command-surface-and-discoverability.md) | палитра, toolbar, discoverability — **этот ADR не заменяет** палитру |
10| [0070](0070-command-palette-direct-overlay-surface.md) | палитра как overlay surface |
11| [0008](0008-mcp-contracts-and-testable-infrastructure.md) | MCP и команды |
12| [0030](0030-command-ids-hotkeys-and-ui-registry-layers.md) | `IdeCommands`, `hotkeys.toml`, реестр |
13| [0017](0017-multi-window-workspace-and-agent-surfaces.md) | мультиоконность, фокус |
14| [0021](0021-pfd-mfd-cockpit-attention-model.md) | PFD / MFD |
15| [0032](0032-hud-banner-configuration-and-grammar.md) | HUD / подписи режима — опционально |
16| [0055](0055-skia-instrument-composition-pipeline.md) | Skia — overlay |
17| [0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md) | тактика / EFB на MFD, Manager |
18| [0072](0072-chat-topic-cards-intent-melody-keyboard-contract.md) | навигация по темам чата — **уточнение в chat-domain**, не замена этого ADR |
19| [0081](0081-parametric-intent-melodies-editor-line-ranges.md) | параметрические melody `:start:end` для редактора; развивается поверх Command Melody из §11 |
20
21### Вне ADR
22
23| Документ | Роль |
24|----------|------|
25| [north-star — keyboard-first](../design/north-star-cursor-mcp-cascade-workbench-v1.md) | north-star — keyboard-first |
26| [chord-notation-cascadeide.md](../chord-notation-cascadeide.md) | chord notation cascadeide |
27**Частичное уточнение (chat-domain):** навигация по **темам чата** (topic cards, drill-in/back, минимальный набор intent-команд и паритет палитра / Melody / Chords) зафиксирована в [0072](0072-chat-topic-cards-intent-melody-keyboard-contract.md). Этот ADR (**0060**) остаётся каноном для общей модели **Melody**, **CascadeChord** и **Command Melody (`c:`)**; **0072** **не** отменяет §1–§11 целиком и **не** переназначает S/T/M/E для кокпита вне chat-topic navigation.
28
29---
30## Контекст
31
32[0013](0013-command-surface-and-discoverability.md) закрепляет **палитру команд** как опорную точку (поиск по строке, полный каталог) и **keyboard-first** как продуктовый ориентир. Для кокпита этого недостаточно: пилот в FMS сначала выбирает **раздел**, потом **параметр** — два осмысленных шага без набора текста. В CascadeIDE параллельно нужен **масштаб мышления** (тактика vs стратегия, см. [0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md)), который **не сводится** к «открыть другое окно».
33
34Нужен **второй вход с клавиатуры**: **аккордный слой** (префикс → вторая клавиша), согласованный с `IdeCommands` ([0030](0030-command-ids-hotkeys-and-ui-registry-layers.md)) и не дублирующий палитру.
35
36## Резюме
37
38- Аккордный слой (**Ctrl+K**), FMS-style тактика/стратегия, overlay поверх [0013](0013-command-surface-and-discoverability.md).
39- Расширение discoverability без замены палитры и IdeCommands.
40- Связь с intent melody и chat-domain ([0072](0072-chat-topic-cards-intent-melody-keyboard-contract.md)).
41
42---
43
44## Решение
45
46<a id="adr0060-p1"></a>
47
48### 1. Палитра и аккорд — два физических входа (слэш — [§1a](#adr0060-p1a))
49
50| Вход | Назначение | Ориентир в [0013](0013-command-surface-and-discoverability.md) |
51|------|------------|------------------------------------------------------------------|
52| **Палитра команд** (хоткей по умолчанию **Ctrl+Q** в шипнутом `hotkeys.toml`) | Полный каталог, поиск по имени, недавние | Решение §2 пункт 2 |
53| **Корень аккорда** — рабочее имя **`CascadeChord`** (хоткей по умолчанию **Ctrl+K** в поставке; переопределение — пользовательский `hotkeys.toml`) | Короткий FMS-поток: префикс → вторая клавиша → исполнение **одной** команды из заранее ограниченного набора «кокпитных» действий | Расширение keyboard-first **без** отмены палитры |
54| **Тот же `command_id` текстом в палитре** — префикс **`c:`** (**Command Melody**, [§11](#adr0060-p11)) | Компактный mnemonic (`c: gs`, …) без смены окна; fuzzy по title/id как прежде | Не третий «физический» вход: по-прежнему **Ctrl+Q**, расширенный строкой запроса |
55
56**Правило:** **Ctrl+K** не заменяет **Ctrl+Q**; пользователь выбирает «искать по имени», «идти по известной букве» аккорда или ввести **melody** после открытия палитры. Конфликт с хоткеями редактора/ОС — отлавливать при загрузке и отражать в UX (см. открытые вопросы).
57
58<a id="adr0060-p1a"></a>
59
60### 1a. Третий вход: слэш в Intercom ([0119](0119-chat-slash-commands-intercom-surface.md))
61
62**Статус:** Accepted · Implemented (не отменяет §1).
63
64| Вход | Назначение |
65|------|------------|
66| **Слэш в `ChatInput`** (`/` + autocomplete) | Unified command line в composer: Intercom-глаголы и IDE (`/build run`, `/topic …`, …); тот же `command_id`; discoverability **в канале сессии** без Ctrl+Q/Ctrl+K |
67
68Слэш **ортогонален** физическим хоткеям §1; сжатые мнемоники — в аккорде и Melody `c:`, не в коротких `/…` ([0119](0119-chat-slash-commands-intercom-surface.md)). Сводка для дизайна: [cascadeide-philosophy-v1 §7](../design/cascadeide-philosophy-v1.md), [handbook §2.6](../design/cide-design-handbook-v1.md).
69
70<a id="adr0060-p2"></a>
71
72### 2. Первый уровень после `CascadeChord`: **S / T** (канон масштаба)
73
74**Канонический** первый выбор после префикса — **масштаб мышления** и глубина сопряжения с Roslyn MCP ([0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md)), а не «какой монитор»:
75
76| Клавиша (после префикса) | Имя | Смысл |
77|---------------------------|-----|--------|
78| **T** | **Tactical** | Локальная семантика вокруг курсора; тактический контур PFD / Forward; узкий контракт |
79| **S** | **Strategic** | Глобальный / слойный граф; контур **MFD / EFB**; профиль `Profile.GlobalMap` в смысле [0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md) |
80
81**Плюс:** одна ось отражает суть CascadeIDE — **меняем глубину погружения**, а не только «вид».
82
83Исполнение конкретной команды (например `cascade.focus_tactical_map`, `cascade.focus_strategic_efb`) — через **`IdeCommands`** и MCP-паритет ([0008](0008-mcp-contracts-and-testable-infrastructure.md), [0002](0002-debug-human-agent-parity.md)).
84
85<a id="adr0060-p3"></a>
86
87### 3. Альтернатива / второй уровень: **M / E** (дисплеи)
88
89Разделение **MFD** vs **EFB** ([0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md): EFB = **MFD**, не PFD) может выноситься на **второй шаг** аккорда или **параллельный** набор букв, если продукту нужна явная привязка к **дисплею**:
90
91| Клавиша | Имя | Смысл (идея) |
92|---------|-----|----------------|
93| **M** | MFD-фокус | Инструменты, логи, терминал — «на земле» / диагностика |
94| **E** | EFB / стратегия | Карта, архитектура на MFD |
95
96**Правило смешения:** не вводить **на одном уровне** одновременно S/T и M/E без документированной схемы (например: префикс → **S или T** → опционально второй аккорд **M или E** для уточнения поверхности). Минимальный v0 — **только S/T** после префикса.
97
98<a id="adr0060-p4"></a>
99
100### 4. «Векторный» вариант (комбинированный)
101
102Опционально (отдельная итерация или пресет хоткеев):
103
104- **Цифры 1 / 2 / 3** после префикса — быстрый **фокус на монитор / TopLevel** ([0017](0017-multi-window-workspace-and-agent-surfaces.md)) в порядке конфигурации пользователя.
105- **F** — переключение **Flight** / снятие «режима полёта» (связь с [0010](0010-ui-modes-toml-configuration.md) — не смешивать с S/T без явной подписи в UI).
106
107Это **не** обязательная часть v0; фиксируется, чтобы не плодить независимые корни аккордов без реестра.
108
109<a id="adr0060-p5"></a>
110
111### 5. Машина состояния аккорда
112
113- После **CascadeChord** IDE переходит в состояние **«ожидаю вторую клавишу»** на короткий **таймаут** (дефолт и переопределение — опционально в `settings.toml`, см. §7).
114- **Esc** — выход без действия; фокус возвращается по правилам [0013](0013-command-surface-and-discoverability.md) / [0017](0017-multi-window-workspace-and-agent-surfaces.md).
115- **Редактор:** не перехватывать ввод текста, пока активен chord-wait, только если политика фокуса явно отдаёт события окну приложения (детали реализации — в коде; тесты на «не съесть букву в строке»).
116
117<a id="adr0060-p6"></a>
118
119### 6. Overlay-подсказки (discoverability)
120
121После нажатия префикса на **короткое время** показывать **полупрозрачные подсказки** (буквы/подписи) над **зонами** или в **углу экрана** — чтобы не гадать «что дальше». Реализация:
122
123- предпочтительно **Skia**-оверлей поверх хоста ([0055](0055-skia-instrument-composition-pipeline.md): overlay не превращается в отдельный «инструмент» с дублированием pipeline);
124- **Reduced motion** / отключение подсказок — флаг настройки;
125- не загораживать критичные индикаторы PFD без политики плотности.
126
127<a id="adr0060-p7"></a>
128
129### 7. Индикация режима на PFD (ситуационная осведомлённость)
130
131Малая строка вида **`MODE: TACTICAL`** / **`STRATEGIC`** / подрежимы **ECHELON** / **COMBAT** ([0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md)) в углу PFD или в HUD-слое ([0032](0032-hud-banner-configuration-and-grammar.md)) — **рекомендуется**, чтобы визуально совпадать с тем, что делает Manager профилей. Источник истины — **один** (VM / CDS / сервис режима), не дублировать рассинхронно с аккордом.
132
133<a id="adr0060-p8"></a>
134
135### 8. Конфигурация: где что живёт
136
137| Что | Где |
138|-----|-----|
139| Привязка **префикса** и аккордов к **`command_id`** | **`Hotkeys/hotkeys.toml`** (шип) + `%LocalAppData%\CascadeIDE\hotkeys.toml` ([0013](0013-command-surface-and-discoverability.md), [0030](0030-command-ids-hotkeys-and-ui-registry-layers.md)) |
140| Реализация исполнения | **`IdeCommands`** + обработчик ввода (chord state machine) в C# |
141| Опционально: `chord_timeout_ms`, `chord_overlay_enabled` | **`settings.toml`** или секция рядом с UI — **не** дублировать полную карту клавиш в `settings.toml` ([0013](0013-command-surface-and-discoverability.md) — отклонённый вариант хранить все хоткеи только в settings) |
142
143**Порядок работ (рекомендация):** сначала **идентификаторы команд и машина аккорда** в C#; затем строки в **`hotkeys.toml`**; затем overlay и MODE-строка.
144
145<a id="adr0060-p9"></a>
146
147### 9. Логика миграции команд и эволюция шагов (реализация)
148
149**Что не переносим на аккорд без отдельного обсуждения**
150
151- **Стандарт редактора / ОС**, с которыми пользователи считают клавиатуру «как везде»: сохранение (**Ctrl+S**), отмена/повтор (**Ctrl+Z** / **Ctrl+Y**), вырезать/копировать/вставить, часто **Ctrl+W** / закрытие вкладки, **Ctrl+F** внутри редактора. Их оставляем на прямых жестах или настройке редактора; не загонять в **CascadeChord** только ради единообразия.
152- **Уже закреплённые глобальные хоткеи IDE** из `hotkeys.toml` (**Ctrl+Q** палитра, **F5** отладка, …) не ломаем: аккорд — **второй** вход, не замена.
153
154**Целевая слоистая схема (после v0)**
155
1561. **CascadeChord** (префикс, напр. **Ctrl+K**).
1572. **Первый буквенный шаг — масштаб S / T** (§2): тактика vs стратегия; привязка к профилю Roslyn MCP / контур внимания ([0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md)).
1583. **Второй шаг — подсистема** (буквы-«страницы»): например **M** = карта намерений (**P** / **F** / **D**), **B** = build/тесты, **G** = Git и т.д. Так не смешиваем на одном уровне десяток несвязных букв и масштаб мышления.
159
160**Текущая многошаговая схема (код)**
161
162- **Префикс** → **M** → **M / P / F**: зоны кокпита — **MFD** (развернуть регион), **PFD** (развернуть регион), **Forward** (фокус в редактор). Метафора «настройки/фокус зоны» без второго корня **Ctrl+M**: вторая буква — **M** сразу после префикса (как FMS-страница), третья — выбор зоны.
163- **Префикс** → **S** → **P / F / D**: карта намерений — вид / уровень / детализация (как в [0055](0055-skia-instrument-composition-pipeline.md)).
164- Оверлей показывает допустимые клавиши **для текущего шага**; таймаут и **Esc** сбрасывают машину (§5).
165
166**Правило discoverability**
167
168- Любая команда, доступная только с аккорда, должна иметь **тот же `command_id`** в палитре и MCP ([0008](0008-mcp-contracts-and-testable-infrastructure.md)), чтобы «забыл букву» ≠ «потерял действие».
169
170<a id="adr0060-p10"></a>
171
172### 10. Философия UX: невидимый инструмент, мышечная память, репетиция vs выступление
173
174> «Хороший актёр — это тот, которого нет. Потому что есть только его персонаж.»
175
176**IDE как невидимый актёр.** Продукт не должен «играть саму себя»: бесконечно выставлять напоказ инструменты, хоткеи, меню, панели, оверлеи. Задача интерфейса — **исчезнуть** там, где можно, и оставить в центре **код, задачу, мысль разработчика**. Кокпит CascadeIDE — метафора **невидимого актёра**: PFD, MFD, Forward, карта намерений — это не «лицо IDE ради IDE», а **инструменты пилота**, продолжение мышления. В работе пилот не формулирует «нажимаю кнопку на MFD» — он держит в голове **курс**, а руки находят жест.
177
178**Аккорды и мышечная память.** После достаточной практики пользователь перестаёт декламировать последовательность клавиш и оперирует **смысловыми слоями** (например Modification → Navigation → View → Strategic как мнемоника намерений, а не как список клавиш в абстракции). Пальцы закрепляют паттерн; сознание остаётся на задаче. Конкретная **грамматика шагов** (один корневой префикс vs дополнительные модификаторы, порядок букв, ось S/T vs intent-first семейства G/B/D/…) — предмет эволюции реестра и hotkeys; философский слой **не привязан** к одной таблице букв, но требует, чтобы любая версия грамматики оставалась **читаемой** и **обучаемой**.
179
180**Метафоры (одно направление — фон и исчезновение «лишнего»):**
181
182| Метафора | Применительно к CascadeIDE |
183|----------|----------------------------|
184| Тинтиннабули Пярта | Два голоса: контекстный фон (префиксы/слои ввода) + «мелодия» последующих букв — простая структура, строгая, медитативная |
185| Мебельная музыка Сати | IDE как **фон**: не требует постоянного внимания, держит атмосферу работы |
186| Хороший актёр | IDE **исчезает**; остаются код и задача |
187
188**Следствия для ADR и нотации**
189
190- **Нотация в документации** должна быть **прозрачной**: читатель не должен тратить умственную энергию на расшифровку. Запись вроде `<C-k> …` в [chord-notation-cascadeide.md](../chord-notation-cascadeide.md) дополняется **мнемонической расшифровкой** там, где это ускоряет понимание (что за намерение, а не только какие VK).
191- **Overlay (§6)** — **суфлёр**, а не режиссёр: появляется, когда нужно подсказать следующий шаг, и **не загораживает сцену** (код, критичные индикаторы). См. политику плотности и Reduced motion в §6.
192- **Три входа, одна модель `command_id`** — **репетиция** (палитра Ctrl+Q), **выступление** (аккорд Ctrl+K + Melody `c:`), **канал сессии** (слэш в Intercom, [0119](0119-chat-slash-commands-intercom-surface.md) §1a). Палитра — полный каталог; аккорд — мышечная память; слэш — discoverability в composer без смены фокуса ([0013](0013-command-surface-and-discoverability.md), §1–1a этого ADR).
193
194**Связь с intent-first и surface routing.** Идея «аккорд фиксирует **намерение** (Git, Build, Debug…), а **куда** вынести результат — решает маршрутизация поверхностей» — **согласуется** с этим разделом: кокпитные поверхности остаются контекстом показа, а не обязательным первым уровнем мысленной формулы для каждого жеста. Детализация грамматики v1 (семейства команд, оси S/T) — в отдельных итерациях ADR/реестра; цель §10 — зафиксировать **принципы UX**, а не конкретную таблицу букв.
195
196**См. также:** продуктовый нарратив «невидимый инструмент» vs класс риска облачного ассистента — [cascadeide-philosophy-v1.md](../design/cascadeide-philosophy-v1.md), [ADR 0071](0071-ai-assistance-sovereignty-locality-invisibility.md).
197
198<a id="adr0060-p11"></a>
199
200### 11. Command Melody (`c:`) — палитра, mnemonic alias и мост к аккорду
201
202**Спецификация языка (лексика, EBNF, мотивация, открытые вопросы):** [intent-melody-language-v1.md](../intent-melody-language-v1.md) (**Intent-based Melody Language**, IML v1).
203
204**Происхождение:** спецификация melody (`c:`) сформулирована в **линии Comet** (внешний диалог); здесь — норматив продукта. Указатель в личном каноне KB (agent-notes) — `knowledge/personal/assistantLines/comet/comet-command-melody-cascade-palette-2026-04-19.md`.
205
206**Назначение.** Префикс **`c:`** вводит в **command palette** ([0013](0013-command-surface-and-discoverability.md), [0070](0070-command-palette-direct-overlay-surface.md)) специальный режим **melody**: короткие **mnemonic alias** в developer-first словаре. Пользователь может ввести компактную форму вроде `c: gs`, `c: br`, `c: da` и сразу получить нужную команду, не полагаясь только на fuzzy search по длинному заголовку. Эвристика **частота → длина** и отложенные варианты уточнения — [intent-melody-language-v1.md](../intent-melody-language-v1.md) §3.5.
207
208**Цель.** Режим нужен **не** для замены обычного поиска, а для **быстрого семантического входа**, общего для:
209
210- палитры (строка запроса);
211- аккордного слоя (**CascadeChord**);
212- канонического **`command_id`** в реестре ([0030](0030-command-ids-hotkeys-and-ui-registry-layers.md));
213- вызова через MCP / агента ([0008](0008-mcp-contracts-and-testable-infrastructure.md)) — тот же идентификатор.
214
215**Три представления одной команды**
216
217| Слой | Пример |
218|------|--------|
219| Human title | `Git: Status` |
220| Melody alias | `c: gs` |
221| Canonical id | `git.status` *(или эквивалент в `IdeCommands`; точная строка — реестр [0030](0030-command-ids-hotkeys-and-ui-registry-layers.md))* |
222
223Палитра **должна** находить и показывать команду по **любому** из этих представлений (title, alias, id).
224
225**Синтаксис**
226
227- Общий префикс namespace: **`c:`** — вход в melody.
228- После `c:` допускается **один или несколько** mnemonic token; **базовая форма v1** — **двухбуквенная**: первая буква = **family**, вторая = **action**.
229- Примеры (логические имена; фактический `command_id` — по реестру):
230
231| Ввод | Назначение (смысл) |
232|------|---------------------|
233| `c: gs` | Git → Status |
234| `c: gc` | Git → Commit |
235| `c: gp` | Git → Push |
236| `c: gm` | Git → Merge |
237| `c: gsu` | Git → Submodules |
238| `c: br` | Build → Run / Rebuild (по принятой терминологии в реестре) |
239| `c: bt` | Build → Test |
240| `c: da` | Debug → Attach |
241| `c: dc` | Debug → Continue |
242| `c: dl` | Debug → Launch (`debug_launch`) |
243| `c: cps` | Chat → **P**age → **S**how (`show_chat_page`; DOI) |
244| `c: cs` | Chat → **S**end — отправить черновик поля ввода как user (`send_chat` без `message`) |
245| `c: cex` | Chat → **ex**port (читаемый Markdown) |
246| `c: ctf` | Chat → **T**hread → **F**ork (трёхбуквенное DOI: домен → объект → намерение; `fork_chat_thread`) |
247| `c: ers` | Environment → **R**eadiness → **S**how (`show_environment_readiness_page`) |
248| `c: ts` | **T**erminal → **S**how (`show_terminal_panel`) |
249
250Реестр мелодий в репозитории: **`IntentMelody/intent-melody-aliases.toml`** (см. [intent-melody-language-v1.md](../intent-melody-language-v1.md)).
251
252**Семейства v1 (узкий старт, узнаваемые домены)**
253
254| Буква | Family |
255|-------|--------|
256| **g** | Git |
257| **b** | Build |
258| **d** | Debug |
259| **r** | Run |
260| **e** | Editor |
261| **m** | Map (карта намерений / навигация карты) |
262| **c** | Chat |
263| **t** | Terminal (панель / страница терминала во вторичном контуре) |
264
265Переходы «показать страницу» во вторичном контуре кодируются **доменом первым** (намерение): например Chat → Page → Show = `c: cps`, а не синтетический префикс **P** = Pages (**`pcs`**, **`pes`**, …), который ставит топологию IDE выше смысла команды. Для **готовности окружения** в DOI закрепляется цепочка вроде **Environment → Readiness → Show** (`ers` при появлении в реестре alias), а не «Pages → Environment».
266
267Это согласуется с **intent-first**: разработчик мыслит **доменом задачи**, а не топологией IDE ([§10](#adr0060-p10)).
268
269**Принципы выбора alias**
270
2711. Alias **узнаваем** разработчиком без отдельного обучения.
2722. Alias **короче** human title, но не «шифр» уровня shell-golf.
2733. Alias **стабилен**, даже если формулировка в UI слегка меняется.
2744. Alias выражает **намерение**, а не **размещение на поверхности** (плохой базовый пример: привязка к «primary deck» вместо смысла команды).
2755. **Частота → длина (эвристика):** чем типичнее команда для рабочего дня, тем короче разумный alias в реестре (аналогия с префиксными кодами Хаффмана; [intent-melody-language-v1.md](../intent-melody-language-v1.md) §3.5). Сначала — **база** по консенсусу и ревью; **пересортировка по измеренной частоте** (в т.ч. телеметрия) — **отложена** до стабилизации реестра и палитры.
276
277**Разрешение конфликтов**
278
2791. В пределах одного **workspace** один melody alias → ровно **один** canonical `command_id`.
2802. При конфликте: либо **фиксируется** одно отображение в реестре, остальные показываются как secondary matches; либо требуется **трёхбуквенная** форма; либо конфликтный alias помечается **invalid** до разруливания.
2813. **Human title** и **canonical id** остаются **всегда** валидными путями поиска, даже если alias неоднозначен.
282
283**Поведение палитры в melody mode**
284
285- При вводе `c:` палитра переключается в melody mode: при пустом хвосте после `c:` — **help** и **top families**; при `c: g` — доступные команды Git и хвосты; при `c: gs` — прямое совпадение (напр. Git: Status).
286- В строке результата отображаются **human title**, **alias** и опционально **chord hint** (см. ниже). Пример строки:
287 `Git: Status — c: gs — git.status`
288
289**Связь с аккордным слоем (один семантический путь)**
290
291Melody **не живёт отдельно** от аккорда: тот же путь, что `c: gs` в палитре, в ментальной модели intent-first выражается аккордом **`Ctrl+K` → `G` → `S`** (буквы семейства и действия), а в реестре — тем же **`command_id`**. Палитра даёт **текстовую** компактную форму; аккорд — **клавиатурную**; MCP — **идентификатор**.
292
293**UX-ограничения**
294
295- `c:` — **ускоритель**, не единственный способ: команда обязана находиться и **обычным fuzzy** по human title.
296- В UI **рядом с командой** показывать alias (и при необходимости подсказку аккорда), чтобы язык усваивался постепенно.
297- Overlay / help может предлагать подсказку вида: «Try `c: gs` for Git Status» ([§6](#adr0060-p6)).
298
299**Минимальный словарь v1 (стартовый набор)**
300
301| Alias | Логический смысл (canonical id — уточнить в реестре) |
302|-------|------------------------------------------------------|
303| `c: gs` | git.status |
304| `c: gc` | git.commit |
305| `c: gp` | git.push |
306| `c: gm` | git.merge |
307| `c: gsu` | git.submodules |
308| `c: bt` | build.test |
309| `c: br` | build.run или build.rebuild |
310| `c: da` | debug.attach |
311| `c: dl` | `debug_launch` |
312| `c: dc` | debug.continue |
313| `c: ms` | map.semantic / show semantic map (по принятому именованию) |
314
315Расширение словаря — по мере появления команд в `IdeCommands`; дубликаты и конфликты — по правилам выше.
316
317---
318
319## Последствия
320
321- Появляется **второй UX-паттерн** рядом с палитрой; документация пользователя должна объяснять **Q vs K**.
322- Реестр команд ([0030](0030-command-ids-hotkeys-and-ui-registry-layers.md)) получает слой **melody alias** и правила конфликтов; палитра ([0070](0070-command-palette-direct-overlay-surface.md)) — режим **`c:`** и отображение тройки title / alias / id.
323- Тесты: сценарии таймаута, Esc, конфликт хоткеев, MCP `ide_execute_command` для тех же `command_id`.
324- Зависимость от [0059](0059-roslyn-mcp-profiles-manager-tactical-strategic-efb.md): тактика/стратегия должны быть согласованы по смыслу с командами аккорда.
325
326---
327
328## Открытые вопросы
329
330- Зарезервирован ли **Ctrl+K** под редактор (Vim/Emacs-подобные плагины в будущем)?
331- Одна глобальная машина аккорда на приложение или учёт **второго TopLevel** ([0017](0017-multi-window-workspace-and-agent-surfaces.md))?
332- Локализация букв на overlay (EN-only в v0?).
333- Как в одной машине состояний сочетаются **ось S/T** (§2) и **intent-first G/B/D/…** ([§11](#adr0060-p11)): два пресета аккорда, переключатель режима или последовательная миграция?
334
335---
336
337## Отклонённые на уровне ADR
338
339- **Заменить палитру на Ctrl+K** — отклонено: разные задачи (каталог vs короткий FMS-поток).
340
View only · write via MCP/CIDE