In fact, it seems logic to check the destination:
If the destination is still there, we can check if it's a file or a directory
If not, we could only rely on the use of recursion of not. If the recursion is "0", it is an empty dir or a file, which is the same, otherwise, this is a directory.
Nevertheless, is it a problem if the first iteration of CFEngine the copy of a directory is considered as a file ? I don't think so and the logic would also be to simply check if the destination file is a directory or not:

```
-      "is_file_copy"    not => isdir("${source}");
+      "is_file_copy"    not => isdir("${destination}");
```

What's your opinion, Jon ?