Две статьи на собственном замере вместо карточек «СКОРО» #3521
No reviewers
Labels
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
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3521
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/mera-articles-prices-waiting"
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?
Раздел
/articlesс 29.08 стоял с одной живой статьёй и двумя карточками «СКОРО» без ссылок. Обе дописаны. Закрывает содержательную часть #2901.Что написано
«Сколько стоит метр в Екатеринбурге: цены сделок, а не объявлений» —
/articles/skolko-stoit-metr-v-ekaterinburge24 535 договоров купли-продажи Росреестра, регион 66, июль 2025 — июнь 2026. Медиана 123 626 ₽/м².
Несущий факт статьи контринтуитивен и потому проверен отдельно: кривая цены метра по комнатности не падает, а прогибается.
Плюс поквартальная динамика по всем десяти доступным кварталам (+20,6% с начала 2024, без единого падающего квартала) и восемь городов области с порогом публикации в сто сделок.
«Почему квартира не продаётся: что происходит с ценой, пока вы ждёте» —
/articles/pochemu-kvartira-ne-prodaetsya49 620 объявлений Свердловской области, у которых площадка ведёт историю цены. Цена двигалась у 43,5%; из них вниз у 60,2%, вверх у 38,0%. Медиана снижения −3,85% и −291 000 ₽.
Почему темы не те, что в макете
Карточка «Сколько продаётся квартира в 2026 году» требовала срока экспозиции. Он не измеряется:
days_on_marketпуст у всех 435 тысяч сделок Росреестра;Мерили бы мы свой сборщик, а не рынок. Вместо этого первый раздел второй статьи прямо объясняет читателю, почему средний срок продажи не назовёт никто честный, и советует спрашивать у любой статьи с таким числом, как там отличали снятие от продажи.
Вторая карточка называлась «Завысить и торговаться или поставить в рынок». Запрос «завысить цену на квартиру» уведён юридическим смыслом — завышением суммы в договоре ради ипотеки. По этой формулировке статья попала бы в чужую выдачу.
Дисциплина чисел
Первоначальный замер прошёл адверсариальную проверку: из десяти величин воспроизвелись две, остальные отброшены как непригодные к печати. Типичная причина отбраковки — метрика меряет частоту обхода скрапера, а не поведение рынка. Обе статьи пересчитаны с нуля по источникам, которые этим не страдают: договоры Росреестра и история цены, которую ведут сами площадки.
У каждого блока стоит своё поле
source/footnoteс датой, выборкой и границей — чем это число НЕ является. Границы вынесены в текст для читателя, а не спрятаны в комментарий.Обвязка
Два ключа в
PUBLIC_ROUTES, две страницы,sitemap.ts, три матчера вapps.caddyна каждый адрес,PUBLIC_SHORT_PATHSуRouteGuard,PUBLIC_INDEXED_FILESв гейте noindex. Блок «Читайте дальше» перестал быть статичным «СКОРО» и делает карточку ссылкой, как только у неё появилсяroute. Витрина и лэндинг обновились сами — обе перебираютARTICLE_CARDS.Чисел в JSX нет ни одного: обе папки попадают в
SUBPAGESгейта чисел, все величины приходят изarticles-content.ts.Проверка
type-checkчист.vitestпоmera-publicиauth— 237 тестов зелёные, включая три гейта коротких адресов публичного домена, гейт чисел иRouteGuard.publicPaths.Один красный файл в общем прогоне,
login/__tests__/LoginPage.test.tsx, два теста про текст ошибки входа. Он падает и без этих правок, файлы логина в диффе не участвуют.🤖 Generated with Claude Code
https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh