Andrey Epifancev 4848dff206 OpenSpec: change wiki-package-d — пакет D модуля wiki (#135)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 18:31:55 +04:00

6.0 KiB
Raw Blame History

MODIFIED Requirements

Requirement: Вики проекта

Приложение SHALL иметь страницу «Вики» (/app/wiki?project=<метка>, раздел группы «Вики» боковой панели; текущий проект — как у остальных страниц, «Проект в приложении»). Шапка страницы: заголовок «Вики», подзаголовок «<название корня> · страниц · обновлено ДД.ММ ЧЧ:ММ» и действие «Обновить вики» (вторичная кнопка; требование «Состояние и обновление модулей»). Страница SHALL показывать:

  • дерево страниц проекта (GET /wiki/tree) слева, свёрнутое до первого уровня; узел раскрывается по клику; узел выбранной страницы и его предки раскрыты;
  • выбранную страницу справа (GET /wiki/pages/{code}): заголовок, дата синхронизации, ссылка «открыть в Eva», Markdown с таблицами, без сырого HTML; без page в адресе — корневая страница; ссылки page:<код> открывают страницу вики (код в адресе &page=<код>), ссылки attachment:<id> скачивают вложение (запрос, опрос состояния, сохранение файла браузером), состояние failed — текст ошибки рядом со ссылкой;
  • вложение-картинку (image = true в attachments ответа страницы) — в тексте страницы на месте ссылки: вложение в ready при открытии страницы показывается картинкой сразу (содержимое GET /wiki/attachments/{id}/content, без нового скачивания агентом); нажатие на ссылку нескачанной картинки ставит скачивание (запрос, опрос состояния) и по готовности показывает картинку вместо сохранения файла. Под картинкой остаётся ссылка «📎 <имя>», сохраняющая файл. Картинка не шире колонки страницы. Содержимое не получено (409 not_ready, ошибка сети) — вместо картинки прежняя ссылка, нажатие на неё ставит скачивание и по готовности показывает картинку; ошибка скачивания — текст рядом со ссылкой. Без нажатия приложение не ставит скачивание;
  • на экранах уже 640 px выбранная страница — над деревом;
  • поиск над деревом (GET /wiki/search): список результатов с фрагментами вместо дерева, пока строка поиска не пуста; после очистки поиска раскрытие дерева прежнее;
  • проекта без корня — форму «Корень вики (DOC-… или ссылка)» с кнопкой «Привязать» (PATCH /projects/{label}); 422 — текст ошибки у поля;
  • корень есть, синхронизаций нет — «вики ещё не синхронизирована» и действие «Обновить вики»;
  • последняя синхронизация с ошибкой — плашку с текстом ошибки над страницей.

Scenario: Открыть страницу по ссылке

  • WHEN на странице DOC-3 нажата ссылка page:DOC-2
  • THEN адрес /app/wiki?project=AWPCA&page=DOC-2, справа DOC-2, в дереве DOC-2 выделен

Scenario: Проект без корня

  • WHEN открыта /app/wiki?project=sfm_kedr, корня нет; введено DOC-001234, нажато «Привязать»
  • THEN PATCH /projects/sfm_kedr {wiki_root: "DOC-001234"}; строка «Вики» блока состояния показывает ход пакета синхронизации

Scenario: Поиск

  • WHEN в строке поиска «согласов»
  • THEN вместо дерева — результаты GET /wiki/search?project=AWPCA&q=согласов; очистка строки возвращает дерево

Scenario: Без выбранной страницы

  • WHEN открыта /app/wiki?project=AWPCA без page
  • THEN справа корневая страница проекта, в дереве она выделена

Scenario: Скачать картинку

  • WHEN на странице DOC-3 вложение 7 scheme.png (image = true) в none; нажата ссылка «📎 scheme.png»; агент скачал файл
  • THEN POST /wiki/attachments/7/fetch, опрос до ready, GET /wiki/attachments/7/content; на месте ссылки — картинка, под ней ссылка «📎 scheme.png»; файл браузером не сохраняется

Scenario: Скачанная картинка видна сразу

  • WHEN вложение 7 scheme.png в ready, открыта страница DOC-3
  • THEN картинка показана без нажатия; POST /wiki/attachments/7/fetch не вызывался

Scenario: Не картинка

  • WHEN вложение 8 model.xlsx (image = false) в ready, нажата ссылка «📎 model.xlsx»
  • THEN файл сохраняется браузером, картинки нет