"[warning] Invalid argument supplied for foreach() Migration.php:641"
Usually this comes from having incorrectly coded a hard value in your migration yml script. As noted in the following example:
process:
  type:
    plugin: default_value
    default_value: 'profile'
  status: 1
  uid:
    -
      plugin: skip_on_value
      source: user_id
      method: row
      value: 1
    -
      plugin: migration_lookup
      no_stub: true
      migration: tabs_users
      source: user_id

  is_default: '1'
  created: created
  changed: user_lastvisit

Here I show a few different approaches, but one is wrong. Specifically, the status: line is trying to set a value of 1 but the migrate module is assuming it is a variable and since it is not set previously in the source section of the yml script, drupal is barfing. To fix this, do what is done in either the type line OR the is_default line; explicitly set the value via the default_value plugin OR encapsulate your value in quotes. This is identified in the documentation but can be easily overlooked when quickly coding up a solution.