При сверке 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
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
Сверка с текущим dev: пункты про ParticipantInput и комментарий canModify в MatchDetailPage.tsx уже исправлены прошлыми PR, остальные актуальны.
Решения владельца: scripts/export-prod.shудалить (вместе с блоком export-ignore в .gitattributes и упоминаниями в README); у админ-входа только поправить комментарий — лимиты не меняются.
Тексты про методы входа — config.py, .env.example, telegram.py, dev_stub.py, dev_auth.py, login.py — привести к факту: логин/пароль и Telegram везде, stub только в development.
admin_login.py (лимиты как у игрока, при успехе снимаются все счётчики), security.client_ip (адрес за прокси уже подставляет uvicorn).
## План выполнения
Сверка с текущим `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`
Итог: все пункты закрыты: устаревшие тексты про вход, лимиты админа, 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 — задача закроется автоматически.
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.
При сверке CLAUDE.md и документации с кодом нашлись комментарии, сообщения скриптов и конфиги, которые расходятся с текущим поведением. В основном они остались после появления входа по логину/паролю и перехода прода на образы из реестра. Поведение приложения это (кроме export-скриптов) не ломает, но вводит в заблуждение и людей, и ассистента.
Вход и методы аутентификации
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), а докстринг утверждает обратное. Удалить или начать использовать.h -u origin dev+ управляющие символы (выводgit log, похоже, случайно ушёл в файл при набореgit push -u origin dev). Добавлен в коммите865c967. Удалить из репозитория.Найдено при сверке CLAUDE.md и документации с кодом.
Устаревшие комментарии, подсказки и документация; мусорный файл в репозиторииto Устаревшие комментарии и подсказки в коде, export-скрипты; мусорный файл в репозиторииПлан выполнения
Сверка с текущим
dev: пункты проParticipantInputи комментарийcanModifyвMatchDetailPage.tsxуже исправлены прошлыми PR, остальные актуальны.Решения владельца:
scripts/export-prod.shудалить (вместе с блокомexport-ignoreв.gitattributesи упоминаниями в README); у админ-входа только поправить комментарий — лимиты не меняются.config.py,.env.example,telegram.py,dev_stub.py,dev_auth.py,login.py— привести к факту: логин/пароль и Telegram везде, stub только вdevelopment.admin_login.py(лимиты как у игрока, при успехе снимаются все счётчики),security.client_ip(адрес за прокси уже подставляет uvicorn).run.ps1/run.sh,docker-compose.yml:24-25,.env.example(build-push),Caddyfile(autossh).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Работа выполнена, открыт 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 — задача закроется автоматически.