How the scheduler decides
The order the rules apply in, what counts as busy, and why a task ends up where it does.
Updated 8 September 2026
Every replan runs the same steps, in the same order.
- Reconcile with Google. Each block Pensova placed earlier is checked against the calendar. Moved by you: kept where you put it. Deleted by you: the task goes back to unscheduled.
- Read what is busy. Every calendar you count as a conflict is read live, including ones shared as free/busy only and holiday calendars. All-day events block the whole day.
- 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, starting from now. A task that repeats is placed once per occurrence, inside the week that occurrence falls in.
- Split what is allowed to split. A splittable task takes the first gap of at least thirty minutes and continues in the next. See Splitting tasks.
- 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 the 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, and when you press Schedule all. And in the background: every 15 minutes a job checks each connected calendar’s busy pattern against a fingerprint of the last one it saw. Changed: replan. Unchanged: nothing happens.