@iwonz/ywtc 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +47 -45
  3. package/dist/adapters/confluence.js +19 -4
  4. package/dist/adapters/confluence.js.map +1 -1
  5. package/dist/adapters/yandex.d.ts +7 -8
  6. package/dist/adapters/yandex.js +68 -22
  7. package/dist/adapters/yandex.js.map +1 -1
  8. package/dist/cli-arguments.d.ts +3 -2
  9. package/dist/cli-arguments.js +42 -37
  10. package/dist/cli-arguments.js.map +1 -1
  11. package/dist/cli.js +19 -142
  12. package/dist/cli.js.map +1 -1
  13. package/dist/clients/yandex-wiki.js +2 -6
  14. package/dist/clients/yandex-wiki.js.map +1 -1
  15. package/dist/consistency.d.ts +1 -1
  16. package/dist/consistency.js +6 -1
  17. package/dist/consistency.js.map +1 -1
  18. package/dist/content-model.d.ts +1 -0
  19. package/dist/content-model.js +118 -37
  20. package/dist/content-model.js.map +1 -1
  21. package/dist/conversion.d.ts +2 -0
  22. package/dist/conversion.js +42 -17
  23. package/dist/conversion.js.map +1 -1
  24. package/dist/domain.d.ts +22 -2
  25. package/dist/domain.js +10 -0
  26. package/dist/domain.js.map +1 -1
  27. package/dist/exclusive-lease.d.ts +14 -0
  28. package/dist/exclusive-lease.js +87 -0
  29. package/dist/exclusive-lease.js.map +1 -0
  30. package/dist/filesystem-export.d.ts +2 -0
  31. package/dist/filesystem-export.js +188 -167
  32. package/dist/filesystem-export.js.map +1 -1
  33. package/dist/graph.js +4 -4
  34. package/dist/graph.js.map +1 -1
  35. package/dist/http.js +1 -1
  36. package/dist/http.js.map +1 -1
  37. package/dist/interactive-config.js +55 -3
  38. package/dist/interactive-config.js.map +1 -1
  39. package/dist/interactive-init.d.ts +3 -3
  40. package/dist/interactive-init.js +7 -5
  41. package/dist/interactive-init.js.map +1 -1
  42. package/dist/interactive-migrate.d.ts +23 -0
  43. package/dist/interactive-migrate.js +578 -0
  44. package/dist/interactive-migrate.js.map +1 -0
  45. package/dist/issues.d.ts +1 -1
  46. package/dist/migration-command.d.ts +19 -0
  47. package/dist/migration-command.js +160 -0
  48. package/dist/migration-command.js.map +1 -0
  49. package/dist/migrator.js +439 -311
  50. package/dist/migrator.js.map +1 -1
  51. package/dist/report-catalog.d.ts +4 -0
  52. package/dist/report-catalog.js +4 -0
  53. package/dist/report-catalog.js.map +1 -1
  54. package/dist/report-contract.d.ts +6 -0
  55. package/dist/report-contract.js.map +1 -1
  56. package/dist/report-ui/index.html +19 -25
  57. package/dist/report.js +33 -22
  58. package/dist/report.js.map +1 -1
  59. package/dist/state.d.ts +16 -0
  60. package/dist/state.js +58 -32
  61. package/dist/state.js.map +1 -1
  62. package/dist/{init-prompts.d.ts → wizard-prompts.d.ts} +2 -2
  63. package/dist/{init-prompts.js → wizard-prompts.js} +3 -3
  64. package/dist/wizard-prompts.js.map +1 -0
  65. package/package.json +3 -7
  66. package/dist/init-prompts.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,33 @@
2
2
 
3
3
  Notable changes to `ywtc` are documented in this file. Versions follow [Semantic Versioning](https://semver.org/).
4
4
 
5
+ ## [4.1.0](https://github.com/iwonz/ywtc/compare/v4.0.1...v4.1.0) (2026-10-16)
6
+
7
+
8
+ ### Features
9
+
10
+ * **cli:** add interactive migration wizard ([b185d42](https://github.com/iwonz/ywtc/commit/b185d421ec1ed46643a9e0d899a4d8c47e259bd5))
11
+ * **reports:** replace report UI with Mantine ([8ca093d](https://github.com/iwonz/ywtc/commit/8ca093de620fdfb762a6946a04ee868c14a11b0f))
12
+
13
+
14
+ ### Maintenance
15
+
16
+ * **homebrew:** update formula to v4.0.1 ([e3d7aa6](https://github.com/iwonz/ywtc/commit/e3d7aa6450d78c23fbab33b6ba14d96baf919f81))
17
+ * **release:** retry validated release workflow ([b1fca35](https://github.com/iwonz/ywtc/commit/b1fca35926dccb8616d04d4b5901263f99f2ec74))
18
+
19
+ ## [4.0.1](https://github.com/iwonz/ywtc/compare/v4.0.0...v4.0.1) (2026-10-16)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * **migration:** distinguish adaptations from incomplete transfers ([63077c3](https://github.com/iwonz/ywtc/commit/63077c32e8f5515ad2fc12389a3f0d232f08a24a))
25
+
26
+
27
+ ### Maintenance
28
+
29
+ * **homebrew:** update formula to v4.0.0 ([dc3b41c](https://github.com/iwonz/ywtc/commit/dc3b41cce1da2e14a05e1513b786df5ff132f9b2))
30
+ * **release:** retry automated release workflow ([0b5471a](https://github.com/iwonz/ywtc/commit/0b5471a80a49d4f09917b6ffb87a4bf39c708f8a))
31
+
5
32
  ## [4.0.0](https://github.com/iwonz/ywtc/compare/v3.6.0...v4.0.0) (2026-10-16)
6
33
 
7
34
 
package/README.md CHANGED
@@ -16,13 +16,13 @@
16
16
  | --- | --- |
17
17
  | Страницы и структура | Одна страница, полное структурное поддерево или граф связанных страниц. Иерархия восстанавливается, циклы обрабатываются без повторного переноса. Пустая страница-раздел переносится как корректная пустая страница, а не как fallback. |
18
18
  | Текст и оформление | Заголовки, абзацы, жирное/курсивное/зачёркнутое и цветное начертание, списки и задачи, цитаты, разделители, inline/preformatted code с языком и обычные таблицы преобразуются в нативную или семантически эквивалентную разметку destination. |
19
- | Секции и колонки | YFM `layout/block` и Confluence page layouts сохраняются нативными секциями и колонками в Yandex Wiki и Confluence. HTML использует адаптивную сетку; Markdown сохраняет все ячейки по порядку и явно отмечает линеаризацию как degradation. |
19
+ | Секции и колонки | YFM `layout/block` и Confluence page layouts сохраняются нативными секциями и колонками в Yandex Wiki и Confluence. HTML использует адаптивную сетку; Markdown сохраняет все ячейки по порядку и отмечает линеаризацию как adaptation без ухудшения статуса. |
20
20
  | Ссылки и якоря | Ссылки между выбранными страницами переписываются на destination, якоря сохраняются. Внешние ссылки и ссылки за пределы выбранного набора остаются исходными. |
21
21
  | Вложения | Переносятся все доступные через API для скачивания файлы, включая PNG/JPEG/GIF/WebP/SVG, PDF, ZIP, DOC/DOCX, XLS/XLSX и PPT/PPTX. Файлы передаются потоково, совпадения имён разрешаются стабильно, размер и SHA-256 проверяются. |
22
22
  | Изображения | Прикреплённые изображения становятся attachments destination или локальными файлами экспорта. Внешние изображения остаются внешними; подписи и размеры сохраняются, если destination это поддерживает. |
23
- | Специальная разметка | В обе стороны сопоставляются notes ↔ `info`/`tip`/`warning`/`note`, cuts ↔ `expand`, tree ↔ `children`, задачи, code, anchors, page/attachment links и изображения. Tabs становятся статическими секциями, Grid — статической таблицей. Безопасный Storage Format и YFM сохраняются нативно при переносе внутри одного провайдера. |
23
+ | Специальная разметка | В обе стороны сопоставляются notes ↔ `info`/`tip`/`warning`/`note`, cuts ↔ `expand`, tree ↔ `children`, задачи, code, anchors, page/attachment links и изображения. Tabs становятся статическими секциями, Grid — проверяемой статической таблицей. Такие полные эквивалентные представления считаются adaptation и остаются `complete`. Безопасный Storage Format и YFM сохраняются нативно при переносе внутри одного провайдера. |
24
24
  | Комментарии | По умолчанию все доступные комментарии страницы собираются в один архивный комментарий: отдельные раскрываемые ветки сохраняют участников, авторов, даты, статусы, inline-контекст, удалённые записи и вложенность ответов. Вложения, на которые есть ссылки в тексте комментариев, складываются в один проверяемый ZIP с hash-prefixed именами и manifest. Для Markdown/HTML создаются локальные секции и ZIP. |
25
- | Конструкции без точного эквивалента | Создаётся читаемый fallback и сохраняется raw snapshot. Проверка destination отражает упрощения как degradation или `partial`, поэтому потеря не маскируется успешным статусом. |
25
+ | Конструкции без точного эквивалента | Создаётся читаемый fallback и при необходимости raw snapshot. Если весь payload представлен и проверен, это adaptation со статусом `complete`; только потеря данных, значимой структуры или невозможность проверки дают degradation и `partial`. |
26
26
 
27
27
  ### Не переносится
28
28
 
@@ -35,7 +35,7 @@
35
35
  | Удалённые, недоступные или не возвращённые source API страницы | Не восстанавливаются; недоступность и пропуски фиксируются в state и отчёте. |
36
36
  | Точная пиксельная геометрия, произвольный CSS и активные скрипты | Не исполняются и не обещают визуальную идентичность. Содержимое и поддерживаемая структура сохраняются нативно или статически; неподдерживаемая часть получает читаемый fallback и raw snapshot. |
37
37
  | Сторонние и неизвестные macros/виджеты | Не подменяются приблизительным macro без доказанного эквивалента: сохраняются безопасным статическим представлением и raw snapshot с явной degradation. |
38
- | Внешние файлы и изображения, которых нет среди доступных для скачивания ресурсов | Не копируются; сохраняется внешняя или исходная ссылка. |
38
+ | Внешние файлы и изображения, не принадлежащие source | Не копируются; абсолютный URL, подпись и доступные размеры сохраняются как external reference без ухудшения статуса. Недоступный source-managed ресурс считается неполным переносом. |
39
39
  | Активные скрипты, iframe, формы и интерактивное поведение embed-объектов | Не исполняются в destination; вместо них сохраняется безопасное статическое представление или raw snapshot. |
40
40
  | Пиксельная идентичность и поведение vendor-specific элементов без эквивалента | Используется ближайшее семантическое представление; различия явно отмечаются в отчёте. |
41
41
 
@@ -66,11 +66,9 @@ ywtc update --install --via brew # явно через Homebrew
66
66
 
67
67
  ## Минимальный сценарий
68
68
 
69
- - [ ] Установите CLI одним из способов выше.
70
- - [ ] Запустите `ywtc init --interactive` и настройте обязательные подключения Yandex Wiki и Confluence.
71
- - [ ] Дождитесь read-only проверки API и авторизации: конфиг сохраняется только после её успеха.
72
- - [ ] Выполните предложенную wizard команду первой миграции с `--dry-run`, подставив полные URL страниц.
73
- - [ ] Проверьте план и повторите команду без `--dry-run`.
69
+ - [ ] Установите `ywtc` одним из способов выше.
70
+ - [ ] Выполните `ywtc init --interactive`.
71
+ - [ ] Выполните `ywtc migrate --interactive`.
74
72
 
75
73
  ## Конфигурация
76
74
 
@@ -84,6 +82,8 @@ ywtc update --install --via brew # явно через Homebrew
84
82
 
85
83
  `ywtc init --interactive` требует TTY, проводит через обязательные настройки обоих провайдеров, скрывает токены и делает только read-only connection probes. Проверка подтверждает API и авторизацию, но не права конкретных страниц: они проверяются `doctor` или `migrate`. Для существующего workspace доступны изменение выбранных профилей, выход без изменений и настройка с нуля с backup прежнего YAML в `.states/backups/`; state не удаляется.
86
84
 
85
+ `ywtc migrate --interactive` использует тот же порядок выбора workspace, последовательно настраивает source, destination, scope, комментарии и файловый ZIP, а затем по умолчанию запускает dry-run. После него можно открыть отчёт, изменить параметры, повторить проверку или явно начать live-перенос. При неполном inventory, root error, `failed`, `blocked` или настоящем `conflict` live-действие скрывается.
86
+
87
87
  Обычный `ywtc init` без wizard создаёт безопасный пустой шаблон для автоматизации или ручного управления. Полный пример с Yandex Wiki, Confluence Data Center, Confluence Cloud и сетевыми лимитами: [`ywtc.config.example.yaml`](ywtc.config.example.yaml).
88
88
 
89
89
  ### Поля профилей
@@ -165,7 +165,8 @@ Confluence Server, Data Center Basic Auth и OAuth app-flow не поддерж
165
165
  | --- | --- |
166
166
  | `ywtc init [--workdir <path>] [--interactive]` | Создать шаблон либо настроить и проверить подключения в TTY wizard |
167
167
  | `ywtc doctor [options]` | Проверить workspace; с source и destination выполнить read-only preflight |
168
- | `ywtc migrate --source <locator> --destination <locator\|directory> [options]` | Перенести или экспортировать выбранный граф страниц |
168
+ | `ywtc migrate --interactive` | Выбрать параметры, выполнить dry-run и явно продолжить live-перенос в TTY wizard |
169
+ | `ywtc migrate --source <locator> --destination <locator\|directory> [options]` | Неинтерактивно перенести или экспортировать выбранный граф страниц |
169
170
  | `ywtc reports list [--workdir <path>]` | Показать локальные отчёты от новых к старым |
170
171
  | `ywtc reports open [run-id\|last] [--workdir <path>]` | Открыть выбранный отчёт; `last` или отсутствие аргумента открывает последний корректный |
171
172
  | `ywtc update [--install] [--via npm\|brew]` | Проверить или установить обновление безопасным для текущего канала способом |
@@ -174,28 +175,30 @@ Confluence Server, Data Center Basic Auth и OAuth app-flow не поддерж
174
175
 
175
176
  ### Опции
176
177
 
177
- | Опция | Команды | Обязательность / значения | Назначение |
178
- | --- | --- | --- | --- |
179
- | `--source <value>` | `doctor`, `migrate` | обязательно для `migrate`; в `doctor` вместе с destination | URL, page ID или Yandex slug |
180
- | `--destination <value>` | `doctor`, `migrate` | обязательно для `migrate`; в `doctor` вместе с source | Родительская страница или каталог экспорта |
181
- | `--source-profile <name>` | `doctor`, `migrate` | при неоднозначном коротком locator | Профиль source из `connections` |
182
- | `--destination-profile <name>` | `doctor`, `migrate` | при неоднозначном remote locator | Профиль destination; несовместим с файловым экспортом |
183
- | `--scope <mode>` | `doctor`, `migrate` | `page`, `subtree` (default), `linked` | Граница выбора страниц |
184
- | `--source-status <status>` | `doctor`, `migrate` | `all` (default) или `current` | Статус автоматически обнаруживаемых страниц; явно заданный root включается всегда |
185
- | `--comments`, `--no-comments` | `doctor`, `migrate` | комментарии включены по умолчанию | Архивировать page comments или полностью отключить их чтение и запись |
186
- | `--format <format>` | `doctor`, `migrate` | `markdown` или `html` | Делает destination файловым каталогом |
187
- | `--archive` | `migrate` | только вместе с `--format` | Дополнительно создать ZIP рядом с каталогом |
188
- | `--dry-run` | `migrate` | default `false` | Discovery и план без записи в destination |
189
- | `--fresh` | `migrate` | default `false` | Игнорировать mappings текущего state |
190
- | `--open-report` | `migrate` | default `false` | Открыть итоговый HTML-отчёт; ошибка браузера не меняет результат миграции |
191
- | `--concurrency <n>` | `migrate` | `1..64`; иначе config default | Общая параллельность; профильные лимиты сохраняются |
192
- | `--state <path>` | `migrate` | внутри workspace | Явный state вместо автоматического |
193
- | `--workdir <path>` | `init`, `doctor`, `migrate`, `reports` | config в CWD или `~/.ywtc` | Явно выбрать workspace; поддерживается `~/...` |
194
- | `--interactive` | `init` | требует stdin/stdout TTY | Обязательный wizard Yandex Wiki + Confluence; без частично сохранённого конфига |
195
- | `--install` | `update` | default `false` | Установить найденное обновление |
196
- | `--via <channel>` | `update` | `npm` или `brew` | Явно выбрать совместимый канал обновления |
197
- | `-h`, `--help` | CLI и команды | необязательно | Справка |
198
- | `-v`, `--version` | CLI | необязательно | Версия |
178
+ | Полная опция | Short | Команды | Обязательность / значения | Назначение |
179
+ | --- | --- | --- | --- | --- |
180
+ | `--interactive` | `-i` | `init`, `migrate` | требует stdin/stdout TTY | Запустить обязательный мастер настройки или миграции |
181
+ | `--workdir <path>` | `-w` | `init`, `doctor`, `migrate`, `reports` | config в CWD или `~/.ywtc` | Явно выбрать workspace; поддерживается `~/...` |
182
+ | `--source <value>` | `-s` | `doctor`, `migrate` | обязательно для неинтерактивного `migrate`; в `doctor` вместе с destination | URL, page ID или Yandex slug |
183
+ | `--destination <value>` | `-d` | `doctor`, `migrate` | обязательно для неинтерактивного `migrate`; в `doctor` вместе с source | Родительская страница или каталог экспорта |
184
+ | `--source-profile <name>` | `-S` | `doctor`, `migrate` | при неоднозначном коротком locator | Профиль source из `connections` |
185
+ | `--destination-profile <name>` | `-D` | `doctor`, `migrate` | при неоднозначном remote locator | Профиль destination; несовместим с файловым экспортом |
186
+ | `--scope <mode>` | `-m` | `doctor`, `migrate` | `page`, `subtree` (default), `linked` | Граница выбора страниц |
187
+ | `--source-status <status>` | `-t` | `doctor`, `migrate` | `all` (default) или `current` | Статус автоматически обнаруживаемых страниц; явно заданный root включается всегда |
188
+ | `--comments` / `--no-comments` | `-C` / `-N` | `doctor`, `migrate` | комментарии включены по умолчанию | Архивировать page comments или полностью отключить их чтение и запись |
189
+ | `--format <format>` | `-f` | `doctor`, `migrate` | `markdown` или `html` | Делает destination файловым каталогом |
190
+ | `--archive` | `-a` | `migrate` | только с файловым destination | Дополнительно создать ZIP рядом с каталогом |
191
+ | `--dry-run` | `-n` | `migrate` | default `false`; default-действие wizard | Discovery и план без записи в destination |
192
+ | `--fresh` | `-F` | `migrate` | default `false` | Игнорировать mappings текущего state |
193
+ | `--open-report` | `-o` | `migrate` | default `false` | Открыть итоговый HTML-отчёт; ошибка браузера не меняет результат миграции |
194
+ | `--concurrency <n>` | `-j` | `migrate` | `1..64`; иначе config default | Общая параллельность; профильные лимиты сохраняются |
195
+ | `--state <path>` | `-r` | `migrate` | внутри workspace | Явный state вместо автоматического |
196
+ | `--install` | `-i` | `update` | default `false` | Установить найденное обновление |
197
+ | `--via <channel>` | `-c` | `update` | `npm` или `brew` | Явно выбрать совместимый канал обновления |
198
+ | `--help` | `-h` | CLI и команды | необязательно | Справка |
199
+ | `--version` | `-v` | CLI | необязательно | Версия |
200
+
201
+ Одинаковые short-алиасы относятся только к своей команде: например, `migrate -i` запускает wizard, а `update -i` устанавливает обновление. В интерактивном режиме переданные опции становятся редактируемыми начальными значениями; без него `source` и `destination` обязательны.
199
202
 
200
203
  ### Локаторы
201
204
 
@@ -223,15 +226,10 @@ ywtc migrate --source https://wiki.example.com/team/start \
223
226
  --destination https://confluence.example.com/confluence/pages/viewpage.action?pageId=123 \
224
227
  --scope linked
225
228
 
226
- # Перенести только исходную страницу
227
- ywtc migrate --source https://wiki.example.com/team/start \
228
- --destination https://confluence.example.com/confluence/pages/viewpage.action?pageId=123 \
229
- --scope page
230
-
231
- # Создать автономный HTML-экспорт
229
+ # Создать автономный HTML-экспорт и ZIP
232
230
  ywtc migrate --source https://wiki.example.com/team/start \
233
231
  --destination ./exports/knowledge-base \
234
- --format html
232
+ --format html --archive
235
233
 
236
234
  # Открыть последний корректный отчёт
237
235
  ywtc reports open last
@@ -249,7 +247,7 @@ Markdown создаёт `index.md`, `pages/`, `attachments/`, `.ywtc-export.json
249
247
 
250
248
  ## State
251
249
 
252
- По умолчанию state хранится в `<workdir>/.states/<automatic-id>.json`. ID строится из канонических профилей и ID source/destination, а для файлового экспорта также из формата; форма locator, `scope` и `source-status` на ID не влияют. State имеет единственный строгий актуальный формат без поля версии. Несоответствующий файл не преобразуется и не изменяется. Относительный `--state` разрешается внутри workspace, выход за его границы запрещён.
250
+ По умолчанию state хранится в `<workdir>/.states/<automatic-id>.json`. ID строится из канонических профилей и ID source/destination, а для файлового экспорта также из формата; форма locator, `scope` и `source-status` на ID не влияют. State имеет единственный строгий актуальный формат без поля версии. Несоответствующий файл не преобразуется и не изменяется. Относительный `--state` разрешается внутри workspace, выход за его границы запрещён. Live-run получает exclusive lock этого state: параллельный процесс останавливается до записей в destination, а доказанно stale локальный lock восстанавливается автоматически.
253
251
 
254
252
  ### Повторные запуски
255
253
 
@@ -265,7 +263,7 @@ Markdown создаёт `index.md`, `pages/`, `attachments/`, `.ywtc-export.json
265
263
  - Неизменённые архивы комментариев и ZIP проверяются и переиспользуются без дубликатов. Mapped Confluence-архив обновляется новой версией из source, а Yandex Wiki получает новую архивную ревизию, поскольку Public API не предоставляет update comments.
266
264
  - Удалённый mapped-комментарий создаётся заново. Исчезнувшие из доступного source API комментарии отмечаются `stale` и автоматически не удаляются.
267
265
  - Запуск с `--no-comments` не обращается к comment API и не удаляет ранее созданные архивы; следующий обычный запуск дополнит тот же state.
268
- - `conflict` используется только когда ywtc не может однозначно доказать ownership/identity destination-объекта. Несопоставленные страницы с занятым заголовком не перезаписываются и получают стабильное альтернативное имя.
266
+ - `conflict` используется только при доказанной неоднозначности immutable ownership/identity: несколько source mappings на один destination ID, несовпадение возвращённого immutable ID или несколько равноправных ownership-кандидатов. Версия, title, URL, slug, parent, fingerprint, HTTP `409`, слово `conflict` в сообщении и коллизия имени сами по себе конфликтом не являются.
269
267
  - `--fresh` игнорирует mappings; перед live-run прежний state сохраняется как backup, а destination может получить новые объекты.
270
268
  - Удалённые из source объекты автоматически не удаляются из destination.
271
269
 
@@ -275,10 +273,14 @@ Markdown создаёт `index.md`, `pages/`, `attachments/`, `.ywtc-export.json
275
273
 
276
274
  Каждый запуск создаёт `<workdir>/.states/reports/<run-id>/index.html` и очищенный `report.json`, затем печатает run ID, `file://` URL и команду повторного открытия. `--open-report` открывает отчёт сразу; `ywtc reports list` показывает историю, `ywtc reports open <run-id>` — выбранный запуск, а `ywtc reports open last` или `ywtc reports open` — последний корректный.
277
275
 
278
- Автономный HTML-отчёт работает без сети. Единый верхний блок объединяет статус и параметры запуска, progress, source/destination-сводку страниц, файлов, комментариев, объёма и качества, result/state/report paths и скачивание `report.json`. Ниже находится раскрытое дерево исходной иерархии, включая исключённые страницы; доступны поиск, фильтры проблем и прямые ссылки на source/destination. Строка страницы открывает детали файлов, комментариев, родителей, причин и рекомендуемых действий, а вкладка сравнения показывает sandboxed source/destination preview. Ошибки и зависимые `blocked` объекты видны в подсвеченном дереве и во вкладке проблем конкретной страницы. RU/EN и режимы system/light/dark переключаются компактными кнопками-иконками; выбор сохраняется локально. Интерфейс адаптирован для мобильного экрана.
276
+ Автономный HTML-отчёт работает без сети. Компактный Mantine-интерфейс объединяет статус, progress, source/destination-сводку и ссылки на результат, state и `report.json`. Нулевые необязательные счётчики, пустые секции сводки и пустые вкладки деталей скрываются; обязательные totals, статусы и идентификаторы остаются видимыми.
277
+
278
+ Ниже находится раскрытое дерево исходной иерархии, включая исключённые страницы; доступны поиск, фильтры проблем и прямые ссылки на source/destination. Строка страницы открывает только доступные вкладки файлов, комментариев, сравнения и проблем. Ошибки и зависимые `blocked` объекты подсвечиваются в дереве и объясняются в деталях. RU/EN и system/light/dark переключаются иконками; выбор сохраняется локально. Интерфейс адаптирован для мобильного экрана.
279
279
 
280
280
  HTML/JSON, итог терминала и `reports list` используют одинаковые счётчики. Известный source volume отделён от подтверждённых transferred bytes; неизвестные размеры отмечены явно. `report.json` не содержит содержимое страниц, тексты комментариев или preview HTML — они остаются только в локальном `index.html`.
281
281
 
282
+ Качество преобразования учитывается отдельно: normalization — безопасная разница сериализации; adaptation — полное эквивалентное представление, например Grid → static table или колонки другой ширины; degradation — доказанная неполнота, влияющая на `partial`; preserved external reference — исходный внешний URL, который и должен остаться внешним. Normalization и adaptation не увеличивают warnings и не переводят запуск в `completed-with-warnings`.
283
+
282
284
  ### Статусы переноса
283
285
 
284
286
  Статусы страниц:
@@ -286,10 +288,10 @@ HTML/JSON, итог терминала и `reports list` используют о
286
288
  | Статус | Смысл | Данные записаны | Что делать |
287
289
  |---|---|---:|---|
288
290
  | `complete` | Страница и связанные объекты записаны и проверены | Да | Ничего |
289
- | `partial` | Основной контент проверен, но применён fallback или зафиксирована деградация | Да | Посмотреть различия в отчёте; повторить запуск для retryable-проблем |
291
+ | `partial` | Часть данных, managed-ресурсов, комментариев или значимой структуры отсутствует либо результат не проверен | Да | Посмотреть degradation в отчёте; повторить запуск для retryable-проблем |
290
292
  | `failed` | Операция страницы началась, но корректная запись или проверка не удалась | Возможно частично | Исправить root error и повторить ту же миграцию |
291
293
  | `blocked` | Страница не запускалась из-за недоступного failed/conflict родителя или другой зависимости | Нет в этом запуске | Исправить указанную upstream-ошибку и повторить запуск |
292
- | `conflict` | Ownership/identity destination неоднозначна, поэтому безопасный mapped-объект не доказан | Нет автоматической перезаписи | Проверить сопоставление и устранить неоднозначность |
294
+ | `conflict` | Immutable ownership/identity destination доказанно неоднозначна, в отчёте перечислены кандидаты | Нет автоматической перезаписи | Проверить candidate IDs и устранить неоднозначное сопоставление |
293
295
  | `planned` | Объект рассчитан в `--dry-run`; запись не выполнялась | Нет | Убрать `--dry-run` для переноса |
294
296
  | `not-started` | Live-run остановился до начала независимой операции | Нет | Повторить ту же миграцию |
295
297
 
@@ -306,7 +308,7 @@ HTML/JSON, итог терминала и `reports list` используют о
306
308
 
307
309
  `failed` означает неудавшуюся попытку самого объекта; `blocked` — сознательно не начатую операцию из-за upstream-зависимости. Поэтому зависимые блокировки показываются отдельно и не увеличивают число root errors.
308
310
 
309
- Итоговый статус запуска: `completed`, `completed-with-warnings`, `partial`, `failed`, `cancelled` или `interrupted`. Provider-aware verification допускает безопасные различия сериализации, отмечает значимое упрощение оформления как `partial`, а потерю текста, ссылок, ячеек таблиц, кода, изображений, вложений или anchors — как ошибку. Технический статус `skeleton-created` уже содержит source-derived bootstrap, а не progress-placeholder.
311
+ Итоговый статус запуска: `completed`, `completed-with-warnings`, `partial`, `failed`, `cancelled` или `interrupted`. Provider-aware verification допускает безопасные различия сериализации и полные adaptations. Только потеря текста, ссылки, ячейки таблицы, кода, managed-изображения, вложения, комментария, anchor или невозможность доказать полноту ухудшает статус. Технический статус `skeleton-created` уже содержит source-derived bootstrap, а не progress-placeholder.
310
312
 
311
313
  ## Разработка
312
314
 
@@ -278,6 +278,18 @@ export class ConfluenceAdapter {
278
278
  }));
279
279
  }
280
280
  catch (error) {
281
+ if (possibleTitleConflict(error)) {
282
+ let occupied;
283
+ try {
284
+ occupied = await this.findTitleConflict(input.page, input.title);
285
+ }
286
+ catch {
287
+ // Preserve revision/provider classification when lookup cannot prove a title collision.
288
+ }
289
+ if (occupied && occupied.id !== input.page.id) {
290
+ throw new DestinationTitleConflictError(input.title, error.status, { cause: error });
291
+ }
292
+ }
281
293
  if (error instanceof HttpRequestError && error.status === 409) {
282
294
  throw new DestinationRevisionConflictError('page', input.page.id, { cause: error });
283
295
  }
@@ -352,10 +364,13 @@ export class ConfluenceAdapter {
352
364
  }
353
365
  async findArchiveComment(page, fingerprint) {
354
366
  const comments = await this.client.getPageComments(page.id);
355
- const matches = comments.filter((comment) => (comment.body?.storage?.value ?? '').includes('Архив комментариев из'));
356
- const match = fingerprint
357
- ? matches.find((comment) => (comment.body?.storage?.value ?? '').includes(fingerprint))
358
- : matches.at(-1);
367
+ const matches = comments
368
+ .filter((comment) => (comment.body?.storage?.value ?? '').includes('Архив комментариев из'))
369
+ .sort((left, right) => String(left.id).localeCompare(String(right.id), undefined, { numeric: true }));
370
+ const candidates = fingerprint
371
+ ? matches.filter((comment) => (comment.body?.storage?.value ?? '').includes(fingerprint))
372
+ : matches;
373
+ const match = candidates.at(-1);
359
374
  return match ? destinationComment(page.id, match) : undefined;
360
375
  }
361
376
  async createArchiveComment(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../src/adapters/confluence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../src/adapters/confluence.ts"],"names":[],"mappings":"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"}
@@ -20,10 +20,16 @@ export declare class YandexAdapter implements SourceAdapter, DestinationAdapter
20
20
  pages: SourcePage[];
21
21
  returned: number;
22
22
  excluded: ({
23
+ id: string;
24
+ canonicalId: string;
25
+ locator: string;
23
26
  reason: "source-status";
24
27
  status: "obsolete";
25
28
  metadataComplete: boolean;
26
- depth?: number;
29
+ } | {
30
+ metadataComplete: boolean;
31
+ status?: "current" | "non-current";
32
+ reason: "inventory-drift";
27
33
  ancestorIds?: string[];
28
34
  parentId?: string;
29
35
  id: string;
@@ -31,13 +37,6 @@ export declare class YandexAdapter implements SourceAdapter, DestinationAdapter
31
37
  locator: string;
32
38
  title: string;
33
39
  url: string;
34
- } | {
35
- id: string;
36
- canonicalId: string;
37
- locator: string;
38
- reason: "source-status";
39
- status: "obsolete";
40
- metadataComplete: boolean;
41
40
  })[];
42
41
  effectiveStatus: SourceStatus;
43
42
  notes: string[];
@@ -1,6 +1,7 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { stat } from 'node:fs/promises';
3
3
  import { extractPageReferences, resolveYandexReferenceSlug } from '../content-model.js';
4
+ import { DestinationRevisionConflictError, DestinationTitleConflictError } from '../domain.js';
4
5
  import { normalizeCommentForest } from '../comments.js';
5
6
  import { HttpRequestError } from '../http.js';
6
7
  import { normalizeWikiSlug, safeFilename } from '../input.js';
@@ -202,14 +203,21 @@ export class YandexAdapter {
202
203
  const currentIds = new Set(current.map((identity) => identity.id));
203
204
  const selected = options.status === 'current' ? all.filter((identity) => currentIds.has(identity.id)) : all;
204
205
  const excludedIdentities = options.status === 'current' ? all.filter((identity) => !currentIds.has(identity.id)) : [];
206
+ const locatorDrifts = [];
205
207
  const results = await Promise.allSettled(selected.map(async (identity) => {
206
208
  const detail = await this.client.getPageById(identity.id);
207
209
  const normalized = sourcePage(this.profile, detail);
208
210
  const expectedLocator = normalizeWikiSlug(identity.slug);
209
211
  if (normalized.locator !== expectedLocator) {
210
- throw new Error(`Yandex Wiki descendant ${identity.id} detail slug ${normalized.locator} conflicts with inventory slug ${expectedLocator}`);
212
+ locatorDrifts.push(`Yandex Wiki page ${identity.id} changed locator from ${expectedLocator} to ${normalized.locator} during discovery; immutable ID was retained.`);
211
213
  }
212
- return options.status === 'current' ? { ...normalized, sourceStatus: 'current' } : normalized;
214
+ const belongsToSubtree = normalized.ancestorIds?.includes(page.id)
215
+ ?? (normalized.locator === page.locator || normalized.locator.startsWith(`${page.locator}/`));
216
+ return {
217
+ page: options.status === 'current' ? { ...normalized, sourceStatus: 'current' } : normalized,
218
+ belongsToSubtree,
219
+ expectedLocator,
220
+ };
213
221
  }));
214
222
  const failures = results.flatMap((result, index) => result.status === 'rejected'
215
223
  ? [`${selected[index]?.id ?? 'unknown'} (${selected[index]?.slug ?? 'unknown'}): ${result.reason instanceof Error ? result.reason.message : String(result.reason)}`]
@@ -219,10 +227,7 @@ export class YandexAdapter {
219
227
  }
220
228
  const excludedResults = await Promise.allSettled(excludedIdentities.map(async (identity) => {
221
229
  const detail = await this.client.getPageById(identity.id);
222
- const expectedLocator = normalizeWikiSlug(identity.slug);
223
230
  const locator = normalizeWikiSlug(detail.slug);
224
- if (locator !== expectedLocator)
225
- throw new Error(`detail slug ${locator} conflicts with inventory slug ${expectedLocator}`);
226
231
  const ancestors = ancestorIds(detail);
227
232
  const rootIndex = ancestors.indexOf(page.id);
228
233
  const immediateParentId = parentId(detail);
@@ -242,18 +247,38 @@ export class YandexAdapter {
242
247
  }));
243
248
  const excludedFailures = excludedResults.filter((result) => result.status === 'rejected').length;
244
249
  return {
245
- pages: results.flatMap((result) => result.status === 'fulfilled' ? [result.value] : []),
250
+ pages: results.flatMap((result) => result.status === 'fulfilled' && result.value.belongsToSubtree ? [result.value.page] : []),
246
251
  returned: all.length,
247
- excluded: excludedResults.map((result, index) => result.status === 'fulfilled' ? result.value : {
248
- id: String(excludedIdentities[index].id),
249
- canonicalId: canonical(this.profile, excludedIdentities[index].id),
250
- locator: normalizeWikiSlug(excludedIdentities[index].slug),
251
- reason: 'source-status',
252
- status: 'obsolete',
253
- metadataComplete: false,
254
- }),
252
+ excluded: [
253
+ ...excludedResults.map((result, index) => result.status === 'fulfilled' ? result.value : {
254
+ id: String(excludedIdentities[index].id),
255
+ canonicalId: canonical(this.profile, excludedIdentities[index].id),
256
+ locator: normalizeWikiSlug(excludedIdentities[index].slug),
257
+ reason: 'source-status',
258
+ status: 'obsolete',
259
+ metadataComplete: false,
260
+ }),
261
+ ...results.flatMap((result) => result.status === 'fulfilled' && !result.value.belongsToSubtree ? [{
262
+ id: result.value.page.id,
263
+ canonicalId: result.value.page.canonicalId,
264
+ locator: result.value.page.locator,
265
+ title: result.value.page.title,
266
+ url: result.value.page.url,
267
+ ...(result.value.page.parentId ? { parentId: result.value.page.parentId } : {}),
268
+ ...(result.value.page.ancestorIds ? { ancestorIds: result.value.page.ancestorIds } : {}),
269
+ reason: 'inventory-drift',
270
+ ...(result.value.page.sourceStatus ? { status: result.value.page.sourceStatus } : {}),
271
+ metadataComplete: true,
272
+ }] : []),
273
+ ],
255
274
  effectiveStatus: options.status,
256
- notes: excludedFailures > 0 ? [`Yandex Wiki did not expose complete hierarchy metadata for ${excludedFailures} excluded page(s).`] : [],
275
+ notes: [
276
+ ...(excludedFailures > 0 ? [`Yandex Wiki did not expose complete hierarchy metadata for ${excludedFailures} excluded page(s).`] : []),
277
+ ...(results.some((result) => result.status === 'fulfilled' && !result.value.belongsToSubtree)
278
+ ? ['Yandex Wiki inventory changed during discovery; pages moved outside the selected subtree were excluded by immutable page ID.']
279
+ : []),
280
+ ...locatorDrifts,
281
+ ],
257
282
  };
258
283
  }
259
284
  async resolveReference(from, reference) {
@@ -333,11 +358,29 @@ export class YandexAdapter {
333
358
  return this.findChild(container, title);
334
359
  }
335
360
  async createPage(input) {
336
- const created = await this.client.createPage({ slug: this.childSlug(input.container, input.title), title: input.title, content: input.body });
337
- return destinationPage(this.profile, created);
361
+ try {
362
+ const created = await this.client.createPage({ slug: this.childSlug(input.container, input.title), title: input.title, content: input.body });
363
+ return destinationPage(this.profile, created);
364
+ }
365
+ catch (error) {
366
+ if (error instanceof HttpRequestError && (error.status === 400 || error.status === 409)) {
367
+ const occupied = await this.findChild(input.container, input.title).catch(() => undefined);
368
+ if (occupied)
369
+ throw new DestinationTitleConflictError(input.title, error.status, { cause: error });
370
+ }
371
+ throw error;
372
+ }
338
373
  }
339
374
  async updatePage(input) {
340
- return destinationPage(this.profile, await this.client.updatePage({ id: Number(input.page.id), title: input.title, content: input.body }));
375
+ try {
376
+ return destinationPage(this.profile, await this.client.updatePage({ id: Number(input.page.id), title: input.title, content: input.body }));
377
+ }
378
+ catch (error) {
379
+ if (error instanceof HttpRequestError && error.status === 409) {
380
+ throw new DestinationRevisionConflictError('page', input.page.id, { cause: error });
381
+ }
382
+ throw error;
383
+ }
341
384
  }
342
385
  async uploadResource(input) {
343
386
  const size = input.size ?? (await stat(input.filePath)).size;
@@ -371,10 +414,13 @@ export class YandexAdapter {
371
414
  }
372
415
  async findArchiveComment(page, fingerprint) {
373
416
  const comments = await this.client.getPageComments(Number(page.id));
374
- const matches = comments.filter((comment) => (comment.body ?? '').includes('Архив комментариев из'));
375
- const match = fingerprint
376
- ? matches.find((comment) => (comment.body ?? '').includes(fingerprint))
377
- : matches.at(-1);
417
+ const matches = comments
418
+ .filter((comment) => (comment.body ?? '').includes('Архив комментариев из'))
419
+ .sort((left, right) => String(left.id).localeCompare(String(right.id), undefined, { numeric: true }));
420
+ const candidates = fingerprint
421
+ ? matches.filter((comment) => (comment.body ?? '').includes(fingerprint))
422
+ : matches;
423
+ const match = candidates.at(-1);
378
424
  return match ? destinationComment(page.id, match) : undefined;
379
425
  }
380
426
  async createArchiveComment(input) {