Andrey Epifancev 98842208f5 OpenSpec: change wiki-history — история правок вики, лента и дифф (#140)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:31:32 +04:00

6.0 KiB
Raw Blame History

Why

Владелец 28.10.2026 хотел посмотреть, что за день сделали аналитики в вики проекта, и не смог: копия вики в хабе без истории, MCP показывает только дату синхронизации. Ни кто правил, ни когда, ни что поменялось — не видно (sdlc-hub#140). Открытый вопрос из ARCHITECTURE.md «История страниц вики» закрывается этим change.

Проверка API Eva 28.10.2026 (скрипты eva_probe.py, eva_probe2.py на виртуалке, токеном eva-agent) показала, что история есть: у каждой версии страницы (CmfDocumentHistory, коды DOCH-…) — полный текст на момент версии, автор, время и признак публикации; выборка по странице — фильтром parent_id. Журнал CmfAudit токену агента закрыт, истории версий вложений в API нет.

What Changes

  • Версии страниц в синхронизации. Команда wiki_sync дополнительно забирает опубликованные версии страниц дерева проекта: постранично, только новые (хаб передаёт агенту уже известные коды версий), первый прогон — вся история. Агент шлёт версии пачками новым маршрутом POST /agent/wiki/versions; хаб переводит их HTML в Markdown и вместе с копией одной операцией записывает в новую таблицу версий. Версии страниц вне дерева не запрашиваются и не хранятся.
  • Маршруты истории. GET /wiki/changes — лента опубликованных правок проекта за период (время, автор, страница, «+строк / −строк»); GET /wiki/pages/{code}/versions — версии страницы; GET /wiki/pages/{code}/diff — unified diff одной правки против предыдущей, частями. GET /wiki/pages/{code} получает поля последней правки.
  • MCP вики. Новые инструменты changes и diff; шапка page — строка «изменено: когда, кто»; sync отвечает только «ок»/ошибкой. changes, diff, page читают только копию хаба.
  • Веб: общая «Лента». Лента изменений переезжает из раздела Jira в общий пункт «Лента» боковой панели (/app/feed) с переключателями источников «Jira» и «Вики». Правки вики сгруппированы по странице; нажатие на правку открывает окно с диффом поверх ленты. Модули дают ленте свои источники через контракт веб-модуля.
  • eva-agent (aep/eva-agent#7, свой design-only change): шаг версий в wiki_sync, AGENT_VERSION 2.

Non-Goals

  • Черновики и неопубликованные правки — решение владельца 28.10.2026: только опубликованные.
  • Версии файлов-вложений — решение владельца: свежий файл по запросу, как сейчас (attachment).
  • Журнал аудита Eva (CmfAudit) — закрыт токену агента.
  • Страницы вики вне дерева корня проекта — решение владельца: только зона видимости проекта.
  • Запись в Eva, откат версий, комментарии к правкам.
  • Ускорение фоновой синхронизации: частота прежняя (wiki_auto_sync_hours).

Capabilities

New Capabilities

Нет.

Modified Capabilities

  • wiki — новые требования «История правок страниц» и «Маршруты истории вики».
  • mcp — «MCP вики».
  • web-app — «Лента изменений», «Оболочка и адреса»; новое требование «Правки вики в ленте».

Impact

  • Хаб: modules/wiki/ — schema (таблицы версий и стадии версий), commands (deliver_params, учёт версий в отчёте), stage (приём версий), sync (запись версий в commit, удаление вне дерева), convert (режим без id вложений), api (новые маршруты), mcp, projects (сброс корня удаляет версии); новый модуль чтения истории (лента, дифф). Тесты tests/test_wiki_*.
  • Веб: web/src/shell/ (страница общей ленты, период), web/src/modules/types.ts (источник ленты в HubModule), web/src/modules/jira/feed/ (источник Jira вместо страницы), web/src/modules/wiki/ (источник вики, окно диффа).
  • Контракт с агентом wiki: новый маршрут POST /agent/wiki/versions, поле known_versions в параметрах выдачи wiki_sync, поле versions в отчёте done. Агент v1 работает как прежде — история не пополняется.
  • Схема базы: две новые таблицы модуля wiki. Выкатка: git pull → kickstart хаба → make web → /mcp reconnect → публикация eva-agent v2 → после agent_status с v2 владелец поднимает wiki_min_agent_version.