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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.