You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit bac92ed
Browse filesBrowse the repository at this point in the historyBrowse files
b1: Priority note-index cache to speed warm Priority section refreshes.
Bump to 2.5.0.b1. Index filenames of notes with open unscheduled priority items (tag-cache pattern); fall back to full scan and schedule background rebuild when missing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Copy file name to clipboardExpand all lines: jgclark.Dashboard/CHANGELOG.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,11 @@
1
1
# What's changed in 🎛 Dashboard plugin?
2
2
For more details see the [plugin's documentation](https://github.com/NotePlan/plugins/tree/main/jgclark.Dashboard/).
3
3
4
-
## [2.5.0] 2026-08-???
4
+
## [2.5.0.b1] 2026-08-27
5
+
- New: Priority note-index cache (`priorityNoteIndexCache.json`) so the Priority section can avoid a full vault scan on warm refreshes. On by default (`FFlag_UsePriorityCache`); falls back to full scan and schedules a background rebuild when the cache is missing. Commands: `generatePriorityNoteIndexCache` / `updatePriorityNoteIndexCache`.
5
6
- New: Interactive Processing on Active Projects and Projects to Review (`>> N` walks project rows; PROJACT allows back-navigate, PROJREVIEW forward-only; Start Reviews unchanged).
- Dev: Bring Reminder edit / Convert to Task / `ITEM_ORIG_SECTION` refresh and related 2.4.2–2.4.3 work from main onto the 2.5.0 branch.
7
9
8
10
## [2.4.3] 2026-08-???
9
11
- New: Reminder edit dialog Actions row has "Convert to Task" (second control) to convert a reminder into an open task prepended to today's daily note, then delete the Apple Reminder. Carries notes (in parentheses), location as `@mention`, `>date`, `at HH:MM`, and priority markers when set.
Copy file name to clipboardExpand all lines: jgclark.Dashboard/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -276,7 +276,7 @@ If the **Yesterday** section is turned off, Overdue also includes open tasks fro
276
276
You can set the "Sort order for Tag/Mention and Overdue items": 'priority' shows the higher priority (from `>>`, `!!!`, `!!` and `!` markers), 'earliest' by earliest modified date of the note, or 'most recent' changed note.
277
277
278
278
### Priority section
279
-
This finds all **unscheduled** open items with a priority set (with `>>`, `!!!`, `!!` and `!` markers). Items that already have a `>date` (or `>today`) are left out on purpose: they belong in the Calendar period sections and/or **Overdue**, not here. Priority is the undated raised-priority backlog. Note: _this is likely to be very slow to generate, as it can't use any of NotePlan's internal caches, and doesn't have a natural way to limit it, like the Overdue section._
279
+
This finds all **unscheduled** open items with a priority set (with `>>`, `!!!`, `!!` and `!` markers). Items that already have a `>date` (or `>today`) are left out on purpose: they belong in the Calendar period sections and/or **Overdue**, not here. Priority is the undated raised-priority backlog. Note: _a full vault scan is slow because NotePlan has no Priority API like `listOverdueTasks`_. From **2.5.0.b1** Dashboard keeps a local **Priority note-index cache** (similar to the Tag cache) so warm refreshes only open candidate notes; the first run after install may still do a full scan and then build the cache in the background.
280
280
281
281
David's advice is: "Priority tasks float to the tops of their individual sections already. And I go through all overdue tasks and handle them so that section stays small after you bite the bullet and do it once."
Copy file name to clipboardExpand all lines: jgclark.Dashboard/docs/ARCHITECTURE-How_Stuff_Works.md
+36-1Lines changed: 36 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -237,10 +237,45 @@ Additionally, synthetic sections (e.g. `WINS`) are stripped from pluginData in t
237
237
### Refresh cadence
238
238
239
239
- **Update** (`updateTagMentionCache`): notes changed since last run (~**1 hour** threshold via `updateTagMentionCacheIfTooOld`).
240
-
- **Full regenerate** (`generateTagMentionCache`): ~**24 hours** or when new wanted items appear / scheduled via preference `regenerateTagMentionCachePref`.
240
+
- **Full regenerate** (`generateTagMentionCache`): ~**5 days** or when new wanted items appear / scheduled via preference `regenerateTagMentionCachePref`.
241
241
- Plugin install/update may force a full rebuild (`index.js``onUpdateOrInstall`).
The Priority section has no NotePlan API equivalent of `DataStore.listOverdueTasks()`, so discovery historically walked every non-special project note plus past calendar notes (~11s on a large vault for a few dozen hits). From **2.5.0.b1**, Dashboard keeps a **plugin-local filename index** of notes that contain at least one **open, unscheduled, priority>0** paragraph (same membership rule as `getOpenPriorityItems` in `dataGenerationPriority.js`).
247
+
248
+
Implementation: `src/priorityNoteIndexCache.js`. Consumed by `getRelevantPriorityTasks()` when Priority cache is enabled (default -- **on** unless `FFlag_UsePriorityCache:false` in top-level `dashboardSettings`).
249
+
250
+
### Cache file
251
+
252
+
| File | Role |
253
+
|------|------|
254
+
| `priorityNoteIndexCache.json` | Filenames only: `regularNotes`, `calendarNotes`, plus `generatedAt` / `lastUpdated` (ISO UTC) and `version` |
255
+
256
+
Paragraphs are **not** stored. On every Priority refresh the plugin re-opens candidate notes and re-runs `getOpenPriorityItems`, so false positives self-heal. False negatives are mitigated by incremental updates on changed notes and periodic full regenerate.
257
+
258
+
### Index vs query universe
259
+
260
+
| At index build / update | At Priority query |
261
+
|-------------------------|-------------------|
262
+
| All non-`@` regular notes | Existing folder filters (`includedFolders` / `excludedFolders`) via `filterParasByRelevantFolders` |
263
+
| **All** calendar notes that match the membership rule | Restrict calendar candidates to `pastCalendarNotes()` (date start before today) |
264
+
265
+
Indexing calendar notes broadly avoids a midnight-only invalidation path when yesterday's note becomes "past." Folder filters are **not** baked into the index so one cache serves all perspectives.
266
+
267
+
### Cold / missing cache
268
+
269
+
If the cache file is missing or invalid, Priority falls back to the full vault scan (correct first paint) and **schedules** `generatePriorityNoteIndexCache` via preference. Scheduled rebuilds run fire-and-forget after `incrementallyRefreshSomeSections` / `batchReplaceSections` (same pattern as the tag cache), on the **main thread** with loading/banner feedback.
270
+
271
+
### Refresh cadence
272
+
273
+
- **Update** (`updatePriorityNoteIndexCache`): notes changed since last run (~**1 hour** via `updatePriorityNoteIndexCacheIfTooOld`; 5s debounce).
274
+
- **Full regenerate** (`generatePriorityNoteIndexCache`): ~**5 days**, or when scheduled / commanded (`generatePriorityNoteIndexCache` / `updatePriorityNoteIndexCache`).
275
+
276
+
Diagnostics (`generateDiagnosticsFile`) include a **Priority Note-Index Cache** section.
There are three related backend functions that re-generate a subset of Sections and push them to the React window. They differ in **merge vs replace**, **how many `setPluginData()` calls (and therefore React redraws)** they trigger, and **when they are the right tool**. Main Window Reload is not one of these: it calls `restartDashboard()` which re-runs `showDashboardReact()`.
Copy file name to clipboardExpand all lines: jgclark.Dashboard/plugin.json
+22-4Lines changed: 22 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -7,10 +7,10 @@
7
7
"plugin.iconColor": "red-600",
8
8
"plugin.description": "A Dashboard for NotePlan, that in one place can show:\n- a compact list of open tasks and checklists from today's note, and scheduled ones from other notes.\n- similarly for yesterday's note, tomorrow's note, and the weekly, monthly and quarterly notes too (if used)\n- open Apple Reminders\n- any timeblocks for today\n- all overdue tasks\n- all open tasks and checklists that contain particular @tags or #mentions of your choosing\n- the next notes ready to review (if you use the 'Projects and Reviews' plugin).\nIt includes many other ways of speeding up managing your tasks: see the website for more details.",
9
9
"plugin.author": "@jgclark",
10
-
"plugin.version": "2.4.2",
11
-
"plugin.releaseStatus": "full",
10
+
"plugin.version": "2.5.0.b1",
11
+
"plugin.releaseStatus": "beta",
12
12
"plugin.hidden": false,
13
-
"plugin.lastUpdateInfo": "2.4.2: Further extending edit dialog and interactive processing for Reminders.\n2.4.1: New Edit dialog and Interactive Processing for Apple Reminders. Quicker response when changing Perspective. Fix IP/task dialog error banner when Update/Enter with unchanged content (#778). Demo timing and Timed Items display fixes.\n2.4.0: New 'Reminders' Section, and addition of Apple Reminders into other Sections.\nNew 'Active Projects' Section.\nNew 'Wins' Section.\nNew 'Spaces to Include' setting which controls which (Team)Spaces you wish to include, plus whether or not to include the Private 'Space' (all notes not in a Space)\nSignificant performance improvements on refresh and for Tag/Mention sections.\nDozens of other improvements and fixes.\n2.3.3: new 'Year' section available.\n2.3.2: fix display when there are no priority items shown.\n2.3.1: fix for possible loss of settings error when upgrading.\n2.3.0: Support for NotePlan (Team)Spaces. Can re-order display of Sections.New '/backupSettings' command. Added 'noteTags' feature. Speeded up Tag/Mention sections. Layout improvements. Lots of other small fixes and improvements.\n2.2.1: Add new sorting option for Tag and Overdue sections.\n2.2.0: Add 'Search' section. New keyboard shortcuts. Plus many small improvements, bug fixes and performance improvements. See documentation for details.",
13
+
"plugin.lastUpdateInfo": "2.5.0.b1: Priority note-index cache speeds up the Priority section (avoids full vault scan on warm refreshes). Interactive Processing for Active/Review Projects. Shared section-row CSS.\n2.4.2: Further extending edit dialog and interactive processing for Reminders.\n2.4.1: New Edit dialog and Interactive Processing for Apple Reminders. Quicker response when changing Perspective. Fix IP/task dialog error banner when Update/Enter with unchanged content (#778). Demo timing and Timed Items display fixes.\n2.4.0: New 'Reminders' Section, and addition of Apple Reminders into other Sections.\nNew 'Active Projects' Section.\nNew 'Wins' Section.\nNew 'Spaces to Include' setting which controls which (Team)Spaces you wish to include, plus whether or not to include the Private 'Space' (all notes not in a Space)\nSignificant performance improvements on refresh and for Tag/Mention sections.\nDozens of other improvements and fixes.\n2.3.3: new 'Year' section available.\n2.3.2: fix display when there are no priority items shown.\n2.3.1: fix for possible loss of settings error when upgrading.\n2.3.0: Support for NotePlan (Team)Spaces. Can re-order display of Sections.New '/backupSettings' command. Added 'noteTags' feature. Speeded up Tag/Mention sections. Layout improvements. Lots of other small fixes and improvements.\n2.2.1: Add new sorting option for Tag and Overdue sections.\n2.2.0: Add 'Search' section. New keyboard shortcuts. Plus many small improvements, bug fixes and performance improvements. See documentation for details.",
14
14
"plugin.dependencies": [],
15
15
"plugin.requiredFiles": [
16
16
"react.c.WebView.bundle.dev.js"
@@ -174,6 +174,15 @@
174
174
"utc"
175
175
]
176
176
},
177
+
{
178
+
"hidden": false,
179
+
"name": "generatePriorityNoteIndexCache",
180
+
"description": "generate Priority note-index cache for Dashboard",
181
+
"jsFunction": "generatePriorityNoteIndexCache",
182
+
"alias": [
183
+
"gpic"
184
+
]
185
+
},
177
186
{
178
187
"name": "Make Callback from Current Settings",
179
188
"description": "Make a callback url or link for the current settings, and copy to the clipboard.",
@@ -284,6 +293,15 @@
284
293
"alias": [
285
294
"utc"
286
295
]
296
+
},
297
+
{
298
+
"hidden": false,
299
+
"name": "updatePriorityNoteIndexCache",
300
+
"description": "update Priority note-index cache for Dashboard",
301
+
"jsFunction": "updatePriorityNoteIndexCache",
302
+
"alias": [
303
+
"upic"
304
+
]
287
305
}
288
306
],
289
307
"plugin.commands.unused": [
@@ -390,4 +408,4 @@
390
408
"title": "All the other Dashboard Settings live in the Dashboard's settings screen, accessed by clicking the gear icon in the top right of the Dashboard."
logTimer('getRelevantPriorityTasks',thisStartTime,`- Reduced to ${String(notesToCheck.length)} non-special regular notes + past calendar notes to check`)
logTimer('getRelevantPriorityTasks',thisStartTime,`- Reduced to ${String(notesToCheck.length)} non-special regular notes + past calendar notes to check`)
181
+
}
182
+
}else{
183
+
// Reduce list to all notes that are not blank or in @ folders or excludedFolders
logTimer('getRelevantPriorityTasks',thisStartTime,`- Reduced to ${String(notesToCheck.length)} non-special regular notes + past calendar notes to check`)
186
+
}
169
187
170
188
// Note: PDF and other non-notes are contained in the directories, and returned as 'notes' by `DataStore.projectNotes` (the call behind 'regularNotesFromFilteredFolders').
171
189
// Some appear to have 'undefined' content length, but I had to find a different way to distinguish them.
0 commit comments