Журнал действий по задачам и 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.
1 parent 028b1f4 commit cb3e1afd305738fa05dc750f94aa31fd04ba4456
@root root authored 8 hours ago
Showing 8 changed files
View
backend/app/api/task_events.py 0 → 100644
View
backend/app/api/tasks.py
View
backend/app/main.py
View
backend/app/mcp_server.py
View
backend/app/services/tasklog.py 0 → 100644
View
backend/tests/conftest.py
View
backend/tests/test_task_events.py 0 → 100644
View
docs/TZ.md