Repository navigation
Recall v1.6
Recall 1.6.0
This release is mostly about trusting what the timeline tells you: Jira now shows when you touched a ticket rather than when anyone last did, days load noticeably faster, and the Harvest checkmark can no longer be ticked by accident.
🎯 Jira: the right time, and the whole day
- Events are timestamped from your own action, not the ticket's last update. A ticket you commented on at 09:00 that a colleague edited at 16:00 used to appear at 16:00. It now sits at 09:00, where you actually did the work — read from your comment and your changelog entries.
- Status changes get their own "Transitioned" label, separate from ordinary field edits, so moving a ticket to Done reads as what it was.
- One row per action, per ticket, per day (
Created,Commented,Transitioned,Edited), at the earliest time it happened that day, with a×Ncount when you did it more than once. - Busy ranges are no longer silently truncated. The Jira search only ever read the first 100 issues, so a month view or an export for anyone who touched more than that quietly lost the rest — and then cached the incomplete day as if it were the full picture. It now reads every page, and if it genuinely can't finish, Jira is reported as a failed source instead of a half-day being cached.
⚠️ One-time churn: days where a ticket previously showed up asEditedbecause you moved its status will now showTransitioned. That's a new row identity, so a Harvest checkmark on that specific ticket and day is lost once. Every other mark survives.
⚡ Faster days
- All five sources are fetched at the same time instead of one after another, so loading a day takes as long as the slowest source rather than the sum of all of them. Measured on a cold launch with every source enabled, today's timeline went from ~16.5s to ~11s.
- The startup warm-up is now a single range request per source. It used to fire six separate day fetches that re-downloaded the same GitHub pages and re-walked Zulip from the newest message each time: ~7.2s → ~1.6s.
- A source that fails outright now reports as a failed source instead of being able to take the whole load down with it.
✅ The Harvest mark is its own button
- Clicking a timeline row opens the link — the pull request, the ticket, the message. Until now a click anywhere on the row toggled the Harvest checkmark, so simply reading a row could log it by mistake.
- The checkmark is a real button with its own hover and focus state, and it's the only control that marks something as logged. Task group headers work the same way: the row expands the group, the Jira button opens the ticket.
- Screen-reader labels now say what the control does ("Mark as logged in Harvest") and report its current state.
⌨️ Keyboard shortcuts
- ← and → move one day back or forward; T jumps to today.
- Ignored while you're typing in a field or while the date picker is open, so they never fight with what you're doing. The date heading's tooltip spells out the shortcuts.
💾 Your view sticks
- The By time / By task toggle and any hidden sources are saved with your other UI settings and restored on next launch, instead of resetting to the defaults every time you open the app.
- The interface language follows your OS. Recall used to start in Danish for everybody; now a non-Danish system locale starts in English. An explicit choice in Settings still wins.
📊 Telemetry is now a usage summary
Up to 1.5, Recall sent a random install ID once a day, purely to count installs. That number can't tell whether the Harvest workflow, the task view, exports, or any given source are worth keeping — so it's been replaced.
- One anonymous summary per day: app version, OS and CPU architecture, UI language, theme, how long ago you installed (bucketed), a configuration snapshot as booleans and buckets only (which sources are enabled, how many calendars, whether a custom export prompt is set), and counters of what was used — days viewed, navigation, grouping switches, Harvest marks, exports, link clicks per source, settings saves.
- Health counters so failures are visible without anyone reporting them: per-source fetch-duration buckets, event-count buckets per day, and error classes (
auth,rate_limit,network,config,other). - Never sent: titles, URLs, repository names or paths, ticket keys, usernames, emails, calendar summaries, error message text, your timezone, or any timestamp finer than the calendar day. The server does not log IP addresses.
- There is no opt-out setting — there's nothing in the payload to opt out of. The Telemetry section of the README is the complete contract,
build_payloadintelemetry.rsis exactly what leaves your machine, and a test asserts that a seeded token, username, calendar URL, repo path and custom prompt appear nowhere in it.
🧱 Under the hood
- A real test suite. Rust coverage went from 72 to 191 tests and the frontend from 52 to 118, now covering the SQLite-backed commands, the day cache, the calendar query, the export command, and Danish/English translation parity — not just the pure parsing helpers.
- Dependabot pull requests merge themselves once lint and tests are green, and
lintwas added to the required checks onmainso a dependency bump can't slip past a broken build. - Fixed a clippy lint that was failing the lint job on every open pull request.
📦 Dependencies
Routine updates across the Rust and npm toolchains, including Tauri 2.11.5, SvelteKit 2.70.3, @lucide/svelte 1.47.0, tokio 1.53.1, rusqlite 0.40.2, serde 1.0.229, uuid 1.26.1, base64 0.23.1, sass 1.104.1, and several Tailwind and tooling bumps.