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