46 lines
4.4 KiB
Markdown
46 lines
4.4 KiB
Markdown
## 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»
|