diff --git a/openspec/changes/wiki-module/design.md b/openspec/changes/wiki-module/design.md
index 6bf62c2..f187de6 100644
--- a/openspec/changes/wiki-module/design.md
+++ b/openspec/changes/wiki-module/design.md
@@ -192,22 +192,41 @@ jira безвреден.
неудачи) прошло больше `wiki_auto_sync_hours` (настройка модуля, по умолчанию 24, `0` — выключено) и у проекта нет
пакета `wiki_sync` в работе.
-Хаб не ставит пакет, пока предыдущий `wiki_sync` проекта в работе: отвечает 409 с id пакета, MCP показывает его
-состояние.
+`POST /wiki/sync` и фоновая работа не ставят пакет, пока предыдущий `wiki_sync` проекта в работе: ответ 409 с id
+пакета, MCP показывает его состояние.
+
+**Смена и сброс корня** не упираются в это правило. `PATCH` отменяет ещё не выданные (`queued`) пакеты `wiki_sync`
+проекта. При новом корне он ставит новый пакет; уже выданный агенту пакет доживает. Отчёт `done` по команде, у которой
+`params.root` не равен текущему корню проекта (сменён или сброшен), отбрасывается: копия и данные не меняются, команда
+`done` с пометкой в `result.discarded = "корень сменился"`. Типичный случай: корень проставили до установки eva-agent,
+потом исправили опечатку.
**Агент** (контракт; решения внутри агента — его change):
1. Берёт корень `CmfDocument.get` и все страницы поддерева, как `collect_subtree` в `eva_wiki_export.py`.
2. По каждой странице берёт `text`.
-3. Отправляет страницы пачками `POST /agent/wiki/pages {command_id, pages: [{code, eva_id, title, parent_code,
- orderno, url, html, attachments: [{url, name}]}]}`. В пачке не больше 50 страниц и не больше 4 МБ тела.
-4. Отчитывается `done` с `result = {root_title, codes: [<все коды дерева в порядке обхода>], eva_calls}`.
+3. Разбирает ссылки страницы. Это делает агент, а не хаб: только он знает `eva.base_url`.
+ - **Вложение** — `
`/`` на хост Eva с путём по правилу из Context.
+ - **Ссылка на страницу** — ссылка на хост Eva с кодом `DOC-<цифры>` в адресе.
+ - По каждой ссылке агент шлёт:
+ - `ref` — значение атрибута ровно как в HTML, по нему хаб находит место замены;
+ - `url` — абсолютный адрес (только у вложения);
+ - `name` — `alt` или `title` картинки, текст ссылки, иначе имя файла из пути;
+ - `code` — у ссылки на страницу.
+4. Отправляет страницы пачками `POST /agent/wiki/pages {command_id, pages: [{code, eva_id, title, parent_code,
+ orderno, url, html, attachments: [{ref, url, name}], links: [{ref, code}]}]}`. В пачке не больше 50 страниц и не
+ больше 4 МБ тела.
+5. Отчитывается `done` с `result = {root_title, codes: [<все коды дерева в порядке обхода>], eva_calls}`.
+6. В `wiki_fetch` скачивает только адреса на хосте `eva.base_url`, иначе `failed` «чужой хост». Так токен Eva не уходит
+ на чужой адрес.
**Хаб.**
-- Пачки складываются в `wiki_sync_stage` без изменения копии.
-- Отчёт `done` применяется одной транзакцией (`CommandHooks.on_result`):
- - HTML переводится в Markdown;
- - Markdown-копия собирается в `wiki/.