fix(tradein): enable deactivate_stale_avito schedule on prod (#759) #1096
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1096
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/759-enable-deactivate-schedule"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #759 (follow-up к QA-находке 06.06).
Проблема
QA выявил: task
deactivate_stale_avitoзаведён в коде (scheduler.py), ноscrape_schedulesid=111 в проде имеетenabled=false→ задача ни разу не отработала (last_run_id=NULL, 0 прогонов,next_run_at=2026-06-01в прошлом).Root cause
Миграция
090_scrape_schedules_seed_deactivate_stale_avito.sqlиспользуетON CONFLICT (source) DO NOTHING. На проде строкаsource='deactivate_stale_avito'уже существовала сenabled=false(pre-release seed) →DO NOTHINGмолча пропустил INSERT, оставивenabled=false. Seed-дефолт в090ужеenabled=true(для fresh DB корректно) — чинить нужно было только существующую прод-строку.Fix
data/sql/100_enable_deactivate_stale_avito.sql— идемпотентныйUPDATE ... SET enabled=true, next_run_at=NOW() WHERE source='deactivate_stale_avito' AND enabled=false(guardenabled=false→ повторный прогон = 0 строк). Авто-применяется на деплое через_schema_migrations.tests/test_deactivate_stale_avito.py(existence, source, SET enabled, idempotency, BEGIN/COMMIT, no psycopg-trap, next_run_at reset).Verify
39 passed (23 existing + 7 new + 9 scheduler),
ruff checkclean.После мержа+деплоя задача начнёт деактивировать stale-avito (TTL 10д) в ночном окне 06:00 UTC.
✅ APPROVE
Точечный idempotent prod-hotfix QA-находки #759:
tradein-mvp/backend/data/sql/(проверил дерево main — highest 099, нет коллизии; gendesign100_tradein_fdw_role.sql— другое дерево).UPDATE ... SET enabled=true, next_run_at=NOW() WHERE source='deactivate_stale_avito' AND enabled=false— guardenabled=false→ повторный прогон = 0 строк. Non-destructive (одна конкретная disabled-строка).ON CONFLICT (source) DO NOTHINGоставил pre-seed disabled-строку; fix чинит только её, не трогая 090 seed-default (там уже enabled=true для fresh DB).no_psycopg_trapподтверждает). Авто-apply через_schema_migrations(deploy-tradein.yml).Merge → deploy-tradein verify. NB: для DDL-PR прод-health недостаточен (миграция до compose-up) — подтверждение «schedule enabled» (
scrape_schedules.enabled=trueдля deactivate_stale_avito) за postgres-tradein/qa-окном.