Temporal Planning
Temporal planning is planning where time is part of the problem. You give the planner the starting state, the goal, and the actions, but you also describe how long those actions take and which ones can overlap.
Temporal planning is the right fit when order alone is not enough. A repair job may need one step to finish before the next one can start. A deployment may let two checks run at the same time. A delivery schedule may need the plan to fit into a real time window, not just a sequence of steps.
A small example
Here is a simple domain file and problem file for a software release.
;; domain.pddl
(define (domain deployment)
(:requirements :durative-actions)
(:predicates
(service-ready)
(checks-passed)
(deployed))
(:durative-action run-checks
:parameters ()
:duration (= ?duration 10)
:condition (and (at start (service-ready)))
:effect (and (at end (checks-passed))))
(:durative-action deploy
:parameters ()
:duration (= ?duration 20)
:condition (and (at start (checks-passed)))
:effect (and (at end (deployed))))
)
;; problem.pddl
(define (problem release)
(:domain deployment)
(:init (service-ready))
(:goal (deployed))
)
In this example, run-checks has to finish before deploy can start. The
planner is not just choosing the next action. It is also placing each action on
a timeline so the release fits the timing rules you gave it.