code: func putRequestIntoInv(inv *Invocation, req *task.Request) error {
  	var props []byte
  	if req.Properties != nil {
  		var err error
  		if props, err = proto.Marshal(req.Properties); err != nil {
  			return errors.Annotate(err, "can't marshal Properties").Err()
  		}
  	}
  
  	if err := utils.ValidateKVList("tag", req.Tags, ':'); err != nil {
  		return errors.Annotate(err, "rejecting bad tags").Err()
  	}
  	sortedTags := append([]string(nil), req.Tags...)
  	sort.Strings(sortedTags)
  
  	// Note: DebugLog is handled in a special way by initInvocation.
  	inv.TriggeredBy = req.TriggeredBy
  	inv.IncomingTriggersRaw = marshalTriggersList(req.IncomingTriggers)
  	inv.PropertiesRaw = props
  	inv.Tags = sortedTags
  	return nil
  }
docs: // putRequestIntoInv copies task.Request fields into Invocation.
  //
  // See getRequestFromInv for reverse. Fails only on serialization errors,
  // this should be rare.