code: def set(
      self,
      credentials: SyftVerifyKey,
      migration_state: SyftObjectMigrationState,
      add_permissions: Optional[List[ActionObjectPermission]] = None,
  ) -> Result[SyftObjectMigrationState, str]:
      res = self.check_type(migration_state, self.object_type)
      # we dont use and_then logic here as it is hard because of the order of the arguments
      if res.is_err():
          return res
      return super().set(
          credentials=credentials,
          obj=res.ok(),
          add_permissions=add_permissions,
      )
  
imports: from typing import List
  from typing import Optional
  from result import Result
  from ...node.credentials import SyftVerifyKey
  from ...serde.serializable import serializable
  from ...store.document_store import BaseStash
  from ...store.document_store import DocumentStore
  from ...store.document_store import PartitionKey
  from ...store.document_store import PartitionSettings
  from ...types.syft_object import SYFT_OBJECT_VERSION_1
  from ...types.syft_object import SyftMigrationRegistry
  from ...types.syft_object import SyftObject
  from ..action.action_permissions import ActionObjectPermission
label_desc: Use image node_id 2 for calling the SyftMigrationStateStash obj's underlying member method code with example usage: obj.set(credentials, migration_state, add_permissions) and returns: super, res