github dongdongbh/Mindwtr v1.2.8

4 hours ago

Mindwtr 1.2.8

Highlights

  • Self-hosted servers gain a capture webhook, POST /v1/capture, that turns a posted transcription and optional audio recording into an Inbox task, so a Pebble Index watch, an Apple Shortcut, or any script can send straight to your own server. (#1148)
  • MCP tools accept link attachments on tasks and projects, refuse links that point at a network share, and keep a removed link removed across a retried update. (#1154)
  • Choosing Reference while processing the Inbox now offers the project and area pickers, and Reference appears in every task status menu on desktop and phone. (#1155)
  • Four sync loops are closed: a phone that synced every second or two after another device deleted attachments or after a desktop wrote the data, a File Sync folder that could never be joined before its attachments arrived, a sync lock left behind when you left the app mid-sync, and a long upload whose reservation another device could reclaim halfway. (#1136, #1156)
  • iCloud sync works again for anyone whose library holds a project with a start date, and a rejected save now names the record and reason that actually failed instead of "Atomic failure".
  • Android sync fails over from an unanswered IPv6 address to IPv4 in ten seconds instead of timing out, and a background attachment upload no longer stalls until the app is reopened. (#1150, #1001)
  • Windows Store installs show reminder notifications again, and the desktop restores its hover-revealed task row buttons, a single-row project header, a more readable Timeline, and a calendar timeline that fills tall windows. (#1146, #1159, #1160, #1111)
  • Translations: 146 sentences were fixed, from word-substituted English to missing fill-in values and text that never had a dictionary entry.
Full change list (grouped by area)

Capture & Integrations

  • Self-hosted server: a new capture webhook, POST /v1/capture, turns a posted transcription and optional audio recording into an Inbox task with the recording attached. Send it as a form upload, as JSON, or as plain text, with your sync token as the bearer token. It matches the format the Pebble Index watch posts, so that watch can send to your own server, and so can any shortcut, script, or automation that can make a web request. (#1148)
  • Self-hosted server: when a capture request fails after its audio recording was already written to disk, the recording is removed again instead of staying behind as a file no task refers to.
  • MCP: mindwtr_add_task, mindwtr_update_task, mindwtr_add_project and mindwtr_update_project accept link attachments (kind: "link", a title and a uri such as obsidian://, file:// or https://). On update the list is the complete set of links: links left out are removed, file attachments are never touched. (#1154)
  • MCP: the same tools refuse a link attachment whose uri points at a network share (\\host\share, //host/share or file://host/..., in any spelling), because opening such a link on Windows makes the desktop contact that host before any check runs. https://, obsidian://, file:/// and plain local paths keep working.
  • MCP: mindwtr_update_task and mindwtr_update_project re-read the stored attachments inside the retried write, so a link removed by the app or by another agent while the update was being retried stays removed instead of coming back.
  • MCP: the add and update project tool inputs now list startDate. (#1111)

Tasks & Projects

  • Desktop: choosing Reference while processing the inbox offers the project and area pickers, so a note lands in its project in one step, and the task status menus on rows and in the editor list Reference for every task, so a task inside a project can be turned into a reference without leaving the project. (#1155)
  • Mobile: the task editor's status list offers Reference for every task, as the status badge on the same screen and the desktop already did. (#1155)
  • Desktop: the project header is now a single row. The title, status, area, and type chips sit inline, progress moves to the right, and Details, Duplicate, Archive, and Delete live in a "..." menu, so the task list starts higher on the page. (#1160)
  • Desktop: attachment and link rows in the task editor and in project notes highlight when the mouse is over them, so the Edit and Remove buttons read as belonging to that row. (#1159)
  • Desktop: the buttons that appear when you hover a task row (start a Pomodoro, the three-dot menu, duplicate, delete, and the trash can on deleted rows) were invisible in 1.2.7. The cursor still changed over them and clicks still worked, but nothing was drawn. A security update of a stylesheet tool made every hover-revealed style disappear from the build; the tool is now on the corrected release and a build check guards it. (from in-app feedback)
  • Desktop: each Daily Review step shows every task it counts. The step header said, for example, "23 tasks" while only the first ten were listed. The phone was fixed the same way in 1.2.6.
  • Desktop: the Daily Review focus step shows your configured Today's Focus limit (for example "1 / 1" or "2 / 5") instead of always "/ 3", so it no longer invites picks the star control then refuses.
  • Desktop: Trash has a go-to keyboard chord, g T in the Vim preset and Alt+Shift+T in the Emacs preset, so a Trash hidden through Settings → Sidebar views stays reachable, and the setting's description says hidden views stay reachable through their go-to chord. (#1115)
  • Task editor: the default order of the editor's fields is now the same on the phone and the desktop (dates together under Scheduling, with the repeat rule after them). The phone's default had drifted, and because the field layout syncs between devices, the first customization made on either device silently rearranged the other. A saved customization is not changed.
  • Widgets (Android, iOS, macOS) and the iOS Shortcuts focus list: for a step-by-step project the widget shows the same next action as the Focus screen. The screen gives the project's one slot to a later step that is due today or due for review; the widgets still used the older order-only rule and named the first step instead. (#1090)
  • Converting a task into a section creates its checklist children with the same canonical flags the sync normalizer expects, so the next sync no longer rewrites them.
  • Mobile: picking a project's start or due date in the project details stores the day you tapped. Evening picks in time zones ahead of UTC could land on the previous day.

Timeline & Calendar

  • Desktop Timeline: a line separates one project from the next, task bars are drawn in a lighter tint of the project color so the project bar stands out as their parent, a task title is shown once in the name column instead of also on the bar, task bars are thinner than the solid project bar, and the daily and weekly gridlines are crisp lines instead of a repeating pattern that blurred into soft vertical bands on scaled displays. (#1111)
  • Desktop Timeline: the view opens centered on today and re-centers when you change the zoom. (#1111)
  • Desktop Timeline: a project whose dates all fall outside the visible window no longer shows as a bare row; it is counted in the Earlier or Later notice, and those notices say "N more" instead of "N tasks". (#1111)
  • Desktop Timeline: bars and markers that would extend past the edge of the visible range at month zoom are kept inside the track instead of widening it.
  • Desktop Timeline: the chart can be focused with the keyboard and scrolled sideways with the arrow keys, and screen readers announce the chart and the zoom control by name. (#1111)
  • Desktop Timeline: the feature's description in Settings and the empty-state hint say that dated projects appear as bars too, not only tasks. (#1111)
  • Desktop Calendar: the Day and Week timeline grows with the window. It used to stop at a fixed height on tall screens and leave the rest of the window empty; the short-window minimum is unchanged.
  • Mobile Calendar: Week view opens on five days instead of two, so a school or work week fits on one screen. Swipe up or down on the timeline to change the count; a count you already chose on this device is kept.

Sync

  • Sync (iPhone, iPad and Android): with a self-hosted server, or any server holding tasks written by the desktop app, the phone could sync again every second or two with the sync indicator never settling, even though nothing had changed. The phone read two internal project-archive fields back from its database in a shape the merged copy never had, so every cycle looked like a local change. The phone now reads those fields the same way the desktop does, and documents older phones already uploaded settle on the next sync. (#1156)
  • Sync: a phone could keep syncing every second or two, warning about the same attachments on every cycle, after another device had deleted attachments the phone still listed. The app kept its own older copy of a task whenever only its attachments had changed, and two devices holding the same records in a different order were treated as different. The order of records no longer counts as a change, and attachment-only changes replace the in-memory task. (#1136)
  • Sync: a desktop joining a File Sync folder whose attachment files had not arrived yet (a Syncthing or mounted folder that carried data.json but not attachments/) refused the folder with "Candidate attachment proof failed" on every retry. When the device holds no copy of the file, the switch now completes and the file arrives on a later sync once the folder delivers it. A device that does hold the file is still refused. (from in-app feedback)
  • Sync: leaving the app mid-sync (switching to another app on a phone, or a background sync hitting its deadline) could leave the shared sync lock behind on Dropbox and WebDAV, and every device then reported "Remote sync is temporarily reserved by mindwtr-mobile" and waited up to five minutes. Lock requests now finish independently of the abort, so an interrupted cycle still releases its lock, and the "Sync follow-up scheduled" log line reports the delay that actually applies. (from a v1.2.7 device log)
  • Sync: before a long remote write, the app extends its sync reservation to cover the whole request, accounting for the time the reservation read itself takes, so another device cannot reclaim the location halfway through an upload.
  • Sync setup: when a new sync location cannot be verified because of an attachment, the message names the file and the task or project it belongs to, and says why, for example that the file was uploaded to iCloud and is not reachable from the new location. On the phone the toast shows that reason instead of only "Review Settings → Sync and try again". (#1151)
  • Sync: pressing Sync now while another device holds the sync location (your changes merged and were saved on this device, and the upload is already scheduled to retry) showed a red failure, on the desktop claiming "Your previous sync settings are still active" and on the phone "Unknown error". Both now show a short notice that the changes are saved and will upload on their own.
  • Desktop: after switching sync backends, a follow-up sync that does not finish (for example because another device holds the location) says the new settings are active and that sync will retry, instead of claiming the previous sync settings were still in use.
  • Web app: choosing a self-hosted server that already holds attachments failed with "Candidate attachment proof failed" on every attempt, because the browser build was asked to prove attachments it has no storage for. The web app skips that proof; attachments stay available on your native apps and unavailable in the browser, as before. (#1119)
  • Sync: a task whose "show future occurrences" flag was set through MCP on a task with no repeat rule, or a completion date stored on a task that is not done or archived, read back from the local database in a form the sync normalizer would still change, which on 1.2.7 desktops failed the next automatic sync once before self-healing. Both the desktop (Rust) and the phone (TypeScript) readers now return the canonical form, and a contract test checks every synced task field this way. (#1001)
  • Desktop and web app: an automatic sync that could upload the local library without merging first still paid a full merge and two whole-library serializations on the interface thread in 1.2.7, because a development-only self-check was accidentally active in those builds; when a task written through MCP looked different after the normalizing pass, that self-check failed the whole sync cycle. The check now runs only in development builds. (#1001)
  • Sync: a merge is no longer skipped as "empty remote" when the remote document carries settings but no tasks. (#1001)
  • Desktop: switching sync to Off no longer leaves the unencrypted-sync warning banner on screen until the next window focus, and that banner no longer re-reads the stored sync configuration every 30 seconds through the same queue and lock the sync cycle uses.

iCloud (iOS and macOS)

  • After 1.2.7, iCloud sync failed on every attempt with "Atomic failure" for anyone whose library held a project with a start date. The new project start date was created in the iCloud schema as a date field, while the app stores every date as text, so CloudKit refused the record and the whole batch with it. The start date now syncs through a text field like the other dates. (Discord report, App Store 1.2.7)
  • When CloudKit refuses a save, the Sync screen and the log name the record and reason that actually failed instead of "Atomic failure" for a bystander record.

Android

  • Sync against a server whose address is also published over IPv6, but which does not answer on IPv6, failed every time with "Cloud request timed out" while the same server worked in a browser on the same phone. The app gives up on an unanswered address after ten seconds and moves on to the next one, the way browsers do, so the sync completes over IPv4. This applies to every server the Android app talks to: self-hosted, WebDAV and Dropbox. (#1150)
  • A background sync that uploaded two or more attachments to WebDAV could stall until the app was reopened, holding the system's background job for its whole allowance and draining the battery. The short pause between attachment requests and the upload time limit both waited on a timer Android never fires while the app is in the background; both now step aside while timers are paused. (#1001)

Windows

  • Microsoft Store: due-date and other reminders never showed a notification while the app ran in the tray, because the Store version asked Windows to post the toast under a name Windows does not accept for it. Store installs now post reminders under the app's own package identity, and the debug log records every reminder the app fires and which path delivered it. (#1146)

Desktop performance

  • Editing a task no longer rebuilds the whole task index just so each visible row can read the Today's Focus count; rows read the count from a cached scan, as the phone already did since 1.2.7. (#1001)
  • The global search palette and the quick-add dialog, which are always mounted even when closed, no longer rebuild the whole task index on every task write. On a large library that was about 13 ms of interface-thread work per edit charged to two invisible overlays. (#1001)
  • Desktop and mobile: the search screens look tasks up through the store's existing id map instead of rebuilding their own map of every task whenever the library changes.

Translations

  • Ninety-one Spanish, Dutch, Turkish, Polish, Portuguese, German and Italian sentences were English with single words swapped (for example "Are you sure you want to Eliminar this section?"), including the notice that asks permission before task data is sent to an AI provider; all are rewritten in natural language, and a build check catches this pattern in every Latin-alphabet language.
  • Thirty-seven sentences in twelve languages had lost the place where a number or name is filled in (for example the focus limit in "Max. 3 focus items"), so they showed a fixed number or nothing; they are rewritten with the value back in place, and a build check keeps every translation's fill-in slots in step with the English source.
  • Eighteen pieces of text were English in every language because their entries were never added to the dictionary, among them the whole "External sync change detected" dialog on the desktop, the bulk-action failure messages, the section reorder hint and several labels on the phone's Review screen. They are translated in Chinese (Simplified and Traditional), Japanese, Persian and Swedish, and a build check stops new text from shipping without a dictionary entry.

Packaging & Diagnostics

  • Arch Linux: the source-built AUR package mindwtr is now community maintained and is no longer published by the Mindwtr release pipeline. Mindwtr publishes mindwtr-bin (stable) and mindwtr-beta-bin (release candidates).
  • The MCP package mindwtr-mcp is published as 1.1.8 with the link attachment tools above.
  • Diagnostics: the debug log gains lines that prove each of this release's sync, notification, capture and MCP fixes ran, listed in the maintainers' diagnostics ledger, so a shared log can confirm a fix without a second round trip.

Don't miss a new Mindwtr release

NewReleases is sending notifications on new releases.