Supporting flexible, extensible task descriptions in and among tasks

This thesis describes and formalizes Obligations, a model and prototype implementation that supports a continuum of task definitions from unspecified to well specified with dynamic movement of instances along this continuum. When little is known about a task, a simple request can be created that has only a textual description of the goal. If a lot of detail can be predicted about a task's sub-activities and their relationships, templates can be created that define the task's flow. Regardless of the amount of predefined structure, obligations can be modified to add detail, alter the projected path, remove unneeded steps, and align the obligation with the current circumstances. Our model uses multiple inheritance of templates and an overhead transparency metaphor to construct a network of tasks. Global templates (transparencies) define how a task is expected to proceed while local templates capture changes made to a single instance and not shared with other similar tasks. When an obligation's templates are stacked together, they create a composite view of the network. Templates are treated as meta-objects. Modifications to either the global or local templates can change the network by replacing the current template with a newly upgraded template. This type of replacement can be encoded into surrogates which automatically execute the replacements to keep the obligation up-to-date. Of course, when dynamic changes are allowed, there is the possibility of errors. The Obligation system has built in error detection schemes that determine if network construction is invalid and, when errors occur, alerts the participants and disallows execution of the network portions that are in error. In addition, since webs of interdependencies evolve among tasks in a fashion which is sometimes predictable, but often completely ad hoc, Obligations allow users to specify requests that span among collaborative contexts. When relationships are predictable, task specifications can be written that automatically spawn an obligation. When the obligation completes, the task is notified and can execute appropriate actions. When relationships are ad hoc, users are able to connect two or more tasks together, by hand, using an obligation. These bridging obligations can be used to migrate commands and to traverse into other collaborative contexts.