diff --git a/package-lock.json b/package-lock.json
index 1df6f4b6..10d72f97 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "pm",
- "version": "3.153.0-alpha",
+ "version": "3.153.1-alpha",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pm",
- "version": "3.153.0-alpha",
+ "version": "3.153.1-alpha",
"license": "AGPL-3.0-or-later",
"dependencies": {
"@fontsource/atkinson-hyperlegible": "^5.3.0",
diff --git a/package.json b/package.json
index def2699d..0ec1c742 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "pm",
"private": true,
- "version": "3.153.0-alpha",
+ "version": "3.153.1-alpha",
"license": "AGPL-3.0-or-later",
"type": "module",
"engines": {
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 0c6174bf..ecf8c3cb 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -3072,7 +3072,7 @@ dependencies = [
[[package]]
name = "pm"
-version = "3.153.0-alpha"
+version = "3.153.1-alpha"
dependencies = [
"argon2",
"base64 0.23.1",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index ead2a9ea..20b14c8f 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "pm"
-version = "3.153.0-alpha"
+version = "3.153.1-alpha"
description = "PM — a local-first personal manager (Archivist + Personal Assistant)"
authors = ["Bobby Yu"]
edition = "2021"
diff --git a/src-tauri/src/calendar_recur/expand.rs b/src-tauri/src/calendar_recur/expand.rs
index 4fff8455..4cc67988 100644
--- a/src-tauri/src/calendar_recur/expand.rs
+++ b/src-tauri/src/calendar_recur/expand.rs
@@ -287,6 +287,46 @@ pub fn last_before(
Ok(last)
}
+/// The last occurrence a rule that ends (a COUNT or an UNTIL) makes, deleted or not; `None` when it
+/// makes none. Only for a rule that ends: one that never does walks to its limit and is
+/// [`RecurError::CannotCount`].
+pub fn last_occurrence(
+ facts: &RuleFacts,
+ start: &SeriesStart,
+) -> Result