code: func (al *Apps) Validate() error {
  	vs := map[types.ACName]struct{}{}
  	for _, v := range al.Volumes {
  		vs[v.Name] = struct{}{}
  	}
  
  	f := func(mnts []schema.Mount) error {
  		for _, m := range mnts {
  			if m.AppVolume != nil { // allow app-specific volumes
  				continue
  			}
  			if _, ok := vs[m.Volume]; !ok {
  				return fmt.Errorf("dangling mount point %q: volume %q not found", m.Path, m.Volume)
  			}
  		}
  		return nil
  	}
  
  	if err := f(al.Mounts); err != nil {
  		return err
  	}
  
  	err := al.Walk(func(app *App) error {
  		return f(app.Mounts)
  	})
  
  	/* TODO(vc): in debug/verbose mode say something about unused volumes? */
  	return err
  }
docs: // Validate validates al for things like referential integrity of mounts<->volumes.