Cassandra notices an uncertainty when its current plan becomes dependent upon a particular outcome of that uncertainty through the use of an uncertain effect, i.e., an effect with an unknown precondition that specifies an outcome of that uncertainty. The plan that Cassandra has built up to that point is in effect a plan branch for that outcome. Since branches must also be constructed for all other possible outcomes of the uncertainty, Cassandra makes a copy of its overall goal for each possible outcome of the uncertainty, each copy carrying a label indicating the outcome of the uncertainty in which it must be achieved. It thus effectively splits the plan into a set of branches, one for each possible outcome of the uncertainty.
In planning for these otherwise identical goals, Cassandra must make certain that no element of the branch for the goal for one outcome relies on a different outcome of the same uncertainty. In other words, no goal, nor any of its subgoals may be achieved by any effect that depends, directly or indirectly, on any outcome of the uncertainty other than the one in the goal's label. As described above, Cassandra achieves this by using a system of negative labels indicating contingencies from which particular plan elements must be excluded.
In the bomb-in-the-toilet example, when the plan is made dependent upon the uncertain outcome bomb in package1, a new copy of the top level goal bomb is disarmed is added to the set of open conditions. The new copy is given a label indicating that it belongs to contingency in which the bomb is in package2. The existing top level goal and all its subgoals are labeled to indicate that they belong to the contingency in which the bomb is in package1. The effect bomb in package1, the action dunk package1, and all effects of the action dunk package1 are be labeled to indicate that they cannot play a role in the contingency in which the bomb is in package2.
Notice that the action move package1, although it plays a role in the plan in the contingency in which the bomb is in package1, does not in fact depend upon the bomb being in package1. It could in principle be made part of the plan for disarming the bomb in the contingency in which the bomb is in package2, were it to prove useful for anything. This is indicated by the fact that it has no negative label for for the package2 contingency.
Figure 7: A contingency plan to disarm a bomb
When Cassandra attempts to achieve the new open condition bomb
is disarmed, it may choose the
dunk operator once again
(notice that it is prohibited from using any effects of the existing
dunk operator). This new instance of the
in turn gives rise to a subgoal to have the bomb be in the package
that is dunked. This can only be achieved by identification with the
effect bomb in package2. The plan thus constructed is
depicted in Figure 7 (the
decision-step has been omitted for clarity) and is listed in Section A.2.