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

61 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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`.