Skip to content

Releases: Lemniscate-world/LifeTrack

v0.2.1 — Audit fix release

Choose a tag to compare

@Lemniscate-world Lemniscate-world released this 30 Jun 11:25

LifeTrack v0.2.1

A pre-release audit found 9 latent bugs in the persistence and rendering layers. All fixed.

Fixed

HIGH severity

  • store.flushSave race condition — A pending write could be silently dropped if a save was already in flight. Replaced with a pendingData slot that runs after the current save completes.
  • Undo/redo could recreate check-ins for deleted habits — Restoring an old snapshot after a habit was deleted could resurrect dangling check-ins. Now guarded by data.habits.some(...) in both undo and redo.
  • Import with duplicate IDs could attach data to the wrong habit — Re-importing a backup containing duplicate habit IDs silently routed check-ins/notes to a random habit. Fixed with a seenImportIds Set that warns and keeps the first-seen mapping.
  • autoRestoreChecked could permanently disable auto-restore — The flag was a module-level let; React StrictMode's double-mount in dev would set it to true on the first mount, then the second mount would see "already checked" and skip restore. Moved to useRef inside the App component.

MEDIUM severity

  • Safety net missed note-only changes — The 100-entry autosave recovery trigger only counted check-ins. Saving a habit note alone would not trigger a safety net. Now includes notes.length > 0 in the condition.
  • computeChaosReport recomputed on every render — The chaos view scans every habit's check-ins, which gets expensive past a few hundred. Wrapped in useMemo([tick]) so it only runs when the UI forces a refresh.
  • trackingStart accepted malformed dates — A string like 2026-02-30 was silently normalized to 2026-03-02 by the JS Date constructor. Now validated with regex + round-trip check.

LOW severity

  • Silent backup failure — Backup write errors were swallowed. Now logged via console.warn.

Verified

  • 231 tests passing (was 223, +8 regression tests in audit-fixes.test.ts)
  • TypeScript: 0 errors
  • ESLint: 0 errors, 0 warnings
  • npm run package produces 2.91 MB MSI and 1.94 MB NSIS installer

Installers

  • LifeTrack_0.2.1_x64_en-US.msi (Windows Installer, 2.91 MB)
  • LifeTrack_0.2.1_x64-setup.exe (NSIS, 1.94 MB)

Both signed locally; SHA-256 published in the GitHub Release.

What's still in v0.2.0 (unchanged in this patch)

  • Habit stacking with cycle detection (Phase 6)
  • New Stacks view with progress bars and "Up next" suggestion
  • Inline stackParent picker per habit

Full diff: v0.2.0...v0.2.1

v0.2.0-kuro - Polished and Production-Ready

Choose a tag to compare

@Lemniscate-world Lemniscate-world released this 24 Jun 15:10

What's New

UI Polish

  • Simple black/white checkmarks (no more eye-straining pastel fills)
  • Keyboard focus indicator hidden until keyboard is actually used
  • Saved Xs ago indicator with click-to-save-now

Storage Hardening

  • Debounce reduced from 300ms to 100ms
  • Periodic auto-save every 15 seconds
  • beforeunload handler prevents data loss on close
  • Concurrent write guard
  • Last-saved timestamp tracking

Auto-Backup

  • JSON backup saved to AppData/LifeTrack/backups every 30 minutes
  • Keeps last 10 backups, auto-cleans older ones
  • Silent, no user action needed

CI/CD

  • GitHub Actions CI is green (test + lint on every push)
  • Windows build triggers on tags

Assets

  • lifetrack.exe (portable)
  • LifeTrack .msi installer
  • LifeTrack NSIS installer

v0.1.1-kuro — Elegant Themes & Tooling

Choose a tag to compare

@Lemniscate-world Lemniscate-world released this 23 Jun 21:02

What's New

8 Elegant Themes

  • Default (Purple), Ocean (Deep Blue), Forest (Natural Green), Sunset (Warm Amber)
  • Rose (Soft Pink), Mono (Grayscale), Midnight (Deep Indigo), Emerald (Teal-Green)
  • Each theme has refined light + dark palettes with smooth transitions

Tooling

  • Pre-commit hooks (blocks protected files: PLAN.md, SESSION_SUMMARY.md, .env)
  • CONTRIBUTING.md with architecture overview and conventions
  • Issue templates (bug report, feature request)
  • Dependabot (npm + cargo + GitHub Actions)
  • bump-version.ps1 for synchronized version bumps
  • Coverage script (npm run coverage)

Assets

  • lifetrack.exe (portable)
  • LifeTrack .msi installer
  • LifeTrack NSIS installer

v0.1.0-kuro — First Desktop Release

Choose a tag to compare

@Lemniscate-world Lemniscate-world released this 23 Jun 20:50

Changelog

All notable changes to LifeTrack are documented in this file.

[0.1.0] — 2026-06-23

Added

  • Monthly habit grid (1-30 days) with pastel-colored check cells
  • Habit CRUD (add, rename, archive, delete)
  • Configurable goals per habit (click to edit)
  • Dark mode with persistent preference
  • 6 color themes (Default, Ocean, Forest, Sunset, Rose, Mono)
  • Statistics view (current streak, best streak, completion rates 7d/30d/90d/365d, weighted score)
  • Notes panel (add/delete, saved per session)
  • Data export (CSV, JSON)
  • Keyboard shortcuts (Space to toggle, arrows to navigate, Ctrl+Z/Y undo/redo, Ctrl+N new habit)
  • Empty state UX when no habits exist
  • Error boundary for crash recovery
  • Brand logo (SVG) + app icon (ICO, PNG, ICNS)
  • Tauri v2 desktop packaging (native Windows .exe, .msi, .nsis)

Storage

  • localStorage with checksum integrity (FNV-1a hash)
  • Primary + backup key automatic recovery
  • Debounced writes (300ms) with beforeunload flush
  • Periodic save every 30 seconds
  • Malformed entry filtering on load
  • Storage health indicator in UI (green/yellow/red dot)

Technical

  • React 19 + TypeScript + Vite 8
  • Tauri v2 (Rust 1.93 + Windows WebView2)
  • 38 tests (Vitest + React Testing Library)
  • 0 npm vulnerabilities
  • MIT License