anchor.diff:      String postBaseDir = LibPath.join(CartConst.WWW_POST_PATH, post.uuid);
       String mdPath = LibPath.join(postBaseDir, post.uuid + '.md');
       String htmlPath = LibPath.join(postBaseDir, post.uuid + '.html');
  -
  -    PinUtility.createDir(postBaseDir)
  +    var attachmentUploadList = new List<Future>(); // store upload futures
  +    var attachmentList = new List<CartPostAttachment>(); // store upload attachments
  +
  +    PinUtility.createDir(postBaseDir) // check & create local base dir first
       .then((bool created) {
  -      // check & create local base dir first
         if (!created) {
  -        PinLogger.instance.shout('[CartModel] _uploadPost: Create dir failed: ${postBaseDir}');
  -        completer.complete(false);
  -      }
  -      return new Future.value(created);
  +        throw new Exception('[CartModel] _uploadPost: Create dir failed: ${postBaseDir}');
  +      }
  +      return new Future.value(true);
       })
       .then((_) {
         // update or create local markdown & html files
  
positive.code:   //-* API: TAG
    //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
    Future addTag(String uuid, String name) {
      final completer = new Completer();
  
      // validate uuid
      if (!PinUtility.isUuid(uuid)) {
        PinLogger.instance.shout('[CartModel] addTag: uuid format invalid: ${uuid}}');
        completer.complete(null);
      }
  
      int timestamp = PinTime.getTime();
  
      tags.addNewTag(uuid, name, timestamp: timestamp);
  
      tags.dump().then((_) {
        completer.complete(_);
      });
  
      return completer.future;
    }
  
    Future removeTag(String uuid) {
      final completer = new Completer();
  
      // validate uuid
      if (!PinUtility.isUuid(uuid)) {
        PinLogger.instance.shout('[CartModel] removeTag: uuid format invalid: ${uuid}}');
        completer.complete(null);
      }
  
      tags.remove(uuid, posts);
  
      tags.dump().then((_) {
        completer.complete(_);
      });
  
      return completer.future;
  
negative.code:   //-* API: CATEGORY
    //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
    Future addCategory(String uuid, String name) {
      // validate uuid
      if (!PinUtility.isUuid(uuid)) {
        try {
          throw new Exception('[CartModel] addCategory: uuid format invalid: ${uuid}}');
        } catch (e, trace) {
          PinUtility.handleError(e, trace);
          return new Future.error(e, trace);
        }
      }
  
      final completer = new Completer();
      var timestamp = PinTime.getTime();
  
      categories.addNewCategory(uuid, name, timestamp: timestamp);
  