| 1 | # ADR 0146: Intercom Wire — канонический пакет протокола |
| 2 | |
| 3 | | Поле | Значение | |
| 4 | |------|----------| |
| 5 | | **Статус** | Accepted | |
| 6 | | **Дата** | 2026-05-24 | |
| 7 | | **Amend** | 2026-05-24 — wire + reference service в репозитории **cascade-ide** | |
| 8 | | **Связь** | [0142](0142-intercom-open-wire-pluggable-transports.md) · [0144](0144-intercom-team-transport-cide-sync-and-reference-service.md) · [0145](0145-intercom-web-pwa-team-client.md) | |
| 9 | |
| 10 | ## Резюме |
| 11 | |
| 12 | Протокол Intercom — **`wire/intercom-wire/`** в репозитории **cascade-ide**. Развивается **логически** отдельно от `host/intercom-service` и кода IDE (отдельные PR), но **один git clone** для команды. |
| 13 | |
| 14 | ## Контекст |
| 15 | |
| 16 | Расширения (`relates_to`, code↔doc, …) и новые `event_kind` не должны требовать синхронного PR в сервер. Transport сильно связан с CIDE — отдельный git в `Financial/software/open/` создавал лишние slnx и пути `../../../`. |
| 17 | |
| 18 | ## Решение |
| 19 | |
| 20 | | Артефакт | Путь (в cascade-ide) | |
| 21 | |----------|-------------------------| |
| 22 | | **Wire schemas** | `wire/intercom-wire/schemas/v1/` | |
| 23 | | **Extension registry** | `extension-registry.json`, `extensions/*` | |
| 24 | | **Event kind registry** | `event-kinds.json` | |
| 25 | | **HTTP profile** | `wire/intercom-wire/profiles/reference-http-v1/openapi.yaml` | |
| 26 | | **Reference server** | `host/intercom-service/` | |
| 27 | | **Указатель из docs** | `docs/intercom-wire/README.md` | |
| 28 | | **Solution** | `CascadeIDE.slnx` — IDE + IntercomService + Tests | |
| 29 | | **Путь сервера** | `host/intercom-service/` (не `services/` — коллизия с `Services/` на Windows) | |
| 30 | |
| 31 | ### Правила эволюции |
| 32 | |
| 33 | 1. **Additive** — optional поля, новые extensions, новые kind → wire minor (`CHANGELOG.md`). |
| 34 | 2. **Breaking** — `transport-envelope.schema_version` → `2`. |
| 35 | 3. **HTTP** — новый profile или `/api/v2`; wire может остаться v1. |
| 36 | 4. Реализации **MAY** отставать: unknown JSON сохраняется. |
| 37 | |
| 38 | ### relatesTo / code-doc |
| 39 | |
| 40 | - `extensions/relates-to-v1` — optional `relates_to[]` на message. |
| 41 | - `extensions/code-doc-link-v1` — `code_doc_links[]`. |
| 42 | - `message_range_related` — gutter ordinals ([0137](0137-intercom-message-code-correspondence.md)). |
| 43 | |
| 44 | ## Последствия |
| 45 | |
| 46 | - Один репозиторий для пилота; PR wire vs service по смыслу раздельны. |
| 47 | - Matrix/MM bridges могут копировать только `wire/` или submodule позже. |
| 48 | - CI (будущее): validate schemas + OpenAPI в pipeline cascade-ide. |
| 49 | |
| 50 | ## Потребители вне репо |
| 51 | |
| 52 | | Клиент | Репозиторий | Wire | |
| 53 | |--------|-------------|------| |
| 54 | | **intercom-web** | Org GitHub, отдельно от cascade-ide ([0145](0145-intercom-web-pwa-team-client.md)) | копия/submodule `wire/intercom-wire` или raw GitHub | |
| 55 | |
| 56 | ## Не цели |
| 57 | |
| 58 | - NuGet / npm publish wire (пока path в cascade-ide). |
| 59 | - intercom-web **внутри** cascade-ide (отдельный org-репо — норма). |
| 60 | - CloudEvents mandatory envelope. |
| 61 | |