Replace numeric midpoint sort_order with LexoRank string-based ordering.
This addresses robustness issues from PR review: buggy reordering when
notes lack sort_order, hardcoded "sort_order" field name, and duplicated
between-tasks logic.
- Extract rankBetween() helper with try/catch around LexoRank.between()
- Add ensureRank() to lazily assign LexoRank to unranked neighbors
- Thread sortOrderField param instead of re-reading settings per call
- Fix hardcoded "sort_order" writes in KanbanView and TaskListView
- Change sortOrder type from number to string across types and FieldMapper
- Pin lexorank dependency to 1.0.5 (no caret)
- Remove orphaned JSDoc stubs in KanbanView
- Pass swimlane params through to computeSortOrder in KanbanView
Add Model Context Protocol server exposing TaskNotes tools at /mcp
endpoint behind an enableMCP setting. Extract shared business logic
from HTTP controllers into reusable utilities so both controllers
and MCPService call the same code:
- timeTrackingUtils: active sessions, time summary, task time data
- calendarUtils: event collection, filtering, provider detection
- TaskStatsService.getStats(): unified task statistics
MCPService triggers webhooks for all mutations and reuses the shared
utils, eliminating ~400 lines of duplication. Also fixes a pre-existing
bug where webhook payloads for start-with-description had stale data.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Added:
- Korean language support (1911 localization keys)
- Obsidian 1.11.0 API features with backwards compatibility
- shortYear template variable for custom filename/folder templates
- Option to prevent auto-creation of default Base view files
- Shift+click on status icon to cycle backwards
- Vim insert mode auto-start in task creation modal
- Button tooltips to calendar view toolbar and task modal
- Settings sync across devices via Obsidian Sync
- Kanban view option for status icons in column headers only
- Calendar view option to span tasks between scheduled and due dates
- currentNotePath support for "Create new inline task" command
- Option to open Pomodoro timer in mobile sidebar
- Option to use ICS event end time as task due date
- Option to use task duration for ICS calendar export
Fixed:
- Title sanitization when "Store Task Title in Filename" is disabled
- Duplicate task entries in Agenda view
- timeEstimateCategory formula for new tasks
- Bases views resetting to Calendar view
- Overdue strikethrough on completed tasks
- Calendar view crash with invalid date formats
- Today column styling in calendar week/day views
- Drag-and-drop in Kanban view on mobile
- Pomodoro task menu not showing new tasks
- "Unsaved Changes" popup appearing randomly
- Kanban swimlane column assignment with formula grouping
- Date context menu time preservation with increment options
- v3 saved views export to Bases format
- Due date dragging in calendar view
- Calendar view responsiveness for user interactions
- Pomodoro timer button visibility
- Views in pop-out windows (drag-and-drop, context menus, etc.)
- "Convert current note to task" default values
- Blocking view error with single dependency
- Missing navigation link to Default Base Templates
- "Go to today's note" command in positive UTC offset timezones
- Use obsidian:// URI protocol for vault opening
- Add isolated OBSIDIAN_CONFIG_DIR for E2E tests
- Improve trust/plugin dialog handling with multiple button variants
- Add TaskNotes plugin verification via command palette
- Refactor tests to use single shared Obsidian instance
- Fix button selectors to use FullCalendar class names
- Add npm scripts for documentation screenshots
- Add Playwright and @electron/asar dev dependencies
- Add e2e, e2e:setup, and e2e:launch npm scripts
- Update copy-files.mjs to default to tasknotes-e2e-vault in repo
- Add .gitignore entries for test artifacts and unpacked Obsidian