From 0998a4903097a1640aeb48b99124066750471b87 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 6 Oct 2025 19:27:39 +0100 Subject: [PATCH 01/24] docs: Define intent of new ON_HOLD status type Co-Authored-By: Maarten den Braber --- docs/Getting Started/Statuses/Status Types.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md index 290a469bb4..d3ac7c1856 100644 --- a/docs/Getting Started/Statuses/Status Types.md +++ b/docs/Getting Started/Statuses/Status Types.md @@ -19,6 +19,7 @@ This was solved by the introduction of 'Status Types', which are simply a set of - `TODO` - `IN_PROGRESS` +- `ON_HOLD` - `DONE` - `CANCELLED` - `NON_TASK` @@ -33,6 +34,13 @@ Self explanatory, we hope: this can be thought of as 'things not yet started'. Use of this is totally optional. You may find it useful to be able to prioritise completing tasks which have already been started. +### ON_HOLD + +> [!released] +> The `ON_HOLD` Status Type was introduced in Tasks X.Y.Z. + +You might use this to track tasks that cannot be worked on at the moment, for example, where you are waiting for a reply. + ### DONE The `DONE` type is used to determine: From 1db29aa1ee1d2362998d840f9004c118c82cb9f2 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 6 Oct 2025 19:44:56 +0100 Subject: [PATCH 02/24] feat!!: Renumber status types, to make room for ON_HOLD See #3636 Co-Authored-By: Maarten den Braber --- src/Statuses/Status.ts | 8 ++++---- ...t.Status_Transitions_status-types.approved.md | 2 +- tests/Query/Filter/StatusTypeField.test.ts | 16 ++++++++-------- ...tatuses_task.status.type_results.approved.txt | 8 ++++---- tests/Statuses/Status.test.ts | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Statuses/Status.ts b/src/Statuses/Status.ts index fb2cf8b6ce..d3b4c7857f 100644 --- a/src/Statuses/Status.ts +++ b/src/Statuses/Status.ts @@ -149,16 +149,16 @@ export class Status { prefix = '2'; break; case StatusType.DONE: - prefix = '3'; + prefix = '4'; break; case StatusType.CANCELLED: - prefix = '4'; + prefix = '5'; break; case StatusType.NON_TASK: - prefix = '5'; + prefix = '6'; break; case StatusType.EMPTY: - prefix = '6'; + prefix = '7'; break; } // Text inside the %%..%% comments is used to control the sorting in both sorting of tasks and naming of groups. diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md index f20029778b..ed274bdff4 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md @@ -15,7 +15,7 @@ | Matches `status.name includes done` | no | no | YES | no | no | | Matches `status.name includes cancelled` | no | no | no | YES | no | | Name for `group by status` | Todo | Todo | Done | Done | Done | -| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%3%%DONE | %%4%%CANCELLED | %%5%%NON_TASK | +| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%4%%DONE | %%5%%CANCELLED | %%6%%NON_TASK | | Name for `group by status.name` | Todo | In Progress | Done | Cancelled | My custom status | diff --git a/tests/Query/Filter/StatusTypeField.test.ts b/tests/Query/Filter/StatusTypeField.test.ts index 04a1d2ee30..26bb331f8f 100644 --- a/tests/Query/Filter/StatusTypeField.test.ts +++ b/tests/Query/Filter/StatusTypeField.test.ts @@ -156,10 +156,10 @@ describe('grouping by status.type', () => { expect({ grouper, tasks: [inprTask] }).groupHeadingsToBe(['%%1%%IN_PROGRESS']); expect({ grouper, tasks: [todoTask] }).groupHeadingsToBe(['%%2%%TODO']); expect({ grouper, tasks: [unknTask] }).groupHeadingsToBe(['%%2%%TODO']); - expect({ grouper, tasks: [doneTask] }).groupHeadingsToBe(['%%3%%DONE']); - expect({ grouper, tasks: [cancTask] }).groupHeadingsToBe(['%%4%%CANCELLED']); - expect({ grouper, tasks: [non_Task] }).groupHeadingsToBe(['%%5%%NON_TASK']); - expect({ grouper, tasks: [emptTask] }).groupHeadingsToBe(['%%6%%EMPTY']); // won't be seen by users + expect({ grouper, tasks: [doneTask] }).groupHeadingsToBe(['%%4%%DONE']); + expect({ grouper, tasks: [cancTask] }).groupHeadingsToBe(['%%5%%CANCELLED']); + expect({ grouper, tasks: [non_Task] }).groupHeadingsToBe(['%%6%%NON_TASK']); + expect({ grouper, tasks: [emptTask] }).groupHeadingsToBe(['%%7%%EMPTY']); // won't be seen by users }); it('should sort groups for StatusTypeField', () => { @@ -169,10 +169,10 @@ describe('grouping by status.type', () => { expect({ grouper, tasks }).groupHeadingsToBe([ '%%1%%IN_PROGRESS', '%%2%%TODO', - '%%3%%DONE', - '%%4%%CANCELLED', - '%%5%%NON_TASK', - '%%6%%EMPTY', + '%%4%%DONE', + '%%5%%CANCELLED', + '%%6%%NON_TASK', + '%%7%%EMPTY', ]); }); }); diff --git a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt index a3ae34c2ea..cc15d975b1 100644 --- a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt @@ -19,9 +19,9 @@ This sorts the status types in the same order as "group by status.type". => %%1%%IN_PROGRESS %%2%%TODO -%%3%%DONE -%%4%%CANCELLED -%%5%%NON_TASK -%%6%%EMPTY +%%4%%DONE +%%5%%CANCELLED +%%6%%NON_TASK +%%7%%EMPTY ==================================================================================== diff --git a/tests/Statuses/Status.test.ts b/tests/Statuses/Status.test.ts index b6ef6fa638..6364d3ccf2 100644 --- a/tests/Statuses/Status.test.ts +++ b/tests/Statuses/Status.test.ts @@ -125,7 +125,7 @@ describe('Status', () => { it('should provide text with sorting comments for convenience of custom grouping', () => { const status = Status.CANCELLED; - expect(status.typeGroupText).toEqual('%%4%%CANCELLED'); + expect(status.typeGroupText).toEqual('%%5%%CANCELLED'); }); }); From 1c6327769797e61023e69e4f90a901527a7e5ac9 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 6 Oct 2025 19:57:06 +0100 Subject: [PATCH 03/24] feat: Declare ON_HOLD status type See #3636 Co-Authored-By: Maarten den Braber --- src/Statuses/Status.ts | 3 +++ src/Statuses/StatusConfiguration.ts | 1 + tests/Query/Filter/StatusTypeField.test.ts | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Statuses/Status.ts b/src/Statuses/Status.ts index d3b4c7857f..5597e494b3 100644 --- a/src/Statuses/Status.ts +++ b/src/Statuses/Status.ts @@ -148,6 +148,9 @@ export class Status { case StatusType.TODO: prefix = '2'; break; + case StatusType.ON_HOLD: + prefix = '3'; + break; case StatusType.DONE: prefix = '4'; break; diff --git a/src/Statuses/StatusConfiguration.ts b/src/Statuses/StatusConfiguration.ts index 8b1d3d3003..e1f9d7c584 100644 --- a/src/Statuses/StatusConfiguration.ts +++ b/src/Statuses/StatusConfiguration.ts @@ -5,6 +5,7 @@ export enum StatusType { TODO = 'TODO', DONE = 'DONE', IN_PROGRESS = 'IN_PROGRESS', + ON_HOLD = 'ON_HOLD', CANCELLED = 'CANCELLED', NON_TASK = 'NON_TASK', EMPTY = 'EMPTY', diff --git a/tests/Query/Filter/StatusTypeField.test.ts b/tests/Query/Filter/StatusTypeField.test.ts index 26bb331f8f..6b5a70ce70 100644 --- a/tests/Query/Filter/StatusTypeField.test.ts +++ b/tests/Query/Filter/StatusTypeField.test.ts @@ -85,7 +85,7 @@ describe('status.name', () => { expect(filter?.error).toMatchInlineSnapshot(` "Invalid status.type instruction: 'status.type gobbledygook'. Allowed options: 'is' and 'is not' (without quotes). - Allowed values: TODO DONE IN_PROGRESS CANCELLED NON_TASK + Allowed values: TODO DONE IN_PROGRESS ON_HOLD CANCELLED NON_TASK Note: values are case-insensitive, so 'in_progress' works too, for example. Example: status.type is not NON_TASK" From cdc76e238e18e5f856338ad520b527b44cf54902 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 6 Oct 2025 20:07:26 +0100 Subject: [PATCH 04/24] test: Add tests for Task.isDone with ON_HOLD Co-Authored-By: Maarten den Braber --- src/Query/Filter/StatusField.ts | 1 + src/Statuses/Status.ts | 10 ++++++++++ tests/Query/Filter/StatusField.test.ts | 2 ++ tests/Task/Task.test.ts | 1 + 4 files changed, 14 insertions(+) diff --git a/src/Query/Filter/StatusField.ts b/src/Query/Filter/StatusField.ts index 2907c7cd1a..39af7afe59 100644 --- a/src/Query/Filter/StatusField.ts +++ b/src/Query/Filter/StatusField.ts @@ -15,6 +15,7 @@ export class StatusField extends FilterInstructionsBasedField { // StatusType.CANCELLED counts as done // StatusType.TODO counts as not done // StatusType.IN_PROGRESS counts as not done + // StatusType.ON_HOLD counts as not done // StatusType.NON_TASK counts as done this._filters.add('done', (task: Task) => task.isDone); this._filters.add('not done', (task: Task) => !task.isDone); diff --git a/src/Statuses/Status.ts b/src/Statuses/Status.ts index 5597e494b3..47d09f89e0 100644 --- a/src/Statuses/Status.ts +++ b/src/Statuses/Status.ts @@ -59,6 +59,16 @@ export class Status { new StatusConfiguration('/', 'In Progress', 'x', true, StatusType.IN_PROGRESS), ); + /** + * The default On Hold status. Goes to Todo when toggled. + * + * @static + * @type {Status} + */ + public static readonly ON_HOLD: Status = new Status( + new StatusConfiguration('h', 'On Hold', ' ', true, StatusType.ON_HOLD), + ); + /** * A sample Non-Task status. Goes to NON_TASK when toggled. * diff --git a/tests/Query/Filter/StatusField.test.ts b/tests/Query/Filter/StatusField.test.ts index a62831a79b..020d466738 100644 --- a/tests/Query/Filter/StatusField.test.ts +++ b/tests/Query/Filter/StatusField.test.ts @@ -38,6 +38,7 @@ describe('status', () => { expect(filter).toMatchTaskWithStatus(Status.DONE.configuration); expect(filter).toMatchTaskWithStatus(new StatusConfiguration('X', 'Really Done', 'x', true, StatusType.DONE)); expect(filter).not.toMatchTaskWithStatus(Status.IN_PROGRESS.configuration); + expect(filter).not.toMatchTaskWithStatus(Status.ON_HOLD.configuration); expect(filter).toMatchTaskWithStatus(Status.CANCELLED.configuration); expect(filter).not.toMatchTaskWithStatus(new StatusConfiguration('!', 'Todo', 'x', true, StatusType.TODO)); // 'done' checks type. expect(filter).toMatchTaskWithStatus(new StatusConfiguration('^', 'Non', 'x', true, StatusType.NON_TASK)); @@ -54,6 +55,7 @@ describe('status', () => { new StatusConfiguration('X', 'Really Done', 'x', true, StatusType.DONE), ); expect(filter).toMatchTaskWithStatus(Status.IN_PROGRESS.configuration); + expect(filter).toMatchTaskWithStatus(Status.ON_HOLD.configuration); expect(filter).not.toMatchTaskWithStatus(Status.CANCELLED.configuration); expect(filter).toMatchTaskWithStatus(new StatusConfiguration('!', 'Todo', 'x', true, StatusType.TODO)); // 'not done' type. expect(filter).not.toMatchTaskWithStatus(new StatusConfiguration('^', 'Non', 'x', true, StatusType.NON_TASK)); diff --git a/tests/Task/Task.test.ts b/tests/Task/Task.test.ts index 9f5bdf92a4..ce85326007 100644 --- a/tests/Task/Task.test.ts +++ b/tests/Task/Task.test.ts @@ -533,6 +533,7 @@ describe('properties for scripting', () => { it('should provide isDone for convenience', () => { expect(new TaskBuilder().status(Status.TODO).build().isDone).toEqual(false); expect(new TaskBuilder().status(Status.IN_PROGRESS).build().isDone).toEqual(false); + expect(new TaskBuilder().status(Status.ON_HOLD).build().isDone).toEqual(false); expect(new TaskBuilder().status(Status.DONE).build().isDone).toEqual(true); expect(new TaskBuilder().status(Status.CANCELLED).build().isDone).toEqual(true); expect( From 81750eb70083cf14f2619fca03faa9c49a4f662d Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 6 Oct 2025 20:19:46 +0100 Subject: [PATCH 05/24] feat: Teach Edit Status modal to support ON_HOLD Co-Authored-By: Maarten den Braber --- src/Config/CustomStatusModal.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Config/CustomStatusModal.ts b/src/Config/CustomStatusModal.ts index 0935675f5e..d405ae802e 100644 --- a/src/Config/CustomStatusModal.ts +++ b/src/Config/CustomStatusModal.ts @@ -105,6 +105,7 @@ export class CustomStatusModal extends Modal { const types = [ StatusType.TODO, StatusType.IN_PROGRESS, + StatusType.ON_HOLD, StatusType.DONE, StatusType.CANCELLED, StatusType.NON_TASK, From 435b35270858034a3a1d4a08f9fd874ac862e1ac Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 6 Oct 2025 20:27:21 +0100 Subject: [PATCH 06/24] feat: Teach Mermaid status diagrams to use blue for ON_HOLD Co-Authored-By: Maarten den Braber --- src/Statuses/StatusRegistry.ts | 1 + ...Statuses_core-statuses.approved.mermaid.md | 1 + ...atuses_custom-statuses.approved.mermaid.md | 1 + ...ional-symbols.approved.detailed.mermaid.md | 1 + ...-to-cancelled.approved.detailed.mermaid.md | 1 + ...atuses_important-cycle.approved.mermaid.md | 1 + ...pro-con-cycle.approved.detailed.mermaid.md | 1 + ...Statuses_pro-con-cycle.approved.mermaid.md | 1 + ...progress-done.approved.detailed.mermaid.md | 1 + ..._todo-in_progress-done.approved.mermaid.md | 1 + ...es_toggle-does-nothing.approved.mermaid.md | 1 + ...Theme_AnuPpuccin_Table.approved.mermaid.md | 1 + ....test.Theme_Aura_Table.approved.mermaid.md | 1 + ...est.Theme_Border_Table.approved.mermaid.md | 1 + ...e_Ebullientworks_Table.approved.mermaid.md | 1 + ...s.test.Theme_ITS_Table.approved.mermaid.md | 1 + ...t.Theme_LYT_Mode_Table.approved.mermaid.md | 1 + ...st.Theme_Minimal_Table.approved.mermaid.md | 1 + ...est.Theme_Things_Table.approved.mermaid.md | 1 + tests/Statuses/StatusRegistry.test.ts | 215 +++++++++--------- ...yReport_should_create_a_report.approved.md | 1 + 21 files changed, 130 insertions(+), 105 deletions(-) diff --git a/src/Statuses/StatusRegistry.ts b/src/Statuses/StatusRegistry.ts index af24f0063c..63232f7a4a 100644 --- a/src/Statuses/StatusRegistry.ts +++ b/src/Statuses/StatusRegistry.ts @@ -371,6 +371,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; ${nodes.join('\n')} ${edges.join('\n')} diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_core-statuses.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_core-statuses.approved.mermaid.md index 812af9a824..4751d22bf8 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_core-statuses.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_core-statuses.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Todo"]:::TODO 2["Done"]:::DONE diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_custom-statuses.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_custom-statuses.approved.mermaid.md index dc4b7c0e33..f953a33a36 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_custom-statuses.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_custom-statuses.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["In Progress"]:::IN_PROGRESS 2["Cancelled"]:::CANCELLED diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled-with-unconventional-symbols.approved.detailed.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled-with-unconventional-symbols.approved.detailed.mermaid.md index 6d1d71d568..680676475c 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled-with-unconventional-symbols.approved.detailed.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled-with-unconventional-symbols.approved.detailed.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["'Todo'
[ ] -> [*]
(TODO)"]:::TODO 2["'Done'
[*] -> [x]
(DONE)"]:::DONE diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled.approved.detailed.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled.approved.detailed.mermaid.md index e018e0ffe7..3163867459 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled.approved.detailed.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled.approved.detailed.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["'Todo'
[ ] -> [/]
(TODO)"]:::TODO 2["'Done'
[x] -> [-]
(DONE)"]:::DONE diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_important-cycle.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_important-cycle.approved.mermaid.md index 942b40791c..b18da2983c 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_important-cycle.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_important-cycle.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Important"]:::TODO 2["Doing - Important"]:::IN_PROGRESS diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.detailed.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.detailed.mermaid.md index 9d4ff56b75..3535ff7d8d 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.detailed.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.detailed.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["'Pro'
[P] -> [C]
(NON_TASK)"]:::NON_TASK 2["'Con'
[C] -> [P]
(NON_TASK)"]:::NON_TASK diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.mermaid.md index 5d65c1cb1c..353741010c 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Pro"]:::NON_TASK 2["Con"]:::NON_TASK diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.detailed.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.detailed.mermaid.md index d86b4e1125..947ca435b7 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.detailed.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.detailed.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["'Todo'
[ ] -> [/]
(TODO)"]:::TODO 2["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.mermaid.md index 1368c06135..6737e6546e 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Todo"]:::TODO 2["In Progress"]:::IN_PROGRESS diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_toggle-does-nothing.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_toggle-does-nothing.approved.mermaid.md index 0c7ba14444..eb6de39c72 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_toggle-does-nothing.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_toggle-does-nothing.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Bookmark"]:::NON_TASK 2["Example"]:::NON_TASK diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_AnuPpuccin_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_AnuPpuccin_Table.approved.mermaid.md index bca42a230c..5e0ad6f65f 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_AnuPpuccin_Table.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_AnuPpuccin_Table.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Unchecked"]:::TODO 2["Checked"]:::DONE diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Aura_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Aura_Table.approved.mermaid.md index 2ed78d7850..ac6a8c2121 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Aura_Table.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Aura_Table.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["incomplete"]:::TODO 2["complete / done"]:::DONE diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Border_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Border_Table.approved.mermaid.md index 43a0c77483..58b216b691 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Border_Table.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Border_Table.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["To Do"]:::TODO 2["In Progress"]:::IN_PROGRESS diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Ebullientworks_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Ebullientworks_Table.approved.mermaid.md index 3f1913224e..54e7520775 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Ebullientworks_Table.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Ebullientworks_Table.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Unchecked"]:::TODO 2["Checked"]:::DONE diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_ITS_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_ITS_Table.approved.mermaid.md index 521a2a4add..1a2c6b6367 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_ITS_Table.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_ITS_Table.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Unchecked"]:::TODO 2["Regular"]:::DONE diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_LYT_Mode_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_LYT_Mode_Table.approved.mermaid.md index 0b94ddcb87..9e5208eda2 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_LYT_Mode_Table.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_LYT_Mode_Table.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Unchecked"]:::TODO 2["Checked"]:::DONE diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Minimal_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Minimal_Table.approved.mermaid.md index 4c1d275407..6676bd6e8a 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Minimal_Table.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Minimal_Table.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["to-do"]:::TODO 2["incomplete"]:::IN_PROGRESS diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Things_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Things_Table.approved.mermaid.md index 4c1d275407..6676bd6e8a 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Things_Table.approved.mermaid.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Things_Table.approved.mermaid.md @@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["to-do"]:::TODO 2["incomplete"]:::IN_PROGRESS diff --git a/tests/Statuses/StatusRegistry.test.ts b/tests/Statuses/StatusRegistry.test.ts index 7b5a82921e..e6ad5dc110 100644 --- a/tests/Statuses/StatusRegistry.test.ts +++ b/tests/Statuses/StatusRegistry.test.ts @@ -213,55 +213,57 @@ describe('StatusRegistry', () => { // Assert // Without detail: expect(statusRegistry.mermaidDiagram(false)).toMatchInlineSnapshot(` - " - \`\`\`mermaid - flowchart LR - - classDef TODO stroke:#f33,stroke-width:3px; - classDef DONE stroke:#0c0,stroke-width:3px; - classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; - classDef CANCELLED stroke:#ddd,stroke-width:3px; - classDef NON_TASK stroke:#99e,stroke-width:3px; - - 1["Todo"]:::TODO - 2["In Progress"]:::IN_PROGRESS - 3["Done"]:::DONE - 4["Cancelled"]:::CANCELLED - 1 --> 3 - 2 --> 3 - 3 --> 1 - 4 --> 1 - - linkStyle default stroke:gray - \`\`\` - " - `); + " + \`\`\`mermaid + flowchart LR + + classDef TODO stroke:#f33,stroke-width:3px; + classDef DONE stroke:#0c0,stroke-width:3px; + classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; + classDef CANCELLED stroke:#ddd,stroke-width:3px; + classDef NON_TASK stroke:#99e,stroke-width:3px; + classDef ON_HOLD stroke:#00f,stroke-width:3px; + + 1["Todo"]:::TODO + 2["In Progress"]:::IN_PROGRESS + 3["Done"]:::DONE + 4["Cancelled"]:::CANCELLED + 1 --> 3 + 2 --> 3 + 3 --> 1 + 4 --> 1 + + linkStyle default stroke:gray + \`\`\` + " + `); // With detail: expect(statusRegistry.mermaidDiagram(true)).toMatchInlineSnapshot(` - " - \`\`\`mermaid - flowchart LR - - classDef TODO stroke:#f33,stroke-width:3px; - classDef DONE stroke:#0c0,stroke-width:3px; - classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; - classDef CANCELLED stroke:#ddd,stroke-width:3px; - classDef NON_TASK stroke:#99e,stroke-width:3px; - - 1["'Todo'
[ ] -> [x]
(TODO)"]:::TODO - 2["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS - 3["'Done'
[x] -> [ ]
(DONE)"]:::DONE - 4["'Cancelled'
[-] -> [ ]
(CANCELLED)"]:::CANCELLED - 1 --> 3 - 2 --> 3 - 3 --> 1 - 4 --> 1 - - linkStyle default stroke:gray - \`\`\` - " - `); + " + \`\`\`mermaid + flowchart LR + + classDef TODO stroke:#f33,stroke-width:3px; + classDef DONE stroke:#0c0,stroke-width:3px; + classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; + classDef CANCELLED stroke:#ddd,stroke-width:3px; + classDef NON_TASK stroke:#99e,stroke-width:3px; + classDef ON_HOLD stroke:#00f,stroke-width:3px; + + 1["'Todo'
[ ] -> [x]
(TODO)"]:::TODO + 2["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS + 3["'Done'
[x] -> [ ]
(DONE)"]:::DONE + 4["'Cancelled'
[-] -> [ ]
(CANCELLED)"]:::CANCELLED + 1 --> 3 + 2 --> 3 + 3 --> 1 + 4 --> 1 + + linkStyle default stroke:gray + \`\`\` + " + `); }); it('should encode symbols in mermaid diagrams when necessary', () => { @@ -280,55 +282,57 @@ describe('StatusRegistry', () => { // Assert // Without detail: expect(statusRegistry.mermaidDiagram(false)).toMatchInlineSnapshot(` - " - \`\`\`mermaid - flowchart LR - - classDef TODO stroke:#f33,stroke-width:3px; - classDef DONE stroke:#0c0,stroke-width:3px; - classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; - classDef CANCELLED stroke:#ddd,stroke-width:3px; - classDef NON_TASK stroke:#99e,stroke-width:3px; - - 1["Todo <"]:::TODO - 2["Todo >"]:::TODO - 3["Todo ""]:::TODO - 4["Todo &"]:::TODO - 1 --> 1 - 2 --> 2 - 3 --> 3 - 4 --> 4 - - linkStyle default stroke:gray - \`\`\` - " - `); + " + \`\`\`mermaid + flowchart LR + + classDef TODO stroke:#f33,stroke-width:3px; + classDef DONE stroke:#0c0,stroke-width:3px; + classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; + classDef CANCELLED stroke:#ddd,stroke-width:3px; + classDef NON_TASK stroke:#99e,stroke-width:3px; + classDef ON_HOLD stroke:#00f,stroke-width:3px; + + 1["Todo <"]:::TODO + 2["Todo >"]:::TODO + 3["Todo ""]:::TODO + 4["Todo &"]:::TODO + 1 --> 1 + 2 --> 2 + 3 --> 3 + 4 --> 4 + + linkStyle default stroke:gray + \`\`\` + " + `); // With detail: expect(statusRegistry.mermaidDiagram(true)).toMatchInlineSnapshot(` - " - \`\`\`mermaid - flowchart LR - - classDef TODO stroke:#f33,stroke-width:3px; - classDef DONE stroke:#0c0,stroke-width:3px; - classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; - classDef CANCELLED stroke:#ddd,stroke-width:3px; - classDef NON_TASK stroke:#99e,stroke-width:3px; - - 1["'Todo <'
[<] -> [<]
(TODO)"]:::TODO - 2["'Todo >'
[>] -> [>]
(TODO)"]:::TODO - 3["'Todo "'
["] -> ["]
(TODO)"]:::TODO - 4["'Todo &'
[&] -> [&]
(TODO)"]:::TODO - 1 --> 1 - 2 --> 2 - 3 --> 3 - 4 --> 4 - - linkStyle default stroke:gray - \`\`\` - " - `); + " + \`\`\`mermaid + flowchart LR + + classDef TODO stroke:#f33,stroke-width:3px; + classDef DONE stroke:#0c0,stroke-width:3px; + classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; + classDef CANCELLED stroke:#ddd,stroke-width:3px; + classDef NON_TASK stroke:#99e,stroke-width:3px; + classDef ON_HOLD stroke:#00f,stroke-width:3px; + + 1["'Todo <'
[<] -> [<]
(TODO)"]:::TODO + 2["'Todo >'
[>] -> [>]
(TODO)"]:::TODO + 3["'Todo "'
["] -> ["]
(TODO)"]:::TODO + 4["'Todo &'
[&] -> [&]
(TODO)"]:::TODO + 1 --> 1 + 2 --> 2 + 3 --> 3 + 4 --> 4 + + linkStyle default stroke:gray + \`\`\` + " + `); }); it('should not include unknown nextStatusSymbols in mermaid diagrams', () => { @@ -345,23 +349,24 @@ describe('StatusRegistry', () => { // Assert expect(statusRegistry.registeredStatuses.length).toEqual(originalNumberOfStatuses); expect(mermaidText).toMatchInlineSnapshot(` - " - \`\`\`mermaid - flowchart LR + " + \`\`\`mermaid + flowchart LR - classDef TODO stroke:#f33,stroke-width:3px; - classDef DONE stroke:#0c0,stroke-width:3px; - classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; - classDef CANCELLED stroke:#ddd,stroke-width:3px; - classDef NON_TASK stroke:#99e,stroke-width:3px; + classDef TODO stroke:#f33,stroke-width:3px; + classDef DONE stroke:#0c0,stroke-width:3px; + classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; + classDef CANCELLED stroke:#ddd,stroke-width:3px; + classDef NON_TASK stroke:#99e,stroke-width:3px; + classDef ON_HOLD stroke:#00f,stroke-width:3px; - 1["Todo"]:::TODO + 1["Todo"]:::TODO - linkStyle default stroke:gray - \`\`\` - " - `); + linkStyle default stroke:gray + \`\`\` + " + `); }); }); diff --git a/tests/Statuses/StatusRegistryReport.test.StatusRegistryReport_should_create_a_report.approved.md b/tests/Statuses/StatusRegistryReport.test.StatusRegistryReport_should_create_a_report.approved.md index d837e6578b..ed25dac52e 100644 --- a/tests/Statuses/StatusRegistryReport.test.StatusRegistryReport_should_create_a_report.approved.md +++ b/tests/Statuses/StatusRegistryReport.test.StatusRegistryReport_should_create_a_report.approved.md @@ -45,6 +45,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["'Todo'
[ ] -> [x]
(TODO)"]:::TODO 2["'Done'
[x] -> [ ]
(DONE)"]:::DONE From caf31baa5c58b73056003c0eabe82b84c51865ea Mon Sep 17 00:00:00 2001 From: Maarten den Braber Date: Mon, 13 Oct 2025 20:08:14 +0200 Subject: [PATCH 07/24] docs: Update snippets in documentation --- docs/Getting Started/Statuses/Example Statuses.md | 4 ++++ .../Statuses/Recurring Tasks and Custom Statuses.md | 3 +++ docs/Getting Started/Statuses/Status Types.md | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/Getting Started/Statuses/Example Statuses.md b/docs/Getting Started/Statuses/Example Statuses.md index 6304bfdaa2..8b59d2fd5d 100644 --- a/docs/Getting Started/Statuses/Example Statuses.md +++ b/docs/Getting Started/Statuses/Example Statuses.md @@ -27,6 +27,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Todo"]:::TODO 2["In Progress"]:::IN_PROGRESS @@ -64,6 +65,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Important"]:::TODO 2["Doing - Important"]:::IN_PROGRESS @@ -103,6 +105,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Pro"]:::NON_TASK 2["Con"]:::NON_TASK @@ -139,6 +142,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["Bookmark"]:::NON_TASK 2["Example"]:::NON_TASK diff --git a/docs/Getting Started/Statuses/Recurring Tasks and Custom Statuses.md b/docs/Getting Started/Statuses/Recurring Tasks and Custom Statuses.md index 456366191e..a12c731f53 100644 --- a/docs/Getting Started/Statuses/Recurring Tasks and Custom Statuses.md +++ b/docs/Getting Started/Statuses/Recurring Tasks and Custom Statuses.md @@ -39,6 +39,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["'Todo'
[ ] -> [/]
(TODO)"]:::TODO 2["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS @@ -125,6 +126,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["'Todo'
[ ] -> [/]
(TODO)"]:::TODO 2["'Done'
[x] -> [-]
(DONE)"]:::DONE @@ -183,6 +185,7 @@ classDef DONE stroke:#0c0,stroke-width:3px; classDef IN_PROGRESS stroke:#fa0,stroke-width:3px; classDef CANCELLED stroke:#ddd,stroke-width:3px; classDef NON_TASK stroke:#99e,stroke-width:3px; +classDef ON_HOLD stroke:#00f,stroke-width:3px; 1["'Pro'
[P] -> [C]
(NON_TASK)"]:::NON_TASK 2["'Con'
[C] -> [P]
(NON_TASK)"]:::NON_TASK diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md index d3ac7c1856..c7b9266df5 100644 --- a/docs/Getting Started/Statuses/Status Types.md +++ b/docs/Getting Started/Statuses/Status Types.md @@ -116,7 +116,7 @@ The tasks shown are purely examples for context. The `~` column is just an arbit | Matches `status.name includes done` | no | no | YES | no | no | | Matches `status.name includes cancelled` | no | no | no | YES | no | | Name for `group by status` | Todo | Todo | Done | Done | Done | -| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%3%%DONE | %%4%%CANCELLED | %%5%%NON_TASK | +| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%4%%DONE | %%5%%CANCELLED | %%6%%NON_TASK | | Name for `group by status.name` | Todo | In Progress | Done | Cancelled | My custom status | From 2aab2553dd7d15fce99d981764c523a2ee6e5d12 Mon Sep 17 00:00:00 2001 From: Maarten den Braber Date: Mon, 13 Oct 2025 20:34:29 +0200 Subject: [PATCH 08/24] test: Add ON_HOLD column to status snippets --- ...tatus_Transitions_status-types.approved.md | 34 +++++++++---------- .../DocsSamplesForStatuses.test.ts | 1 + 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md index ed274bdff4..de958111e7 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md @@ -1,22 +1,22 @@ -| Operation and status.type | TODO | IN_PROGRESS | DONE | CANCELLED | NON_TASK | -| ----- | ----- | ----- | ----- | ----- | ----- | -| Example Task | `- [ ] demo` | `- [/] demo` | `- [x] demo` | `- [-] demo` | `- [~] demo` | -| Matches `not done` | YES | YES | no | no | no | -| Matches `done` | no | no | YES | YES | YES | -| Matches `status.type is TODO` | YES | no | no | no | no | -| Matches `status.type is IN_PROGRESS` | no | YES | no | no | no | -| Matches `status.type is DONE` | no | no | YES | no | no | -| Matches `status.type is CANCELLED` | no | no | no | YES | no | -| Matches `status.type is NON_TASK` | no | no | no | no | YES | -| Matches `status.name includes todo` | YES | no | no | no | no | -| Matches `status.name includes in progress` | no | YES | no | no | no | -| Matches `status.name includes done` | no | no | YES | no | no | -| Matches `status.name includes cancelled` | no | no | no | YES | no | -| Name for `group by status` | Todo | Todo | Done | Done | Done | -| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%4%%DONE | %%5%%CANCELLED | %%6%%NON_TASK | -| Name for `group by status.name` | Todo | In Progress | Done | Cancelled | My custom status | +| Operation and status.type | TODO | IN_PROGRESS | ON_HOLD | DONE | CANCELLED | NON_TASK | +| ----- | ----- | ----- | ----- | ----- | ----- | ----- | +| Example Task | `- [ ] demo` | `- [/] demo` | `- [h] demo` | `- [x] demo` | `- [-] demo` | `- [~] demo` | +| Matches `not done` | YES | YES | YES | no | no | no | +| Matches `done` | no | no | no | YES | YES | YES | +| Matches `status.type is TODO` | YES | no | no | no | no | no | +| Matches `status.type is IN_PROGRESS` | no | YES | no | no | no | no | +| Matches `status.type is DONE` | no | no | no | YES | no | no | +| Matches `status.type is CANCELLED` | no | no | no | no | YES | no | +| Matches `status.type is NON_TASK` | no | no | no | no | no | YES | +| Matches `status.name includes todo` | YES | no | no | no | no | no | +| Matches `status.name includes in progress` | no | YES | no | no | no | no | +| Matches `status.name includes done` | no | no | no | YES | no | no | +| Matches `status.name includes cancelled` | no | no | no | no | YES | no | +| Name for `group by status` | Todo | Todo | Todo | Done | Done | Done | +| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%3%%ON_HOLD | %%4%%DONE | %%5%%CANCELLED | %%6%%NON_TASK | +| Name for `group by status.name` | Todo | In Progress | On Hold | Done | Cancelled | My custom status | diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.ts b/tests/DocumentationSamples/DocsSamplesForStatuses.test.ts index 87a8db2578..2f027cc834 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.ts +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.ts @@ -97,6 +97,7 @@ describe('Status Transitions', () => { const statuses = [ Status.TODO, Status.IN_PROGRESS, + Status.ON_HOLD, Status.DONE, Status.CANCELLED, new Status(new StatusConfiguration('~', 'My custom status', ' ', false, StatusType.NON_TASK)), From 23dba88512914dc1977e6d9006280a93feda150d Mon Sep 17 00:00:00 2001 From: Maarten den Braber Date: Mon, 13 Oct 2025 20:40:31 +0200 Subject: [PATCH 09/24] test: Add ON_HOLD rows to status snippets --- ...ForStatuses.test.Status_Transitions_status-types.approved.md | 2 ++ tests/TestingTools/VerifyStatuses.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md index de958111e7..dda1a80e09 100644 --- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md +++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md @@ -7,11 +7,13 @@ | Matches `done` | no | no | no | YES | YES | YES | | Matches `status.type is TODO` | YES | no | no | no | no | no | | Matches `status.type is IN_PROGRESS` | no | YES | no | no | no | no | +| Matches `status.type is ON_HOLD` | no | no | YES | no | no | no | | Matches `status.type is DONE` | no | no | no | YES | no | no | | Matches `status.type is CANCELLED` | no | no | no | no | YES | no | | Matches `status.type is NON_TASK` | no | no | no | no | no | YES | | Matches `status.name includes todo` | YES | no | no | no | no | no | | Matches `status.name includes in progress` | no | YES | no | no | no | no | +| Matches `status.name includes on hold` | no | no | YES | no | no | no | | Matches `status.name includes done` | no | no | no | YES | no | no | | Matches `status.name includes cancelled` | no | no | no | no | YES | no | | Name for `group by status` | Todo | Todo | Todo | Done | Done | Done | diff --git a/tests/TestingTools/VerifyStatuses.ts b/tests/TestingTools/VerifyStatuses.ts index e93252223a..ea2b86a019 100644 --- a/tests/TestingTools/VerifyStatuses.ts +++ b/tests/TestingTools/VerifyStatuses.ts @@ -116,11 +116,13 @@ export function verifyTransitionsAsMarkdownTable(statuses: Status[]) { filterAllStatuses(FilterParser.parseFilter('done')!); filterAllStatuses(FilterParser.parseFilter('status.type is TODO')!); filterAllStatuses(FilterParser.parseFilter('status.type is IN_PROGRESS')!); + filterAllStatuses(FilterParser.parseFilter('status.type is ON_HOLD')!); filterAllStatuses(FilterParser.parseFilter('status.type is DONE')!); filterAllStatuses(FilterParser.parseFilter('status.type is CANCELLED')!); filterAllStatuses(FilterParser.parseFilter('status.type is NON_TASK')!); filterAllStatuses(FilterParser.parseFilter('status.name includes todo')!); filterAllStatuses(FilterParser.parseFilter('status.name includes in progress')!); + filterAllStatuses(FilterParser.parseFilter('status.name includes on hold')!); filterAllStatuses(FilterParser.parseFilter('status.name includes done')!); filterAllStatuses(FilterParser.parseFilter('status.name includes cancelled')!); From 0e1524f0baf5c95e6a555c2cadff6f2bbcd976a0 Mon Sep 17 00:00:00 2001 From: Maarten den Braber Date: Mon, 13 Oct 2025 20:45:30 +0200 Subject: [PATCH 10/24] docs: Add ON_HOLD to Status Types.md --- docs/Getting Started/Statuses/Status Types.md | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md index c7b9266df5..32432d6188 100644 --- a/docs/Getting Started/Statuses/Status Types.md +++ b/docs/Getting Started/Statuses/Status Types.md @@ -97,26 +97,28 @@ For example, how are they used by the old `done` and `not done` filters? If you are interested in detail, this table demonstrates the behaviour of each of the status types in Tasks. Each column shows a representative example task with the given status type. -The tasks shown are purely examples for context. The `~` column is just an arbitrary example to show `NON_TASK`'s behaviour'. You can assign each of these types to any of your custom statuses. +The tasks shown are purely examples for context. For example, the `~` column is just an arbitrary example to show `NON_TASK`'s behaviour'. You can assign each of these types to any of your custom statuses. -| Operation and status.type | TODO | IN_PROGRESS | DONE | CANCELLED | NON_TASK | -| ----- | ----- | ----- | ----- | ----- | ----- | -| Example Task | `- [ ] demo` | `- [/] demo` | `- [x] demo` | `- [-] demo` | `- [~] demo` | -| Matches `not done` | YES | YES | no | no | no | -| Matches `done` | no | no | YES | YES | YES | -| Matches `status.type is TODO` | YES | no | no | no | no | -| Matches `status.type is IN_PROGRESS` | no | YES | no | no | no | -| Matches `status.type is DONE` | no | no | YES | no | no | -| Matches `status.type is CANCELLED` | no | no | no | YES | no | -| Matches `status.type is NON_TASK` | no | no | no | no | YES | -| Matches `status.name includes todo` | YES | no | no | no | no | -| Matches `status.name includes in progress` | no | YES | no | no | no | -| Matches `status.name includes done` | no | no | YES | no | no | -| Matches `status.name includes cancelled` | no | no | no | YES | no | -| Name for `group by status` | Todo | Todo | Done | Done | Done | -| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%4%%DONE | %%5%%CANCELLED | %%6%%NON_TASK | -| Name for `group by status.name` | Todo | In Progress | Done | Cancelled | My custom status | +| Operation and status.type | TODO | IN_PROGRESS | ON_HOLD | DONE | CANCELLED | NON_TASK | +| ----- | ----- | ----- | ----- | ----- | ----- | ----- | +| Example Task | `- [ ] demo` | `- [/] demo` | `- [h] demo` | `- [x] demo` | `- [-] demo` | `- [~] demo` | +| Matches `not done` | YES | YES | YES | no | no | no | +| Matches `done` | no | no | no | YES | YES | YES | +| Matches `status.type is TODO` | YES | no | no | no | no | no | +| Matches `status.type is IN_PROGRESS` | no | YES | no | no | no | no | +| Matches `status.type is ON_HOLD` | no | no | YES | no | no | no | +| Matches `status.type is DONE` | no | no | no | YES | no | no | +| Matches `status.type is CANCELLED` | no | no | no | no | YES | no | +| Matches `status.type is NON_TASK` | no | no | no | no | no | YES | +| Matches `status.name includes todo` | YES | no | no | no | no | no | +| Matches `status.name includes in progress` | no | YES | no | no | no | no | +| Matches `status.name includes on hold` | no | no | YES | no | no | no | +| Matches `status.name includes done` | no | no | no | YES | no | no | +| Matches `status.name includes cancelled` | no | no | no | no | YES | no | +| Name for `group by status` | Todo | Todo | Todo | Done | Done | Done | +| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%3%%ON_HOLD | %%4%%DONE | %%5%%CANCELLED | %%6%%NON_TASK | +| Name for `group by status.name` | Todo | In Progress | On Hold | Done | Cancelled | My custom status | From 1d0fd9b3451a21b98fc3738687794983e76ebcf0 Mon Sep 17 00:00:00 2001 From: Maarten den Braber Date: Mon, 13 Oct 2025 21:07:26 +0200 Subject: [PATCH 11/24] test: Add ON_HOLD example to SampleTasks.ts --- tests/Query/Filter/StatusNameField.test.ts | 10 +++++++++- ...t.other_properties_task.isDone_results.approved.txt | 1 + ...st.statuses_task.status.symbol_results.approved.txt | 2 ++ ...test.statuses_task.status.type_results.approved.txt | 1 + ...test.statuses_task.status.name_results.approved.txt | 2 ++ ...st.statuses_task.status.symbol_results.approved.txt | 1 + ...test.statuses_task.status.type_results.approved.txt | 2 ++ ...t.other_properties_task.isDone_results.approved.txt | 1 + ...test.statuses_task.status.name_results.approved.txt | 1 + ...tatuses_task.status.nextSymbol_results.approved.txt | 1 + ...st.statuses_task.status.symbol_results.approved.txt | 1 + ...test.statuses_task.status.type_results.approved.txt | 1 + tests/TestingTools/SampleTasks.ts | 1 + 13 files changed, 24 insertions(+), 1 deletion(-) diff --git a/tests/Query/Filter/StatusNameField.test.ts b/tests/Query/Filter/StatusNameField.test.ts index fb5e0e78a8..818bd6537f 100644 --- a/tests/Query/Filter/StatusNameField.test.ts +++ b/tests/Query/Filter/StatusNameField.test.ts @@ -103,6 +103,14 @@ describe('grouping by status.name', () => { const grouper = new StatusNameField().createNormalGrouper(); const tasks = SampleTasks.withAllStatuses(); - expect({ grouper, tasks }).groupHeadingsToBe(['Cancelled', 'Done', 'EMPTY', 'In Progress', 'Non-Task', 'Todo']); + expect({ grouper, tasks }).groupHeadingsToBe([ + 'Cancelled', + 'Done', + 'EMPTY', + 'In Progress', + 'Non-Task', + 'On Hold', + 'Todo', + ]); }); }); diff --git a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.other_properties_task.isDone_results.approved.txt b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.other_properties_task.isDone_results.approved.txt index d1834b25c6..44e312791d 100644 --- a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.other_properties_task.isDone_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.other_properties_task.isDone_results.approved.txt @@ -16,6 +16,7 @@ Same as the `not done` filter, but might be useful in conjunction with other exp => - [] Status EMPTY - [/] Status In Progress +- [h] Status On Hold - [ ] Status Todo ==================================================================================== diff --git a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.symbol_results.approved.txt b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.symbol_results.approved.txt index 49f677fdf9..c1a8a26a67 100644 --- a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.symbol_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.symbol_results.approved.txt @@ -16,6 +16,7 @@ Find tasks with anything but the space character as their status symbol, that is - [x] Status Done - [] Status EMPTY - [/] Status In Progress +- [h] Status On Hold - [Q] Status Non-Task - [p] Unknown symbol - [s] Toggles to self @@ -57,6 +58,7 @@ This is a convenient shortcut over a longer statement testing each allowed value filter by function !' -x/'.includes(task.status.symbol) Find tasks with any status symbol not supported by Tasks in the default settings. => +- [h] Status On Hold - [Q] Status Non-Task - [p] Unknown symbol - [s] Toggles to self diff --git a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.type_results.approved.txt b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.type_results.approved.txt index 9def593297..06011822b8 100644 --- a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.type_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.type_results.approved.txt @@ -30,6 +30,7 @@ Find tasks that are not type `NON_TASK` and not type `CANCELLED`. - [x] Status Done - [] Status EMPTY - [/] Status In Progress +- [h] Status On Hold - [ ] Status Todo - [p] Unknown symbol - [s] Toggles to self diff --git a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.name_results.approved.txt b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.name_results.approved.txt index bc4333c4a4..f757ba182e 100644 --- a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.name_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.name_results.approved.txt @@ -10,6 +10,7 @@ Done EMPTY In Progress Non-Task +On Hold Todo ==================================================================================== @@ -22,6 +23,7 @@ DONE EMPTY IN PROGRESS NON-TASK +ON HOLD TODO ==================================================================================== diff --git a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.symbol_results.approved.txt b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.symbol_results.approved.txt index e30559b7ab..6c5e95a7b2 100644 --- a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.symbol_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.symbol_results.approved.txt @@ -8,6 +8,7 @@ Group by the status symbol, making space characters visible. Status symbol: Status symbol: - Status symbol: / +Status symbol: h Status symbol: Q Status symbol: space Status symbol: x diff --git a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt index cc15d975b1..c8f884d85a 100644 --- a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt @@ -10,6 +10,7 @@ DONE EMPTY IN_PROGRESS NON_TASK +ON_HOLD TODO ==================================================================================== @@ -19,6 +20,7 @@ This sorts the status types in the same order as "group by status.type". => %%1%%IN_PROGRESS %%2%%TODO +%%3%%ON_HOLD %%4%%DONE %%5%%CANCELLED %%6%%NON_TASK diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt index 0c367872de..48fcfe4dc8 100644 --- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt @@ -8,6 +8,7 @@ Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status T => - [/] Status In Progress - [ ] Status Todo +- [h] Status On Hold - [] Status EMPTY - [x] Status Done - [-] Status Cancelled diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.name_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.name_results.approved.txt index ef336d2cc0..4d1b0d6b78 100644 --- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.name_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.name_results.approved.txt @@ -10,6 +10,7 @@ Identical to "Sort by status.name". - [] Status EMPTY - [/] Status In Progress - [Q] Status Non-Task +- [h] Status On Hold - [ ] Status Todo ==================================================================================== diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.nextSymbol_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.nextSymbol_results.approved.txt index 5fe12e83fe..b29a8201d9 100644 --- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.nextSymbol_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.nextSymbol_results.approved.txt @@ -6,6 +6,7 @@ sort by function task.status.nextSymbol Sort by the next status symbol. => - [] Status EMPTY +- [h] Status On Hold - [x] Status Done - [-] Status Cancelled - [Q] Status Non-Task diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.symbol_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.symbol_results.approved.txt index dbe2335fd0..fe6c6f173d 100644 --- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.symbol_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.symbol_results.approved.txt @@ -9,6 +9,7 @@ Sort by the status symbol. - [ ] Status Todo - [-] Status Cancelled - [/] Status In Progress +- [h] Status On Hold - [Q] Status Non-Task - [x] Status Done ==================================================================================== diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.type_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.type_results.approved.txt index ab77052102..f842a997e6 100644 --- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.type_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.type_results.approved.txt @@ -10,6 +10,7 @@ Unlike "Sort by status.type", this sorts the status types in alphabetical order. - [] Status EMPTY - [/] Status In Progress - [Q] Status Non-Task +- [h] Status On Hold - [ ] Status Todo ==================================================================================== diff --git a/tests/TestingTools/SampleTasks.ts b/tests/TestingTools/SampleTasks.ts index 1bd7aae673..ebf410af0b 100644 --- a/tests/TestingTools/SampleTasks.ts +++ b/tests/TestingTools/SampleTasks.ts @@ -174,6 +174,7 @@ export class SampleTasks { Status.DONE, Status.EMPTY, Status.IN_PROGRESS, + Status.ON_HOLD, Status.TODO, Status.NON_TASK, ]; From 350afb74a14adc15cf1cadb3753637bcf3248ce1 Mon Sep 17 00:00:00 2001 From: Maarten den Braber Date: Mon, 13 Oct 2025 21:12:07 +0200 Subject: [PATCH 12/24] test: Update description of isDone test --- ...gExamples.test.other_properties_task.isDone_docs.approved.md | 2 +- ...mples.test.other_properties_task.isDone_results.approved.txt | 2 +- .../CustomSorting/CustomSortingExamples.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_docs.approved.md b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_docs.approved.md index 7dd0ec26e2..6e5838d226 100644 --- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_docs.approved.md +++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_docs.approved.md @@ -6,7 +6,7 @@ sort by function !task.isDone ``` - `sort by function` sorts `true` before `false` -- Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO` and `IN_PROGRESS` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`. +- Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO`, `IN_PROGRESS` and `ON_HOLD` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`. diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt index 48fcfe4dc8..07c2bc544d 100644 --- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt +++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt @@ -4,7 +4,7 @@ Results of custom sorters sort by function !task.isDone `sort by function` sorts `true` before `false` -Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO` and `IN_PROGRESS` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`. +Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO`, `IN_PROGRESS` and `ON_HOLD` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`. => - [/] Status In Progress - [ ] Status Todo diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.ts b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.ts index b102c496a5..b8e044dd2c 100644 --- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.ts +++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.ts @@ -310,7 +310,7 @@ describe('other properties', () => { [ 'sort by function !task.isDone', '`sort by function` sorts `true` before `false`', - 'Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO` and `IN_PROGRESS` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.', + 'Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO`, `IN_PROGRESS` and `ON_HOLD` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.', ], ], SampleTasks.withAllStatuses(), From ff7cbbe83501175647d7a6490032827853c9a776 Mon Sep 17 00:00:00 2001 From: Maarten den Braber Date: Mon, 13 Oct 2025 21:29:03 +0200 Subject: [PATCH 13/24] docs: Update description for task.isDone --- docs/Queries/Sorting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Queries/Sorting.md b/docs/Queries/Sorting.md index 41582f57f4..b336d543bc 100644 --- a/docs/Queries/Sorting.md +++ b/docs/Queries/Sorting.md @@ -86,7 +86,7 @@ sort by function !task.isDone ``` - `sort by function` sorts `true` before `false` -- Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO` and `IN_PROGRESS` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`. +- Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO`, `IN_PROGRESS` and `ON_HOLD` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`. From 5796c93684cc88cda9616c4af1f9f1f8e54ec566 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 13 Oct 2025 22:18:59 +0100 Subject: [PATCH 14/24] test: - Prepare to convert a test to Approval Tests for use in docs --- tests/Query/Filter/StatusTypeField.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Query/Filter/StatusTypeField.test.ts b/tests/Query/Filter/StatusTypeField.test.ts index 6b5a70ce70..271300ac4f 100644 --- a/tests/Query/Filter/StatusTypeField.test.ts +++ b/tests/Query/Filter/StatusTypeField.test.ts @@ -78,12 +78,12 @@ describe('status.name', () => { it('status.name with invalid line is parsed and user sees helpful message', () => { // Arrange - const filter = FilterParser.parseFilter('status.type gobbledygook'); + const filter = FilterParser.parseFilter('status.type in progress'); // Assert expect(filter).not.toBeValid(); expect(filter?.error).toMatchInlineSnapshot(` - "Invalid status.type instruction: 'status.type gobbledygook'. + "Invalid status.type instruction: 'status.type in progress'. Allowed options: 'is' and 'is not' (without quotes). Allowed values: TODO DONE IN_PROGRESS ON_HOLD CANCELLED NON_TASK Note: values are case-insensitive, From 2be4f5dfb18252c4050df83345934c1313b1293f Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 13 Oct 2025 22:22:54 +0100 Subject: [PATCH 15/24] docs: Add more references to ON_HOLD --- docs/Getting Started/Statuses/Status Types.md | 2 +- docs/What is New/Changelog.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md index 32432d6188..1f78e520d1 100644 --- a/docs/Getting Started/Statuses/Status Types.md +++ b/docs/Getting Started/Statuses/Status Types.md @@ -15,7 +15,7 @@ With the new ability to create a variety of [[Custom Statuses]], Tasks needs to - how to treat tasks when searching, - and what to do when tasks with the status are toggled, both for adding or removing Done dates, and for creating new task recurrences. -This was solved by the introduction of 'Status Types', which are simply a set of 5 possible types of status: +This was solved by the introduction of 'Status Types', which are simply a set of 6 possible types of status: - `TODO` - `IN_PROGRESS` diff --git a/docs/What is New/Changelog.md b/docs/What is New/Changelog.md index 08f0b2d306..0c03a35f21 100644 --- a/docs/What is New/Changelog.md +++ b/docs/What is New/Changelog.md @@ -12,6 +12,8 @@ _In recent [Tasks releases](https://github.com/obsidian-tasks-group/obsidian-tas ## 7.x releases +- X.Y.Z: + - Add [[Status Types#ON_HOLD|ON_HOLD]] status type. - 7.22.0: - Fix [[Recurring Tasks#Priority of Dates|priority of dates in recurring tasks]] when using [[Recurring Tasks#Remove scheduled date on recurrence|Remove scheduled date on recurrence]]. - Update the [[Obsidian Properties#How does Tasks interpret Obsidian Properties?|table of examples]] to show how to use properties with nested data and object serialisation. From 1530255419c341b2a9910574cd3d7120cb268245 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 13 Oct 2025 22:30:19 +0100 Subject: [PATCH 16/24] test: - Convert a test to Approval tests, for use in docs --- ...s.name_with_invalid_line_is_helpful.approved.text | 6 ++++++ tests/Query/Filter/StatusTypeField.test.ts | 12 +++--------- 2 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 tests/Query/Filter/StatusTypeField.test.status.name_status.name_with_invalid_line_is_helpful.approved.text diff --git a/tests/Query/Filter/StatusTypeField.test.status.name_status.name_with_invalid_line_is_helpful.approved.text b/tests/Query/Filter/StatusTypeField.test.status.name_status.name_with_invalid_line_is_helpful.approved.text new file mode 100644 index 0000000000..c8b3fbb1ad --- /dev/null +++ b/tests/Query/Filter/StatusTypeField.test.status.name_status.name_with_invalid_line_is_helpful.approved.text @@ -0,0 +1,6 @@ +Tasks query: Invalid status.type instruction: 'status.type in progress'. + Allowed options: 'is' and 'is not' (without quotes). + Allowed values: TODO DONE IN_PROGRESS ON_HOLD CANCELLED NON_TASK + Note: values are case-insensitive, + so 'in_progress' works too, for example. + Example: status.type is not NON_TASK diff --git a/tests/Query/Filter/StatusTypeField.test.ts b/tests/Query/Filter/StatusTypeField.test.ts index 271300ac4f..35c210fe3d 100644 --- a/tests/Query/Filter/StatusTypeField.test.ts +++ b/tests/Query/Filter/StatusTypeField.test.ts @@ -10,6 +10,7 @@ import { Status } from '../../../src/Statuses/Status'; import * as FilterParser from '../../../src/Query/FilterParser'; import { fromLine } from '../../TestingTools/TestHelpers'; import { SampleTasks } from '../../TestingTools/SampleTasks'; +import { verifyWithFileExtension } from '../../TestingTools/ApprovalTestHelpers'; // Abbreviated names so that the markdown text is aligned const todoTask = fromLine({ line: '- [ ] Todo' }); @@ -76,20 +77,13 @@ describe('status.name', () => { expect(filter).not.toBeValid(); }); - it('status.name with invalid line is parsed and user sees helpful message', () => { + it('status.name with invalid line is helpful', () => { // Arrange const filter = FilterParser.parseFilter('status.type in progress'); // Assert expect(filter).not.toBeValid(); - expect(filter?.error).toMatchInlineSnapshot(` - "Invalid status.type instruction: 'status.type in progress'. - Allowed options: 'is' and 'is not' (without quotes). - Allowed values: TODO DONE IN_PROGRESS ON_HOLD CANCELLED NON_TASK - Note: values are case-insensitive, - so 'in_progress' works too, for example. - Example: status.type is not NON_TASK" - `); + verifyWithFileExtension('Tasks query: ' + filter?.error ?? 'Unexpectedly, no error message generated', 'text'); }); }); From 1f94e551c8e19da81087d2038c8b9e1673a6e731 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 13 Oct 2025 22:31:08 +0100 Subject: [PATCH 17/24] docs: Convert sample to mdsnippet, to ensure it is always uptodate --- docs/Getting Started/Statuses/Status Types.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md index 1f78e520d1..5657ee8aa4 100644 --- a/docs/Getting Started/Statuses/Status Types.md +++ b/docs/Getting Started/Statuses/Status Types.md @@ -79,14 +79,16 @@ The `status.type` filter uses a new pattern in the Tasks code which some refer t If Tasks does not understand a `status.type` instruction, it reports this kind of message: + ```text Tasks query: Invalid status.type instruction: 'status.type in progress'. Allowed options: 'is' and 'is not' (without quotes). - Allowed values: TODO DONE IN_PROGRESS CANCELLED NON_TASK + Allowed values: TODO DONE IN_PROGRESS ON_HOLD CANCELLED NON_TASK Note: values are case-insensitive, so 'in_progress' works too, for example. Example: status.type is not NON_TASK ``` + ### Status Types in Tasks filters From 854c0dbb93401e5790bbd55cc61bc108101da90d Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 13 Oct 2025 22:41:33 +0100 Subject: [PATCH 18/24] docs: Systematically add more references to ON_HOLD --- docs/Getting Started/About Getting Started.md | 2 +- docs/Getting Started/Statuses.md | 2 +- docs/Getting Started/Task Dependencies.md | 8 ++++---- docs/Quick Reference.md | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/Getting Started/About Getting Started.md b/docs/Getting Started/About Getting Started.md index ef9679f30d..2f99bb0a73 100644 --- a/docs/Getting Started/About Getting Started.md +++ b/docs/Getting Started/About Getting Started.md @@ -32,7 +32,7 @@ publish: true - [[Statuses]] - Also known as Custom Checkboxes. - In vanilla Obsidian tasks are either 'TODO' or 'DONE'. - - Statuses allow you to track `IN_PROGRESS`, `CANCELLED` and `NON_TASK` actions too. + - Statuses allow you to track `IN_PROGRESS`, `ON_HOLD`, `CANCELLED` and `NON_TASK` actions too. - [[Use Filename as Default Date]] - Automatically set a scheduled date for tasks based on the name of their files. - [[Tags]] diff --git a/docs/Getting Started/Statuses.md b/docs/Getting Started/Statuses.md index d22e61a55d..ad1e109288 100644 --- a/docs/Getting Started/Statuses.md +++ b/docs/Getting Started/Statuses.md @@ -61,7 +61,7 @@ Here is some more detail. - **Next Status Symbol** - the status symbol to use when the task is toggled. - **Status Type** - - one of `TODO`, `IN_PROGRESS`, `DONE`, `CANCELLED`, `NON_TASK`. + - one of `TODO`, `IN_PROGRESS`, `ON_HOLD`, `DONE`, `CANCELLED`, `NON_TASK`. - Tasks needs to know the type of each status, so that it knows how to treat them when searching, and what to do when tasks with the status are toggled. - types are searchable with `status.type`, for example `status.type is IN_PROGRESS`. - Also available: diff --git a/docs/Getting Started/Task Dependencies.md b/docs/Getting Started/Task Dependencies.md index c6800e7ba1..96f615f9fd 100644 --- a/docs/Getting Started/Task Dependencies.md +++ b/docs/Getting Started/Task Dependencies.md @@ -209,8 +209,8 @@ When using those dependencies in searches, we define two more relationships: `bl A task is `blocking` if: -- It is `TODO` or `IN_PROGRESS`. -- And any of the tasks that **directly depend on it** are also `TODO` or `IN_PROGRESS`. +- It is `TODO`, `IN_PROGRESS` or `ON_HOLD`. +- And any of the tasks that **directly depend on it** are also `TODO`, `IN_PROGRESS` or `ON_HOLD`. Note that: @@ -238,7 +238,7 @@ is blocking A task is `blocked` if: - It is `TODO` or `IN_PROGRESS`. -- And any of the tasks **it directly depends on** are also `TODO` or `IN_PROGRESS`. +- And any of the tasks **it directly depends on** are also `TODO`, `IN_PROGRESS` or `ON_HOLD`. Note that: @@ -267,7 +267,7 @@ is not blocked ### Demonstration of blocking and blocked > [!Example] Blocking occurs -> If *both* ends of a `dependsOn` link are `TODO` or `IN_PROGRESS`, blocking occurs: +> If *both* ends of a `dependsOn` link are `TODO`, `IN_PROGRESS` or `ON_HOLD`, blocking occurs: > > ```mermaid > flowchart BT diff --git a/docs/Quick Reference.md b/docs/Quick Reference.md index 8884d35b53..3e7879fc59 100644 --- a/docs/Quick Reference.md +++ b/docs/Quick Reference.md @@ -15,7 +15,7 @@ This table summarizes the filters and other options available inside a `tasks` b | **[[Filters#Filters for Dates in Tasks\|Status]]** | | | | | | `done`
`not done` | `sort by status` | `group by status` | | `task.isDone` | | `status.name (includes, does not include) `
`status.name (regex matches, regex does not match) /regex/i` | `sort by status.name` | `group by status.name` | | `task.status.name` | -| `status.type (is, is not) (TODO, DONE, IN_PROGRESS, CANCELLED, NON_TASK)` | `sort by status.type` | `group by status.type` | | `task.status.type`
`task.status.typeGroupText` | +| `status.type (is, is not) (TODO, DONE, IN_PROGRESS, ON_HOLD, CANCELLED, NON_TASK)` | `sort by status.type` | `group by status.type` | | `task.status.type`
`task.status.typeGroupText` | | | | | | `task.status.symbol` | | | | | | `task.status.nextSymbol` | | **[[Task Dependencies]]** | | | | | From fc57ad2af86a2370127b0c57f1421381ee8d4022 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 13 Oct 2025 22:56:34 +0100 Subject: [PATCH 19/24] docs: Mention ON_HOLD in docs on styling 'Status Types' --- docs/Advanced/Styling.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Advanced/Styling.md b/docs/Advanced/Styling.md index e2810c72a2..3905577418 100644 --- a/docs/Advanced/Styling.md +++ b/docs/Advanced/Styling.md @@ -328,6 +328,8 @@ li.task-list-item[data-task-status-type="IN_PROGRESS"] .task-list-item-checkbox ``` +We take the view that the status type [[Status Types#ON_HOLD|ON_HOLD]] is not (yet) actionable, and so have not included that value in the snippet. + For example, in Reading mode: ![Example of tasks-plugin-style-status-types.css snippet](../../images/tasks-plugin-style-status-types-snippet.png) From d25c5be2c9d495ab37c8bc6ae18b040c74a46bcb Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 13 Oct 2025 23:01:43 +0100 Subject: [PATCH 20/24] test: - Fix 'Unexpected constant nullishness on the left-hand side of a `??` expression.' SonarQube output: Binary expressions should not always return the same value typescript:S6638 --- tests/Query/Filter/StatusTypeField.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/Query/Filter/StatusTypeField.test.ts b/tests/Query/Filter/StatusTypeField.test.ts index 35c210fe3d..df91b61cc1 100644 --- a/tests/Query/Filter/StatusTypeField.test.ts +++ b/tests/Query/Filter/StatusTypeField.test.ts @@ -83,7 +83,10 @@ describe('status.name', () => { // Assert expect(filter).not.toBeValid(); - verifyWithFileExtension('Tasks query: ' + filter?.error ?? 'Unexpectedly, no error message generated', 'text'); + verifyWithFileExtension( + 'Tasks query: ' + (filter?.error ?? 'Unexpectedly, no error message generated'), + 'text', + ); }); }); From 6ca3ffbe99f7a2633cc6f706d18a6f30a866b310 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 13 Oct 2025 23:04:52 +0100 Subject: [PATCH 21/24] docs: One mor addition of `ON_HOLD` in Task Dependencies.md --- docs/Getting Started/Task Dependencies.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Getting Started/Task Dependencies.md b/docs/Getting Started/Task Dependencies.md index 96f615f9fd..9a68e6f154 100644 --- a/docs/Getting Started/Task Dependencies.md +++ b/docs/Getting Started/Task Dependencies.md @@ -237,7 +237,7 @@ is blocking A task is `blocked` if: -- It is `TODO` or `IN_PROGRESS`. +- It is `TODO`, `IN_PROGRESS` or `ON_HOLD`. - And any of the tasks **it directly depends on** are also `TODO`, `IN_PROGRESS` or `ON_HOLD`. Note that: From d5bd42e74bfef34e400008dac6d1f9e18eae266e Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 20 Oct 2025 14:45:35 +0100 Subject: [PATCH 22/24] docs: Refine wording on ON_HOLD docs --- docs/Getting Started/Statuses/Status Types.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md index 5657ee8aa4..47d5774740 100644 --- a/docs/Getting Started/Statuses/Status Types.md +++ b/docs/Getting Started/Statuses/Status Types.md @@ -39,7 +39,8 @@ Use of this is totally optional. You may find it useful to be able to prioritise > [!released] > The `ON_HOLD` Status Type was introduced in Tasks X.Y.Z. -You might use this to track tasks that cannot be worked on at the moment, for example, where you are waiting for a reply. +Use this for tasks you intend to complete but cannot currently progress. +Common examples include tasks awaiting feedback, blocked by dependencies, or temporarily deprioritized. ### DONE From 2fc8fdfd52aa5493051814180d38455e3f76521e Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 20 Oct 2025 14:45:58 +0100 Subject: [PATCH 23/24] docs: Further refine wording on ON_HOLD docs --- docs/Getting Started/Statuses/Status Types.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md index 47d5774740..83fe57ae86 100644 --- a/docs/Getting Started/Statuses/Status Types.md +++ b/docs/Getting Started/Statuses/Status Types.md @@ -39,8 +39,7 @@ Use of this is totally optional. You may find it useful to be able to prioritise > [!released] > The `ON_HOLD` Status Type was introduced in Tasks X.Y.Z. -Use this for tasks you intend to complete but cannot currently progress. -Common examples include tasks awaiting feedback, blocked by dependencies, or temporarily deprioritized. +Use this for tasks awaiting external input or circumstances you cannot control—such as feedback, decisions, or third-party actions. Unlike priorities, which help you choose what to work on, or dependencies, which enforce sequencing, ON_HOLD signals that a task is simply not workable right now. ### DONE From 4cb3c5907fb12c499eb32f8dab4d0af3b71cc74b Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Mon, 20 Oct 2025 14:50:15 +0100 Subject: [PATCH 24/24] docs: Finalise wording on ON_HOLD docs --- docs/Getting Started/Statuses/Status Types.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md index 83fe57ae86..ea09d1b799 100644 --- a/docs/Getting Started/Statuses/Status Types.md +++ b/docs/Getting Started/Statuses/Status Types.md @@ -39,7 +39,7 @@ Use of this is totally optional. You may find it useful to be able to prioritise > [!released] > The `ON_HOLD` Status Type was introduced in Tasks X.Y.Z. -Use this for tasks awaiting external input or circumstances you cannot control—such as feedback, decisions, or third-party actions. Unlike priorities, which help you choose what to work on, or dependencies, which enforce sequencing, ON_HOLD signals that a task is simply not workable right now. +Use this for tasks you've decided are currently unworkable—for example, when awaiting external input or any circumstances you cannot control, such as feedback, decisions, or third-party actions. Unlike [[Priority|priorities]], which help you choose what to work on, or [[Task Dependencies|dependencies]], which enforce sequencing, `ON_HOLD` signals that a task is simply not actionable right now. ### DONE