Уровень ревью — high, охват — весь код проекта (не только диапазон main..dev), как выбрал владелец.
/code-review high тремя прогонами по слоям, чтобы находки оставались предметными: backend/app (роутеры → сервисы → модели, аутентификация, статистика на сыром SQL, SSE); frontend/src (компоненты, хуки, роутинг; сгенерированный api/schema.d.ts исключён); backend/tests + инфраструктура (alembic/, scripts/, deploy/, compose-файлы, лаунчеры).
Отсев находок: уровень high даёт и неуверенные гипотезы — каждую проверяю по коду до правки.
Правки в ветке issue-8-code-review логическими коммитами: сначала корректность, затем упрощения.
/simplify по коду, которого коснулось ревью.
Инварианты из CLAUDE.md не трогаю: изоляция dev-стаба от прод-артефакта, слои routers → services → models, отсутствие Relationship, ветвление окружений только через core/config.py, UTC + APP_TZ_OFFSET_HOURS. Формула League Points — предмет вехи v1.5 (#22/#23), в ревью не переписываю.
Находки, требующие продуктового решения, смены API или крупного рефакторинга, завожу отдельными задачами со ссылкой на #8, а не чиню молча.
Критерии готовности
Оба скила прогнаны по заявленному охвату.
Каждая находка закрыта одним из трёх способов: исправлена в ветке, вынесена в отдельную задачу, отклонена с обоснованием в отчёте.
Поведение не изменилось: pytest — 74 passed, npm run build — зелёный.
PR в dev открыт. Мёрж dev→main (релиз с версией на merge-коммите) остаётся за вами.
Ветка:issue-8-code-review от dev
## План выполнения
Уровень ревью — `high`, охват — **весь код проекта** (не только диапазон `main..dev`), как выбрал владелец.
1. `/code-review high` тремя прогонами по слоям, чтобы находки оставались предметными: `backend/app` (роутеры → сервисы → модели, аутентификация, статистика на сыром SQL, SSE); `frontend/src` (компоненты, хуки, роутинг; сгенерированный `api/schema.d.ts` исключён); `backend/tests` + инфраструктура (`alembic/`, `scripts/`, `deploy/`, compose-файлы, лаунчеры).
2. Отсев находок: уровень `high` даёт и неуверенные гипотезы — каждую проверяю по коду до правки.
3. Правки в ветке `issue-8-code-review` логическими коммитами: сначала корректность, затем упрощения.
4. `/simplify` по коду, которого коснулось ревью.
5. Инварианты из `CLAUDE.md` не трогаю: изоляция dev-стаба от прод-артефакта, слои `routers → services → models`, отсутствие `Relationship`, ветвление окружений только через `core/config.py`, UTC + `APP_TZ_OFFSET_HOURS`. Формула League Points — предмет вехи v1.5 (#22/#23), в ревью не переписываю.
6. Находки, требующие продуктового решения, смены API или крупного рефакторинга, завожу отдельными задачами со ссылкой на #8, а не чиню молча.
**Критерии готовности**
- Оба скила прогнаны по заявленному охвату.
- Каждая находка закрыта одним из трёх способов: исправлена в ветке, вынесена в отдельную задачу, отклонена с обоснованием в отчёте.
- Поведение не изменилось: `pytest` — 74 passed, `npm run build` — зелёный.
- PR в `dev` открыт. Мёрж `dev→main` (релиз с версией на merge-коммите) остаётся за вами.
**Ветка:** `issue-8-code-review` от `dev`
Итог:/code-review high тремя прогонами (бэкенд, фронт, тесты и инфраструктура) и /simplify четырьмя углами по всему проекту. Исправлено 20 находок — среди них обход каталога ачивок, из-за которого админский запрос сносил /data целиком; неработавшая оптимистичная блокировка при правке участников и вложений; гонка индексов в создании партии; разлогин при обрыве связи. Убраны N+1 и дубли: общий загрузчик файлов, единый источник времени, client_ip, read_capped_image, общие ключи инвалидации.
Отдельно: прогон ревью по тестам поймал, что моя же первая проверка обхода каталога была вакуумной — httpx нормализует .. до отправки, и тест прошёл бы и без защиты. Переписал на percent-кодированную форму и убедился, что он краснеет при снятой защите.
Вынесено в отдельные задачи (требуют вашего решения, молча чинить не стал): #28, #29, #30, #32, #33.
Статус:Status/In Review Осталось за вами: ревью и мёрж PR — задача закроется автоматически. Затем релизный мёрж dev→main с версией на merge-коммите: этап v1.35 после закрытия #8 остаётся только с задачами, которые я завёл сегодня, — решите, брать ли их в этот релиз или перенести.
Работа выполнена, открыт PR: https://gitea.arseniev.info/NotBigGhost/ForbiddenStarsApp/pulls/34
**Итог:** `/code-review high` тремя прогонами (бэкенд, фронт, тесты и инфраструктура) и `/simplify` четырьмя углами по всему проекту. Исправлено 20 находок — среди них обход каталога ачивок, из-за которого админский запрос сносил `/data` целиком; неработавшая оптимистичная блокировка при правке участников и вложений; гонка индексов в создании партии; разлогин при обрыве связи. Убраны N+1 и дубли: общий загрузчик файлов, единый источник времени, `client_ip`, `read_capped_image`, общие ключи инвалидации.
Отдельно: прогон ревью по тестам поймал, что моя же первая проверка обхода каталога была вакуумной — httpx нормализует `..` до отправки, и тест прошёл бы и без защиты. Переписал на percent-кодированную форму и убедился, что он краснеет при снятой защите.
**Проверки:** `pytest` — 81 passed (было 74, добавлено 7 тестов); `npm run build` — успешно.
**Вынесено в отдельные задачи** (требуют вашего решения, молча чинить не стал): #28, #29, #30, #32, #33.
**Статус:** `Status/In Review`
**Осталось за вами:** ревью и мёрж PR — задача закроется автоматически. Затем релизный мёрж `dev→main` с версией на merge-коммите: этап v1.35 после закрытия #8 остаётся только с задачами, которые я завёл сегодня, — решите, брать ли их в этот релиз или перенести.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Проход по коду скилами /code-review и /simplify. После проведение необходимых работ и мёрж на основную ветку.
Зависит от: #1, #2, #4, #17
Последняя задача в этапе.
План выполнения
Уровень ревью —
high, охват — весь код проекта (не только диапазонmain..dev), как выбрал владелец./code-review highтремя прогонами по слоям, чтобы находки оставались предметными:backend/app(роутеры → сервисы → модели, аутентификация, статистика на сыром SQL, SSE);frontend/src(компоненты, хуки, роутинг; сгенерированныйapi/schema.d.tsисключён);backend/tests+ инфраструктура (alembic/,scripts/,deploy/, compose-файлы, лаунчеры).highдаёт и неуверенные гипотезы — каждую проверяю по коду до правки.issue-8-code-reviewлогическими коммитами: сначала корректность, затем упрощения./simplifyпо коду, которого коснулось ревью.CLAUDE.mdне трогаю: изоляция dev-стаба от прод-артефакта, слоиrouters → services → models, отсутствиеRelationship, ветвление окружений только черезcore/config.py, UTC +APP_TZ_OFFSET_HOURS. Формула League Points — предмет вехи v1.5 (#22/#23), в ревью не переписываю.Критерии готовности
pytest— 74 passed,npm run build— зелёный.devоткрыт. Мёржdev→main(релиз с версией на merge-коммите) остаётся за вами.Ветка:
issue-8-code-reviewотdevРабота выполнена, открыт PR: #34
Итог:
/code-review highтремя прогонами (бэкенд, фронт, тесты и инфраструктура) и/simplifyчетырьмя углами по всему проекту. Исправлено 20 находок — среди них обход каталога ачивок, из-за которого админский запрос сносил/dataцеликом; неработавшая оптимистичная блокировка при правке участников и вложений; гонка индексов в создании партии; разлогин при обрыве связи. Убраны N+1 и дубли: общий загрузчик файлов, единый источник времени,client_ip,read_capped_image, общие ключи инвалидации.Отдельно: прогон ревью по тестам поймал, что моя же первая проверка обхода каталога была вакуумной — httpx нормализует
..до отправки, и тест прошёл бы и без защиты. Переписал на percent-кодированную форму и убедился, что он краснеет при снятой защите.Проверки:
pytest— 81 passed (было 74, добавлено 7 тестов);npm run build— успешно.Вынесено в отдельные задачи (требуют вашего решения, молча чинить не стал): #28, #29, #30, #32, #33.
Статус:
Status/In ReviewОсталось за вами: ревью и мёрж PR — задача закроется автоматически. Затем релизный мёрж
dev→mainс версией на merge-коммите: этап v1.35 после закрытия #8 остаётся только с задачами, которые я завёл сегодня, — решите, брать ли их в этот релиз или перенести.