| 2026-09-21 |

Пачка 1 ревью: безопасность + порча данных (находки 1-5)
...
Бэкенд:
- DELETE /api/tags/{id} требовал сессии только фактически — добавлен UserDep;
регрессия-тест проверяет require_user на каждом /api-роуте (не пройдёт для
любого нового эндпоинта без UserDep).
- Вложения: SVG отклоняется (скриптуемый формат — inline-отдача = stored XSS),
лимит 10 МБ на файл, X-Content-Type-Options: nosniff на отдаче.
- Open redirect закрыт: return_to только внутренние пути (не //, не внешние).
- MCP-токен сравнивается constant-time (hmac.compare_digest).
- Дефолтный SESSION_SECRET валит старт валидатором — молчаливо подделываемая
кука вместо этого даёт явную ошибку конфигурации.
- backend/data/ (runtime-вложения) в .gitignore.
Фронтенд:
- Черновик инлайн-правки больше не переезжает между задачами: при смене
/tasks/:id сбрасываются descEditing/draft, заголовочный InlineField
перемонтируется по key=taskId (PATCH старого текста в новую задачу).
- Утечка SSE-подписок: onRealtime сам отписывается при dispose scope —
N визитов на страницу больше не оставляют N load() на мёртвых инстансах.
- Out-of-order: токен запроса в load() TaskView/ProjectView — поздний ответ
старого id не перетирает данные нового; ListView — то же на фильтрах.
- Смена фильтра сбрасывает пагинацию: watch(filters, {deep}) (ТЗ 3.6).
- Двойной submit не создаёт дубликаты: busy в TaskForm и quickAdd стека.
- Утечка Pixi: unmount во время init уничтожает рендерер после резолва.
- Оффлайн-старт PWA: /auth/me без сети не роняет onMounted молча.
Тесты: 103 passed (+6: auth-все-роуты, SVG, oversize, nosniff, return_to,
дефолтный секрет). ruff/mypy чисты.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
6 hours ago
|
| 2026-09-19 |
M5: MCP-сервер для ИИ-агентов (ТЗ 3.9)
...
- FastMCP (streamable HTTP), монтируется на /mcp основного приложения
- инструменты: create_task / update_task / complete_task / list_tasks / get_task
- авторизация: bearer-токен MCP_TOKEN (пусто — /mcp закрыт); SSO-токены — после
предоставления данных (открытый вопрос ТЗ)
- автодетализация созданных агентом задач — в фоновом потоке
- lifespan: запуск session manager для mounted ASGI-приложения
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
M1: MVP задач — быстрый ввод, стек входящих, ручная детализация
...
- Модели Task/Project/Tag (SQLAlchemy 2.0) + миграция alembic
- API: POST/GET/PATCH/DELETE /api/tasks, approve (raw→approved), проекты, теги
- Все /api эндпоинты за сессией SSO (регрессионный тест на 401)
- Frontend: api-клиент, StackView — быстрый ввод одной строкой, стек,
детализация с проектом/тегами/приоритетом, «Да, всё верно»
- dev-БД: docker postgres:17 на 15432
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
Порт API 8134 вместо 8000; креды локального SSO в .env (не коммитится)
...
- Dockerfile, nginx, vite proxy, README — единый нестандартный порт 8134
- тест redirect привязан к gauth_base_url из настроек, а не к прод-хосту
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
M0: OAuth-флоу через gnexus-gauth
...
- /auth/login → redirect на SSO с PKCE, /auth/callback → обмен code, сессия-cookie
- /auth/logout, /auth/me, защищённый /api/me
- SessionMiddleware (подписанная HttpOnly cookie, секрет из окружения)
- frontend: Войти/Выйти в навбаре, proxy /auth на backend
- тесты: health, защита API, redirect с state/PKCE
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|