Repository: promptfoo/promptfoo
Issue: User should not get a Invalid range error when using authenticated Google sheet
Root cause: Validation Gap

**Describe the bug**
I initially setup my promptfoo to use a public google sheet to access my test data and it worked great. Now I pivoted to a private sheet and to use a locally saved GCP credentials json file. Now I get the following error when running eval:
```
promptfoo eval

=======================================================================================================================================
⚠️ The current version of promptfoo 0.116.0 is lower than the latest available version 0.116.4.

Please run npx promptfoo@latest or npm install -g promptfoo@latest to update.
=======================================================================================================================================

/usr/local/lib/node_modules/promptfoo/node_modules/gaxios/build/src/gaxios.js:142
                throw new common_1.GaxiosError(`Request failed with status code ${translatedResponse.status}`, opts, translatedResponse);
                      ^

GaxiosError: Invalid range: A1:ZZZ
    at Gaxios._request (/usr/local/lib/node_modules/promptfoo/node_modules/gaxios/build/src/gaxios.js:142:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async JWT.requestAsync (/usr/local/lib/node_modules/promptfoo/node_modules/google-auth-library/build/src/auth/oauth2client.js:429:18)
    at async fetchCsvFromGoogleSheetAuthenticated (/usr/local/lib/node_modules/promptfoo/dist/src/googleSheets.js:94:22)
    at async readStandaloneTestsFile (/usr/local/lib/node_modules/promptfoo/dist/src/util/testCaseReader.js:144:16)
    at async readTests (/usr/local/lib/node_modules/promptfoo/dist/src/util/testCaseReader.js:382:34)
    at async resolveConfigs (/usr/local/lib/node_modules/promptfoo/dist/src/util/config/load.js:541:25)
    at async runEvaluation (/usr/local/lib/node_modules/promptfoo/dist/src/commands/eval.js:163:55)
    at async doEval (/usr/local/lib/node_modules/promptfoo/dist/src/commands/eval.js:567:12) {
  config: {
    url: 'https://sheets.googleapis.com/v4/spreadsheets/1TunxDiVrp1jiVrOmKfi6VKk0jdRRrDIEPcmUrckKqP4/values/A1%3AZZZ',
    method: 'GET',
    apiVersion: '',
    userAgentDirectives: [
      {
        product: 'google-api-nodejs-client',
        version: '7.2.0',
        comment: 'gzip'
      }
    ],
    paramsSerializer: [Function (anonymous)],
    headers: {
      'x-goog-api-client': 'gdcl/7.2.0 gl-node/20.14.0',
      'Accept-Encoding': 'gzip',
      'User-Agent': 'google-api-nodejs-client/7.2.0 (gzip)',
      Authorization: '<<REDACTED> - See `errorRedactor` option in `gaxios` for configuration>.'
    },
    params: {},
    validateStatus: [Function (anonymous)],
    retry: true,
    responseType: 'unknown',
    errorRedactor: [Function: defaultErrorRedactor],
    retryConfig: {
      currentRetryAttempt: 0,
      retry: 3,
      httpMethodsToRetry: [ 'GET', 'HEAD', 'PUT', 'OPTIONS', 'DELETE' ],
      noResponseRetries: 2,
      retryDelayMultiplier: 2,
      timeOfFirstRequest: 1752010177352,
      totalTimeout: 9007199254740991,
      maxRetryDelay: 9007199254740991,
      statusCodesToRetry: [ [ 100, 199 ], [ 408, 408 ], [ 429, 429 ], [ 500, 599 ] ]
    }
  },
  response: {
    config: {
      url: 'https://sheets.googleapis.com/v4/spreadsheets/1TunxDiVrp1jiVrOmKfi6VKk0jdRRrDIEPcmUrckKqP4/values/A1%3AZZZ',
      method: 'GET',
      apiVersion: '',
      userAgentDirectives: [
        {
          product: 'google-api-nodejs-client',
          version: '7.2.0',
          comment: 'gzip'
        }
      ],
      paramsSerializer: [Function (anonymous)],
      headers: {
        'x-goog-api-client': 'gdcl/7.2.0 gl-node/20.14.0',
        'Accept-Encoding': 'gzip',
        'User-Agent': 'google-api-nodejs-client/7.2.0 (gzip)',
        Authorization: '<<REDACTED> - See `errorRedactor` option in `gaxios` for configuration>.'
      },
      params: {},
      validateStatus: [Function (anonymous)],
      retry: true,
      responseType: 'unknown',
      errorRedactor: [Function: defaultErrorRedactor]
    },
    data: {
      error: {
        code: 400,
        message: 'Invalid range: A1:ZZZ',
        errors: [
          {
            message: 'Invalid range: A1:ZZZ',
            domain: 'global',
            reason: 'badRequest'
          }
        ],
        status: 'INVALID_ARGUMENT'
      }
    },
    headers: {
      'alt-svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000',
      'content-encoding': 'gzip',
      'content-type': 'application/json; charset=UTF-8',
      date: 'Tue, 08 Jul 2025 21:29:37 GMT',
      server: 'ESF',
      'transfer-encoding': 'chunked',
      vary: 'Origin, X-Origin, Referer',
      'x-content-type-options': 'nosniff',
      'x-frame-options': 'SAMEORIGIN',
      'x-l2-request-path': 'l2-managed-6',
      'x-xss-protection': '0'
    },
    status: 400,
    statusText: 'Bad Request',
    request: {
      responseURL: 'https://sheets.googleapis.com/v4/spreadsheets/1TunxDiVrp1jiVrOmKfi6VKk0jdRRrDIEPcmUrckKqP4/values/A1%3AZZZ'
    }
  },
  error: undefined,
  status: 400,
  code: 400,
  errors: [
    {
      message: 'Invalid range: A1:ZZZ',
      domain: 'global',
      reason: 'badRequest'
    }
  ],
  [Symbol(gaxios-gaxios-error)]: '6.7.1'
}

Node.js v20.14.0
```

**System information:**
```
{
  "version": "0.116.0",
  "platform": {
    "os": "darwin",
    "release": "23.6.0",
    "arch": "arm64",
    "nodeVersion": "v20.14.0"
  },
  "env": {},
  "configInfo": {
    "defaultConfigPath": "/Users/johndavis/Derivita/experiments/promptfoo/standards-tagging/promptfooconfig.yaml",
    "configExists": true,
    "configContent": "Error loading config: Error: Invalid range: A1:ZZZ"
  }
}
```