How the scheduler decides
The order the rules apply in, when it runs, and the three reasons a task is left unscheduled.
Updated 15 October 2026
Every replan runs the same steps, in the same order.
- Reconcile with Google. Each block placed earlier is checked against the calendar. Moved by you, in the app or in Google: kept where you put it. Deleted by you: the task goes back to unscheduled.
- Reading what is busy. Every calendar you count is read live, including ones shared as free/busy only and holiday calendars. All-day events block the whole day. Nothing from your calendar is stored.
- Order the work. By priority first (urgent, high, medium, low), then by earliest deadline within a priority. A deadline never lets a low task jump an urgent one.
- Place each task in the earliest gap that fits, inside your working hours and days, from now up to fourteen days ahead. A task you placed by hand keeps its time and the rest is laid out around it. A repeating task is placed once per occurrence, inside the period that occurrence falls in.
- Split what is allowed to split, into blocks of at least thirty minutes. See Splitting long work.
- Write only what changed. Blocks that did not move are not rewritten in Google, so your calendar does not churn.
Why a task is unscheduled
An unscheduled task shows its reason on its row. There are three:
- No duration. The scheduler cannot book a length it does not know.
- Deadline passed. Push the deadline out and it will be placed.
- No free slot before the deadline. Shorten it, allow splitting, extend working hours, or move the deadline.
When it runs
When you add or edit a task, change a setting, or press Schedule all. And in the background: Google tells Pensova when one of your calendars changes, and once an hour a job also checks each connected calendar. Either way the busy pattern is compared against a fingerprint of the last one it saw. If it changed — say a meeting landed on placed work — everything open is replanned. If nothing changed, nothing happens.