Skip to content

Commit 428de6a

Browse files
committed
release 4.10.0
1 parent 636acab commit 428de6a

8 files changed

Lines changed: 58 additions & 42 deletions

File tree

docs/releases.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Welcome to the TaskNotes release notes. Here you can find detailed information a
66

77
### Version 4.x (Current)
88

9+
- [4.10.0](releases/4.10.0.md)
910
- [4.9.2](releases/4.9.2.md)
1011
- [4.9.1](releases/4.9.1.md)
1112
- [4.9.0](releases/4.9.0.md)

docs/releases/4.10.0.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# TaskNotes 4.10.0
2+
3+
## Added
4+
5+
- **New companion plugin:** TaskNotes Workflows adds Markdown-defined automation for TaskNotes tasks, events, schedules, and manual commands. It keeps automation workflows outside TaskNotes core while using the runtime API for safe task reads, writes, queries, events, and relationship resolution. See [TaskNotes Workflows](https://tasknotes.dev/companion-plugins/tasknotes-workflows/).
6+
- (#1530) `Auto-start time tracking` starts a timer when a task moves into active work. Thanks to @Jendrik0 and @benmartinek for the request and follow-up.
7+
- (#222, #184) `Stop time tracking on complete` stops active timers when a task is completed. Thanks to @bcohen44 and @cathywu for the requests, and @amarjt for the follow-up.
8+
- (#265) `Stamp started timestamp` records a custom started timestamp when a task first moves into active work. Thanks to @cathywu, @digitaldoctors, and @Leo310 for the request and discussion.
9+
- (#1703) `Clear scheduled when started` clears the scheduled date when a task moves into active work. Thanks to @kmaustral for the request.
10+
- (#1293) `Rollover overdue scheduled tasks` moves incomplete tasks with past scheduled dates back to today. Thanks to @grosserfrank for the request.
11+
- (#1896) `Escalate upcoming due tasks` raises priority as due dates approach. Thanks to @Neptune-Illusion for the request.
12+
- (#214, #518, #1785, #1855) The subtask inheritance workflows can copy parent contexts, tags, priority, planning dates, and dependencies into new subtasks. Thanks to @timfidd, @bepolymathe, @AndyEveritt, @lindsaylearns, @tomsymonds, @wedgen, @poulpoulsen, and @misolex for the related requests and discussion.
13+
- (#1166) `Blocked task review` provides a reminder-style review for blocked tasks without automatically deleting dependency links. Thanks to @jpmoo and @jortscity for the request and follow-up.
14+
- Added a versioned TaskNotes JavaScript runtime API for companion plugins, with namespaced model validation, canonical task query validation/normalization/explain helpers, catalogs, query/support helpers, lifecycle events, typed errors/results, task, time-tracking, Pomodoro, recurring-task, settings, NLP, event, and extension-registry surfaces. Runtime API mutations carry source and correlation metadata so companion plugins can debug and coordinate workflow runs. See [JavaScript API](https://tasknotes.dev/javascript-api/).
15+
- Added documentation for the companion-plugin model. See [Companion Plugins](https://tasknotes.dev/companion-plugins/).
16+
- (#288, #345, #361, #523, #573, #703, #925, #929, #1115, #1137, #1260, #1303, #1324, #1394, #1445, #1509, #1735, #1736, #1743, #1780, #1874, #1951, #1974) Added support for TaskNotes spec 0.2.0 materialized occurrences, including recurrence parent/date fields, generated mdbase schema roles, parent reconciliation when occurrence notes are completed, occurrence notes that inherit parent planning metadata without copying history, occurrence note controls in task, calendar, and edit-modal completion menus, and visible occurrence identity on task cards. This gives recurring tasks a concrete occurrence-note path for per-instance state, related notes, subtasks, templates, scheduling changes, completion history, and calendar behavior without forcing every recurring task to create files. See [Recurring Tasks](https://tasknotes.dev/features/recurring-tasks/#materialized-occurrence-notes) and [Property Types Reference](https://tasknotes.dev/settings/property-types-reference/#materialized-occurrence-properties). Thanks to @LuxBetancourt, @jerzy-dudzic, @luciolebrillante, @BryanWall, @jhedlund, @kazerniel, @nschenone, @realJohnDoe, @cathywu, @Lorite, @EllenGYY, @JcMinarro, @gsssr, @slipstyle, @3zra47, @Leonard-44, @ak-42, @RumiaKitinari, @atos2212-blip, @kmaustral, @eugenedefox, @notDavid, @zitongcharliedeng, and @Jomo94 for the related recurrence, occurrence, completion, and calendar requests.
17+
- (#1951) Added Calendar support for recurring tasks stretched between scheduled and due dates when the existing stretch option is enabled. Date-only ranges stay as all-day spans, and timed ranges render once per day in the range. Thanks to @atos2212-blip for the request.
18+
- (#1751, #1792, #1969) Added a Task List and Kanban view option to hide top-level subtasks when their parent task is also in the filtered view, while still allowing inherited expanded relationships to show the subtasks under the parent. Thanks to @Glint-Eye and @Proxybat for the request and follow-up, and @stanley-910 and @Spencerduran for the earlier PRs.
19+
20+
## Changed
21+
22+
- Moved core TaskNotes model behavior for field mapping, dates, recurrence, time-tracking, and adapter operation planning into a shared package used by the plugin and companion tooling.
23+
- Calendar views now coalesce materialized occurrence notes with their matching virtual recurring instances. Dragging a materialized occurrence reschedules that occurrence note without changing the parent recurrence rule or the note's `occurrence_date` identity. See [Recurring Tasks](https://tasknotes.dev/features/recurring-tasks/#calendar-drag-and-drop).
24+
- Improved the Calendar Bases View Options menu by splitting settings into clearer groups and hiding view-specific controls until they apply to the selected calendar mode.
25+
26+
## Fixed
27+
28+
- (#1976) Fixed embedded Calendar and Agenda Bases so "Navigate to date from property" can use the containing note's date property when the Base rows do not have that property. Thanks to @matesvecenik for reporting this.
29+
- (#1977) Fixed Calendar and Agenda views showing duplicate all-day entries when a task's scheduled date and due date are the same day. Timed due dates on the same day still show as separate deadline markers. Thanks to @pdgBC for reporting this.
30+
- Fixed the release notes view using cramped interface typography instead of regular reading typography.
31+
- (#216) Improved inline conversion for Tasks plugin task lines, including Dataview-style fields, priority markers, recurrence text, date aliases, block links, and safer trailing-field parsing. Thanks to @ksdavidc for the request, @natleahh for the Dataview example, and @hangryscribe3 and @nayatiuh for the discussion.
32+
- (#1974) Stopped Calendar and Agenda property-based events from logging date parse errors for entries that do not have the selected date property. Thanks to @Jomo94 for suggesting completed-date Agenda events.
33+
- (#1973) Reduced unnecessary Calendar view recreations when external calendar providers are reported in a different order, and preserved Calendar scroll position when a config-driven refresh has to recreate the view. Thanks to @e-zz for reporting this.
34+
- (#1972) Fixed ICS calendar event related notes so standalone events with similar numeric IDs no longer show unrelated notes or tasks on every event. Thanks to @ks-studio-net for reporting this.
35+
- (#1970) Fixed generated default Base filters so updating default files applies configured excluded folders to TaskNotes task views. Thanks to @henrim01 for reporting that templates could still appear in regenerated views.
36+
- (#1968) Fixed inline task link overlays collapsing on Obsidian mobile, which could hide the task title and leave a tall empty gap after the widget. Thanks to @renatomen for reporting and diagnosing the containment issue.

docs/releases/unreleased.md

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -31,38 +31,3 @@ When a change has user-facing documentation, include a canonical tasknotes.dev l
3131
```
3232
3333
-->
34-
35-
## Added
36-
37-
- **New companion plugin:** TaskNotes Workflows adds Markdown-defined automation for TaskNotes tasks, events, schedules, and manual commands. It keeps automation workflows outside TaskNotes core while using the runtime API for safe task reads, writes, queries, events, and relationship resolution. See [TaskNotes Workflows](https://tasknotes.dev/companion-plugins/tasknotes-workflows/).
38-
- (#1530) `Auto-start time tracking` starts a timer when a task moves into active work. Thanks to @Jendrik0 and @benmartinek for the request and follow-up.
39-
- (#222, #184) `Stop time tracking on complete` stops active timers when a task is completed. Thanks to @bcohen44 and @cathywu for the requests.
40-
- (#265) `Stamp started timestamp` records a custom started timestamp when a task first moves into active work. Thanks to @cathywu, @digitaldoctors, and @Leo310 for the request and discussion.
41-
- (#1703) `Clear scheduled when started` clears the scheduled date when a task moves into active work. Thanks to @kmaustral for the request.
42-
- (#1293) `Rollover overdue scheduled tasks` moves incomplete tasks with past scheduled dates back to today. Thanks to @grosserfrank for the request.
43-
- (#1896) `Escalate upcoming due tasks` raises priority as due dates approach. Thanks to @Neptune-Illusion for the request.
44-
- (#214, #518, #1785, #1855) The subtask inheritance workflows can copy parent contexts, tags, priority, planning dates, and dependencies into new subtasks. Thanks to @timfidd, @bepolymathe, @lindsaylearns, @poulpoulsen, and @misolex for the related requests and discussion.
45-
- (#1166) `Blocked task review` provides a reminder-style review for blocked tasks without automatically deleting dependency links. Thanks to @jpmoo and @jortscity for the request and follow-up.
46-
- Added a versioned TaskNotes JavaScript runtime API for companion plugins, with namespaced model validation, canonical task query validation/normalization/explain helpers, catalogs, query/support helpers, lifecycle events, typed errors/results, task, time-tracking, Pomodoro, recurring-task, settings, NLP, event, and extension-registry surfaces. Runtime API mutations carry source and correlation metadata so companion plugins can debug and coordinate workflow runs. See [JavaScript API](https://tasknotes.dev/javascript-api/).
47-
- Added documentation for the companion-plugin model. See [Companion Plugins](https://tasknotes.dev/companion-plugins/).
48-
- (#288, #345, #361, #523, #573, #703, #925, #929, #1115, #1137, #1260, #1303, #1324, #1394, #1445, #1509, #1735, #1736, #1743, #1780, #1874, #1951, #1974) Added support for TaskNotes spec 0.2.0 materialized occurrences, including recurrence parent/date fields, generated mdbase schema roles, parent reconciliation when occurrence notes are completed, occurrence notes that inherit parent planning metadata without copying history, occurrence note controls in task, calendar, and edit-modal completion menus, and visible occurrence identity on task cards. This gives recurring tasks a concrete occurrence-note path for per-instance state, related notes, subtasks, templates, scheduling changes, completion history, and calendar behavior without forcing every recurring task to create files. See [Recurring Tasks](https://tasknotes.dev/features/recurring-tasks/#materialized-occurrence-notes) and [Property Types Reference](https://tasknotes.dev/settings/property-types-reference/#materialized-occurrence-properties). Thanks to @LuxBetancourt, @luciolebrillante, @jhedlund, @cathywu, @Lorite, @EllenGYY, @JcMinarro, @gsssr, @3zra47, @Leonard-44, @ak-42, @RumiaKitinari, @atos2212-blip, @kmaustral, @eugenedefox, @notDavid, @zitongcharliedeng, and @Jomo94 for the related recurrence, occurrence, completion, and calendar requests.
49-
- (#1951) Added Calendar support for recurring tasks stretched between scheduled and due dates when the existing stretch option is enabled. Date-only ranges stay as all-day spans, and timed ranges render once per day in the range. Thanks to @atos2212-blip for the request.
50-
- (#1510, #1751, #1792, #1969) Added a Task List and Kanban view option to hide top-level subtasks when their parent task is also in the filtered view, while still allowing inherited expanded relationships to show the subtasks under the parent. Thanks to @Kickdak and @Glint-Eye for the requests, @inigourrestarazu for identifying the project-linked parent edge case, and @stanley-910 and @Spencerduran for the earlier PRs.
51-
52-
## Changed
53-
54-
- Moved core TaskNotes model behavior for field mapping, dates, recurrence, time-tracking, and adapter operation planning into a shared package used by the plugin and companion tooling.
55-
- Calendar views now coalesce materialized occurrence notes with their matching virtual recurring instances. Dragging a materialized occurrence reschedules that occurrence note without changing the parent recurrence rule or the note's `occurrence_date` identity. See [Recurring Tasks](https://tasknotes.dev/features/recurring-tasks/#calendar-drag-and-drop).
56-
- Improved the Calendar Bases View Options menu by splitting settings into clearer groups and hiding view-specific controls until they apply to the selected calendar mode.
57-
58-
## Fixed
59-
60-
- (#1976) Fixed embedded Calendar and Agenda Bases so "Navigate to date from property" can use the containing note's date property when the Base rows do not have that property. Thanks to @matesvecenik for reporting this.
61-
- (#1977) Fixed Calendar and Agenda views showing duplicate all-day entries when a task's scheduled date and due date are the same day. Timed due dates on the same day still show as separate deadline markers. Thanks to @pdgBC for reporting this.
62-
- Fixed the release notes view using cramped interface typography instead of regular reading typography.
63-
- (#216) Improved inline conversion for Tasks plugin task lines, including Dataview-style fields, priority markers, recurrence text, date aliases, block links, and safer trailing-field parsing. Thanks to @ksdavidc for the request, @natleahh for the Dataview example, and @hangryscribe3 and @nayatiuh for the discussion.
64-
- (#1974) Stopped Calendar and Agenda property-based events from logging date parse errors for entries that do not have the selected date property. Thanks to @Jomo94 for suggesting completed-date Agenda events.
65-
- (#1973) Reduced unnecessary Calendar view recreations when external calendar providers are reported in a different order, and preserved Calendar scroll position when a config-driven refresh has to recreate the view. Thanks to @e-zz for reporting this.
66-
- (#1972) Fixed ICS calendar event related notes so standalone events with similar numeric IDs no longer show unrelated notes or tasks on every event. Thanks to @ks-studio-net for reporting this.
67-
- (#1970) Fixed generated default Base filters so updating default files applies configured excluded folders to TaskNotes task views. Thanks to @henrim01 for reporting that templates could still appear in regenerated views.
68-
- (#1968) Fixed inline task link overlays collapsing on Obsidian mobile, which could hide the task title and leave a tall empty gap after the widget. Thanks to @renatomen for reporting and diagnosing the containment issue.

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "tasknotes",
33
"name": "TaskNotes",
4-
"version": "4.9.2",
4+
"version": "4.10.0",
55
"minAppVersion": "1.12.2",
66
"description": "Note-based task management with calendar, pomodoro and time-tracking integration.",
77
"author": "Callum Alpass",

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tasknotes",
3-
"version": "4.9.2",
3+
"version": "4.10.0",
44
"description": "Note-based task management with calendar, pomodoro and time-tracking integration.",
55
"main": "main.js",
66
"scripts": {
@@ -15,7 +15,7 @@
1515
"e2e:docs:copy": "mkdir -p media/docs && cp test-results/docs/*.png media/docs/",
1616
"e2e:setup": "bash e2e-setup.sh",
1717
"e2e:launch": "bash e2e-launch.sh",
18-
"version": "node version-bump.mjs && node generate-release-notes-import.mjs && npm run docs:sync && git add manifest.json versions.json src/releaseNotes.ts docs/releases.md PRIVACY.md",
18+
"version": "node version-bump.mjs && node generate-release-notes-import.mjs && npm run docs:sync && git add manifest.json versions.json docs/releases.md PRIVACY.md",
1919
"docs:sync": "node scripts/update-release-index.mjs && node scripts/sync-privacy.mjs",
2020
"docs:check": "node scripts/update-release-index.mjs --check && node scripts/sync-privacy.mjs --check && node scripts/check-docs.mjs",
2121
"test": "jest",

tests/unit/issues/issue-1052-public-nlp-api.test.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { TaskNotesAPI } from "../../../src/api/TaskNotesAPI";
2+
import { TaskNotesApiError } from "../../../src/api/runtime-api";
23
import type TaskNotesPlugin from "../../../src/main";
34

45
function createPluginMock(overrides: Record<string, unknown> = {}): TaskNotesPlugin {
@@ -82,6 +83,18 @@ describe("Issue #1052: public natural-language parser API", () => {
8283
it("rejects non-string input at runtime for JavaScript callers", () => {
8384
const api = new TaskNotesAPI(createPluginMock());
8485

85-
expect(() => api.parseNaturalLanguage(undefined as unknown as string)).toThrow(TypeError);
86+
expect(() => api.parseNaturalLanguage(undefined as unknown as string)).toThrow(
87+
TaskNotesApiError
88+
);
89+
expect(() => api.parseNaturalLanguage(undefined as unknown as string)).toThrow(
90+
"TaskNotes API parseNaturalLanguage expects a string"
91+
);
92+
93+
try {
94+
api.parseNaturalLanguage(undefined as unknown as string);
95+
} catch (error) {
96+
expect(error).toBeInstanceOf(TaskNotesApiError);
97+
expect((error as TaskNotesApiError).code).toBe("invalid_input");
98+
}
8699
});
87100
});

versions.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@
2424
"4.8.1": "1.12.2",
2525
"4.9.0": "1.12.2",
2626
"4.9.1": "1.12.2",
27-
"4.9.2": "1.12.2"
27+
"4.9.2": "1.12.2",
28+
"4.10.0": "1.12.2"
2829
}

0 commit comments

Comments
 (0)