6035cf182c
Натягиваю прототип NewDesign/PageHistoryModal на существующую подсистему истории,
переиспользуя всю механику (запросы, дифф, restore, права, пагинация) и добавляя
единственный дешёвый агрегат бэка — «число version-ревизий по дням» под heatmap.
Клиент:
- Новый десктоп-body history-modal-desktop.tsx: одно-строчная шапка (заголовок,
лейбл выбранной версии, Highlight changes + N/M дифф-навигация, Restore, закрытие)
над телом «левая навигация 280px | правый рендер версии».
- history-nav-panel.tsx: фильтр «Only versions» + мини-календарь + ПЛОТНЫЙ список
(одна ревизия = одна строка), группировка по дням (data-day якоря), jump-to-day с
корректной догрузкой страниц по границе dayISO старейшей строки (не «N страниц»),
недостижимый день → тост, без зацикливания.
- revision-row.tsx + чистый адаптер utils/revision-row.ts: глиф по идентичности
(agent → квадратный глиф роли + «via <launcher>», иначе круглый аватар), бейдж
SAVED только для kind==='manual'; автосейвы приглушены. Два ортогональных сигнала
сохранены (identity vs intentionality).
- mini-calendar.tsx: heatmap-интенсивность = version-ревизии за день, навигация
месяцев клиентская, pick-day по dayISO; fail-open на пустую сетку.
- usePageHistoryDayCounts + day-counts-service; historyKindMeta вынесен в чистый
utils/history-kind-meta.ts (тот же предикат для фильтра и бейджа).
- resolvePrevSnapshotId по-прежнему считается на ПОЛНОМ плоском списке; restore и
дифф-навигация переиспользуют useHistoryRestore/useDiffNavigation без изменений.
- Мобильная модалка (history-modal-mobile.tsx) не тронута; орфанный
history-modal-body.tsx удалён.
Сервер:
- POST /pages/history/day-counts {pageId, tz} → [{dayISO, count}] за всю историю,
view-gated (validateCanView), неверный tz → 400 (как /history/time).
- computeDayCounts + чистый countRevisionsByDay (считает только version-строки),
переиспользует tz-ядро zonedDayStart/isoDay из work-time/bucket-by-day.ts.
Тесты: клиент vitest (адаптер kind→бейдж/глиф, dense-row рендер, heatmap/календарь);
сервер jest (баркетер + эндпоинт: view-gate, tz→400, группировка по дням).
Удалён прототип NewDesign/PageHistoryModal.tsx.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>