Устаревшие комментарии и подсказки в коде, export-скрипты; мусорный файл в репозитории #70

Closed
opened 2026-09-14 18:56:27 +03:00 by Agent · 2 comments
Collaborator

При сверке CLAUDE.md и документации с кодом нашлись комментарии, сообщения скриптов и конфиги, которые расходятся с текущим поведением. В основном они остались после появления входа по логину/паролю и перехода прода на образы из реестра. Поведение приложения это (кроме export-скриптов) не ломает, но вводит в заблуждение и людей, и ассистента.

Markdown-документация (README.md, deploy/**/README.md) уже исправлена отдельно, в эту задачу не входит. Здесь — только код, конфиги и скрипты.

Обновлено: вместе с удалением test-контура ушли пункты про «порт 8080», docker-compose.test.yml:18 (is_test) и проверку ключа в ветке test у run.sh. Номера строк ниже актуальны на момент обновления.

Вход и методы аутентификации

  • backend/app/core/config.py:34 — «вход Telegram+ник». Сейчас везде есть логин/пароль.
  • backend/app/core/config.py:69-70 — «dev: telegram+stub, prod: только telegram». Сейчас везде password + telegram, в dev ещё stub (auth/registry.py).
  • .env.example:9 — «вход TG+ник»; .env.example:44-45 — «prod → только Telegram».
  • backend/app/auth/telegram.py:5 — «в prod — единственный метод входа».
  • backend/app/auth/dev_stub.py:1 — «только не-production». На деле только development.
  • backend/app/routers/dev_auth.py:4-5 — «подключается… когда APP_ENV != production» (на деле только development); «код входа по логину остаётся только на деве» (вход по логину/паролю есть везде, только на деве — вход без пароля).
  • backend/app/auth/login.py:3-4 — «используется и Telegram-входом, и dev-входом». establish_session зовут ещё /auth/login и /auth/register.
  • backend/app/auth/admin_login.py:5-6 — «перебор здесь ограничиваем строже игроцкого». Лимиты такие же, как у игрока (5 / 20 / 50 за 15 минут), а при успехе админ сбрасывает все счётчики, включая IP, тогда как игрок IP-счётчик не сбрасывает. Нужно либо поправить комментарий, либо действительно ужесточить лимиты.
  • backend/app/core/security.py:176-179 — докстринг client_ip: «адрес придётся брать из X-Forwarded-For». Это уже делает uvicorn --proxy-headers + --forwarded-allow-ips (entrypoint.sh).

Права на партии

  • backend/app/services/match_service.py:49 — ParticipantInput: «для правки завершённой партии админом». PATCH /api/matches/{id} доступен любому участнику группы (can_modify).
  • frontend/src/pages/MatchDetailPage.tsx:105 — «(создатель/owner/admin)». can_modify = любой участник группы или админ.

Лаунчеры, compose, деплой

  • run.ps1:135, run.sh:83 — подсказка для production: «Deploy on Pi (from main branch): docker compose up -d --build». На Pi нет репозитория и сборки, образы тянутся из реестра, правильно docker compose up -d.
  • docker-compose.yml:24-25 — «build: оставлен как локальный фолбэк (сборка на Pi)» и отсылка к scripts/build-push.sh противоречат шапке файла (строки 3-6: на Pi сборка не используется; на Windows нужен build-push.ps1). То же в .env.example:80.
  • deploy/vps/Caddyfile:4 — «← Pi (autossh, постоянно)». autossh не используется: туннель — контейнер с обычным ssh и restart: unless-stopped.

Export-скрипты (git archive)

  • .gitattributes — в export-ignore нет backend/app/routers/dev_admin.py. scripts/export-prod.sh выгружает dev-роутер жёсткого удаления аккаунтов, хотя обещает прод-набор «без dev-входа» (подключается он всё равно только в development, но инвариант «dev-код не попадает в прод-артефакт» нарушен).
  • scripts/export-prod.sh:6 — пример «для прод-ветки: scripts/export-prod.sh /srv/fs prod». Ветки prod нет, прод-ветка — main.
  • scripts/export-prod.sh:20 — подсказка cp .env.example .env && docker compose up -d --build написана до перехода прода на образы из реестра. В docker-compose.yml теперь pull_policy: always и теги реестра — проверить, что эта команда действительно запускает локально собранный образ, и обновить подсказку. Скрипт также не удаляет docker-compose.temp.yml.
  • Решить, нужен ли export-prod.sh вообще: деплой на Pi идёт через реестр (build-push), и он давно не обновлялся (export-test.sh уже удалён вместе с test-контуром).

Прочее

  • backend/app/core/ratelimit.py:9 ссылается на CLAUDE.md, но он в .gitignore и в репозитории отсутствует. Лучше сослаться на core/events.py / deploy/README.md.
  • backend/app/db/init_db.py — create_db_and_seed() нигде не вызывается (тесты поднимают схему своей фикстурой в tests/conftest.py), а докстринг утверждает обратное. Удалить или начать использовать.
  • В git закоммичен мусорный файл с именем h -u origin dev + управляющие символы (вывод git log, похоже, случайно ушёл в файл при наборе git push -u origin dev). Добавлен в коммите 865c967. Удалить из репозитория.

Найдено при сверке CLAUDE.md и документации с кодом.

При сверке CLAUDE.md и документации с кодом нашлись комментарии, сообщения скриптов и конфиги, которые расходятся с текущим поведением. В основном они остались после появления входа по логину/паролю и перехода прода на образы из реестра. Поведение приложения это (кроме export-скриптов) не ломает, но вводит в заблуждение и людей, и ассистента. > Markdown-документация (`README.md`, `deploy/**/README.md`) уже исправлена отдельно, в эту задачу не входит. Здесь — только код, конфиги и скрипты. > > **Обновлено:** вместе с удалением test-контура ушли пункты про «порт 8080», `docker-compose.test.yml:18` (`is_test`) и проверку ключа в ветке `test` у `run.sh`. Номера строк ниже актуальны на момент обновления. ## Вход и методы аутентификации - [ ] `backend/app/core/config.py:34` — «вход Telegram+ник». Сейчас везде есть логин/пароль. - [ ] `backend/app/core/config.py:69-70` — «dev: telegram+stub, prod: только telegram». Сейчас везде password + telegram, в dev ещё stub (`auth/registry.py`). - [ ] `.env.example:9` — «вход TG+ник»; `.env.example:44-45` — «prod → только Telegram». - [ ] `backend/app/auth/telegram.py:5` — «в prod — единственный метод входа». - [ ] `backend/app/auth/dev_stub.py:1` — «только не-production». На деле только `development`. - [ ] `backend/app/routers/dev_auth.py:4-5` — «подключается… когда APP_ENV != production» (на деле только `development`); «код входа по логину остаётся только на деве» (вход по логину/паролю есть везде, только на деве — вход **без пароля**). - [ ] `backend/app/auth/login.py:3-4` — «используется и Telegram-входом, и dev-входом». `establish_session` зовут ещё `/auth/login` и `/auth/register`. - [ ] `backend/app/auth/admin_login.py:5-6` — «перебор здесь ограничиваем строже игроцкого». Лимиты такие же, как у игрока (5 / 20 / 50 за 15 минут), а при успехе админ сбрасывает **все** счётчики, включая IP, тогда как игрок IP-счётчик не сбрасывает. Нужно либо поправить комментарий, либо действительно ужесточить лимиты. - [ ] `backend/app/core/security.py:176-179` — докстринг `client_ip`: «адрес придётся брать из X-Forwarded-For». Это уже делает uvicorn `--proxy-headers` + `--forwarded-allow-ips` (`entrypoint.sh`). ## Права на партии - [ ] `backend/app/services/match_service.py:49` — `ParticipantInput`: «для правки завершённой партии админом». `PATCH /api/matches/{id}` доступен любому участнику группы (`can_modify`). - [ ] `frontend/src/pages/MatchDetailPage.tsx:105` — «(создатель/owner/admin)». `can_modify` = любой участник группы или админ. ## Лаунчеры, compose, деплой - [ ] `run.ps1:135`, `run.sh:83` — подсказка для production: «Deploy on Pi (from main branch): docker compose up -d --build». На Pi нет репозитория и сборки, образы тянутся из реестра, правильно `docker compose up -d`. - [ ] `docker-compose.yml:24-25` — «build: оставлен как локальный фолбэк (сборка на Pi)» и отсылка к `scripts/build-push.sh` противоречат шапке файла (строки 3-6: на Pi сборка не используется; на Windows нужен `build-push.ps1`). То же в `.env.example:80`. - [ ] `deploy/vps/Caddyfile:4` — «← Pi (autossh, постоянно)». autossh не используется: туннель — контейнер с обычным `ssh` и `restart: unless-stopped`. ## Export-скрипты (`git archive`) - [ ] `.gitattributes` — в `export-ignore` нет `backend/app/routers/dev_admin.py`. `scripts/export-prod.sh` выгружает dev-роутер жёсткого удаления аккаунтов, хотя обещает прод-набор «без dev-входа» (подключается он всё равно только в development, но инвариант «dev-код не попадает в прод-артефакт» нарушен). - [ ] `scripts/export-prod.sh:6` — пример «для прод-ветки: `scripts/export-prod.sh /srv/fs prod`». Ветки `prod` нет, прод-ветка — `main`. - [ ] `scripts/export-prod.sh:20` — подсказка `cp .env.example .env && docker compose up -d --build` написана до перехода прода на образы из реестра. В `docker-compose.yml` теперь `pull_policy: always` и теги реестра — проверить, что эта команда действительно запускает локально собранный образ, и обновить подсказку. Скрипт также не удаляет `docker-compose.temp.yml`. - [ ] Решить, нужен ли `export-prod.sh` вообще: деплой на Pi идёт через реестр (`build-push`), и он давно не обновлялся (`export-test.sh` уже удалён вместе с test-контуром). ## Прочее - [ ] `backend/app/core/ratelimit.py:9` ссылается на CLAUDE.md, но он в `.gitignore` и в репозитории отсутствует. Лучше сослаться на `core/events.py` / `deploy/README.md`. - [ ] `backend/app/db/init_db.py` — `create_db_and_seed()` нигде не вызывается (тесты поднимают схему своей фикстурой в `tests/conftest.py`), а докстринг утверждает обратное. Удалить или начать использовать. - [ ] В git закоммичен мусорный файл с именем `h -u origin dev` + управляющие символы (вывод `git log`, похоже, случайно ушёл в файл при наборе `git push -u origin dev`). Добавлен в коммите `865c967`. Удалить из репозитория. Найдено при сверке CLAUDE.md и документации с кодом.
Agent added the Kind/Documentation
Priority
Low
4
labels 2026-09-14 18:56:27 +03:00
Agent changed title from Устаревшие комментарии, подсказки и документация; мусорный файл в репозитории to Устаревшие комментарии и подсказки в коде, export-скрипты; мусорный файл в репозитории 2026-09-14 20:00:19 +03:00
Agent self-assigned this 2026-09-19 03:05:58 +03:00
Agent added the
Reviewed
Confirmed
1
label 2026-09-19 03:05:58 +03:00
Author
Collaborator

План выполнения

Сверка с текущим dev: пункты про ParticipantInput и комментарий canModify в MatchDetailPage.tsx уже исправлены прошлыми PR, остальные актуальны.

Решения владельца: scripts/export-prod.sh удалить (вместе с блоком export-ignore в .gitattributes и упоминаниями в README); у админ-входа только поправить комментарий — лимиты не меняются.

  1. Тексты про методы входа — config.py, .env.example, telegram.py, dev_stub.py, dev_auth.py, login.py — привести к факту: логин/пароль и Telegram везде, stub только в development.
  2. admin_login.py (лимиты как у игрока, при успехе снимаются все счётчики), security.client_ip (адрес за прокси уже подставляет uvicorn).
  3. Подсказки деплоя: run.ps1/run.sh, docker-compose.yml:24-25, .env.example (build-push), Caddyfile (autossh).
  4. ratelimit.py — ссылка на core/events.py вместо CLAUDE.md; удалить неиспользуемый db/init_db.py и мусорный файл h -u origin dev….

Критерии готовности

  • Все пункты задачи закрыты (исправлены или отмечены как уже исправленные).
  • pytest зелёный, run.ps1 — ASCII, docker compose config -q проходит.

Ветка: issue-70-stale-comments от dev

## План выполнения Сверка с текущим `dev`: пункты про `ParticipantInput` и комментарий `canModify` в `MatchDetailPage.tsx` уже исправлены прошлыми PR, остальные актуальны. Решения владельца: `scripts/export-prod.sh` **удалить** (вместе с блоком `export-ignore` в `.gitattributes` и упоминаниями в README); у админ-входа **только поправить комментарий** — лимиты не меняются. 1. Тексты про методы входа — `config.py`, `.env.example`, `telegram.py`, `dev_stub.py`, `dev_auth.py`, `login.py` — привести к факту: логин/пароль и Telegram везде, stub только в `development`. 2. `admin_login.py` (лимиты как у игрока, при успехе снимаются все счётчики), `security.client_ip` (адрес за прокси уже подставляет uvicorn). 3. Подсказки деплоя: `run.ps1`/`run.sh`, `docker-compose.yml:24-25`, `.env.example` (build-push), `Caddyfile` (autossh). 4. `ratelimit.py` — ссылка на `core/events.py` вместо CLAUDE.md; удалить неиспользуемый `db/init_db.py` и мусорный файл `h -u origin dev…`. **Критерии готовности** - Все пункты задачи закрыты (исправлены или отмечены как уже исправленные). - `pytest` зелёный, `run.ps1` — ASCII, `docker compose config -q` проходит. **Ветка:** `issue-70-stale-comments` от `dev`
Agent added the
Status
In Review
label 2026-09-19 03:12:31 +03:00
Author
Collaborator

Работа выполнена, открыт PR: #99

Итог: все пункты закрыты: устаревшие тексты про вход, лимиты админа, client_ip, подсказки деплоя, Caddyfile и ratelimit.py исправлены; export-prod.sh (с export-ignore), init_db.py и мусорный файл удалены. Пункты про ParticipantInput и canModify уже были исправлены прошлыми PR.
Проверки: pytest — 221 passed; docker compose config -q — ок; run.ps1 — ASCII; grep по старым формулировкам пуст.
Статус: Status/In Review
Осталось за вами: ревью и мёрж PR — задача закроется автоматически.

Работа выполнена, открыт PR: https://gitea.arseniev.info/NotBigGhost/ForbiddenStarsApp/pulls/99 **Итог:** все пункты закрыты: устаревшие тексты про вход, лимиты админа, `client_ip`, подсказки деплоя, Caddyfile и `ratelimit.py` исправлены; `export-prod.sh` (с `export-ignore`), `init_db.py` и мусорный файл удалены. Пункты про `ParticipantInput` и `canModify` уже были исправлены прошлыми PR. **Проверки:** `pytest` — 221 passed; `docker compose config -q` — ок; `run.ps1` — ASCII; grep по старым формулировкам пуст. **Статус:** `Status/In Review` **Осталось за вами:** ревью и мёрж PR — задача закроется автоматически.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: NotBigGhost/ForbiddenStarsApp#70