Skip to content

zn v0.11.0: undated tasks wait under No due date; the task list orders by priority - #16

Merged
adibhanna merged 3 commits into
mainfrom
zn-0.11.0
Oct 23, 2026
Merged

adibhanna merged 3 commits into
mainfrom
zn-0.11.0

Conversation

@adibhanna

Copy link
Copy Markdown
Contributor

Mirrors two desktop changes shipping in ZenNotes 2.76.0, so the terminal and the app agree on where a task lands.

Verified: go vet ./..., go test ./..., and the TUI driven in tmux on a scratch vault (list groups, O, J refused with the hint, :order note, the config key, the board's No due date column).

…#990)

The desktop app stops filing a task with no due date under Today (ZenNotes
#990, for the next desktop release): the list gets a No due date group and
the status board a No due date column, and Today keeps what is due today
or overdue. zn follows so the two read a vault the same way.

GroupTasks gains Undated, which the Tasks list shows after Upcoming and the
home card leaves out of Today. The status board places undated cards in a
No due date column between Upcoming and In progress; moving a card there
reopens it and clears its due date. A daily-note task keeps its note's
date (InferDailyTaskDueDates runs first), so it stays in Today, and moving
it to No due date is refused with a message, since there is no due: on the
line to clear. The parity tests follow the desktop's columns.
The desktop's Tasks list gets an Order menu, Note order or Priority, saved
as tasks_list_order under [view] in config.toml (ZenNotes #989, next
desktop release). zn reads the same key and offers the same choice: O in
the list, :order note|priority, or the board options menu (B / F2), each
writing the key back so the desktop and zn agree.

Note order now means the notes' line order in every group, as on the
desktop: the list used GroupTasks' own sort (priority in Today, due date in
Upcoming), so J and K moved lines the list did not show. OrderTaskGroups
applies either order; by priority, high comes before medium, low and none
in the live groups, ties by due date then line order. In priority order J
and K say they work in note order instead of moving lines.

The help's Board status row also gains the No due date column from #990.
@adibhanna
adibhanna merged commit 8575931 into main Oct 23, 2026
5 checks passed
adibhanna added a commit to ZenNotes/zennotes that referenced this pull request Oct 23, 2026
The bundled CLI is the floor a desktop build guarantees, and 0.11.0 is the
newest release (ZenNotes/tui#16). It is the terminal side of two Tasks
changes in this release, so zn and the app put a task in the same place:
a task without a due date waits under No due date in the list and on the
Status board (#990), and the list orders each date group by priority with
`O` or `:order priority`, sharing `tasks_list_order` with the app's Order
menu (#989). The pin is the release's terminal-release.json copied byte
for byte after it verified against packaging/release-signing/zn-release-1.pub
in ZenNotes/tui (source commit 88105711, integration protocol 1, all four
archives it names matching checksums.txt). Staged through
`npm run terminal:stage`; the native darwin-arm64 binary reports zn v0.11.0.
The in-app manual's CLI card says 0.11.0 and what it changes.
renovate Bot added a commit to scottames/copr that referenced this pull request Oct 23, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ZenNotes/zennotes](https://redirect.github.com/ZenNotes/zennotes) |
minor | `2.75.0` → `2.76.0` |

---

### Release Notes

<details>
<summary>ZenNotes/zennotes</summary>

###
[`v2.76.0`](https://redirect.github.com/ZenNotes/zennotes/releases/tag/v2.76.0):
ZenNotes v2.76.0

[Compare
Source](https://redirect.github.com/ZenNotes/zennotes/compare/v2.75.0...v2.76.0)

ZenNotes 2.76.0 is a Tasks release. Any task can take any due date from
its right-click menu, a task without a due date waits under its own No
due date group instead of in Today, and the Tasks list can put high
priority first while staying grouped by date. It also fixes Cloud
conflicts that a phone could not settle, one of which could delete a
note it kept, and names a note's folder the same way in note search, the
buffer switcher and the `[[` picker.

Released from
[`61628218`](https://redirect.github.com/ZenNotes/zennotes/commit/616282187604fdef849a7faba52c2a2e7b5df94e)
through
[#&#8203;994](https://redirect.github.com/ZenNotes/zennotes/pull/994) on
2026-10-23. <!-- INSTALLERS_VERIFIED -->

#### Features

- **Choose any due date from the task menu**
([#&#8203;991](https://redirect.github.com/ZenNotes/zennotes/issues/991),
thanks to
[@&#8203;davi-jorge-art](https://redirect.github.com/davi-jorge-art)).
The menu every task surface shares stopped at Due next week, so a day
further out meant finding it on a calendar and typing `due:2026-11-04`
on the line, which is the most work on a phone. Choose a date… now
follows the presets in the Tasks list, on the board, in both calendars,
and on the phones a long-press on a task. It opens the month calendar
that typing `@date` opens in a note, on the task's due date (today
without one), and a click on a day sets it. In Vim mode, `@` opens it on
the selected task in the list, on the board and in the Tasks calendar. A
daily-note task picked for its own note's date gets that date written
out, so it stays when the task moves.
- **No due date has its own place**
([#&#8203;990](https://redirect.github.com/ZenNotes/zennotes/issues/990),
thanks to
[@&#8203;davi-jorge-art](https://redirect.github.com/davi-jorge-art)).
An open task without a due date sat in Today, so Today mixed what is due
with everything undated. It now waits under No due date, after Upcoming,
in the Tasks list; the Status board gains a No due date column between
Upcoming and In progress, and dropping a card there (or `Shift+L` /
`Shift+H` into it) clears its `due:`. Home's Today keeps only what is
due today or overdue. A task written in a daily note still counts as due
on that note's date while "Tasks are due on the note's date" is on, so
it stays in Today, and the No due date column refuses it, since its date
is its note's.
- **Order the Tasks list by priority**
([#&#8203;989](https://redirect.github.com/ZenNotes/zennotes/issues/989),
thanks to
[@&#8203;davi-jorge-art](https://redirect.github.com/davi-jorge-art)).
The list kept each group in its notes' line order, so a high-priority
task could sit under five low ones. A new Order menu above the list
switches each group between Note order and Priority: high, then medium,
low and none, ties by due date, still grouped by Today, Upcoming and the
rest. `s` switches it in Vim mode, `:order priority` and `:order note`
on the ex line, and the command palette, Settings → Tasks and
`tasks_list_order` under `[view]` in config.toml set the same thing.
Shift+J/K and dragging reorder only in Note order; in Priority order
they say how to switch back. zn 0.11.0 reads the same key (`O` in its
task list).

#### Fixes

- **Cloud conflicts settle cleanly, and none deletes a note** (reported
by Dave on Discord). A phone whose sync had been stuck came back to two
conflicts on one Untitled.md: keeping the other device's version said
the file already existed, the second conflict then refused both choices
as "changed again", and taking the other device's version of a note this
phone never had could delete the note it kept, on both devices. Three
causes, reproduced with two devices against a local Cloud server. A note
met at a file this device had edited was queued as a conflict against
it; such a conflict now settles after each pull once Cloud has moved
that note on, landing where Cloud keeps it and leaving this device's
file alone. The other device's version could not take its place while
any file of this device held the path; that file now moves beside it to
the next free name (Untitled 2.md and on). And a Cloud path taken by
another file now says so instead of "changed again".
- **One folder label for a note everywhere.** 2.75.0's note search
showed the whole vault path (`inbox/Projects/Atlas`), the `[[` picker
showed `Projects/Atlas/`, and the buffer switcher the raw parent folder,
while the picker made an archived `2025/Atlas` look like an inbox
folder. All three now name a note's folder the same way: inside the main
notes area, the folder within it; anywhere else, the path from the vault
root, area first (`archive/2025/Atlas`).
- **Move asset takes a folder like `v1..2`.** The Move asset prompt
refused any path with two dots in a row, and promised that an empty
answer moves the asset to the vault root while every host files it in
`assets/`. It now refuses only a whole `..` segment, says an empty
answer goes to `assets/`, and does that: an asset loose at the vault
root moves there.
- **zn 0.11.0 is bundled.** On macOS and Linux, the zn that ZenNotes
installs is now 0.11.0, the terminal side of No due date and the
priority order
([ZenNotes/tui#16](https://redirect.github.com/ZenNotes/tui/pull/16)).

#### For contributors

- Due date picker (`1bf79403`): `chooseTaskDueDate` in
`lib/task-context-menu.ts` opens the `@date` `DatePickerModal` and
writes through the same due-date mutation as the presets; the `@` key is
Vim-gated like `x`, `i`, `c` and `>` in `TasksView`, `TasksKanban` and
`TasksCalendar`. Tests in `task-context-menu.test.ts`.
- No due date (`032e5da2`): `VaultTaskGroups.undated` in shared-domain
`tasks.ts`; the Status board's `undated` column and
`dropMutationsFor('undated')` (refused for `dueInferred` tasks) in
`task-column-mutations.ts`; Home and `getTodayTasks` now apply
`inferDailyTaskDueDates` as the Tasks view does. Drag-reorder inside the
No due date group came with `712a0e7a`.
- List order (`712a0e7a`): `applyPriorityOrder` and the `order`
parameter of `computeTasksRender` in `lib/tasks-filter.ts`;
`tasksListOrder` in the store, `PORTABLE_PREF_KEYS` and the desktop's
TOML map (`[view] tasks_list_order`).
- Cloud (`5a34aea7`): `settleMovedArrivals` in shared-domain's
`cloud-sync-coordinator.ts` runs after each pull and on resolve;
`cloudSyncFreePath` and `displace_existing` make room for the other
device's version; `PATH_CONFLICT` has its own message.
- Folder label (`d825b149`): `noteFolderLabel` in `vault-layout.ts`,
used by `SearchPalette`, `BufferPalette` and the `[[` picker. Move asset
(`0b3c8ce9`): one prompt in `lib/move-asset.ts`.
- `zod` 4.6.6 (`61628218`), the first release fixing the advisory that
failed `npm audit --omit=dev --audit-level=high`; only that package
moves in the lockfile. What's New 2.76.0 (`efe5592f`); bundled CLI
0.11.0 (`36b8edbf`); version bump (`49304a02`).

#### Demos

Screenshots of this release on the release build, attached to this
release:

**Choose a date…** from a task's right-click menu opens the month
calendar on its due date; a click on a day sets it.

![The month calendar opened from a task's
menu](https://redirect.github.com/ZenNotes/zennotes/releases/download/v2.76.0/post-1-choose-date.png)

**No due date** waits after Upcoming instead of in Today.

![The Tasks list with a No due date
group](https://redirect.github.com/ZenNotes/zennotes/releases/download/v2.76.0/post-2-no-due-date.png)

**Priority order**: high first inside each group, still grouped by date.

![The Tasks list ordered by
priority](https://redirect.github.com/ZenNotes/zennotes/releases/download/v2.76.0/post-3-priority-order.png)

#### Verification

How to test locally. Build once with `npm run build --workspace
@zennotes/desktop` and launch with isolated stores:
`ZENNOTES_USER_DATA_PATH=$(mktemp -d) ZENNOTES_CONFIG_DIR=$(mktemp -d)
npx electron apps/desktop/out/main/index.js`. Put a note with these
lines in the vault (use today's date for the first):

```
- [ ] Call the bank !med due:2026-10-23
- [ ] Renew passport !high due:2026-10-20
- [ ] Book museum tickets due:2026-11-04
- [ ] Read the manual
- [ ] Review contract !high due:2026-10-23
```

1. **No due date.** Open Tasks (Cmd+Shift+P, "Open Tasks"): Read the
manual sits under No due date after Upcoming. Before: it was in Today.
Switch to Kanban: the Status board has a No due date column; drag Book
museum tickets there and its `due:` is gone from the line.
2. **Choose a date.** Right-click Call the bank and pick Choose a date…:
a month calendar opens on its due date; click a day and the line's
`due:` changes. With Vim mode on, select a task and press `@` for the
same calendar.
3. **Priority order.** Set the Order menu above the list to Priority (or
press `s` in Vim mode): Today reads Renew passport, Review contract,
Call the bank. Press Shift+J: a message says reordering works in Note
order. `:order note` brings the line order back, and `tasks_list_order =
"note"` is under `[view]` in config.toml.
4. **Cloud conflicts.** Needs two devices on one Cloud vault. Close the
first and edit a note there by hand (say `Daily Notes/Untitled.md`). On
the second, move that note to the trash, make a new note with the same
name in the same folder, and trash that one too. Open the first again
and let it sync: the new note lands in its trash on its own, and Review
sync changes (`Space r`) asks only about the note you edited. Either
choice goes through; with the other device's version, a file of this
device already at its path moves to Untitled 2.md instead of refusing.
Before: a second conflict claimed the edited file and refused both
choices, and taking the other device's version on it could delete the
edited note on both devices.

#### Distribution channels

<!-- CHANNELS -->

#### Release validation

<!-- VALIDATION -->

</details>

---

### Configuration

📅 **Schedule**: (in timezone America/Los_Angeles)

- Branch creation
  - Every minute (`* * * * *`)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/scottames/copr).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xODAuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjE4MC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant