|
Журнал действий по задачам и API журнала (0.85)
- services/tasklog.py — единственная точка записи в task_events, общая для REST и
MCP: иначе «кто закрыл задачу» отвечалось бы по-разному в двух путях. Заголовок
хранится снапшотом, запись об удалении ссылку не оставляет вовсе (FK с ON DELETE
SET NULL обнулил бы её сам, но в SQLite тестов внешние ключи не проверяются, и
журнал ссылался бы на несуществующую задачу). status_transition() пишет переход
кодами («to_do→in_progress») — журнал не хранит переводов, подписи даёт интерфейс.
- api/task_events.py: GET /api/task-events — первый пагинированный список API,
конверт {items, total, page, per_page}, потолок per_page 100, фильтры по типу
события, актору, каналу, проекту и задаче; порядок — свежие первыми, id вторым
ключом (у записей одной секунды иначе нет устойчивого порядка).
- Запись событий из HTTP: создание, закрытие (с комментарием), смена статуса, выдача
и снятие доступности агенту, удаление. Пишутся только настоящие перемены: PATCH,
ничего не изменивший, журнал не засоряет.
- Запись событий из MCP: те же события в тех же местах; у update_task и complete_task
появился параметр comment — что сделано (у агента он станет обязательным вместе с
приёмкой).
- main.py: роутер журнала подключён; conftest: стаб mcp_ctx принимает актора, а
agent_ctx() даёт контекст агента (по умолчанию актора нет — действие владельца,
так вызывают тулы тесты, написанные до мандата).
- tests/test_task_events.py: 9 тестов — события из UI и MCP, фильтры, конверт
пагинации и потолок per_page, изоляция журнала по пользователю, снапшот заголовка
после удаления.
ТЗ 0.85.
|
|---|
|
|
| backend/app/api/task_events.py 0 → 100644 |
|---|
| backend/app/api/tasks.py |
|---|
| backend/app/main.py |
|---|
| backend/app/mcp_server.py |
|---|
| backend/app/services/tasklog.py 0 → 100644 |
|---|
| backend/tests/conftest.py |
|---|
| backend/tests/test_task_events.py 0 → 100644 |
|---|
| docs/TZ.md |
|---|