Решение принято: контур удаляется
Это был главный вопрос исходного issue #1416 («остаётся ли REST актуальным
планом или отказываемся»). Решение владельца (2026-08-29): удалить.
Обоснование
Целевая архитектура: мессенджер — независимый TUI-проект, фабрика
переиспользует его код (вызов функции в своём процессе), а сам мессенджер
только принимает и отправляет сообщения — он не исполнитель поручений.
Внешнего процесса-исполнителя в схеме нет. Четыре типа задач (dm_reply,
chat_answer, fetch_dialogs, fetch_history) описывают поручения тому,
кому больше не поручают.
Дополнительные подтверждения
Что НЕ затрагивается
Обратное направление — самостоятельный мессенджер спрашивает фабрику (поиск
по архиву). Это обычный read-only запрос, а не очередь задач. Клиент
factory_search в мессенджере продолжает работать.
Состав удаления
src/web/routes/tasks.py — файл целиком (155 строк)
- Регистрация роутера:
src/web/assembly.py:158, :181
src/models.py: 4 значения CollectionTaskType (:274-282),
EXTERNAL_INTEROP_TASK_TYPES (:285-295), 4 payload-модели (:529-583),
фрагменты докстрингов (:255-261, :590-591)
- Тесты целиком:
tests/test_interop_task_types.py (68),
tests/routes/test_tasks_api.py (119),
tests/routes/test_tasks_api_concurrency.py (82)
Осиротеет и требует решения:
required_status в src/database/repositories/collection_tasks.py:379-380, 384-386, 428-430 — единственные вызывающие это tasks.py:135,150.
После удаления не останется ни одного.
Оставить:
- Колонка
result_payload (schema.py:112, миграция migrations.py:81-82) —
уже в существующих БД, удалять из схемы рискованно.
src/web/app.py:341-346 — исключение session-cookie для /api/*. Правило
безвредно и защитит будущие API.
Документация — 4 файла, где /api/tasks заявлен как единственный
полноценный REST-контур проекта:
docs/feature-map.md:17,25,448
docs/parity-matrix.md:16,30,47,177
docs/index.md:46
Формулировка «пять поверхностей» схлопывается: FastAPI остаётся только
parity-зеркалами.
Acceptance Criteria
Контекст
Этап 3 эпика #1416 — ответ на главный вопрос исходного issue.
Связано: #829/#960/#961 (создание контура), #1407 (идемпотентность).
Решение принято: контур удаляется
Это был главный вопрос исходного issue #1416 («остаётся ли REST актуальным
планом или отказываемся»). Решение владельца (2026-08-29): удалить.
Обоснование
Целевая архитектура: мессенджер — независимый TUI-проект, фабрика
переиспользует его код (вызов функции в своём процессе), а сам мессенджер
только принимает и отправляет сообщения — он не исполнитель поручений.
Внешнего процесса-исполнителя в схеме нет. Четыре типа задач (
dm_reply,chat_answer,fetch_dialogs,fetch_history) описывают поручения тому,кому больше не поручают.
Дополнительные подтверждения
/tasks, фабрика монтирует/api/tasks→ 404. Живой прогон из критериев приёмки Интероп с tg_messenger: REST API задач + типы dm_reply/chat_answer #829 не выполнялся.create_generic_task).(
tasks.py:78).interop/мессенджерас 20.06.2026 (сам проект жил до 14.08.2026).
(
tasks.py:97-103, осознанно отложено).Что НЕ затрагивается
Обратное направление — самостоятельный мессенджер спрашивает фабрику (поиск
по архиву). Это обычный read-only запрос, а не очередь задач. Клиент
factory_searchв мессенджере продолжает работать.Состав удаления
src/web/routes/tasks.py— файл целиком (155 строк)src/web/assembly.py:158,:181src/models.py: 4 значенияCollectionTaskType(:274-282),EXTERNAL_INTEROP_TASK_TYPES(:285-295), 4 payload-модели (:529-583),фрагменты докстрингов (
:255-261,:590-591)tests/test_interop_task_types.py(68),tests/routes/test_tasks_api.py(119),tests/routes/test_tasks_api_concurrency.py(82)Осиротеет и требует решения:
required_statusвsrc/database/repositories/collection_tasks.py:379-380, 384-386, 428-430— единственные вызывающие этоtasks.py:135,150.После удаления не останется ни одного.
Оставить:
result_payload(schema.py:112, миграцияmigrations.py:81-82) —уже в существующих БД, удалять из схемы рискованно.
src/web/app.py:341-346— исключение session-cookie для/api/*. Правилобезвредно и защитит будущие API.
Документация — 4 файла, где
/api/tasksзаявлен как единственныйполноценный REST-контур проекта:
docs/feature-map.md:17,25,448docs/parity-matrix.md:16,30,47,177docs/index.md:46Формулировка «пять поверхностей» схлопывается: FastAPI остаётся только
parity-зеркалами.
Acceptance Criteria
required_status— решено явно: удалён вместе с контуром либо оставленс обоснованием. Не оставлять молча мёртвым.
result_payloadи правило session-cookie оставлены (см. выше).companion tg_messenger#228 — уведомить.
lint-importsзелёный.interop/worker.py,interop/factory_client.pyи CLI-командаworker— решить отдельно на его стороне (не блокирует эту задачу).factory_searchсохранить.Контекст
Этап 3 эпика #1416 — ответ на главный вопрос исходного issue.
Связано: #829/#960/#961 (создание контура), #1407 (идемпотентность).