Andrey Epifancev 5a6cdecc8e OpenSpec change-history: журнал изменений задач (#70)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:04:52 +04:00

4.4 KiB
Raw Blame History

ADDED Requirements

Requirement: Лента изменений в MCP

Инструмент changes SHALL отдавать ленту изменений (GET /changes) с параметрами hours (число > 0), since, until, kinds, key. hours и since вместе — ответ «либо hours, либо since». Без hours и since — с начала текущих суток по местному времени машины MCP-сервера; с hours — since = сейчас − hours. В сессии, привязанной к проекту P, без key — project = P; с key — без проекта. Без привязки и без key — ответ «сессия не привязана к проекту: запустите MCP с --project <метка> (список — projects)», в хаб не ходить; с key — работает.

Вид ответа: первая строка — период по местному времени («изменения с 22.10 00:00 по 22.10 14:05»); затем события, сгруппированные по задаче; задачи — по времени последнего события, новые сверху; у задачи строка «КЛЮЧ тема (до 80 символов) — текущий статус», под ней события по времени, новые сверху, каждое — «ЧЧ:ММ автор: <что>», с датой «ДД.ММ» перед временем, если событие не в текущих сутках. <что>: статус — «статус «было» → «стало»»; описание — «описание изменено»; срок и плановые даты — «срок / плановое начало / плановое окончание ДД.ММ → ДД.ММ» (дата — из начала from_value/to_value вида ГГГГ-ММ-ДД, иначе from/to как есть; пустое значение — «—»); комментарий — «комментарий: » и первые 200 символов текста с «…»; прочие поля — «<поле>: «было» → «стало»» (значения до 80 символов с «…»). Событий нет — «за период изменений нет». truncated — последняя строка «показаны последние N событий, сузьте период». Ошибка 422 хаба — её текст.

Инструмент issue SHALL после комментариев выводить «изменения (N):» и 5 последних элементов changes задачи в том же виде событий (с датой), «ещё M», если их больше 5; при changes = [] — строки нет.

Инструмент sync_log SHALL выводить у каждого прогона «журнал: принят ДД.ММ ЧЧ:ММ» (по history_at, местное время) или «журнал: нет».

Scenario: Что закрылось сегодня

  • WHEN сессия AWPCA, changes {kinds: "status"} в 14:05; сегодня X переведена в «Готово» в 11:15
  • THEN ответ содержит строку X с темой и статусом «Готово» и «11:15 Петров Пётр: статус «В работе» → «Готово»»

Scenario: За два часа

  • WHEN сессия AWPCA, changes {hours: 2}
  • THEN запрос GET /changes?project=AWPCA&since=<сейчас − 2 ч>; в ответе события статусов, описаний, сроков и комментариев

Scenario: Без привязки

  • WHEN MCP без --project, changes {}
  • THEN ответ «сессия не привязана к проекту: …», запросов к GET /changes нет

Scenario: Пустой период

  • WHEN changes {hours: 1}, событий нет
  • THEN ответ — строка периода и «за период изменений нет»

Scenario: История в карточке

  • WHEN issue {key: X}, у X 7 элементов журнала
  • THEN ответ содержит «изменения (7):», 5 последних событий и «ещё 2»