Codex
20a260d0cc
Revert "feat(ui): redesign desktop experience"
...
This reverts commit f61e076e46 .
2026-06-09 00:56:40 +07:00
Codex
f61e076e46
feat(ui): redesign desktop experience
2026-06-08 14:01:45 +07:00
Codex
349ce51c67
feat(settings): add status-first control center
2026-06-08 13:19:20 +07:00
Codex
84b2bbf0a6
feat(dashboard): make overview action-first
2026-06-07 22:48:24 +07:00
Codex
cde8334c73
feat(ui): refresh page summaries and brand
2026-06-07 14:17:24 +07:00
Codex
5ed80d7122
feat(dashboard): add momentum and game debt
2026-06-07 12:08:21 +07:00
Codex
7c40558cd3
feat(app): add diagnostics and update runtime
2026-06-06 20:42:34 +07:00
AnRil
bef733a877
feat(meals): вкладка «Питание» — напоминания о еде по времени суток
...
Новая модель Meal — напоминание по настенным часам (time HH:MM + дни недели),
в отличие от interval-based Exercise. Отдельная вкладка «Питание» с пресетами
быстрого добавления (Завтрак/Обед/Ужин/Перекус).
- shared: тип Meal, meals в AppState, nextMealOccurrence (DST-safe), SAMPLE_MEALS,
MEAL_PRESETS; IPC-каналы meal:* + evtFireMeal
- main: валидация (строгая HH:MM-проверка диапазона), store-мутаторы с пересчётом
nextFireAt, scheduler.checkDueMeals (гейт только globalEnabled, grace-окно 120с,
игнор тихих часов/ВКС), notifications.fireMealReminder, IPC-хендлеры
- renderer: вкладка Meals + MealEditor (время/дни/иконка), MealReminder в окне
напоминания (Поел/Отложить, TTS), пункт в Sidebar, маршрут, i18n RU/EN, иконки
UtensilsCrossed/Soup
- persistence: meals additive (без bump схемы — старые state'ы получают [])
- +24 теста (203 -> 227): nextMealOccurrence, валидаторы приёмов пищи,
scheduler meal-gating (вкл/выкл, grace, игнор тихих часов)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-03 23:45:34 +07:00
AnRil
0cace2975d
chore(remote): миграция Gitea-URL на сабдомен git.
...
Gitea переехал с path-prefix (xn--90adajar8af4h.xn--p1ai/git/) на
выделенный сабдомен (git.xn--90adajar8af4h.xn--p1ai). Старый URL теперь
отдаёт чужое приложение и для git мёртв.
- package.json: publish.url (канал авто-апдейта) -> новый хост
- scripts/release.ps1, upload-release-assets.ps1: $giteaHost (API + release URL)
- README, CHANGELOG, RELEASING.md, CLAUDE.md: ссылки на репозиторий/релизы
Прим.: уже установленные копии (<=0.5.8) запекли старый URL в бинарник —
их авто-апдейт нужно мигрировать отдельно (bridge-теги), правкой конфига
это ретроактивно не лечится.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 22:03:16 +07:00
AnRil
46b3d59b66
feat(robustness+ui): отказоустойчивость main, тесты, a11y-полировка, лицензия
...
Надёжность main-процесса:
- глобальные uncaughtException/unhandledRejection (лог + flushNow)
- safeHandle/safeOn вокруг всех IPC-хендлеров (не падаем молча, generic-ошибка наружу)
- таймаут 4s на tasklist, Atomics.wait вместо busy-spin на exit-записи
- единый log.error для фоновых сбоев вместо console.error/тишины
Тесты (178 -> 203): meeting-detect, scheduler-gating, store (миграции/карантин/cap).
UI/UX:
- prefers-reduced-motion через MotionConfig + CSS media-блок
- Spinner/Skeleton примитивы, loading-состояния вместо пустых заглушек
- aria-live анонсы достижений и выполнения (useAnnounce)
- оформленные пустые состояния, клавиатура в меню ExerciseCard
Лицензия: проприетарный LICENSE + правка README/CLAUDE.md, счётчик тестов.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-29 13:23:53 +07:00
AnRil
b621cef12f
docs(v0.5.8): CHANGELOG + release-notes + badges
2026-05-22 23:37:36 +07:00
AnRil
71b664d284
docs(v0.5.7): CHANGELOG + release-notes + badge
2026-05-22 15:27:28 +07:00
AnRil
433493773d
docs(v0.5.6): CHANGELOG + badge
2026-05-22 14:00:28 +07:00
AnRil
0a753ad4c7
docs(v0.5.5): CHANGELOG + badge
2026-05-22 02:01:09 +07:00
AnRil
c735659567
docs(v0.5.4): CHANGELOG + badges (tests 53 → 135)
2026-05-19 21:34:02 +07:00
AnRil
a64f03b3cc
docs(v0.5.3): CHANGELOG entry + badge + CLAUDE.md version bump
2026-05-19 17:53:53 +07:00
AnRil
2503b27d42
docs(v0.5.2): update CHANGELOG + README badge
2026-05-19 13:37:59 +07:00
AnRil
d6f94ee1c9
docs+chore: retry upload on TLS/504 + refresh README/RELEASING
...
Upload script:
- Retry curl on transient network failures (504, schannel TLS abrupt
close): up to 4 retries with 15s/45s/2m/5m backoff. Before each retry,
list the release assets server-side — Gitea sometimes commits the
body but times out the response, so the file may already be there at
the expected size (skip retry). If present at wrong size (partial),
delete before re-uploading. ASCII-only (PS5.1 reads files in CP1251
without BOM).
Docs:
- README: bump release/test badges to v0.5.1 / 51 tests; mention silent
retry in the auto-update feature line.
- RELEASING: rewrite around the new update-channel architecture, bridge
tags, and dropped Gitea Actions workflows.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-18 22:37:33 +07:00
AnRil
c9d4fc237e
feat(v0.5.0): history + streak + heatmap, quiet hours, partial reps, README
...
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Release / Build installer + publish release (push) Has been cancelled
== История и стрики (#1 ) ==
- HistoryEntry { ts, exerciseId, action: done|skip|snooze, actualReps? }
персистится в app-state.json, лимит 10k записей (~3 года), trim oldest 10%
- markDone/snooze/skip пишут в историю; markDone принимает optional actualReps
- IPC: getHistory(sinceMs?), clearHistory(beforeTs?) + preload bindings
- Renderer helpers (src/renderer/src/lib/history.ts):
* dayKey(ts) — YYYY-MM-DD local
* dailyReps(entries, exs, dayKey) — суммирует actualReps || planned
* dailyRepsRange(entries, exs, days) — для heatmap, заполняет gaps нулями
* currentStreak(entries) — consecutive days, today или yesterday (grace)
- Dashboard теперь 4 hero-карточки: Today (повторов за день) / Streak
(дней подряд) / Next / Tracking
- Новый компонент HistoryHeatmap — GitHub-style 12-недельный календарь
с 5 интенсивностями, локализованными подписями дней/месяцев
== Тихие часы (#2 ) ==
- shared/types.ts: QuietHours { enabled, from, to, days[] } + isQuietAt()
helper с правильной обработкой wrap-around окон (22:00→08:00)
- DEFAULT_SETTINGS.quietHours = disabled, 22:00→08:00, все дни
- main/scheduler.ts: проверка isQuietAt перед fire; deferred fires
поднимаются после окончания окна
- Settings UI: новая секция "Тихие часы" с toggle, time-pickers,
day-of-week pills
== Сделал частично (#3 ) ==
- ReminderApp: stepper [−][число][+] вокруг счётчика повторов
- При adjusted (actualReps !== exercise.reps) число подсвечивается accent
и появляется подпись "Засчитаем X из Y"
- markDone передаёт actualReps только если юзер реально изменил —
иначе undefined чтобы история фиксировала планируемое значение чисто
== README.md (#4 ) ==
- Описание, фичи, скриншоты (TODO-плейсхолдер), установка, dev-команды,
архитектура, тесты, stack, ссылка на RELEASING.md
- Бэйджи version / tests / platform
== i18n ==
- ~14 новых ключей × 2 языка: dashboard.stat.today_done, streak,
settings.quiet.* (3 row'а), reminder.partial
== Тесты — 51 (было 33) ==
- shared/quiet-hours.test.ts (5): disabled, same-day, wrap-around,
day filtering, zero-length
- renderer/lib/history.test.ts (13): dayKey, dailyReps (planned vs
actual vs ignore non-done), currentStreak (empty, today gap,
consecutive, yesterday grace, multi-entry same day), dailyRepsRange
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-18 12:41:13 +07:00