## 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»