code: function readScopes (root, kids, cb) {
    var scopes = kids . filter (function (kid) {
      return kid . charAt (0) === '@'
    })
  
    kids = kids . filter (function (kid) {
      return kid . charAt (0) !== '@'
    })
  
    debug ('scopes=%j', scopes)
  
    if (scopes . length === 0)
      dz (cb) (null, kids) // prevent maybe-sync zalgo release
  
    cb = once (cb)
    var l = scopes . length
    scopes . forEach (function (scope) {
      var scopedir = path . resolve (root, scope)
      debug ('root=%j scope=%j scopedir=%j', root, scope, scopedir)
      fs . readdir (scopedir, then . bind (null, scope))
    })
  
    function then (scope, er, scopekids) {
      if (er)
        return cb (er)
  
      // XXX: Not sure how old this node bug is. Maybe superstition?
      scopekids = scopekids . filter (function (scopekid) {
        return !(scopekid === '.' || scopekid === '..' || !scopekid)
      })
  
      kids . push . apply (kids, scopekids . map (function (scopekid) {
        return scope + '/' + scopekid
      }))
  
      debug ('scope=%j scopekids=%j kids=%j', scope, scopekids, kids)
  
      if (--l === 0)
        cb (null, kids)
    }
  }
docs: Turn [ 'a', '@scope' ] into ['a', '@scope/foo', '@scope/bar']