     }
 
 }
+
+
+// MARK: Descriptible protocol
+
+extension TasksScheduler:Descriptible {
+
+    public func toString() -> String {
+        var infos="\n# TasksScheduler\n"
+        infos += "Number of Groups: \(_groups.count)\n"
+        for (_, group) in _groups {
+             infos += "## \(group.name) \n"
+            infos += " Number of task: \(group.totalTaskCount()), \(group.progressionState ?? "" ), \(group.completionState ?? "" ) \n"
+        }
+        return infos
+    }
+
+}

                                                            statusCode:.OK,
                                                            data: nil)


            // Erase the tasks
            if let document=group.document {
                bprint("Deleting tasks of \(group.name)", file: #file, function: #function, line: #line, category:TasksScheduler.BPRINT_CATEGORY)

            group.completionState = Completion.failureState("UnConsistent Tasks Group "+inconsistencyDetails, statusCode: CompletionStatus.Not_Acceptable)
        }

        if let completionState=group.completionState {
            // We call the completion off the group.
            group.handlers.on(completionState)
