OmniPlanner- 025Pulse Swallowed the ClockPulse v4.2 expanded from alarms into a five-tab clock and focus suite with shared Pomodoro state and selectable alarm audio. Its UI breadth was real, but countdown and stopwatch lifecycles remained renderer-bound rather than joining Electron's persistent scheduler.→
- 024Dismissing an Alarm Became WorkOmniPlanner v4.1 added custom weekly alarms, three interactive dismissal missions, synthesized fade-in chimes, and Smart Snooze calendar shifts. The integration was ambitious, but pausing could erase a recurring alarm and snoozing stripped the mission from the next ring.→
- 023The Background Process Was Not a TrayA direct Windows smoke test exposed an invisible tray, no usable alarm-time control, and an exit path that bypassed confirmation. The repair made those paths testable, but the surviving record does not prove that the second smoke test passed.→
- 022A New Week Was Not Allowed to Inherit Everythingv4 repaired six Dashboard mutations that used the wrong week key, then added a once-per-week carry-forward decision for unfinished goal-linked tasks without abandoning OmniPlanner's week-isolation rule.→
- 021Closing the Window Could Not Kill the AlarmOmniPlanner v4 replaced Electron's no-op notification adapter with persisted main-process timers, wake recovery, a system tray, close-to-tray behavior, and opt-in launch at login — finally allowing reminders to outlive the renderer window.→
- 020The Pomodoro Chimed, but the Week Stayed Emptyv3.2 added a focus timer, morning briefing, event checklists, and plan-vs-actual overlays, but its new Dashboard mutations addressed weeks by a plain Monday date instead of OmniPlanner's prefixed storage key, so important actions could silently fail to persist.→
- 019Rich Email Was Not the Same as Safe EmailOmniPlanner's inbox moved from plain IMAP body extraction to mailparser-backed text and HTML parts, then rendered rich messages inside a sandboxed srcDoc iframe with an explicit plaintext fallback — while leaving remote-content and sanitization policy unfinished.→
- 018The Local Model Was Not Part of the RepositoryOmniPlanner v3 replaced Electron's localStorage backend with per-key files, added lifecycle control for local llamafile servers, and exposed provider usage metrics — after an aborted model add left 5.8 GB of unreachable Git objects.→
- 017The Dashboard Arrived Before It Could RenderOmniPlanner replaced its weekly-grid entry point with a today dashboard, actual-event logging, Pulse alarms, and plan-vs-actual review — but the large integration passed Vite while failing TypeScript and crashing at render until a direct July 2 repair.→
- 016The Process Was Running, but the Planner Was HiddenA broken Windows launcher, an unreliable shortcut, forced elevation, stale Electron processes, and a hidden window produced a convincing false positive: every technical check passed while the planner still appeared not to launch.→
- 015The License Named the Wrong ProjectBefore public repository work, OmniPlanner's working tree and reachable history were scanned for common secret patterns, then AGPL-3.0-or-later was added — and a copied Mnemosyne notice was caught immediately after push.→
- 014OAuth Worked on a BranchA feature branch hardened IMAP timeouts, added Gmail and Outlook OAuth with PKCE, and implemented one-refresh/one-retry token recovery while preserving app-password accounts. It remained unmerged.→
- 013The First Release Gate Had 138 TestsOmniPlanner normalized IDs through a migration, extracted its calendar editor, enforced TypeScript, added 138 focused tests, and replaced ambiguous email failures with stable codes and operation IDs.→
- 012Nothing Writes Until ConfirmOmniPlanner taught a blank workspace how to explain itself, disabled actions that could not run, and added read-only previews before backup restore or email-to-calendar writes.→
- 011The Planner Outgrew ElectronOmniPlanner moved Electron calls behind platform services, then reused the core in an IndexedDB PWA and Capacitor shell with native credentials, local reminders, storage health, and honest mobile UX.→
- 010A Goal Had Tasks but No TimeGoal-linked todos could prove intention without reserving any time. Calendar events gained execution semantics, deterministic focus suggestions, and derived weekly and four-week coverage analytics.→
- 009The Password Left localStorageElectron safeStorage moved API keys and IMAP passwords out of planner data, but the first migration could discard credentials when encryption was unavailable. Security improved while its failure paths became visible.→
- 008A Goal Stopped Being a Text BoxOmniPlanner replaced long-range goal text blobs with migrated GoalItem records, then linked weekly work in one direction through Todo.parentGoalId so progress could be derived without duplicated state.→
- 007The Network Fix Was Too PowerfulAI and email connections failed inside Electron, native dialogs froze input, and the first repair elevated the whole app while proxying network traffic through the main process — effective, but broader than the product should require.→
- 006An Email Became a Time BlockReal IMAP retrieval replaced the placeholder inbox, AI could turn a message into a calendar event, and an ICS importer merged external calendars into OmniPlanner's week-isolated model.→
- 005Deleting a Habit Should Not Delete the PastHabit deletion first affected one week, then every week, then only future weeks — until inheritance resurrected it again. The fix required identity, history, and tombstones to agree.→
- 004Five Checkmarks, Two FlamesA habit completed five times could display a streak of two. Fixing the label led into a broader adaptability pass: wider planning columns, zoom controls, and local or provider-neutral AI.→
- 003The App Was Still a FolderOmniPlanner could build as an Electron app, but opening it still required repository knowledge. Double-click launchers and a shortcut creator turned the development folder into something re-enterable.→
- 002The Last Week of February DisappearedA seven-day iterator skipped the final partial week, exposing a deeper problem: OmniPlanner's monthly calendar could display planning data but could not reliably create or edit it.→
- 001The Web Planner Became a Desktop AppOmniPlanner's first repository captured an already substantial weekly planner, then replaced its browser assumptions with a local Electron shell, provider-neutral AI, and reproducible desktop builds.→
- 000Before OmniPlanner Had a RepositoryOmniPlanner began as one sentence joining personal planning, iCalendar, todos, self-improvement goals, and email — followed immediately by a request to inspect what was already broken.→