docs: def write(self):
          '''Write signature file with signature of script, input, output and dependent files.
          Because local input and output files can only be determined after the execution
          of workflow. They are not part of the construction.
          '''
          if not self.output_files.valid():
              raise ValueError(
                  f'Cannot write signature with undetermined output {self.output_files}'
              )
          else:
              if 'TARGET' in env.config['SOS_DEBUG'] or 'ALL' in env.config['SOS_DEBUG']:
                  env.log_to_file(
                      'TARGET',
                      f'write signature {self.sig_id} with output {self.output_files}'
                  )
          ret = super(RuntimeInfo, self).write()
          if ret is False:
              env.logger.debug(f'Failed to write signature {self.sig_id}')
              return ret
          send_message_to_controller(['step_sig', self.sig_id, ret])
          send_message_to_controller([
              'workflow_sig', 'tracked_files', self.sig_id,
              repr({
                  'input_files': [
                      str(f.resolve())
                      for f in self.input_files
                      if isinstance(f, file_target)
                  ],
                  'dependent_files': [
                      str(f.resolve())
                      for f in self.dependent_files
                      if isinstance(f, file_target)
                  ],
                  'output_files': [
                      str(f.resolve())
                      for f in self.output_files
                      if isinstance(f, file_target)
                  ]
              })
          ])
          return True