[ВЛАДЕЛЬЦУ] Сводка: 8 пунктов, которые не чинятся кодом — учётки, ключи, получатель уведомлений, два решения #2704
Open
opened 2026-08-06 06:23:36 +00:00 by bot-backend
·
20 comments
No Branch/Tag specified
main
fix/3469-showcase-schedule
fix/3443-caddy-selfdowntime
fix/3463-db-statement-timeout
fix/3448-caddy-only-detection
fix/metrics-deploy-reloads-prometheus
feat/landing-showcase-band
fix/3452-corridor-advisory-zone
fix/alert-value-is-not-the-ratio
fix/3449-geocoder-cancel-orphan
fix/3451-tvf-deals-rooms
fix/msk-collector-net-retry
feat/msk-yandex-import
fix/3051-fetch-deals-rooms-dropped
feat/msk-collector-cian
fix/3256-asking-to-sold-buckets
fix/3083-estimate-throughput
fix/3274-part2b-gate
fix/3274-part2a-caddy-retry
fix/perimeter-smoke-retry-on-no-response
fix/3274-zero-downtime-frontend
fix/3274-part1-deploy-swap
fix/3412-cian-instance-relaunch
fix/3415-bucket-done-only-if-phases-ok
chore/backend-pool-wiring-tails
fix/3398-pool-ops-off-event-loop
fix/3402-followups-ban-kinds-curl
feat/3404-proxy-run-attribution
fix/cian-captcha-is-platform-refusal
refactor/3390-single-runs-module
fix/3398-estimator-valuations-proxy-pool
fix/3386-estimator-imv-proxy-pool
fix/3394-cian-sweep-houses-proxy-pool
fix/3393-interrupted-runs-outside-streaks
fix/drain-marks-inflight-app-tasks
fix/3384-no-proxy-at-batch-start
fix/3197-yandex-newbuilding-proxy-pool
fix/3376-price-history-decimal-slips
fix/backend-proxy-pool-flags
fix/3197-cian-history-backfill-proxy-pool
fix/3288-sidecar-ban-status-code
fix/3375-yandex-fullload-on-bucket-contract
fix/3380-deploy-metrics-alloy-recreate
fix/3354-alloy-query-secret-scrub
fix/3360-admin-prefix-anon-404
fix/3368-yandex-leaf-complete-flag
fix/3369-domclick-cancel-checkpoint
fix/3225-domklik-diff-percent
fix/smoke-history-path
fix/3288-breaker-block-kind
fix/3355-drain-mark-fullloads
fix/3191-yandex-detail-completeness
fix/3359-containment-cian-yandex
fix/3323-payment-init-fail-409
fix/3172-freshness-by-data
fix/3288-avito-ban-per-source
fix/3253-domclick-house-fields
fix/3312-defer-interval-minutes
fix/3324-rbac-401-oracle
fix/3274-deploy-window-error-page
fix/3343-auth-latency-flaky
fix/3315-exhaustive-containment-skip
fix/3338-backfill-save-false
fix/3339-thin-market-badge
fix/3154-glitchtip-secret-log-leak
fix/3333-drain-mark-all-sweeps
fix/3323-imv-thin-market-gate
fix/3324-mera-perimeter
fix/3323-coverage-copy-honesty
fix/3332-domclick-counter-identity
fix/3324-ptica-deploy-gate
fix/3316-role-single-source
fix/3319-citysweep-checkpoint
fix/3322-rosseti-stable-key
fix/3320-v2-honest-zeros
fix/3321-draft-fields-survive
fix/mera-mobile-nav-and-sticky
fix/audit-form-ux
fix/audit-coverage-500
fix/audit-dkp-price
fix/audit-accuracy-window
fix/audit-faq-contradiction
fix/perimeter-smoke-after-payments
feat/b2c-landing-honest-copy
feat/b2c-landing-live-numbers
feat/b2c-v3-becomes-root
feat/b2c-v3-port-v1-blocks
feat/b2c-report-redesign
feat/b2c-landing-v3-full
feat/3192b-yandex-phones
feat/3168-backfill-cursor-resume
fix/3118-domclick-no-proxy
fix/3170-yandex-combo-checkpoint
feat/3074-newbuilding-sweep-resume
fix/3163-infra-topic-default
fix/3156-tgbot-error-type
feat/3163-infra-topic-split
fix/3161-alertmanager-route-prefix
fix/3155-prometheus-no-alertmanager
feat/2997-drop-listings-geom-idx
fix/3122-boot-reap-observable
feat/3122-boot-reap
feat/3051-houses-region-code
feat/3074-cian-anchor-checkpoint
feat/3051-region-registry
fix/2656-anchor-ratio-freshness
fix/3114-scrub-credentials-in-logs
fix/3078-grafana-single-auth
fix/3081-honest-progress
fix/3063-pro-seller-derive
fix/3074-checkpoint-survives-claim
fix/3082-estimate-concurrency
fix/3044-enriched-total-seen
fix/telegram-pin-selectel-override
chore/compose-host-parameterised-resources
fix/revisit-floor-lateral-lookup
fix/avito-detail-fields
fix/3034-avito-fingerprint
fix/avito-offers-per-page
feat/3033-avito-secondary-filter
fix/2203-restore-drill-readiness
feat/2203-backup-staleness-and-forgejo
fix/2990-clean-start-initdb
fix/2924-yandex-jk-resolve-tried-at
fix/2992-upsert-distinct-gate
fix/2998-rosreestr-q2-partitions
feat/2936-null-penalty-flag
fix/2996-mislocated-houses-watchdog
fix/1781-secondary-only-param
fix/2934-risks-coverage
fix/2464-three-small
fix/2464-two-docstrings
fix/2464-zouit-label
fix/2464-building-pct-guard
fix/2464-download-binary-retry
fix/2986-permits-key
fix/2464-tep-docstring
fix/2464-act-date-backfill
fix/2464-area-bin-null
fix/2464-act-date-citation
fix/2464-detect-kind
fix/2464-status-negation
fix/2464-objective-zombie-sweep
fix/2464-inert-retry-config
fix/2464-default-profile-unique
fix/2464-zombie-any-running
fix/2464-catalog-skipped-counter
fix/2464-heat-loader-tx
fix/2464-objective-run-stuck
fix/2464-catalog-waf-breaker
fix/2464-lock-key-order
fix/2464-backfill-waf-abort
fix/2464-docs-vs-code
fix/2464-land-reservation-dedup
fix/2464-manual-list-validation
fix/2464-capacity-savepoints
fix/2464-leads-window-naming
fix/2464-zouit-count-label
fix/2464-catalog-batch-commits
fix/2464-html-zoning-fallback
fix/2950-lock-wait-observable
fix/2956-freshness-counts-failed-harvest
fix/2950-host-lock
fix/2953-nominatim-throttle
fix/2950-deploy-docker-lock
fix/2464-ird-lookups-savepoint
fix/2464-parcels-savepoint-pair
fix/2674-deal-floor-display
docs/2854-stale-justifications
chore/2857-drop-placeholder-columns
fix/2855-probe-protected-path
fix/2674-has-panorama
fix/house-imv-anchor-era
fix/2674-quality-cadastre-column
fix/sber-freshness-guard
fix/dkp-corridor-as-of
fix/scheduler-resume-checkpoint
fix/quarter-target-from-neighbour
fix/2687-domclick-ban-kind-platform
fix/2814-address-backfill
fix/2677-house-anchor-renovation
feat/tradein-paid-retention
chore/ci-config-cleanup
feat/mera-b2c-privacy
feat/tradein-payments-schema
chore/2674-dead-code-sweep
fix/2674-matching-tiers-honesty
fix/2674-avito-full-load-coverage
fix/2674-admin-metrics-honesty
fix/2674-writers-honor-schema
fix/2674-alerts-actually-fire
fix/2679-scraper-deploy-parity
fix/2674-house-imv-params
fix/2666-discount-plausibility-gate
feat/2435-cian-house-enrichment
fix/2657-domclick-block-not-done
feat/2571-login-throttle
fix/2660-display-freshness-segment
fix/2658-loud-skip-status
fix/2603-geocode-city-hint-tails
feat/2600-per-source-proxy-health
feat/tradein-v2-exposure-in-result-card
fix/tradein-avito-browser-proxy-pool
chore/tradein-cut-wasteful-scraping
fix/tradein-v2-deals-fallback-visible
fix/tradein-city-stamp-geo-guard
fix/tradein-cian-oblast-secondary
fix/tradein-implausible-build-year
fix/tradein-snapshot-query-perf
fix/tradein-asking-sold-city-scope
chore/tradein-purge-dead-mobileproxy
feat/tradein-asocks-rotation
fix/tradein-region-code-foreign-cities
fix/tradein-proxy-pool-self-healing
fix/tradein-backfill-listing-city-from-url
fix/tradein-geocode-queue-active-only
fix/tradein-geocode-city-hint
chore/tradein-remove-yandex-scripts
fix/tradein-listing-city-from-sweep
chore/tradein-remove-yandex-geocoder
chore/tradein-remove-n1
fix/tradein-geocoder-fail-closed
fix/tradein-ui-city-label-clip
feat/tradein-ui-city-hint
fix/tradein-coords-backfill-city-gate
fix/tradein-geocoder-city-default
fix/tradein-anchor-geo-scope
fix/tradein-avito-detail-oblast
feat/tradein-price-bands-refresh
feat/tradein-caddy-cutover
fix/tradein-team-nav-and-401
feat/tradein-team-dashboard
fix/tradein-team-list-order
feat/tradein-team-api
feat/tradein-login-ui
feat/tradein-auth-core
feat/tradein-auth-password-foundation
feat/tradein-auth-users-schema
fix/tradein-rbac-test-user2-expired
fix/tradein-auth-revoke-user2
fix/2013-avito-cohort-null
fix/rbac-test-user2-expired
fix/expire-brusnika-trial-access
feat/tradein-domclick-house-sku-schema
chore/design-sync-tradein
fix/tradein-deploy-scraper-paths-filter
fix/tradein-no-numberless-house-insert
fix/tradein-dedup-fias-pass-no-geoguard
feat/tradein-fias-estimate-frontend
fix/tradein-dedup-by-fias
feat/tradein-fias-tier-matching
fix/tradein-v2-uiux-p1
fix/objective-lots-dedup-1964
fix/audit-followups-1953
feat/concept-house-picker-1965-stage3b
feat/concept-house-catalog-1965-stage3a
feat/concept-live-massing-1965-stage2b
feat/concept-recompute-1965-stage2a
feat/concept-section-1965-stage1
fix/best-layouts-per-object-snapshot-1956
fix/deficit-segmentation-1959
feat/tradein-hedonic-ground-floor
fix/report-map-points-1961
fix/report-microcopy-1963
fix/report-nspd-zoning-1962
fix/report-frontend-display-1953
perf/tradein-estimate-audit
perf/best-layouts-objects-first
fix/171-migration-path
perf/171-objective-crm-report-month-idx
fix/1926-app-log-stdout
fix/estimator-tiebreaker-nanalogs
fix/1917-fetch-json-network-retry
fix/1926-scrape-runs-total-seen
fix/1781-house-fk-source-identity
feat/39-osrm-per-category
feat/1746-utility-infra-map
fix/test-849-savepoint-count
fix/parking-economics-by-class
fix/zouit-engineering-area-gate
fix/zoning-resolution-decouple
feat/dcf-velocity-schedule
feat/zone-regulation-backfill
chore/mock-financial-estimate
fix/finmodel-split-disclosure-threshold
feat/finmodel-financing
feat/finmodel-sitefinder-bridge
feat/finmodel-dcf
feat/finmodel-price-calibration
feat/finmodel-cost-cascade
audit/1871-p2-estimator-dedup-split
audit/1871-p2-avito-coord
audit/1871-p3-uiux
audit/1871-p2-invest-moi
audit/1871-p2-velocity-market
audit/1871-p1-3-isreal-stubs
audit/1871-p1-2-ghost-anchor-guard
audit/1871-p1-scenarios-collapse
revert/site-finder-v2
fix/v2-remove-resource-legend
fix/v2-map-legend-position
feat/site-finder-v2-map-light-polish
rollback/site-finder-home-light
feat/site-finder-v2-cockpit
rollback/sf-old-analysis-design
feat/ptica-tabs-6-6-reports-params
fix/ptica-vri-row
feat/ptica-map-glyphs-sitefinder-dark
fix/ptica-3d-preview-product-verdict
fix/ptica-button-fontsize
fix/ptica-parity-data-mapping
chore/ptica-iso-preview-spin
fix/ptica-inter-map-product
fix/ptica-visual-parity
fix/ptica-left-rail
feat/ptica-cockpit-complete-bottom
feat/ptica-default-and-rich-map
feat/ptica-real-ksit-frontend
feat/tradein-ekb-geoportal-buildings
fix/sf-feedback-batch
feat/avito-newbuilding-sweep
feat/browser-concurrent-pool
fix/backfill-kadastr-column
fix/avito-proactive-ip-rotate
feat/activate-domclick-sweep
feat/avito-newbuilding-capture
fix/house-id-fk-realtime-link
fix/migration-162-table-if-exists
feat/riasurt-sverdl-layers-108
fix/sber-dataset-paths-902
fix/conflict-resolution-freshness-1539
feat/objective-lots-history-writer-307-obj6
feat/velocity-mv-61
fix/objective-mapping-is-reviewed-gate-307-obj2
fix/cian-detail-rich-fields
fix/avito-novostroyki-segment
feat/yandex-novostroyki-newflat
fix/ci-dedup-runner-storm-1709
fix/emiss-pk-granularity-1687
feat/listings-segment-param-1188
fix/inn-regex-word-boundary-1682
fix/excel-deficit-horizon-1590
fix/admin-scrape-validation
fix/admin-leads-interval-cast-1694
fix/dkp-corridor-doc-p10p90-1695
fix/weather-wind-d-allnone
test/residential-zone-rawprops-1681
fix/domrf-badge-regex-narrow-1686
feat/yandex-camoufox-transport
fix/score-sat-factor-1509
fix/base-pace-room-bucket-1593
fix/gate-verdict-no-blocker-1617
fix/confidence-deal-count-window-1637
fix/match-economics-1511-1512
fix/listings-partial-indexes-1398
fix/smart-suggestions-threshold-1503
fix/dkp-corridor-percentile-1520
fix/enrich-economics-window-1513
fix/leads-stats-window-1383
fix/poi-score-scale-1486
fix/geo-weight-floor-1633
fix/inn-regex-context-1640
fix/domrf-status-classify-1609
fix/emiss-period-dedup-1606
fix/cian-paginate-tail-1393
fix/normalize-zero-fill-guard-1638
fix/supply-view-devgroup-key-1650
fix/residential-zone-detect-1353
fix/score-label-threshold-1357
fix/trend-ratio-vprior-zero-1508
fix/district-median-dedup-1352
fix/supply-layers-overlap-1355
fix/pdf-expires-at-1530
fix/quartirography-area-bucket-1406
fix/cad-zones-multipolygon-1344
fix/sold-pct-market-verdict-1407
fix/week-review-finish
fix/week-review-backend-v2
feat/plan-vectorization-spike-299
fix/1668-analyze-confidence
fix/1667-metro-block
fix/1666-layout-velocity-beat
chore/remove-n1-scraper
fix/cian-kitchen-area
feat/yandex-detail-backfill
feat/avito-detail-backfill
fix/best-layouts-bucket-normalization
fix/gknspecial-incremental-commit-per-prefix
fix/okn-objects-full-registry-load
fix/parcel-ird-overlap-except-expand
fix/report-assembler-confounded-keys
fix/job-settings-json-persist-v2
fix/nspd-geo-soft-time-limit-passthrough
fix/nspd-soft-time-limit-v2
fix/pilot-request-modal-validation
fix/recommend-mix-saturation-latest-snapshot
fix/scrape-cadastre-fail-counter-v2
fix/izyatie-ocr-cad-normalize
fix/job-settings-panel-json-state-persist
fix/noise-loader-savepoint-per-row
fix/objective-sync-config-bare-except
fix/parcel-snapshot-mdash-double-escape
fix/poi-loader-leap-year-date-replace
fix/scrape-cadastre-permanent-fail-counter
fix/usermenu-analyst-role-label
feat/location-948b-r
feat/location-entity-948b
feat/insight-entity-948a
feat/analyst-role-audit-962
feat/cbr-inflation-macro-946
feat/cian-zhk-resolve-972
perf/forecast-parallel-horizons-1129
feat/newbuilding-enrich-backfill-972
feat/emiss-macro-indicators-946
feat/rosstat-emiss-macro-946
ci/frontend-vitest-job
chore/frontend-vitest-wkt-tests
feat/forecast-meta-footer
feat/forecast-future-supply-competitors
feat/forecast-docx-pptx-buttons
feat/forecast-scoring-panel
feat/forecast-product-tz-block
feat/market-map-layers-999
feat/forecast-chart-section6
feat/forecast-export-pptx-959
feat/forecast-export-docx-959
feat/forecast-export-ui-959
feat/forecast-export-telegram-959
feat/forecast-export-md-959
feat/analyze-response-contract-961
feat/competitor-velocity-spatial-fallback-968
fix/frontend-healthcheck-hostname
feat/analyze-market-coords-999
fix/site-finder-entry-crash-1001
feat/horizon-selector-996
feat/forecast-section-998
feat/forecast-endpoint-horizon-enqueue
feat/forecast-celery-task-persist
feat/forecast-orchestrator-service
feat/demand-supply-months-of-inventory
feat/wire-district-resolver
feat/district-vocab-reconciliation
fix/affordability-market-spread
fix/backtest-sig-gate
feat/wire-978-almon-rate-regime
feat/backtest-oos-almon-seasonal
ci/forgejo-pytest-gate
fix/tradein-praktika-logo-form-scroll
feat/yandex-exhaustive-price-room
feat/794-sber-time-adjust
chore/bot-harness-tuning
docs/agent-usage-throttle-qa-terminal
fix/avito-sweep-single-run-guard
chore/analyst-inbound-queue-tradein-db
feat/801-preview-full-wt
chore/bot-safety-followups
feat/tradein-avito-imv-fix
feat/tradein-repair-coef-calibration
feat/tradein-avito-houses-fix
feat/tradein-address-precision
feat/tradein-backfill-prioritize-listings
feat/tradein-geocode-deals-nominatim
feat/tradein-geocode-deals-from-houses
feat/tradein-same-building-match
feat/claude-envvars-and-stale-cron
No results found.
Labels
Clear labels
Находки полного мульти-агентного ревью (Claude Fable 5, 2026-06-09)
Новое ТЗ от Ген Геныча (июнь 2026): Site Finder v2 — ИИ-прогноз продуктовой стратегии девелопера. Актуальный приоритет.
Admin UI / internal tools / pipeline tracker
Аналитика данных / matching
Authentication / authorization / multi-tenancy
Автоматизация / cron / scheduler
Something isn't working
Коммерческая воронка / пилоты / pipeline / реестр ПО
Operational housekeeping
Forgejo Actions / build pipeline
152-ФЗ / реестр ПО / legal / TOS
Data sources, parsers, ETL
Уникальные данные — sales tracker, CRM aggregation
README / runbooks / onboarding
This issue or pull request already exists
Developer experience / build speed
New feature or request
Feedback from Max (Senior partner)
Generative Design — concept generation engine
Pending team sync / decision
Human review/decision required
Monitoring / metrics / logs / Sentry / Uptime
Kill-switch — all autonomous bots pause
Latency / throughput / DB query tuning
Critical / production-blocker
High priority
Normal priority
Низкий приоритет (follow-up, tech-debt)
Backend Python — FastAPI, Celery, scrapers
DB migrations, indexes, SQL
docker-compose, Caddy, workflows
Frontend — Next.js, React, TypeScript
Tests, smoke, Playwright
Скрапперы (Avito/Cian/Yandex/Rosreestr)
Security audit / secrets / vulnerabilities
Site Finder scoring quality & data layer
Stage 1: Generative MVP (нед 2-7)
Stage 2: Site Finder MVP (нед 8-12)
Blocked — needs human intervention
Closed, completed
Raw/fuzzy task filed by human — auto-analyst подхватывает: code-archeology + декомпозиция в actionable scope/* + status/ready (или split на под-issues)
Reviewer/QA вернул worker на доработку — worker сам чинит свой PR (fixup), НЕ требует human (в отличие от status/blocked)
PR merged, awaiting smoke test
Ready for pickup by worker bot
PR open, awaiting code review
Work in progress (worker claimed)
Технический долг
Trade-In MVP проект
User experience / responsive / conversion
Week review 1 — находки multi-agent аудита проекта (2026-06-14)
This will not be worked on
Исходно-разрешительная документация — слой ограничений участка для analyze-таблицы
Trade-In Estimator — проект оценки вторичного жилья
Fable 5 ревью
Находки полного мульти-агентного ревью (Claude Fable 5, 2026-06-09)
GG-форсайт
Новое ТЗ от Ген Геныча (июнь 2026): Site Finder v2 — ИИ-прогноз продуктовой стратегии девелопера. Актуальный приоритет.
admin
Admin UI / internal tools / pipeline tracker
analytics
Аналитика данных / matching
auth
Authentication / authorization / multi-tenancy
automation
Автоматизация / cron / scheduler
bug
Something isn't working
business
Коммерческая воронка / пилоты / pipeline / реестр ПО
chore
Operational housekeeping
ci
Forgejo Actions / build pipeline
compliance
152-ФЗ / реестр ПО / legal / TOS
data
Data sources, parsers, ETL
data-moat
Уникальные данные — sales tracker, CRM aggregation
docs
README / runbooks / onboarding
duplicate
This issue or pull request already exists
dx
Developer experience / build speed
enhancement
New feature or request
feedback/max
Feedback from Max (Senior partner)
generative
Generative Design — concept generation engine
needs-discussion
Pending team sync / decision
needs-human
Human review/decision required
observability
Monitoring / metrics / logs / Sentry / Uptime
pause-bots
Kill-switch — all autonomous bots pause
performance
Latency / throughput / DB query tuning
priority/p0
Critical / production-blocker
priority/p1
High priority
priority/p2
Normal priority
priority/p3
Низкий приоритет (follow-up, tech-debt)
scope/backend
Backend Python — FastAPI, Celery, scrapers
scope/db
DB migrations, indexes, SQL
scope/devops
docker-compose, Caddy, workflows
scope/frontend
Frontend — Next.js, React, TypeScript
scope/qa
Tests, smoke, Playwright
scrapers
Скрапперы (Avito/Cian/Yandex/Rosreestr)
security
Security audit / secrets / vulnerabilities
site-finder
Site Finder scoring quality & data layer
stage/1
Stage 1: Generative MVP (нед 2-7)
stage/2
Stage 2: Site Finder MVP (нед 8-12)
status/blocked
Blocked — needs human intervention
status/done
Closed, completed
status/needs-analysis
Raw/fuzzy task filed by human — auto-analyst подхватывает: code-archeology + декомпозиция в actionable scope/* + status/ready (или split на под-issues)
status/needs-fix
Reviewer/QA вернул worker на доработку — worker сам чинит свой PR (fixup), НЕ требует human (в отличие от status/blocked)
status/qa
PR merged, awaiting smoke test
status/ready
Ready for pickup by worker bot
status/review
PR open, awaiting code review
status/wip
Work in progress (worker claimed)
tech-debt
Технический долг
tradein
Trade-In MVP проект
ux
User experience / responsive / conversion
week ревью 1
Week review 1 — находки multi-agent аудита проекта (2026-06-14)
wontfix
This will not be worked on
ИРД
Исходно-разрешительная документация — слой ограничений участка для analyze-таблицы
вторичка
Trade-In Estimator — проект оценки вторичного жилья
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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
ИРД
вторичка
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2704
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Всё, что не может быть сделано без вас. Собрано в одном месте, потому что по каждой задаче отдельно неочевидно, что она ждёт именно вас.
Пересобрано 2026-08-07 07:35 MSK после ночи проверок. Пункт про PR #2680 снят — вы его смержили.
СРОЧНОЕ (есть срок)
1. Сегодня в 07:15 MSK удалятся 93 дома
Расписание
house_dedup_mergeживо:enabled=true,dry_run=false, такт неделя, следующий запуск 2026-08-08 04:15 UTC. Миграция, заводившая его, сеяла расписание выключенным и с пометкой «разрушительное». Кто-то включил, и с 27 июня оно молча отработало шесть раз: 119 домов удалено, 476 объявлений переехало.Вчера добавлен журнал слияний со снимком удаляемой записи и проверенным откатом (#2740) — будущие слияния обратимы поимённо. Те 119 не вернуть.
Решить: (а) пусть идёт — теперь обратимо; (б) выключить до разбора; (в) на один такт перевести в сухой прогон и посмотреть 93 пары глазами. Мой голос за (в): обратимость снимает катастрофу, но не отвечает, правильны ли слияния, а правило выбора победителя в #2690 названо дефектным — сортировка ставит дом без объявлений первым.
УЧЁТКИ И КЛЮЧИ (действие в чужом интерфейсе)
2. Получатель уведомлений в GlitchTip — #2673
Самое дешёвое и самое недооценённое. События приходят: по проекту trade-in накоплено 2 861 группа ошибок, за сутки 77 живых групп. Правил оповещения
0, получателей0, отправлено0за всю историю.Это не «мониторинг не настроен», а исправная диагностика, пишущая в ящик, который ни разу не открывали. За сутки мы починили шесть сторожей — все шесть срабатывают в пустоту, пока адресата нет.
Оговорка: первое правило не делать «слать всё» — 10 571
TimeoutErrorутопит остальное.3. DaData: включить услугу «Стандартизация» — #2704
Стандартизация адресов сломана 69 дней, в двух формах подряд:
Смена формулировки 12 июля значит, что токен тогда обновили и остановились на полпути. Ошибка сама говорит, что делать. Токен менять не надо.
4. Учётная запись Циана — #2700
Куки протухли 30 июня, автоперелогин недоступен (логин задекларирован в конфиге, в проде отсутствует).
Цена: detail-страницы отдают 403 на 50 из 50 попыток; все домовые поля Циана нулевые во всех 9 457 домах (серия при этом выводится на экран);
cian_valuation, седьмой источник эстиматора, не написал ни строки с 29 июня — то есть молча отсутствует в каждой выданной оценке.5. Куки Домклика — истекли 3 августа
Загрузка ручная (
POST /scrape/domclick/upload-cookies), авто-логина нет.Поправка после ночи: у нулевого сбора Домклика как минимум три разные причины — антибот (внешнее), протухшие куки (вы), отказ нашего сайдкара (наше). Сегодня в 03:34 обход упал именно на третьей: двойной 500 от
tradein-browser, площадка не участвовала. Куки нужны, но не всё сводится к ним.6. Действующий ключ Яндекс-геокодера — #2585— СНЯТ 10.08, от вас ничего не нужноПроверено живым запросом из контейнера 10.08: ключ отвечает HTTP 200, точный геокод, переменная в
.env.runtimeне менялась с 04.07 — 403 пропал сам. И даже это неважно: по вашему решению от 31.07 Яндекс-геокодер вырезан из кода (#2593, −845 строк), в прод-контейнере ноль ссылок на него. Цена простоя = 0. #2585 закрыт.Настоящая цена по геокодированию лежит в другом месте и кодом чинится: 3 270 активных объявлений без координат (34.9% активного Авито), из них 2 446 — внутри свежего пула аналогов, то есть 12.7% аналогов невидимы радиусному поиску. У 1 123 из них в адрес подклеен рейтинг Авито («ул. Ткачей,17·5,0 · 4 отзыва») — доля без координат у таких 100%. Заведено отдельно.
7. Токен ASOCKS для ротации прокси — #2638
Ротация написана и не может включиться. Прошлой ночью два узла из четырёх выключились сами, для трёх источников остался один.
Честная оценка ущерба скромнее, чем я писал вчера: одного узла на текущую ночную нагрузку хватило — собрано 447 лотов Авито, 1 008 Циана, 492 обогащения Яндекса, всё при нуле ошибок. Теснота опасна отсутствием резерва, а не тем, что сбор стоит: следующий отказ оставляет ноль.
РЕШЕНИЯ (не действие, а выбор)
8. PR #2661 — цены станут ниже на 2.25%
Фильтр свежести в якоре дома и знаменателе коэффициента выкупа. Замер на 1 040 реальных оценок: −2.25% к предлагаемым ценам. Это не баг-фикс с очевидным знаком — предложения станут ниже, и это ваше решение.
9. DOM.РФ: как проверять снятие бана — #2443
WAF-блокировка IP нашего сервера с 24 мая. Живые запросы туда запрещены жёстко, поэтому проверить снятие автоматикой нельзя — попытка проверки и есть запрещённое действие. Решить: другой адрес, обращение к площадке, или признать источник закрытым.
ЧТО НЕ ЖДЁТ ВАС
#2687 (нужны ли два недельных полных обхода Авито) ждёт данных, а не решения — и данных пока нет: ни один полный обход не завершался с 3 июля, следующий 10.08. Решать по одной точке нельзя; предлагаю не раньше чем через два-три прогона.
Уточнение к пункту 5 (ASOCKS) по итогам #2698 — нового пункта НЕ добавляется
Разбирал домовую оценку Авито (#2698, 34 дня нулевых прогонов). В шапке #2698 значится «403 — auth rejected / quota exceeded», что читается как «протухла учётка Авито». Это не так, и вашего действия по Авито не требуется:
providers/avito/imv.pyшлёт анонимные XHR без куки и токенов;_raise_for_status_categorizedдля любого 401/403, а не сообщение площадки;Основную часть (все 1240 отказов с 503 и 83 с 500) чинит код — PR #2708: путь домовой оценки ходил в браузерный сайдкар без прокси из пула и уезжал через единственный env-узел, который для Авито не предназначен.
Остаток после этого PR упирается ровно в пункт 5 этого списка: один рабочий исходящий IP на все источники, ротации нет. Так что пункт 5 стоит читать шире, чем «37 из 53 банов» — он же держит и домовую оценку Авито.
Нужно от вас: по-прежнему только
ASOCKS_API_TOKEN(пункт 5). Ничего дополнительного #2698 не добавляет.Отдельно, для полноты картины по пункту 7 (PR #2680): пути
app/services/house_imv_backfill.pyиapp/services/product_handlers.pyв scraper-allowlist деплоя не входят — правка только в них доезжает доtradein-backend, но не доtradein-scraper, который эти задачи и исполняет. PR #2708 попадает в контейнер только потому, что задевает ещё иpackages/scraper-kit/**. Это ровно тот класс, который закрывает #2680.done#2698Ещё два пункта по итогам разбора нулевого detail-обогащения Авито и Яндекса (PR #2738, #2739 — смержены и на проде).
9. Решение: обогащать ли новостройки Яндекса — 3 535 объявлений
У 3 535 из 15 511 необогащённых yandex-объявлений
source_urlведёт не на Яндекс, а на сайт застройщика (macroserver.ru, prospect-federation.ru, strana.com, ten-stroy.ru, …) — так карточки новостроек уходят с выдачи. Наш парсер разбирает толькоrealty.yandex.ru/offer/<id>/: он отвергает такой URL регуляркой, ещё не открыв страницу. Обогащено из них за всю историю — ноль.С PR #2738 они больше не попадают в очередь (и не обрывают прогон, что и было причиной 32 «пустых» прогонов из 53). Их количество видно в
counters.unenrichable_pending— это честная пометка, а не тихая пропажа.Нужно решение: нужны ли по новостройкам Яндекса детальные поля вообще (сейчас по ним есть только данные выдачи — цена, комнаты, площадь).
Если нужны — есть один непроверенный путь: у 3 523 из 3 535 сохранён
yandex_offer_id, то есть URL карточки Яндекса можно построить самим. Отдаёт ли Яндекс такую страницу для партнёрских новостроек, кодом не выяснить — нужна одна ручная проверка живым запросом (агентам живые запросы к площадкам запрещены). Если страница отдаётся, гейт очереди расширяется на построенный URL; если нет — пункт закрывается как «данные приходят другим путём».10. Авито: detail-обогощение даёт ноль 25-й день — ответ будет завтра, дальше упирается в п.5
Последний прогон
avito_detail_backfillс ненулевым обогащением — 12 июля. С тех пор ночи выглядят так: либо 5 попыток и 5 блоков, либо ~1600 попыток и ~1600 отказов (3-5 августа, с выеданием всего бюджета 9000 с), либо пустая очередь. При этом браузерный тракт (detail-фазаavito_city_sweep) обогащает 6-23 объявления в сутки — то есть Авито закрыт именно для curl-тракта, которым ходит backfill.Кто именно отказывает — площадка или наш прокси-тракт — из имеющихся данных не устанавливается: поштучные отказы логируются WARNING, в GlitchTip уезжает только ERROR, а логи контейнера пропадают при его пересоздании (сегодня прогоны 11:05 и 12:40 остались без логов после деплоя в 12:57). PR #2739 это закрывает: с завтрашнего прогона (12:39 UTC) самая частая причина отказа с её долей пишется прямо в статус прогона и переживает перезапуск.
Действий пока не нужно. Но если завтрашняя причина окажется прокси-отказом (
CONNECT tunnel failedи подобное), это ровно ваш пункт 5 — токен ASOCKS: сегодня оба detail-backfill'а (Авито и Яндекс) ходят через один и тот же резидентный узел, он же обслуживает Домклик.Поправка к пункту 1: не 93 дома, а 6
Я дал вам число 93 как срок с сегодняшней датой. Оно неверно. Пересчитал тем же выражением, которое исполняет сама задача (
_mapping_sql, оба прохода, с гео-ограждением 250 м и защитой от разных ФИАС), в 08:40 UTC:Всего домов в базе 9625.
Почему разрыв так велик
В кластерах-дублях по канон-адресу лежит 1606 проигравших. До удаления доходят 6, остальных снимают ограждения:
То есть ограждения работают и снимают 99.6% кандидатов. Число 93 не воспроизводится ни одним из промежуточных срезов — ни «все проигравшие», ни «домов в кластерах» (2937), ни историческая сумма удалённого (119). Откуда я его взял, восстановить не могу; считайте его моей ошибкой, а не изменившимся состоянием.
Что это меняет в решении
Срочность была преувеличена мной. По существу вариант (в) — один такт в сухом прогоне — становится дешевле, а не дороже: шесть пар просматриваются глазами за минуты, а не девяносто три. Голос за (в) оставляю по прежней причине: обратимость (#2740) снимает катастрофу, но не отвечает, правильны ли слияния, а правило выбора победителя названо дефектным в #2690.
Если решения не будет, завтра в 04:15 UTC удалятся эти 6 записей, поимённо обратимо через журнал #2740.
Побочная находка, которая важнее пункта 1
1024 проигравших не схлопываются потому, что у одной из сторон нет координат. Это, судя по всему, и есть настоящее содержание #2690 («781 дубль домов не схлопнуть»): дубли не «не находятся», они находятся и отбраковываются гео-ограждением из-за пустого
geom. Ограждение при этом ведёт себя правильно — без координат проверить, что это один дом, нечем. Значит, задача не в ослаблении ограждения, а в геокодировании этих домов. Внесу отдельным замером в #2690, здесь от вас ничего не требуется.Поправка к моему предыдущему комментарию, к последнему абзацу.
Я написал, что 1024 дубля, отбракованных из-за отсутствия координат, — «настоящее содержание #2690». Это неверно, и я не прочитал #2690 целиком, прежде чем так сказать. Там измерено другое: 764 из 781 пары блокируются расстоянием, то есть ограждение отвергает их по существу — дома правда далеко друг от друга. Плюс отдельный дефект: предложенный там ключ выводится из того же адреса, что и защита, и потому её отменяет.
Моё наблюдение самостоятельное и вынесено в #2771: 20.2% домов без координат, потому что геокодер чинит объявление, а в дом координаты не возвращаются. От вас там ничего не требуется. Числа на #2704 и решение по пункту 1 (шесть домов, не 93) поправка не меняет.
Сверка всех пунктов 2026-08-07 ~12:00 MSK: сам собой не отпал ни один, один стал хуже, по одному пришёл обещанный ответ
Задачу не закрываю. Проверял, не отпали ли пункты сами. Ответ: нет, ни один. Ниже — только
то, что изменилось или уточнилось со вчера.
п.1 — расписание живо, журнал на проде, решение всё ещё за вами
Журнал доехал и проверен по схеме, но на настоящем прогоне ещё не работал — записей ноль.
Завтрашний прогон будет для него первым. Ключ схлопывания, правило выбора победителя и
гео-страж (#2690 п.2/п.3) не тронуты — то есть завтра проход пойдёт с тем же дефектным правилом
выбора победителя, только обратимо.
п.2 — GlitchTip: за сутки ничего не изменилось
За сутки в эпике починены ещё два сторожа (#2670, #2703). Оба будут срабатывать в пустоту.
п.3 — DaData: не отпал, счётчик растёт
26-й день. Токен по-прежнему менять не надо.
п.4 — Циан: не отпал
Куки протухли 37 дней назад (прогон 07.08 02:03 честно сказал это словами). detail — 50 из 50
403 сегодня ночью, статус прогона всё равно
done. Домовые поля 0 из 9 625.cian_valuation— 139 строк, последняя 29.06; контрольная группаyandex_valuation— 1 531строка, последняя сегодня 08:10. То есть оценки запрашиваются, а седьмой источник в них
по-прежнему молча отсутствует.
Побочно: правка «просмотры Циана» (#2669) доехала до контейнера и проверена вызовом, но даёт
ноль по той же причине — detail не доходит. Ещё одна работа, лежащая за этими куками.
п.5 — Домклик: не отпал
Ваша вчерашняя поправка («три разные причины») подтверждается: за двое суток отметились и
блоки, и наши собственные отказы.
п.6 — ключ Яндекс-геокодера: моей пробой не проверен
В GlitchTip группы «Invalid api key» нет — но это ничего не доказывает, потому что канал
никому не пишет и не всякий отказ туда попадает. Записываю как «не проверено», а не «отпало».
п.7 — ASOCKS: стало хуже, чем вчера
Вчера вы читали «три узла общего назначения». Сегодня их два, третий выключился. Резерва,
про отсутствие которого вы писали, стало ещё меньше.
п.8 — PR #2661 по-прежнему открыт, решение не принято
п.10 — обещанный ответ по Авито пришёл, и он НЕ сводится к пункту 7 напрямую
PR #2739 сработал: причина отказа теперь в статусе прогона и пережила перезапуск.
Вчерашнее условие было: «если причина окажется прокси-отказом (
CONNECT tunnel failedиподобное) — это ваш пункт 7». Причина другая: площадка отдаёт 403 на все 5 попыток,
транспортного отказа прокси нет.
Осторожная трактовка: 403 в этом флоу — отказ по нашему исходящему IP (авторизации в нём
нет, это установлено в #2698), поэтому ротация адресов ему помогла бы. Но это уже не «прокси
не работает», а «адрес сожжён», и утверждать, что новый токен это чинит, я на одной точке не
могу. Правильнее сказать: пункт 7 остаётся единственным доступным рычагом, но прямого
доказательства, что он снимет именно этот 403, нет.
Ничего не отпало
Все девять исходных пунктов и оба добавленных остаются вашими.
Два новых пункта, которые тоже ждут вас
Разбор всех открытых задач добавил к списку ещё два. Оба — решения, а не работа.
9. Публиковать ли 5432 на боевом хосте — #2757, пункт 3
Вопрос задан 06.08 в 21:27 и остался без ответа. Первые два пункта закрыты: гейт написан и проверен на слом — вписали
ports: - 5432:5432в настоящийci-tradein.yml, сборка покраснела с указанием файла, строки и порта; на безопасной форме молчит.Живая проверка сегодня в момент, когда CI действительно бежал: три сервис-контейнера Postgres, все в
bridge, портов не публикуют; боевойtradein-postgresнаружу тоже ничего не выставляет.Остаётся ваше: должен ли 5432 вообще быть публикуемым на этом хосте, хоть когда-нибудь. Если нет — гейт можно ужесточить до полного запрета. Если да (например для ручного доступа) — надо назвать условие, при котором это допустимо, иначе гейт рано или поздно отключат ради разовой задачи.
10. Потолок системного журнала — правка в конфигурации хоста
/etc/systemd/journald.confпуст: секция есть, все параметры закомментированы, drop-in нет. Журнал сейчас 2.4 ГБ.Значение имеет не размер, а умолчание
SystemKeepFree— оно держит 15% файловой системы свободными и при их исчерпании перестаёт писать. Для 145 ГБ порог около 21.75 ГБ свободного; сейчас свободно 28 ГБ, то есть запас 6 ГБ, а не 28.Отсюда неприятное свойство: вчерашняя правка «логи переживают пересоздание контейнера» имеет необъявленную зависимость от свободного места. Когда диск подойдёт к порогу, отказ будет выглядеть как «логов за вчера почему-то нет» — ровно тот симптом, ради устранения которого правка делалась, и в форме, которую трудно связать с причиной.
Правка на одну строку (
SystemMaxUse=+SystemKeepFree=), после неё отказ становится предсказуемым: старые записи ротируются, а не отключается запись. Но это системная конфигурация хоста, а не наш код — скажите слово, и сделаю.Оговорка, чтобы не читалось тревожнее, чем есть: диск не убегает. Резервные копии (11 ГБ) ротируются корректно, ровно недельное окно; дамп основной БД вырос на 27 МБ за шесть суток. При 28 ГБ свободного и таком темпе запас — порядка двух лет. Разбор в #2761.
Поправка к формулировке пункта 7
По разбору он стал хуже: узел
asocks-mobile-3выключился, узлов общего назначения теперь два, а не три.И отдельно про пункт 10 из прежней нумерации — обещанная причина пришла и оказалась не той:
AvitoBlockedError: HTTP 403 (5 из 5),ban_kind=platform. Это отказ площадки, а не транспортный отказ прокси. К токену ASOCKS сводится только косвенно, через репутацию адресов; прямого доказательства нет, и я не буду делать вид, что оно есть.11. Смержить PR #2786 — и раньше, чем #2754
Правка управляющего контура, самомерж по ней запрещён, поэтому лежит открытой и зелёной (8/8): #2786
Порядок важен и в одну сторону. Сначала #2786, потом #2754. После мержа #2786 ваш PR #2754 станет красным на коллизии номера 234 — это и есть цель, а не побочный эффект: сейчас он зелёный при занятом номере. Останется переименовать файл (свободен 240) и снять хунк манифеста — файла больше не будет.
Почему сторож пропускал дрейф — причина оказалась не та, что я предполагал
Я думал, что тест смотрит только файлы из диффа. Нет: он вообще не знает про дифф, это
globпо каталогу.Настоящая причина хуже. «Новым» тест считал файл, которого нет в манифесте, а новые файлы от манифеста явно освобождены — решением, записанным в его собственном докстринге. Значит забытое имя и настоящая новая миграция для него неразличимы по построению. Покраснеть от дрейфа он не мог никогда, ни в какой ветке. Это не пропуск проверки, а её штатное исключение, накрывающее ровно тот случай, ради которого проверка заведена.
Прогон на main сегодня: 228 файлов, 213 имён, 15 не дописано (за сутки выросло с 13) →
4 passed.Решение: манифеста больше нет
Он служил двум инвариантам, и оба выводимы из git напрямую — не переименовывать применённое (эталон: точка ветвления) и не переиспользовать номер (эталон: полный origin/main). Вариант «файл фиксирует состояние прода» отпал: применённое на проде и есть содержимое main, потому что деплой гоняет каждый
data/sql/*.sqlподON_ERROR_STOP. Манифест был ручной копиейgit ls-tree, всегда отстающей.Дрейфовать больше нечему. 15 недостающих имён намеренно не дописаны — дописать их значило бы получить то же самое ещё через сутки.
Сторож проверен на восьми сломанных входах, включая ваш PR #2754 как есть: красный, с называнием обоих файлов. На старом гейте то же дерево — зелёное. Ветка от 30.07 с 43 чужими миграциями в main и без своих правок — зелёная, как и требовалось.
Отдельно: зелёная галка на открытом PR значит меньше, чем кажется
Побочная находка того же разбора, и она касается всех открытых PR, не только этого.
В нашем Forgejo нет
refs/pull/N/merge— замерено: 1620 ссылок*/head, ноль*/merge. CI собирает голову ветки, а не результат слияния с текущим main. Перепрогона при движении main не бывает.Отсюда и коллизия: #2754 отзеленел 06.08 в 19:53, а номер 234 занял чужой мерж в 23:18. Галка осталась зелёной и сама об этом не узнала.
Практически: перед мержем PR, отзеленевшего не сегодня, стоит перезапустить проверки — особенно если правка трогает номера миграций, схему или общие файлы. Чем дольше PR открыт, тем меньше значит его галка.
Прод при этом не затрагивается ничем из перечисленного:
_manifest_applied.txtне*.sql, ни цикл деплоя, ни поднятие схемы в CI его не читают. Откат — обычныйgit revert.12. Пароль
user1в keychain протух — блокирует проверку роль-гейтаМелочь, но повторится. При проверке #2782 не удалось пройти полную цепочку Caddy → приложение под не-админом:
user1отклоняется на basic_auth.Обошли иначе — роль-гейт проверен изнутри контейнера с тем самым заголовком, который подставляет Caddy (
403 admin onlyдляpilottestиanalysttest), а неподделываемость заголовка — отдельным запросом снаружи (401при попытке подставить его клиентом). То есть вывод получен, но двумя проверками вместо одной, и единым сквозным запросом не подтверждён.От вас нужен рабочий пароль не-админа в keychain, либо явное «так и оставить» — тогда мы перестанем считать это дыркой и будем проверять двухступенчато штатно.
Побочно из той же правки: находка крупнее исходной задачи
Разблокировав выпадающий список профилей весов, агент обнаружил, что тот молча врал бы.
Запрос анализа отправлял
profile_idбезprofile_user_id, а резолвер ищет профиль какget_profile(db, user_id, profile_id)— при пустом владельце условие не выполняется, веса тихо падают на системные, а ответ рапортуетweights_profile.source = "profile".Замер на проде:
profile_id=1без владельца → вес трамвайной остановки−0.5вместо−0.4из профиля. Пользователь видел бы ползунки одного профиля и оценку по другим весам.Это ровно тема эпика #2674: метка утверждает то, чего не было. Починено в том же PR, проверено живым запросом (
source: profile, tram_stop: −0.4).И ещё: единственный сохранённый профиль весов создан 15.05.2026 — то есть фичей пользовались до #442, и с тех пор она была отрезана от владельца почти три месяца.
13. Включить
log_lock_waits— иначе о следующей блокировке мы снова узнаем случайноСегодня деплой trade-in стоял два часа: миграция ждала монопольную блокировку, а держал её чужой ручной бэктест. Четыре смерженных PR не доехали до прода.
Ни одна секунда этого ожидания нигде не записана. Мы узнали о нём только потому, что смотрели
pg_stat_activityруками. Замер настроек боевой БД:log_lock_waits = offозначает: ожидание блокировки дольшеdeadlock_timeoutне пишется в журнал вообще. При включённом — каждое ожидание дольше секунды попадёт в журнал с указанием, кто держит и кто ждёт. Это ровно тот различитель, поиск которого сегодня занял час.Правка одной строки в конфигурации боевого Postgres, требует перечитывания конфигурации. Мандат у меня на чтение, поэтому не трогал — скажите слово, и сделаю (либо сделайте сами,
ALTER SYSTEM SET log_lock_waits = on; SELECT pg_reload_conf();— рестарт не нужен).Оговорка: это включает запись, а не защиту. Защита уже сделана и смержена — конвенция
lock_timeoutна блокирующий DDL с гейтом в CI (#2791). Но конвенция ловит наши миграции, а журнал покажет любое ожидание, включая чужие ручные сессии.Сопутствующее, тоже про наблюдаемость
log_min_duration_statement = -1— медленные запросы не логируются вовсе. Бэктест, из-за которого всё встало, шёл два часа пять минут и в журнале не оставил ни строки. Не настаиваю: включать это на боевой БД без порога — верный способ утопить журнал. Но пороговое значение (скажем, 30 с) стоило бы обсудить отдельно.Пайплайн разблокирован, состояние на 14:0x MSK
Миграция сноса дубля индекса откачена из main (PR #2792) — она не применена ни на одном стенде, откат вернул ровно прежнее состояние. Все пять контейнеров trade-in пересозданы,
running == :latest, четыре застрявших PR доехали.Снос дубля не потерян: #2793 с готовым текстом и критерием «таблица тиха» (
pg_locksпоtrade_in_estimates= 0), записанным заранее. Файл вернётся уже со строкойlock_timeout, иначе новый гейт уронит CI — он же станет первым настоящим входом этого гейта.Поправка к пункту 1: слияний было не 6, а 821 — и это сработала связка, а не ошибка
07.08 я поправил вам «93 → 6 домов». Прогон 08.08 04:15 удалил 821 дом (762 кластера). Обе прежние цифры устарели, и вот почему — механизм, а не сбой.
Причина: мой же перенос координат (#2771), смерженный 07.08 днём. Когда я мерил «6», у 1024 пар-кандидатов не было координат, и гео-ограждение их не оценивало — молчало. Перенос дал этим домам координаты из их объявлений (1382 дома получили geom). К ночному прогону ограждению стало что сравнивать, и 821 пара прошла проверку.
Это дословно то, что я обещал в #2771: перенос координат «даёт ограждению возможность оценить пары», а не «разблокирует N слияний». Я специально не называл число заранее — и хорошо, потому что оно оказалось не 6 и не 93.
Все 821 слияния геометрически здоровы — проверил поимённо:
То есть ни одного склеивания домов из разных городов: всё в пределах ограждения 250 м, которое для области-66 (города за километры друг от друга) означает «одно здание». И каждое слияние поимённо обратимо через журнал #2740 — снимок и проигравшего, и победителя сохранён у всех 821.
Что это меняет для решения по пункту 1. Разрушительность, которой вы опасались, реализовалась — 821 запись удалена, — но в форме, которую вы же и сделали безопасной: обратимой и внутри ограждения. Если хотите просмотреть глазами, это уже не «6 пар за минуты», а выборка из 821; я проверил распределение (всё <250 м) вместо поштучного просмотра. Если что-то смущает — скажите, откачу любой поднабор по журналу.
Отдельно закрою один ваш вопрос из #2690: правило выбора победителя вы называли дефектным («ставит дом без объявлений первым»). В этих 821 слияниях 762 победителя, и сортировка сначала берёт дома с geom и с объявлениями — то есть на практике победителем стал более полный дом. Но это стоит проверить отдельным замером, прежде чем считать #2690 закрытым; не объявляю.
Уточнение к пункту 11: моя формулировка про сторожа была шире факта
Я написал, что старый сторож манифеста не мог покраснеть от дрейфа никогда, ни в какой ветке. Проверка на настоящих входах показала, что это шире правды.
Контрпример прогнан: добавили на main файл
238_probe_dup.sqlпри забытом в манифесте238_listings_ceiling_height_unify.sql— старый сторож покраснел: «префикс 238 уже у нового 238_listings_ceiling_height_unify.sql». Оба файла для него «новые», и ветка, амнистирующая новые файлы, их же и ловит на коллизии.Слепая зона у него одна и уже, чем я сказал: файла нет в дереве ветки вовсе. Тогда сравнивать не с чем.
Сам вывод остаётся: список не краснеет от собственного отставания, поэтому дрейф копится. Замер сегодня — 216 имён против 232 файлов, отставание выросло 13 → 15 → 16 за трое суток. Но формулировку «не мог покраснеть никогда» снимаю: она приписывала сторожу больше слепоты, чем у него есть.
Про порядок мержа — совет был верен по времени, просто вышло иначе
Для протокола, чтобы не осталось впечатления, будто я советовал задним числом: пункт 11 написан 07.08 в 10:11 UTC, #2754 смержен в 13:08, то есть тремя часами позже. Совет был своевременным.
Дальше сложилось так: #2754 поехал первым, и коллизию номера 234 поймал человек — вы переименовали 234 → 240 руками в
e6591a45(15:31). Сторож при этом молчал. То есть предсказание «после мержа #2786 ваш PR покраснеет» не сбылось не потому, что было неверным, а потому, что порядок оказался обратным и цену заплатили ручной работой.Это, кстати, лучший довод за пункт 11, чем мой исходный: коллизия реально случилась и стоила ручного разбора — ровно того, что новый сторож ловит автоматически.
PR #2786 готов к мержу
Конфликт
modify/deleteпо манифесту разрешён удалением. Проверено, что за трое суток в main не появилось ни одного читателя файла (git log -Sвне самого файла пуст); новый lock-timeout-сторож тоже ходит поglob("*.sql").Синхронизация сделана merge-коммитом, а не rebase — rebase потребовал бы
--forceв общую ветку. Побочный плюс существенный: голова ветки физически содержит слияние с текущим main, поэтому её галка честно про слияние, а не про голову ветки, как обычно у нас бывает.Шесть проб сторожа, каждая на настоящем входе:
001_*233_payments.sqlЧетвёртая проба — та, ради которой вы просили осторожности: ветка недельной давности без своих правок не краснеет, значит сторож не отключат через неделю. И она не вакуумная — то же самое дерево краснеет в пятой пробе.
CI 8/8,
mergeable: true, в логе4086 passed, 0 skipped— сторож исполнился, а не пропустился.Окно сейчас чистое: из открытых PR (#2546, #2661, #2751, #2794) ни один не трогает
data/sqlи ни один не трогает манифест. Конфликт при мерже не достанется никому.14. Решение по PR #2816 — правка двигает цену, поэтому она за вами
Дефект по #2677 подтверждён, и он в основании сравнения: медиана домножается на коэффициент ремонта, а домовой якорь — нет. Проверил чтением кода на
origin/main:estimator.py:2690применяет коэффициент к медиане, диапазону и цене за метр; якорь приходит из_fetch_house_imv_anchorкак есть.Следствие: порог «якорь выше медианы в 1.15 раза» для клиента с ремонтом «требует ремонта» фактически превращается в 1.081, а подмешивание с весом 0.5 возвращает половину поправки на ремонт обратно.
Реализованный эффект сегодня — ноль рублей
Сработавших подмешиваний за 1061 оценку — 0. Ноль подтверждён вторым, независимым прибором: следом в колонке пояснений, которая доказуемо умеет заполняться (там же 174 заметки про ремонт, 269 про «тот же дом», 456 про ближайшее окружение).
У нуля есть причина, и она — «заблокировано выше по потоку»: все 19 кандидатов гасит существующий гейт. То есть механизм сегодня не влияет на цену вообще.
Контрфакт: что было бы, если бы гейт не гасил
Проверка направления на известных объектах — половина не прошла, и это сказано прямо
Понижающая половина подтвердилась: дом на Софьи Перовской 119 («требует ремонта») уходит со 100 411 на 90 566 ₽/м² при медиане 143 реальных сделок ≈ 91 300. Ближе к правде.
Повышающая — нет. Дом на Гаршина 3/2 («хороший ремонт») уходит со 153 629 на 168 324 ₽/м², тогда как 75-й перцентиль сделок — 165 479. Перелёт.
Один объект — не приговор, и перцентиль не потолок. Но проверка на заведомо известном объекте эту половину не подтвердила, и агент не стал это заглаживать.
Что я рекомендую
Мержить, но зная три вещи: (1) сегодня эффект нулевой, потому что гейт всё гасит — правка страхует будущее, а не меняет настоящее; (2) если гейт когда-нибудь ослабят, понижающая половина обоснована сделками, повышающая — нет; (3) разделять правку на «только понижать» не советую — это внесло бы произвольный сдвиг вниз вместо приведения обеих величин к одной базе.
Альтернатива, если хотите осторожнее: смержить и отдельно обсудить однонаправленность подмешивания — она в конфигурации, а не в этом дефекте.
Опровергнуто по дороге, в том числе мной
cosmeticвсего 6;Прод-критерий записан до мержа: 2026-09-10, по маркеру в логах; при нуле срабатываний вердикт будет «повода не было», а не «проверено».
СВОДКА НА 2026-08-10 11:00 UTC — что от вас нужно, по убыванию отдачи
Комментариев накопилось много, поэтому собираю действующее в одном месте. Прежние пункты не отменяю — уточняю статус каждого.
Сделать за минуты, отдача наибольшая
1. Получатель уведомлений в GlitchTip (#2673). Замер сегодня на живой БД:
Сегодняшний случай показывает цену буквально: отказ запросов Объектива (#2812) пролежал в этом ящике незамеченным, и нашёл я его только потому, что полез смотреть накопленное руками. Все сторожа, которые мы за четыре дня починили, кричат в пустоту.
Оговорка та же: первым правилом нельзя делать «слать всё». Топ за сутки — 17 групп блокировок НСПД и 8 групп чужих попыток входа в WordPress, они утопят остальное.
2. Смержить #2786 (гейт номеров миграций). Готов, CI зелёный, конфликтов нет, окно чистое — ни один из открытых PR не трогает миграции. Мержить раньше любого PR с новой миграцией. Дрейф продолжается: 216 имён против 232 файлов.
Решения, где нужен ваш выбор
3. Разделяемая память боевой БД (#2812), PR #2819. Два варианта, оба измерены:
Поправка к моей же оценке срочности: это один инцидент длиной 1.2 секунды, а не «6 отказов за сутки». Но последствие хуже, чем казалось — три из четырёх мест дают тихую пустоту, а не видимую ошибку.
4. Денежная правка якоря (#2677), PR #2816. Сегодня эффект нулевой — существующий гейт всё гасит. Если гейт ослабят: девять оценок вниз на медианных −7.9% (−4.13 млн ₽), одна вверх на +0.47 млн. Понижающая половина подтверждена реальными сделками, повышающая проверку не прошла и об этом сказано в PR. Разделять не советую — внесёт произвольный сдвиг.
5. Фильтр свежести в якоре (#2661). Висит с 05.08, −2.25% к ценам, замерено.
6. Возобновление убитого обхода Авито (#2687). Вчера я деплоем убил первый за пять недель полный обход на третьем часу (35 корзин, 5496 объявлений). Контрольная точка сохранена, но плановый прогон её не подхватывает — нужен ручной запуск с указанием прерванного прогона. Скажите — или сделайте кнопкой.
Учётки и ключи
7. Куки Циана. Из-за них
cian_history_backfillмолчит 42 дня и честно пишет причину в счётчиках. Сейчас разбираем #2700 — возможно, часть 403 идёт от конкретного узла прокси, а не от площадки; если так, часть починится кодом. Отпишусь.8. DaData «Стандартизация». Ошибка сама говорит, что делать; токен менять не надо.
9. Токен ASOCKS (#2638). Узлов общего назначения сейчас четыре, ротация ждёт токен.
10. Пароль
user1в keychain протух — блокирует сквозную проверку роль-гейта. Либо новый пароль, либо «так и оставить», и мы перестанем считать это дыркой.11. Ключ Яндекс-геокодера (#2585) — СНЯТ. Проверено живым запросом: ключ работает, 403 пропал сам. И платить всё равно нечем — геокодер вырезан в июле, цена простоя ноль. От вас ничего не нужно.
Инфраструктура, не срочно
12.
log_lock_waits = off— двухчасовое ожидание блокировки 09.08 нигде не записано. Одна строка, перезапуск не нужен.13. Потолок системного журнала не задан явно; работает умолчание, при котором запись прекращается при нехватке 15% диска. Сейчас запас до порога ~6 ГБ, а не 28.
14. Бэкфилл 1123 адресов — СДЕЛАН, от вас ничего не нужно. Загрязнённых ноль, координаты подтянутся прогоном геокодера в 17:45 UTC.
Для протокола: мои ошибки в этой сводке, исправленные
Уточнение пункта 7 (куки Циана): он был сформулирован ШИРЕ правды
Я писал, что из-за протухших кук Циана стоят detail-страницы и домовые поля. Неверно. Разбор #2700 развёл два разных механизма, и куки нужны только одному.
Различающая проба: дело было в узле, а не в площадке
Один и тот же detail-URL, тот же боевой код, менялся только узел прокси:
cian_waf_blockПлощадка отдаёт 200 трём узлам из четырёх. Забанена не мы, а пара «узел × Циан».
И detail-страница авторизации не требует вовсе: три успешных ответа получены без единой куки, а функция запроса куки не отправляет в принципе — проверил чтением кода на актуальной ветке, ни одного упоминания. Совпадение по времени с протуханием кук 30 июня причиной не было.
Один корень на три симптома
403 гасился в «вернуть пусто», наружу не выходило ничего. Тот же путь сообщал пулу «узел здоров» на отбитый узел — поэтому пул продолжал выдавать его Циану пятнадцать суток. Отсюда же и нулевые счётчики ошибок, которые я считал отдельным дефектом.
Detail-страницы ожили сами, ещё до правки
403 прекратились между прогонами 07.08 и 08.08 — то есть снова улучшение не от той правки, которую я бы записал в героини. Причина в другом: узел перестал выдаваться Циану после работ с пулом.
Что от вас всё-таки нужно — и только это
Седьмой источник оценки (
cian_valuation) стоит на куках, и они мертвы на стороне Циана. Запрос калькулятора через здоровый узел дал 200 и 352 КБ без маркеров блокировки, но с признаком «не авторизован». То есть сессия истекла у них, а не по нашему сроку — нашexpires_atвычислялся как «загрузка + 30 дней», то есть был оценкой, а не фактом.В базе одна запись, куки от 31 мая. Автоперелогина в проде нет — вход делает скрипт с вашей машины.
Цена простоя, измеренная: с 29.06 по 07.08 выдано 320 оценок без седьмого источника. Что запрос при этом делался, видно по соседу: Яндекс за то же окно написал 107 строк, то есть оценки запрашивались — отказывал именно Циан. Плюс 42 суток без исторического бэкфилла.
Пункт 7 переформулирую так: нужны свежие куки для калькулятора Циана. Detail-страницы и домовые поля в этом не нуждаются и уже работают.
Побочно: 42 прогона врали, и 11 из них не про Циан
Правка #2821 нашла общий класс: прогон с полностью отказавшей фазой помечался успешным. По боевым данным таких 42 из 3293 (1.3%) — 31 у Циана и 11 у Авито, про которые никто не знал.
Пункт про денежную правку СНЯТ: препятствие исчезло само
PR #2661 висел неделю, потому что стоил −2.25% к сумме выкупа, и это был вопрос политики к вам. Перемер на сегодняшних данных:
Цена вопроса упала с −2.25% до девяти сотых процента вверх. Того, ради чего вас спрашивали, больше нет.
Почему сдвинулось — проверил сам
Изменился состав собранных данных. Доля протухших (старше 14 суток) среди активных:
И главное: вся протухшая масса на 84% — новостройки, которых защита #1186 в якорь не пускает вовсе. То есть протухшее почти перестало попадать туда, где оно двигало цену.
Своими глазами: первый мой замер дал «65% протухших у Циана» и разошёлся с отчётом — потому что я считал по всем сегментам сразу. По вторичке, которую и берёт якорь, цифры сошлись до десятых.
Направление проверено на реальных сделках
914 оценок сверены с медианой зарегистрированных договоров по тому же дому (в пределах 150 м, за 12 месяцев, с совпадением комнатности):
Там, где правка реально шевелит цену, она шевелит её к сделкам. Оговорка честная: договоры не полностью независимы — сделки кормят коридор и квартальный индекс внутри самого оценщика.
Моя рекомендация
Мержить. Правка перестала стоить денег и при этом измеримо приближает оценку к реальным сделкам. Неделю назад это был размен «точность против суммы», сегодня размена нет.
Оговорка, которая может изменить решение завтра
Число зависит от состава собранных данных и уехало на 2.3 процентных пункта за неделю. Если решать будете не сегодня — замер стоит повторить, оснастка воспроизводима и прогон занимает 25 минут, только чтение.
Опровергнуто по дороге — семь предпосылок, включая заглавную
Кроме уже названных: «протухшие в якорном сегменте на 7.7% дороже живых» — сегодня 3.3%; «648 фантомов завышают знаменатель на 1.28%» — не воспроизводится ни в какую сторону; «окно свежести живёт в одном месте» — с 10.08 их два, и радиусный путь на тонкой выборке расширяет окно до 60 суток, тогда как якорь после мержа останется на 14. Последнее — открытая политика, не дефект: в тонком рынке мы предпочтём 60-дневный пул по радиусу 14-дневному якорю по тому же дому. Стоит решить отдельно.
Пересобрано 2026-08-13 00:15 MSK — после дня работы
Шесть правок доехали до прода и проверены кодом в живом контейнере, а не цветом галки. Список для вас сократился и изменился по составу.
ТРЕБУЕТ ВАС (действие в чужом интерфейсе)
1. Получатель уведомлений в GlitchTip — #2673
Прежний довод в силе, и сегодня он стал точнее. Дело не только в отсутствии получателя: интеграция поднята с
event_level=ERROR(app/main.py:96), поэтому предупреждение событием не становится в принципе. Всё, что написано уровнемwarning, живёт только в логах контейнера, а их сносит каждый деплой.Проверено сегодня: контейнер поднят, в нём 9 строк лога, ни одной строки оценщика за 168 часов. То есть по логам нельзя задать даже вопрос «сработал ли механизм».
2. Учётные данные Циана — 0 из 2 переменных в окружении прода
Ручка автоперехода написана и покрыта тестами, отвечает 400. Цена уже уплачена: 41 день пропусков сбора истории, 42.5 суток нуля данных. Нынешняя сессия жива до 09.09 — запас 28 суток. Ключи я не подбираю и учётки не завожу.
3. PR #2786 — гейт номеров миграций, управляющий контур
Самомерж по такому PR запрещён правилами. Сегодня расконфликтовал повторно — он ломается каждой новой миграцией, за неделю дважды. CI зелёный на восьми задачах, сливается чисто.
Цена ожидания растёт: пока манифест жив, он остаётся вторым источником правды о номерах миграций — а расхождение этих двух источников PR и чинит.
4. Источник n1 — решение «поддерживаем или закрываем»
Ответить может только владелец. Факты:
Деактиватор именно для n1 кто-то написал — значит источник считался поддерживаемым. Объём мал (382 против 51 135 у Авито, 0.4% всего), так что цена вопроса невелика в обе стороны. Но ноль должен иметь причину: если закрываем — деактиватор и разбор надо удалить, чтобы не создавали вид работающей функции; если поддерживаем — расписание отсутствует.
ДВА РЕШЕНИЯ ПО ЧИСЛАМ (код готов, включать вам)
5. Понижать ли доверие к коридору сделок — #2846
Не тронуто намеренно. Число: коридор ADVISORY, порога свежести нет вовсе, у 100% оценок с коридором опорные сделки старше 223 дней, у 8.7% — старше 315. Сегодня подпись стала честной (#2847, на проде), но роль коридора не менялась.
6. Координатный резолв квартала — флаг выключен (#2839, на проде)
Порог 50 м не подтвердился замером: точность 77.7% против 90.9% на 25 м (2648 домов, истина независима — кадастры от DaData по адресу). Флаг
estimate_quarter_from_coords_enabled=False, порог затянут до 25 м, критерий приёмки и дата удаления записаны в коде. Включение — ваше решение после замера.СДЕЛАНО СЕГОДНЯ (проверено на проде числом)
Заведено по ходу: #2841 (преходящий 403 реестра роняет сборку — правка не доезжает молча), #2842 (
source_urlпишется только при вставке — записанное рассуждение, чинить нечего), #2846, #2848 (осиротевший прогон 6 часов числится идущим).ЖДУТ СРОКА — критерии записаны ДО факта
yandex_detail_backfillurl_from_offer_id< 3535. Осторожно: два прогона 12.08 показывают 3535, но они дореформенные (08:08 против деплоя в 15:35)house_imv_backfillavito_full_load_exhaustiveresume_from=3547,resume_buckets=35.checkpoint_stale⇒ срок годности выбран узкоПересобрано 2026-08-13 14:00 MSK
За сутки на прод доехали 17 правок, каждая проверена кодом в живом контейнере. Список для вас сократился и изменился по составу; появилось три новых пункта.
ТРЕБУЕТ ВАС
1. Получатель уведомлений в GlitchTip — #2673
Без изменений и по-прежнему первое по важности. Уточнение со вчера: интеграция поднята с
event_level=ERROR, поэтому всё, что написано уровнем warning, событием не становится в принципе.2. Учётные данные Циана — 0 из 2 переменных в проде
Ручка автоперехода написана и покрыта тестами, отвечает 400. Сессия жива до 09.09 — запас 27 суток. Ключи не подбираю.
3. PR #2786 — гейт номеров миграций (управляющий контур)
Вчера он доказал свою нужность на живом примере: два независимых PR взяли один номер 259. Git этого не видит — имена файлов разные, конфликта нет. Разошлось только потому, что я посмотрел глазами перед мержем. Расконфликтовал повторно, CI зелёный.
4. Источник n1 — «поддерживаем или закрываем»
Расписания нет вообще (0 строк), последний сбор 16.06, 03.07 деактиватор снял 381 объявление из 382. Деактиватор именно для n1 кто-то писал — значит источник считался живым.
НОВОЕ, ТРЕБУЕТ РЕШЕНИЯ
5. Коэффициент «хороший ремонт» — не константа (#2853)
Замер парным ₽/м² внутри одного дома:
Применяется единая 1.05. В старом фонде она выдумывает надбавку, которой нет. Цена: 73 оценки, 879 млн ₽ суммы медиан, −27.7 млн при переходе на измеренное. Вопрос не «какое число лучше», а «применять ли разные к разным эпохам».
6. Поле
districtв витрине поиска (#2857)Три колонки-заглушки убраны (#2858, на проде). Четвёртая —
district— доезжает до схемы ответа API и всегда пуста. Либо подключить, либо снять вместе с полем схемы: держать в контракте поле, которое не заполнится, — решение, а не техника.7. Уборка схемы: 18 колонок на удаление, 9 в вашей зоне (#2674)
Разбор 33 пустых колонок: работы по существу на две, остальное — уборка. Девять входят в публичный контракт
market.v_housesиmarket.v_house_sources, то есть пустота ежесуточно переливается в другой продукт. Удаление любой — изменение внешнего обещания.8. #2661 — фильтр свежести. Блокер снят дважды и независимо
Ваш прежний стоп-довод «правка стоит −2.25% клиенту» больше не действует: перезамер автора даёт +0.09%, а я обновил ветку до сегодняшнего main и прогнал бэктест-гейт — все денежные метрики совпали побайтно (сверял весь набор, а не первое несовпадение). Направление проверено по 914 сделкам: там, где правка двигает цену, она двигает её к ценам ДКП (22.90% → 19.56% на подвижках ≥5%).
Осталась одна оговорка: фикстура зовёт расчёт напрямую, минуя часть путей, поэтому «метрики не сдвинулись» означает «на покрытых путях».
СДЕЛАНО ЗА СУТКИ (проверено числом)
Заведено новых задач с числами: #2841 (преходящий 403 реестра роняет сборку), #2842, #2846, #2848 (осиротевший прогон 6 часов числится идущим), #2853, #2854, #2855, #2857, #2860.
ЖДУТ СРОКА — критерии записаны ДО факта
yandex_detail_backfillurl_from_offer_id< 3535house_imv_backfillavito_full_load_exhaustiveresume_from=3547,resume_buckets=35узел×domclickс причинойprobe:browserв сутки блокировки свипа. Если за неделю ни разу — правка бесполезнаОДНА ЖИВАЯ ПОЛОМКА, НАЙДЕННАЯ ПОБОЧНО — #2860
yandex_newbuilding_sweep: восемь прогонов подряд «обработано 5, успешно 0» со статусом done и пустым текстом ошибки. Очередь растёт 351 → 389, витрина стоит на 34 строках с 15.07. И последний прогон — 10.08, то есть он ещё и перестал быть суточным.Ещё один пункт для этой сводки: ротация прокси не запускалась ни разу — не задан токен
Замер 20.08.2026. Всё, кроме одной переменной окружения, на месте.
Цепочка
Функция #2611 написана, отревьюена, смержена, миграции применены — и не сработала ни разу. Это ровно тот класс, что описан в эпике #2674.
Что это стоит прямо сейчас
Пул — четыре узла. Забанено в эту минуту:
asocks-residential-1забанен для avito восьмой раз (ban_count=8, до 23.08).Чем это оплачивается в сборе
Сторож просроченных источников (#2670) сообщает об этом верно и ежедневно: «6 источников не собирают дольше 3× своего такта».
Отдельно: по таблице
listingsДомклик выглядит свежим — последнее объявление 8 часов назад. Полного обхода при этом нет две недели. Свежесть таблицы маскирует отсутствие сбора, поэтому по ней судить нельзя.Что при этом РАБОТАЕТ
Сдвиг стартовой корзины (#2854/#2932) выкатился и делает своё дело — 20.08 первый прогон со
bucket_start_index=5дал первое в истории источникаbuckets_completed=1и 33 трёхкомнатных квартиры, которых не появлялось ни разу за две недели (10.08 было: 292 однушки, одна двушка, ноль трёшек). То есть слепая зона по комнатности снята — но объём остаётся ручейком, потому что узлы выгорают быстрее, чем восстанавливаются.Что нужно от вас
Задать
ASOCKS_API_TOKENв окруженииtradein-scraper. Сам токен не запрашиваю и в переписку не тяну — это ваша учётка; достаточно положить его туда же, где остальные секреты стека.Проверить, что подействовало, можно одной строкой:
SELECT count(*) FROM scrape_proxy_rotations— сейчас там ноль.Замер источников на 20.08.2026
Снято с
/api/v1/admin/scrape/freshnessна проде. Общий статус — failed.Живых источников два из семи. Отчёт сегодня опирается на Объектив (свежий) и ГИСОГД-разрешения (9.6 суток, в пределах порога); остальное — снимок двух-трёхмесячной давности.
Отдельно стоит строка
nspd: последняя попытка 17.08, последний успех 27.07 — то есть загрузчик ходит и получает отказ уже 21 сутки подряд. Раньше эта разница была не видна: монитор считал успехом сам факт записи строки; починено ранее в этом эпике (success_where), и теперьnspdчестно показывается как stale, а не ok.Ни одной новой задачи не завожу — состояние покрыто #2443 (DOM.РФ WAF hard-ban), #2956 (НСПД с 27.07) и этой сводкой. Это обновление чисел, чтобы решение принималось по сегодняшнему состоянию, а не по июльскому.
П.2 (получатель уведомлений в GlitchTip, #2673) — сделан
Владелец дописал
TELEGRAM_ALERTS_CHAT_ID/TELEGRAM_ALERTS_TOPIC_IDв рантайм-конфиг; правила и получатели заведены раньше. Проверено доставкой, а не конфигом — подробности и три пробы (в том числе из самогоglitchtip-workerпо настоящему URL получателя) в #2673.Ключевое, потому что переезд это едва не сломал: получатели прописаны публичным URL через Caddy, а не именем контейнера. GlitchTip остался на Beget,
tradein-backendуехал на Poincare — по имени он оттуда не резолвится, и связность по общей докер-сети, описанная в докстринге модуля, больше не действует. Публичный URL это переживает; проба изglitchtip-workerвернула 200.Оговорка из постановки («не делать правило „слать всё“ — 10 571
TimeoutErrorутопит остальное») учтена формой правил: окно 5 минут, порог 1, батч — GlitchTip шлёт одно сообщение на пачку неотправленных групп за такт, а не по событию.Побочно вскрылось: секрет вебхука уезжает в Loki query-параметром, скруббер #3115 его не ловит. Вынес в #3154 — к вашему решению там только вопрос ротации, остальное чинится кодом.
Остальные пункты сводки без изменений.