docs(openspec): wiki-module — решения Task 6 (#91)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-24 02:12:31 +04:00
parent 97e59c1cc6
commit 4faf7884ad

View File

@ -539,3 +539,20 @@ jira безвреден.
исполнителя (3, 5–9, 11–12 отчёта): `paths.root` на базе без файла бросает `RuntimeError`, `_drop_copy` его ловит;
очистка FTS по rowid страницы; строгая валидация настроек и команд (bool не целое); `wiki_project.failed_at` пока не
пишется. Цена ошибки: правка одной строки в соответствующем месте.
Решения исполнителя Task 6 (2026-10-24; HTML Eva недоверенный):
51. Вложения дедуплицируются по `url`: миниатюра и файл — одно вложение, если агент шлёт одинаковый `url`. Цена ошибки:
при разных `url` в eva-agent появятся две ссылки; проверяется по первой живой синхронизации.
52. Картинка внутри `<a>` на вложение выдаёт только ссылку `<a>`. Цена ошибки: при разных `ref` показана одна ссылка.
53. Небезопасные ссылки (`javascript:`, `data:`, `vbscript:` после удаления управляющих символов и пробелов) дают только
текст, у картинок пусто; ссылки и картинки автора со схемой `attachment:` — текст/пусто. Цена ошибки: видимый
текст без ссылки.
54. Ссылку вложения порождает только конвертер: приватный маркер U+E000/U+E001, авторские U+E000/U+E001 из HTML
удаляются; любое авторское `attachment:@` нейтрализуется вставкой U+200C между `:` и `@`; `fill_ids` заменяет
только `](attachment:@N)`, индекс вне списка — `ValueError` (вызывающий Task 7 превращает в `failed`). Цена
ошибки: невидимый символ в сыром `.md` при авторском «attachment:@»; лишние PUA-символы удаляются.
55. Текст `<` вне кода выводится `&lt;` (сырых тегов нет); внутри `<code>`/`<pre>` не меняется. Имя вложения
экранирует `\ [ ] <` и `_`/`*` на границе слова. `@` не экранируется. Цена ошибки: сырой `.md` с `&lt;`.
56. Известные края (отложены): вложение в `<a>` страницы/внешней ссылки, вложенный `<span>` между `<a>` и `<img>`,
хвостовой `\` в тексте ссылки, пробелы/скобки во внешнем href, дубликаты `ref` (побеждает последний).