code: func builderToV2(msg *v1.ApiCommonBuildMessage, tags strpair.Map, params *v1Params) (ret *pb.BuilderID, err error) {
  	ret = &pb.BuilderID{Builder: params.Builder}
  	if ret.Builder == "" {
  		ret.Builder = tags.Get(v1.TagBuilder) // Fallback: Grab builder name from tags.
  	}
  
  	ret.Project, ret.Bucket = BucketNameToV2(msg.Bucket)
  	if msg.Project != "" && ret.Project != "" && ret.Project != msg.Project {
  		err = errors.Reason(
  			"message project %q does not match bucket project %q", msg.Project, ret.Project).Tag(MalformedBuild).Err()
  	}
  	return
  }
docs: // builderToV2 attempts to parse as many fields into bucket and project as possible,
  // and do project name validation if the project is available.