    :job-fn (var-get job-var)
    :executions (ref [] :validator vector?)
    :executor (agent -1)})
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Scheduling
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defn make-job-execution!
   "Creates a new execution for the job represented by `job-desc` and

  "Mark the context `ctx` as failed."
  [ctx]
  (assoc ctx :status :failed))

(defn simple-ci-job?
  "Check if the given object is a Simple CI job."

  "FIXME: Add documentation.")

(def config-ns-name 'fhofherr.simple.projectdef)

;; TODO split into sub-namespaces

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Context
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn initial-context
  "Initial context of a job execution."
  [project-dir]
  {:project-dir project-dir})

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Status model
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn failed?
  "Check if the given context `ctx` is marked as failed. Return the reason
