feat(forecast): forecast compute-date/horizons/schema meta footer (#958) #1128
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1128
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/forecast-meta-footer"
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?
Что
Компактная строка происхождения/свежести в подвале Section 6: «Прогноз рассчитан: <дата> · горизонты N / M мес · схема X» над advisory-дисклеймером. Раньше эти данные жили только в экспортах — для прогнозного инструмента дата расчёта это сигнал доверия/устаревания, а горизонты были видны лишь неявно через ось графика.
Относится к #958 (UI экран прогноза).
Ключевое
Дата свежести берётся из
created_atконверта прогноза (время персиста рана, всегда выставлено), аmeta.generated_at— фолбэк. Детерминированный ассемблер/оркестратор НАМЕРЕННО не штампуетgenerated_at(воспроизводимость тестов) → он часто null в реальных ранах; но персистнутый ран всегда несётcreated_at— это и есть настоящее «когда рассчитан». (Без этой правки строка показывала бы только горизонты+схему — дата бы не появлялась.)Содержимое
ForecastMetaLine.tsx(новый) — три независимо-гардированных сегмента: RU-дата (toLocaleDateString("ru"), время «, ЧЧ:ММ» только если оно есть и не полночь), горизонты, наиболее приглушённая схема. Graceful:nullкогда все сегменты пусты (202-pending / тонкий отчёт); невалидная дата → сегмент пропускается.Section6Forecast.tsx— проводкаrunCreatedAt={data.created_at}из конверта вForecastReady → ForecastMetaLine; advisory-дисклеймер остаётся ПОСЛЕДНИМ; borderTop сохранён.Качество
Self-reviewed (полный diff прочитан): date-гарды верны (null/NaN/empty/midnight/no-T), все цвета — токены, нет регрессии (advisory последним, borderTop на обёртке),
ForecastEnvelope.created_atсуществует + проброшен, нет SSR-tz-риска (данные прогноза резолвятся только client-side).npm run buildзелёный, prettier чисто, noany, no deps. Чистый pure-presentational компонент (170 строк, 2 файла).Тест-план (post-deploy)
/site-finder/analysis/66:41:0702048:27→ низ Секции 6: строка «Прогноз рассчитан: <дата>, ЧЧ:ММ · горизонты 6 / 12 / 18 / 24 мес · схема 1.0» над дисклеймером (мок-фикстура имеетcreated_at2026-06-04 → дата отображается).