Технический долг Среза 1: dev-seed под DEBUG, /docs и CORS в проде, / и 405, аудит входа, дата по МСК, seed не возвращает снятые права #10
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/9-tech-debt-slice-1"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #9. Bounded-задача параллельно Срезу 2a (без OpenSpec change; спеки
openspec/specs/синхронизированы с кодом в этой же ветке). 13 коммитов: 7 по пунктам дизайна + 6 по ревью.Что сделано
seed --devтолько приDEBUG=true(иначе код 2 до чтения seed и подключения к БД) — OQ-60./docs,/redoc,/openapi.jsonтолько приDEBUG; CORS: в dev*без credentials, в проде изCORS_ORIGINS(пусто — кросс-доменные запрещены) — OQ-66, часть OQ-65.GET /отдаёт SPA без редиректа на//(причина —root_path="/", теперь нормализуется); неверный метод на существующий маршрут/api/v1/*— 405 сAllow, несуществующий путь — 404 — OQ-61, OQ-62 (редирект)..dockerignoreисключаетapi/.env.*— OQ-82.LOGIN(выдача dev-токена; первый успешный запрос пользователя после старта процесса),LOGIN_FAILED(401 «токен не принят», 403 аутентификации) — разделSESSION, отдельная транзакция (транзакция запроса при ошибке откатывается), токен в журнал не пишется,user_agent/descriptionобрезаются — OQ-64.X-Forwarded-Forтолько от доверенных прокси: настройкаFORWARDED_ALLOW_IPS(по умолчанию127.0.0.1) — вторая часть OQ-65; остаток к платформе: перечень прокси прода.effective_date— датаEurope/Moscow— follow-up #8.role_permission: в пустую таблицу — вся матрица; в заполненную — только пары новых в этом прогоне ролей/прав; снятые администратором связи не возвращаются — follow-up #8.Проверки
make check-fullEXIT 0: ruff/format/mypy чисто (87 файлов), unit 825 passed, dbml-check пусто, integration 290 passed, docker-build ok, web-check (biome 24 файла, tsc, rsbuild) чисто. Ревью (opus): approve with fixes → все 4 Important исправлены (R-1 длина полей, R-2 доверенные прокси, R-3 новые права в заполненную матрицу, R-4 спеки), плюс R-7, R-9, R-11.Rulings I made (без обсуждения)
DEBUGдля--dev— только в CLI;run_seed(dev=True)для тестов без защиты.CORS_ORIGINSвне DEBUG — middleware CORS не подключается; при DEBUG*безallow_credentials(токен в заголовке, cookie не используются).DEBUG=false; текст 404 под/api/v1остался «Not Found» (на него опирается тест Среза 0), 405 — по-русски.Authorizationили со схемой не Bearer — не попытка входа (боты не засоряют журнал); «аутентификация не настроена» при предъявленном токене —LOGIN_FAILED; отказ dev-токена (404/409) не аудируется.LOGINпервого запроса — в отд��льной транзакции (иначе терялся бы при ошибке запроса после аутентификации); учёт вошедших — множество в памяти процесса (один процесс на инстанс).python:3.11-slimEurope/Moscowесть).Deferred (в follow-up issue при закрытии)
LOGIN_FAILEDпо (ip, причина) или решение «режет шлюз».LOGINпервого запроса берёт второе соединение из пула; при всплеске после рестарта возможна потеря события (логируется).LOGINпишется при каждой выдаче dev-токена (dev-вход = два события)./api/v1и 405 от StaticFiles наPOST /— английские тексты.create_app(settings)— lifespan/S3/NATS читают модульныйsettings.CORS_ORIGINSбез нормализации хвостового/.LOGIN_FAILEDдля неоднозначной учётной записи и «аутентификация не настроена»;create_appставитSessionAudit; HEAD/OPTIONS под/api/v1.arm-core.🤖 Generated with Claude Code
https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
*без allow_credentials (ревью R-11, #9) e8d14edfbb