Что доступно сейчас и что фиксируется до интеграции
Граница между реализованным и пилотным, чек-лист договорённостей до старта и готовая формулировка ответа внешней команде.
Что доступно сейчас, а что входит в пилот
Заголовок раздела «Что доступно сейчас, а что входит в пилот»| Возможность | Статус на 26.08.2026 | Как использовать / условие |
|---|---|---|
| Семантическая структура | Доступно | model в Rust session; model-docx standalone |
| Layout / страницы / scene | Доступно | compose, paginate, print, print-window/delta |
| Review / styles | Доступно | review и style projections |
| Текстовые изменения | Доступно | mutate или apply-text-transaction |
| Selection / history / save | Доступно | set-selection, undo/redo, save/checkpoint |
| Standalone D6 hit-test | Bounded | Body line/edge/caret; capability расширяется по типам |
| Text/table hit-test в Electron | Внутренне доступно | Не импортировать; завернуть в публичный target DTO |
| Контекстные меню текста/таблицы | Внутренне доступно | Есть продуктовые маршруты; внешний provider не заморожен |
| Surface host events | Bounded доступно | ready, dirty, saved, error, unmounted |
| selection/content/command events | Пилотный контракт | Заморозить schema, ordering, retry и lifecycle |
| context-menu provider | Пилотный контракт | Декларативные items + typed command dispatch |
| Direct DOM / raw OOXML mutation | Запрещённая граница | Только session API и canonical writeback |
Внутренние механизмы, подтверждающие реализуемость
Заголовок раздела «Внутренние механизмы, подтверждающие реализуемость»-
Text hit. editorV0TextSurfaceHitForCanvasPoint → pageIndex, lineLocation, slotIndex, text.
-
Table-cell hit. d37TableCellHitForCanvasEvent → page/bodyBlock/row/column identity, включая nested table context.
-
Context menus. В продукте есть маршруты openEditorV0TextContextMenuForCanvasEvent и openD37TableContextMenuForCanvasEvent.
-
Double-click. Внутренние маршруты обслуживают текст, таблицы, границы/auto-fit и другие продуктовые действия.
| Важно для договора Эти имена — evidence внутренней реализации, а не публичные symbols. В контракт следует вынести стабильные схемы target/event/command, версионирование и capability matrix, не пути исходников. |
|---|
Что зафиксировать до начала интеграции
Заголовок раздела «Что зафиксировать до начала интеграции»10.1. Capability profile
Заголовок раздела «10.1. Capability profile»| Решение | Что указать внешнее приложение |
|---|---|
| Типы targets | paragraph/run/table/tableCell/image/comment/field + внешний объекты |
| События | click, doubleClick, contextMenu, keyboard activation; ordering и cancellation |
| Menu contract | provider timeout, merge order, reserved IDs, localization, icons, separators |
| Command contract | expectedRevision, idempotency key, atomic batch, receipt/error taxonomy |
| Persistence | save path, checkpoints, conflict policy, save/reopen acceptance |
| Security | loopback token, capability grants, logging/redaction, no DOM/OOXML escape hatch |
| Versioning | schema versions, compatibility window, deprecation policy |
| Platforms | какой desktop/WebView/server/mobile профиль принимается в первом пилоте |
10.2. Минимальные acceptance cases
Заголовок раздела «10.2. Минимальные acceptance cases»-
Открыть реальный документ внешнее приложение и получить semantic snapshot без потери неизвестного OOXML.
-
Клик по тексту и ячейке даёт корректный semantic target и selection.
-
Double-click выполняет согласованное действие один раз и не меняет документ самопроизвольно.
-
Контекстное меню меняется по target/capabilities и остаётся доступным с клавиатуры.
-
Команда с актуальным revision сохраняется; устаревшая команда возвращает revision_conflict.
-
Undo/redo восстанавливает результат; save/reopen подтверждает DOCX-истину.
-
Unmount/close освобождает listeners, WebSocket и Rust process без зависших Electron/Rust процессов.
10.3. Что запросить у внешнее приложение
Заголовок раздела «10.3. Что запросить у внешнее приложение»-
5–10 реальных документов и перечень элементов, по которым нужны действия.
-
Матрицу «тип элемента → click → double-click → пункты меню → документная команда».
-
Требования к desktop/server/WebView, offline, storage, identity и аудиту.
-
Список бизнес-объектов и способ связывать их с nodeId/hostData без внедрения второй модели DOCX.
Готовый ответ, который можно отправить внешнее приложение
Заголовок раздела «Готовый ответ, который можно отправить внешнее приложение»| Текст для письма / мессенджера Да, API доступа к структуре документа в A4 есть. Документом владеет долгоживущая Rust-сессия: через неё можно получить семантическую модель (абзацы, runs, таблицы и ссылки на стили), layout/страницы/scene, данные review/style и текущее состояние редактирования; через ту же сессию выполняются типизированные изменения, selection, undo/redo и save. Отдельно реализован hit-test, который связывает координату на странице с позицией документа; сегодня он доступен как bounded CLI и внутри полного редактора, а его стабильный session method входит в профиль пилота. В полном редакторе уже работают внутренние маршруты click/double-click и контекстные меню для текста и таблиц. Для внешней -интеграции мы не предлагаем импортировать внутренний DOM или Electron-функции. Вместо этого фиксируем стабильный Interaction Extension Profile: semantic target, события elementActivated/contextMenuRequested/selectionChanged, декларативный provider пунктов меню и typed command dispatch с revision/capability checks. То есть базовый процессор и необходимые механизмы существуют; предмет пилота — заморозить публичную схему нужных вам типов элементов и событий, подключить ваши пункты меню и подтвердить это на ваших документах через save/reopen. Первый пилот рекомендуем строить через локальный Rust-процесс с JSONL или защищённым loopback WebSocket и Web Surface в системном WebView/Electron. |
|---|
Предлагаемый следующий шаг
Заголовок раздела «Предлагаемый следующий шаг»-
60–90 минут: согласовать target/event/menu matrix на одном реальном документе.
-
Зафиксировать a4.-interaction-context.v1 и capability profile пилота.
-
Собрать вертикальный пример: tableCell right-click → partner menu → typed edit → save/reopen.
-
После acceptance расширять типы объектов пакетами, не обещая весь Word API одной декларацией.
Версии текущих wire-контрактов
Заголовок раздела «Версии текущих wire-контрактов»| Контракт | Версия |
|---|---|
| Persistent session descriptor | A4.session-protocol-descriptor.v1 |
| JSONL session ready | A4.session-serve.v1 |
| WebSocket bootstrap | A4.session-ws-bootstrap.v1 |
| Surface bootstrap | A4.surface-host-bootstrap.v1 |
| Browser mount | A4.surface-mount.v1 |
| Surface host event | A4.surface-host-event.v1 |
| Предлагаемый interaction context | a4.-interaction-context.v1 (to freeze) |
| Документ для принятия решения Этот материал описывает проверенные текущие границы и рекомендуемый внешний контракт. Он не заменяет подписанную API specification: финальные типы targets, support matrix и SLA должны войти в capability profile пилота. |
|---|
F1 · EMBEDDING API