anchor.diff:      | Object objDef -> planSelection ctx { data with ParentDef = objDef } data.Ast.SelectionSet (ref [])
       | Nullable innerDef -> plan ctx { data with IsNullable = true } innerDef
       | List innerDef -> planList ctx data innerDef
  -    | Abstract abstractDef -> planAbstraction ctx { data with ParentDef = abstractDef } data.Ast.SelectionSet (ref [])
  +    | Abstract abstractDef -> planAbstraction ctx { data with ParentDef = abstractDef } data.Ast.SelectionSet (ref []) None
   
   and private planSelection (ctx: PlanningContext) (data: PlanningData) (selectionSet: Selection list) visitedFragments : ExecutionPlan = 
       let parentDef = downcast data.ParentDef
  
positive.code: and private planLeaf (ctx: PlanningContext) (data: PlanningData) (leafDef: LeafDef) : ExecutionPlan =
      ResolveValue(data)
  
  and private planAbstraction (ctx:PlanningContext) (data: PlanningData) (selectionSet: Selection list) visitedFragments : ExecutionPlan =
      let parentDef = downcast data.ParentDef
      let plannedTypeFields =
          selectionSet
          |> List.fold(fun (fields: Map<string, ExecutionPlan list>) selection ->
              match selection with
              | Field field ->
                  PlanningData.FromAbstraction(ctx, parentDef, field)
                  |> Map.map (fun typeName data -> [ plan ctx data data.Definition.Type ])
                  |> Map.merge (fun typeName oldVal newVal -> oldVal @ newVal) fields
              | FragmentSpread spread ->
  
negative.code:                     match ctx.Document.Definitions |> List.tryFind (function FragmentDefinition f -> f.Name.Value = spreadName | _ -> false) with
                      | Some (FragmentDefinition fragment) ->
                          // retrieve fragment data just as it was normal selection set
                          let (ResolveAbstraction(_, fragmentFields)) = planAbstraction ctx data fragment.SelectionSet visitedFragments fragment.TypeCondition
                          // filter out already existing fields
                          Map.merge (fun typeName oldVal newVal -> oldVal @ newVal) fields fragmentFields
                      | _ -> fields
              | InlineFragment fragment ->
                   // retrieve fragment data just as it was normal selection set
                   let (ResolveAbstraction(_, fragmentFields)) = planAbstraction ctx data fragment.SelectionSet visitedFragments fragment.TypeCondition
                   // filter out already existing fields
                   Map.merge (fun typeName oldVal newVal -> oldVal @ newVal) fields fragmentFields
              | _ -> fields
  