anchor.diff:  
     void reportPackage() {
       if (diff.changed.containsKey("packageIntro")) {
  -      io.writeBad("TODO: The packageIntro changed, which is probably huge. Not including here yet.", "");
  +      io.writeBad("TODO: The <strong>packageIntro</strong> changed, which is probably huge. Not including here yet.", "");
         diff.changed.remove("packageIntro");
       }
   
       // iterate over the class categories
  -    diff.forEachOf("classes", (k,v) {
  -      reportEachClassThing(k, v);
  -    });
  +    diff.forEachOf("classes", (String classCategory, DiffNode d) {
  +      reportEachClassThing(classCategory, d);
  +    });
  +    
  +    diff.forEachOf("functions", reportEachMethodThing);
     }
   
     void reportClass() {
  
positive.code:     d.forEachRemoved((k, v) {
        //print("New ${singularize(methodCategory)} '$k': ${pretty(v)}");
        if (k == '') { k = diff.metadata['name']; }
        io.writeln("Removed ${singularize(methodCategory)}$parenthetical [$k](#):\n");
        io.writeCodeblockHr(methodSignature(v as Map, includeComment: false));
      });
      if (erase) { d.removed.clear(); }
  
negative.code:   }
  
    void calculateAllDiffs() {
      List<FileSystemEntity> rightRawLs = new Directory(rightPath).listSync(recursive: true);
      List<String> rightLs = rightRawLs
          .where((FileSystemEntity f) => f is File)
          .map((File f) => f.path)
          .toList();
  
      int i = 0;
      rightLs.forEach((String file) {
        i += 1;
        if (i < 100) {
          file = file.replaceFirst(rightPath, "");
          print("$i: diffing $file");
          calculateDiff(file);
        }
  