gendesign/.forgejo/workflows
bot-backend f31cb56081
All checks were successful
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m12s
CI / backend-tests (pull_request) Successful in 17m35s
CI Trade-In / changes (pull_request) Successful in 8s
CI / frontend-tests (pull_request) Successful in 1m11s
прод: лендинг ходил в чужой бэкенд — имя сервиса двоится между продуктами
Публичный лендинг отдавался БЕЗ витрины: без ленты сделок, без строк сверки
«прогноз против факта», без подписи разброса. Страница про точность — без
единого доказательства. Отдавалось 106 КБ вместо 241 КБ.

Причина. ПТИЦА и МЕРА — разные compose-проекты, но оба назвали свой сервис
backend и оба подключены к общей сети gendesign_shared. Изнутри фронта:

    backend         → 172.18.0.6 (МЕРА) + 172.18.0.9 (ПТИЦА)
    tradein-backend → 172.18.0.6

BACKEND_URL=http://backend:8000 уводил серверный рендер в бэкенд ПТИЦЫ, тот
отвечал 401 no authenticated user, и страница рендерилась пустой.

Отказ тихий вдвойне. fetch не бросает — приходит валидный HTTP-ответ, просто
чужой. И имя двоится, поэтому часть перегенераций попадала в правильный адрес:
утром страница была с данными, к обеду без них, и это выглядело случайной
поломкой, а не ошибкой конфигурации.

DATABASE_URL болен тем же: @postgres:5432 мог уйти в базу ПТИЦЫ. Там спасало
лишь несовпадение кредов — отказ вместо тихого чтения не тех данных. Полагаться
на это нельзя: защита держится на том, что у чужой базы нет пользователя с
нашим паролем. Переведён на однозначное имя во всех трёх сервисах.

Гейт check-compose-ambiguous-hosts.py: пересечение имён сервисов обоих compose
и запрет ссылаться на них как на хост. Селфтест по конвенции соседних гейтов —
он провалился дважды на моих же фикстурах (в них не было общего имени, то есть
ловить было нечего), и это ровно то, ради чего селфтест и нужен.

Фальсификация на настоящем файле: возврат backend:8000 даёт точную строку 479,
возврат @postgres — все четыре ссылки.
2026-08-30 16:07:41 +05:00
..
ci-tradein.yml chore(ci): node 20 отслужил — рантайм фронтов и оба CI-джоба на node 24 LTS 2026-08-29 14:02:55 +03:00
ci.yml прод: лендинг ходил в чужой бэкенд — имя сервиса двоится между продуктами 2026-08-30 16:07:41 +05:00
deploy-drift.yml feat(ops): сторож расхождения «прод ↔ main» — молчаливый недоехавший деплой становится видимым (#3029) 2026-08-27 12:35:43 +03:00
deploy-infra.yml feat(ops): у волта Obsidian появился автоматический бэкап (#3090) 2026-08-25 05:44:16 +00:00
deploy-metrics.yml fix(ops/metrics): тема «метрики» задаётся дефолтом, а не ручным заведением секрета 2026-08-27 22:28:52 +03:00
deploy-obsidian.yml fix(ci): стек CouchDB после переезда остаётся на своём хосте (#3087) 2026-08-24 17:58:56 +00:00
deploy-tradein.yml fix(tradein/deploy): подключить selectel-оверрайд — иначе после переезда бот умрёт молча (#3093) 2026-08-25 16:39:40 +00:00
deploy.yml chore(ops): адрес Poincare — 188.124.37.140 вместо заменённого 188.246.224.93 (#3110) 2026-08-27 11:23:37 +03:00
perimeter-smoke.yml ci: смоук периметра МЕРЫ запускается сразу после деплоя (#2917) (#2922) 2026-08-19 08:13:49 +00:00
stale-claims.yml fix(stale-claims): avoid SIGPIPE 141 — pass file path не pipe 2026-05-28 01:05:56 +03:00