Mindwtr 0.6.17
Highlights
- Addressed high-priority reliability issues identified in the comprehensive review across cloud, core sync, MCP server, and mobile task editing.
- Improved mobile sync UX with a global sync status indicator, sync connection checks, dedicated empty states, and better accessibility labels.
- Strengthened sync correctness for attachments and store persistence (empty URI preservation, remote cleanup retry behavior, queue-flush robustness, and safer restore semantics).
- Hardened security and configuration paths with explicit cloud any-token opt-in and stricter MCP write-mode CLI handling.
- Stabilized CI and tooling by fixing watch-mode hangs in desktop tests, restoring mobile/core CI compatibility, and aligning lint/TypeScript versions.
Core / Sync / Data Integrity
- Preserved empty attachment URIs during sqlite deserialization so pending-upload metadata is not dropped.
- Added retry tracking for failed remote attachment cleanup attempts.
- Fixed store flush behavior to continue draining newer queued saves after failures.
- Preserved task status when restoring deleted tasks.
- Improved merge edge-case handling for invalid
deletedAt, explicit empty attachment arrays, and deep-cloned settings merges.
Cloud / MCP / Security
- Enforced task title length validation on cloud PATCH updates.
- Required explicit opt-in for cloud any-token auth mode when auth token list is unset.
- Wrapped MCP tool failures in MCP-compatible
{ content, isError }responses. - Standardized MCP server write mode to
--write.
Mobile / Desktop UX
- Added mobile fail-safe boundary handling for task edit modal audio lifecycle errors.
- Added mobile sync status indicator, sync connection checks, and empty-state UI coverage.
- Improved mobile accessibility labels and removed hardcoded status fallback labels.
- Fixed stale sync error banners showing after switching sync backend to Off.
- Continued desktop quality improvements (archived status support, tray/dock behavior fixes, UI polish).
Tooling / Docs / Tests
- Enabled sqlite-adapter test execution in core vitest runs.
- Aligned ESLint and TypeScript workspace versions.
- Fixed desktop CI hangs by ensuring CI test scripts run in non-watch mode.
- Updated docs and wiki references (roadmap links, developer guide table fixes, contribution docs cleanup).
Full Change List (since 0.6.16)
- 3282ad7 fix(mobile): hide stale sync errors when backend is off
- bb0fca5 fix(ci): avoid watch-mode hangs and timer-stalled store test
- d6808c0 fix(ci): restore mobile typecheck and core bun test compatibility
- 9dbcf79 refactor(mobile): extract task edit modal helpers
- 9eab82e feat(mobile): improve quick capture accessibility labels
- 70dc68b refactor(mobile): extract quick capture context helpers
- ba49b6d refactor(desktop): extract sync attachment helpers
- fb9d29c test(core): run sqlite adapter tests in vitest
- 005248b feat(mobile): add sync connection checks and empty state component
- 55e62ea fix(mobile): remove hardcoded status fallback labels
- bfe3371 feat(mobile): show global sync status indicator
- 14d18fd chore(tooling): align lint and TypeScript versions
- 38b43c7 docs: add roadmap issue links and fix developer guide table
- 8297da7 refactor(core): share recurrence constants across apps
- d9678ca fix(cloud): require explicit opt-in for any-token mode
- 386d3b8 fix(mcp-server): accept only --write for write mode
- 824e2b7 fix(sync): deep-clone merged settings values
- 74afee8 fix(sync): preserve explicit empty attachment arrays
- 6d47c48 fix(sync): make invalid deletedAt fallback explicit
- e95c470 fix(core): preserve task status on restore
- a413209 fix(core): continue flush when newer save is queued
- a312962 fix(sync): persist and retry failed remote attachment cleanup
- f630e6f fix(core): preserve empty attachment URIs in sqlite load
- 6271f89 fix(mobile): add fail-safe boundary for task edit modal
- 2ea632f fix(mcp-server): wrap tool failures in MCP error responses
- a305d15 fix(cloud): validate task title length on patch
- 81cc023 fix(analytics): keep heartbeat failures fully silent
- 32f8a45 fix(desktop): coerce legacy ymd date format for settings UI
- bb9274c docs: polish contributing links and translation references
- 025bff6 docs: unify contributing guidance and remove wiki duplicate
- 6062f8e docs: update star-and-share messaging in readmes
- 9eabdd5 feat(settings): add locale-aware date format preference
- 3d38b85 fix(desktop): persist tray close preference reliably
- 866befb fix(desktop): hide dock icon in macOS tray mode
- 0c1ba2e feat(task-edit): auto-detect text direction
- 1910699 chore(ci): stop updating homebrew tap cask
- 4ff3da7 feat(analytics): add device and locale heartbeat fields
- b736503 feat(analytics): add daily heartbeat integration
- c2c5bbb fix(sync): block remote writes when attachment uploads are pending
- 546279f feat(desktop): hide empty Today's Focus panel
- a881465 fix(mobile): add fullscreen preview for image attachments
- 08f85ba refactor(core): move i18n modules under src/i18n
- b4667ad docs(readme): fix CONTRIBUTING links in en and zh
- 90e5c55 docs(readme): add translation contribution link in support section
- 5e2d598 fix(desktop): default list details to off
- 0dfb6b8 refactor(core): split i18n into per-language locale files
- 1701eda fix(mobile): speed up app startup on slow Android devices
- c4c2714 docs(readme): use IzzyOnDroid shield badge in Android section
- 25ca426 docs(readme): add IzzyOnDroid badges and install steps
- 54933ce refactor(mobile): unify notifications on local OSS backend
- b03b842 fix(mobile): enable local notifications in FOSS builds
- a13d118 fix(foss): strip install-referrer permission and format metadata
- 75c2144 test(mobile): include isAIKeyRequired in ai-config mock
- 7b89069 fix(mobile): remove GPT-5 copy in FOSS reasoning hint
- 02c522d feat(calendar): add quick mark-done actions
- 56ed978 feat(desktop): add archived status option for tasks
- 4025e7a feat(core): default notifications off on first install
- cda1a40 fix(desktop): prevent board column border clipping
- a969089 fix(desktop): prevent clipped task selection border
- 5eb53bb fix(mobile): remove notification settings in FOSS build
- 06905a2 fix(mobile): allow keyless local OpenAI-compatible AI
- b9c4107 fix(mobile): smooth task edit/view swipe transition
- c4c6e6d fix(ai): allow keyless OpenAI-compatible endpoints
- 7de504e fix(desktop): split AUR update checks by package type
- b0fcb94 fix(ci): preserve pkgrel for AUR checksum updates
- 6966eaa fix(release): require WebView2 in winget manifest
- 0f5d251 fix(ci): update AUR source checksum generation
- 724db07 fix(linux): add appstream metainfo to appimage
- 995022d fix(ci): inject missing diricon into linux appimage
- f474b4c fix(ci): harden winget silent installer manifest
- 9bc789d chore(ci): default release dispatch toggles to off
- 7b616a2 fix(ci): checkout source before aur-source tag resolution
- 873cac4 fix(ci): allow post-release manual jobs when release is skipped
- 4552aff feat(ci): allow manual rerun of post-release jobs
- 5deade8 fix(ci): preserve aur repo ownership in srcinfo step