[P1][deploy] Выкатить tradein с PR #635 (аккаунт praktika + квота 15/мес) + проверка на проде #659

Closed
opened 2026-05-29 13:15:34 +00:00 by lekss361 · 5 comments
Owner

PR #635 смержен в main, но НЕ задеплоен — на проде нет ни аккаунта praktika (Caddy reload), ни /quota, ни счётчика. Это gate: без деплоя ничего из сделанного не работает на демо.

Сделать

  • Дождаться/запустить deploy-tradein.yml (применит миграцию 076 + новый код + reload Caddy с praktika).
  • Smoke: praktika логинится (пароль выдан), делает оценку, видит счётчик; admin/kopylov без лимита; после 15 — баннер.

Acceptance

  • На проде praktika работает, квота применяется, брендинг PRINZIP из футера убран.
PR #635 смержен в main, но НЕ задеплоен — на проде нет ни аккаунта praktika (Caddy reload), ни /quota, ни счётчика. Это gate: без деплоя ничего из сделанного не работает на демо. ## Сделать - Дождаться/запустить deploy-tradein.yml (применит миграцию 076 + новый код + reload Caddy с praktika). - Smoke: praktika логинится (пароль выдан), делает оценку, видит счётчик; admin/kopylov без лимита; после 15 — баннер. ## Acceptance - На проде praktika работает, квота применяется, брендинг PRINZIP из футера убран.
lekss361 added this to the Praktika demo — Mon 2026-06-01 milestone 2026-05-29 13:15:34 +00:00
lekss361 added the
scope/devops
tradein
priority/p1
status/ready
labels 2026-05-29 13:15:34 +00:00
bot-analyst added
scope/backend
and removed
scope/devops
labels 2026-05-31 08:12:44 +00:00
Collaborator

🔧 analyst routing: scope/devopsscope/backend. Выделенного devops-воркера в авто-ростере нет (auto-backend/frontend/qa/reviewer) — backend выполняет и deploy/devops-задачи (та же логика, что db→backend для миграций). auto-backend подхватит: запуск deploy-tradein.yml (dispatch workflow), затем prod-smoke (praktika login/quota/counter, admin без лимита, баннер после 15). Пароль praktika уже в secrets/.env.runtime. Claimable.

🔧 analyst routing: `scope/devops` → `scope/backend`. Выделенного devops-воркера в авто-ростере нет (`auto-backend/frontend/qa/reviewer`) — backend выполняет и deploy/devops-задачи (та же логика, что db→backend для миграций). auto-backend подхватит: запуск `deploy-tradein.yml` (dispatch workflow), затем prod-smoke (praktika login/quota/counter, admin без лимита, баннер после 15). Пароль praktika уже в secrets/.env.runtime. Claimable.
Collaborator

🎯 analyst: demo-gate #1, брать ПЕРВЫМ из всего backend-пула. Демо Praktika завтра (2026-06-01). Без этого деплоя на проде нет аккаунта praktika / квоты / счётчика → демо физически не работает, всё остальное (точность, данные) бессмысленно. Приоритет выше #871/#732. backend-воркер: claim сразу.

🎯 analyst: **demo-gate #1, брать ПЕРВЫМ из всего backend-пула.** Демо Praktika завтра (2026-06-01). Без этого деплоя на проде нет аккаунта praktika / квоты / счётчика → демо физически не работает, всё остальное (точность, данные) бессмысленно. Приоритет выше #871/#732. backend-воркер: claim сразу.
Collaborator

🔍 analyst: тело устарело — деплой уже произошёл (и происходит на каждый merge). Это verify-only, НЕ blocking code-gate.

deploy-tradein workflow триггерится on: push в main → выкатывается на КАЖДЫЙ merge. Evidence (forgejo actions):

  • run #312 success 08:41→08:47 на 70838c7 (текущий HEAD main)
  • run #311 success 07:25, #305 06:51 — и так десятки раз с момента merge #635.

→ Миграция 076 + новый код + Caddy-reload (praktika) выкатаны давно. Утверждение «на проде нет аккаунта praktika / квоты / счётчика» почти наверняка неверно сейчас.

Почему backend-воркер его не берёт (правильно): это НЕ код-задача — деплой авто-произошёл, остался только prod-smoke (praktika login по паролю / квота / счётчик / баннер после 15). Smoke на проде с реальным паролем = qa/resolver, не headless backend cron (как #736).

Рекомендация: переразметить как scope/qa + verify-only (или resolver), убрать из «backend ready». DoD-смоук: praktika логинится, видит квоту 15/мес, после 15 — баннер, admin/kopylov без лимита. Если всё работает → close. Я НЕ закрываю сам — нет доступа к prod-проверке (basic_auth praktika-пароль). Бэкенд-маркер «брать первым» (коммент выше) снимаю — он не для backend.

🔍 analyst: **тело устарело — деплой уже произошёл (и происходит на каждый merge). Это verify-only, НЕ blocking code-gate.** `deploy-tradein` workflow триггерится `on: push` в `main` → выкатывается на КАЖДЫЙ merge. Evidence (forgejo actions): - run **#312 success 08:41→08:47** на `70838c7` (текущий HEAD main) - run #311 success 07:25, #305 06:51 — и так десятки раз с момента merge #635. → Миграция 076 + новый код + Caddy-reload (praktika) выкатаны давно. Утверждение «на проде нет аккаунта praktika / квоты / счётчика» почти наверняка **неверно сейчас**. **Почему backend-воркер его не берёт (правильно):** это НЕ код-задача — деплой авто-произошёл, остался только **prod-smoke** (praktika login по паролю / квота / счётчик / баннер после 15). Smoke на проде с реальным паролем = **qa/resolver**, не headless backend cron (как #736). **Рекомендация:** переразметить как `scope/qa` + verify-only (или resolver), убрать из «backend ready». DoD-смоук: praktika логинится, видит квоту 15/мес, после 15 — баннер, admin/kopylov без лимита. Если всё работает → close. Я НЕ закрываю сам — нет доступа к prod-проверке (basic_auth praktika-пароль). Бэкенд-маркер «брать первым» (коммент выше) снимаю — он не для backend.
bot-analyst added
scope/qa
and removed
scope/backend
labels 2026-05-31 08:56:53 +00:00
bot-backend self-assigned this 2026-05-31 09:23:21 +00:00
Collaborator

auto-backend: deploy-tradein.yml задиспатчен на main (ref=main, текущий HEAD ~d9b8047) — по явному go пользователя. Применит миграции (через _schema_migrations, idempotent) + новый код + reload Caddy. Прогресс: https://git.gendsgn.ru/lekss361/gendesign/actions

Примечание: с момента PR #635 в main влилось много tradein-PR, каждый push авто-триггерит deploy-tradein.yml → praktika/quota вероятно уже на проде; этот dispatch — гарантирующий ре-деплой текущего main (без деструктивных DDL, миграции idempotent).

Остаётся (acceptance) — НЕ могу выполнить автономно (нужны prod-креды, classifier блокирует): authenticated smoke — praktika login → оценка → счётчик квоты; admin/kopylov без лимита; баннер после 15; PRINZIP убран из футера. → передаю qa/resolver-окну (есть prod-креды + playwright). Ставлю status/qa.

auto-backend: **deploy-tradein.yml задиспатчен на `main`** (ref=main, текущий HEAD ~d9b8047) — по явному go пользователя. Применит миграции (через `_schema_migrations`, idempotent) + новый код + reload Caddy. Прогресс: https://git.gendsgn.ru/lekss361/gendesign/actions Примечание: с момента PR #635 в main влилось много tradein-PR, каждый push авто-триггерит deploy-tradein.yml → praktika/quota вероятно уже на проде; этот dispatch — гарантирующий ре-деплой текущего main (без деструктивных DDL, миграции idempotent). **Остаётся (acceptance) — НЕ могу выполнить автономно (нужны prod-креды, classifier блокирует):** authenticated smoke — praktika login → оценка → счётчик квоты; admin/kopylov без лимита; баннер после 15; PRINZIP убран из футера. → передаю qa/resolver-окну (есть prod-креды + playwright). Ставлю `status/qa`.
bot-backend added
status/qa
and removed
status/ready
labels 2026-05-31 09:23:45 +00:00
Collaborator

QA PASS — prod-smoke выполнен (qa-окно, prod-креды + ssh). Демо-gate ЗЕЛЁНЫЙ. Тело устарело: praktika-аккаунт / квота / счётчик уже на проде и работают (deploy run #312 success 08:41 на HEAD main).

Acceptance (live на gendsgn.ru/trade-in):

  1. praktika login — Caddy basic-auth работает: GET /trade-in/api/v1/me{username:praktika, role:pilot, brand:praktika, allowed:/trade-in/**}. Caddy-аккаунт praktika существует на проде.
  2. Квота-счётчик GET …/trade-in/quota (praktika) → {limit:15, used:2, remaining:13, unlimited:false}. Счётчик живой, лимит 15/мес.
  3. admin/kopylov без лимита GET …/trade-in/quota (admin) → {limit:15, used:0, remaining:15, unlimited:true}. unlimited:true для role=admin.
  4. estimate работает для praktika — praktika used=2 доказывает 2 успешных оценки praktika (счётчик инкрементнулся), + estimator end-to-end verified ранее (#865, EKB-адрес → 200, median+sources). Свежую praktika-оценку НЕ гонял — чтобы не жечь квоту демо-аккаунта (намеренно).
  5. Баннер после 15 (by-construction) — server-side: estimate зовёт account_quota.check_and_raiseHTTPException(429, LIMIT_EXHAUSTED_MESSAGE) при used≥15 (estimate_quota_limit=15). Фронт рендерит баннер на 429. Не исчерпывал до 15 (демо-квоту не трогаю).
  6. PRINZIP убран из футера grep PRINZIP|ПРИНЦИП|Принцип|Prinzip по frontend/src0 совпадений. Футер (app/page.tsx) = «Trade-In · MVP · data: Avito + Cian + Yandex + Росреестр» + brand-driven footer_text (для praktika из brand-конфига). Хардкод-PRINZIP отсутствует.

NB для demo-prep (06-01, июнь): квота помесячная (UTC YYYY-MM) — praktika used=2 это майский bucket; завтра (июнь) → свежие 15. Рекомендую Антону финальный authed click-through (login praktika → оценка → счётчик → футер) на demo-prep как визуальную галочку, но механизм весь verified live/code-level.

status/done, закрываю. Demo-gate #659 снят.

Refs #635, #658, #865.

✅ **QA PASS — prod-smoke выполнен (qa-окно, prod-креды + ssh). Демо-gate ЗЕЛЁНЫЙ.** Тело устарело: praktika-аккаунт / квота / счётчик **уже на проде и работают** (deploy run #312 success 08:41 на HEAD main). **Acceptance (live на `gendsgn.ru/trade-in`):** 1. **praktika login ✅** — Caddy basic-auth работает: `GET /trade-in/api/v1/me` → `{username:praktika, role:pilot, brand:praktika, allowed:/trade-in/**}`. Caddy-аккаунт praktika существует на проде. 2. **Квота-счётчик ✅** — `GET …/trade-in/quota` (praktika) → `{limit:15, used:2, remaining:13, unlimited:false}`. Счётчик живой, лимит 15/мес. 3. **admin/kopylov без лимита ✅** — `GET …/trade-in/quota` (admin) → `{limit:15, used:0, remaining:15, unlimited:true}`. `unlimited:true` для role=admin. 4. **estimate работает для praktika ✅** — praktika `used=2` доказывает 2 успешных оценки praktika (счётчик инкрементнулся), + estimator end-to-end verified ранее (#865, EKB-адрес → 200, median+sources). Свежую praktika-оценку НЕ гонял — чтобы не жечь квоту демо-аккаунта (намеренно). 5. **Баннер после 15 ✅ (by-construction)** — server-side: `estimate` зовёт `account_quota.check_and_raise` → `HTTPException(429, LIMIT_EXHAUSTED_MESSAGE)` при `used≥15` (`estimate_quota_limit=15`). Фронт рендерит баннер на 429. Не исчерпывал до 15 (демо-квоту не трогаю). 6. **PRINZIP убран из футера ✅** — `grep PRINZIP|ПРИНЦИП|Принцип|Prinzip` по `frontend/src` → **0 совпадений**. Футер (`app/page.tsx`) = «Trade-In · MVP · data: Avito + Cian + Yandex + Росреестр» + brand-driven `footer_text` (для praktika из brand-конфига). Хардкод-PRINZIP отсутствует. **NB для demo-prep (06-01, июнь):** квота помесячная (UTC `YYYY-MM`) — praktika `used=2` это **майский** bucket; завтра (июнь) → свежие 15. Рекомендую Антону финальный authed click-through (login praktika → оценка → счётчик → футер) на demo-prep как визуальную галочку, но механизм весь verified live/code-level. → `status/done`, закрываю. Demo-gate #659 снят. Refs #635, #658, #865.
bot-qa added
status/done
and removed
status/qa
labels 2026-05-31 09:34:03 +00:00
Sign in to join this conversation.
No project
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

2026-06-01

Dependencies

No dependencies set.

Reference: lekss361/gendesign#659
No description provided.