code: async function _extractArchitectureNotes({ parser, fs, log }, filePath) {
    let content;
  
    log('debug', 'Reading file at', filePath);
  
    try {
      content = await fs.readFileAsync(filePath, 'utf-8');
  
      log('debug', 'File sucessfully read', filePath);
  
      if (SHEBANG_REGEXP.test(content)) {
        log('debug', 'Found a shebang, commenting it', filePath);
        content = '// Shebang commented by jsarch: ' + content;
      }
    } catch (err) {
      log('error', 'File read failure:', filePath);
      log('stack', 'Stack:', err.stack);
      throw YError.wrap(err, 'E_FILE_FAILURE', filePath);
    }
  
    try {
      const ast = parser(content);
      const architectureNotes = [];
  
      types.visit(ast, {
        visitComment: function(path) {
          const comment = path.value.value;
          const matches = ARCHITECTURE_NOTE_REGEXP.exec(comment);
  
          if (matches) {
            architectureNotes.push({
              num: matches[1],
              title: matches[2].trim(),
              content: comment.substr(matches[0].length).trim(),
              filePath: filePath,
              loc: path.value.loc,
            });
          }
          this.traverse(path);
        },
      });
  
      log('debug', 'File sucessfully processed', path);
      log(
        'debug',
        'Architecture notes found:',
        architectureNotes.map(a => a.title),
      );
  
      return architectureNotes;
    } catch (err) {
      log('error', 'File parse failure:', filePath);
      log('stack', 'Stack:', err.stack);
      throw YError.wrap(err, 'E_FILE_PARSE_FAILURE', filePath);
    }
  }
docs: /* Architecture Note #1.1: Extraction
  
  We use AST parsing and visiting to retrieve well formed
  architecture notes. It should be structured like that:
  ```js
  
  Architecture Note #{order}: {title}
  
  {body}
  ```