remoteintech/remote-jobs · error

Invalid `careers_url`: "${data.careers_url}". Must be a full

Error message

Invalid `careers_url`: "${data.careers_url}". Must be a full URL starting with https:// or http://

What it means

URL format check at lines 161-165 using the same isValidUrl helper. careers_url is optional, so the `data.careers_url &&` short-circuit means an absent value is fine; a present-but-malformed value is rejected with the same protocol rule (http/https only).

Source

Thrown at .github/scripts/validate-companies.js:163

  if (data.slug) {
    const expectedSlug = basename(filePath, ".md");
    if (data.slug !== expectedSlug) {
      errors.push(
        `Slug "${data.slug}" does not match filename "${basename(filePath)}". The slug must be "${expectedSlug}".`
      );
    }
  }

  // Validate URL format
  if (data.website && !isValidUrl(data.website)) {
    errors.push(
      `Invalid \`website\` URL: "${data.website}". Must be a full URL starting with https:// or http://`
    );
  }

  if (data.careers_url && !isValidUrl(data.careers_url)) {
    errors.push(
      `Invalid \`careers_url\`: "${data.careers_url}". Must be a full URL starting with https:// or http://`
    );
  }

  // Check required markdown sections
  const bodyContent = content.replace(/^---[\s\S]*?---/, "");
  for (const section of REQUIRED_SECTIONS) {
    const sectionPattern = new RegExp(
      `^##\\s+${escapeRegExp(section)}\\s*$`,
      "m"
    );
    if (!sectionPattern.test(bodyContent)) {
      errors.push(`Missing required section: "## ${section}"`);
    }
  }

  // Check that "Company blurb" has content (not just the heading)
  const blurbMatch = bodyContent.match(
    /^##\s+Company blurb\s*\n([\s\S]*?)(?=^##\s|\s*$)/m

View on GitHub (pinned to b1dd8deb19)

Solutions

  1. Supply the absolute URL with `https://`.
  2. Remove any wrapping characters or whitespace.
  3. Verify the URL resolves to a live careers page.

Example fix

// before
careers_url: /careers
// after
careers_url: https://acme.com/careers
Defensive patterns

Strategy: validation

Validate before calling

function isValidUrl(str) {
  try {
    const u = new URL(str);
    return u.protocol === 'https:' || u.protocol === 'http:';
  } catch { return false; }
}

Type guard

function isOptionalHttpUrl(str) {
  return str == null || (typeof str === 'string' && isValidUrl(str));
}

Prevention

When it happens

Trigger: Careers URL pasted as a bare path (`/careers`); a mailto: or tel: scheme; URL with stray characters from copy-paste; an ATS-specific subdomain the contributor typed without a scheme.

Common situations: Contributor copies a relative link from the company site; the careers page is behind a third-party ATS (Greenhouse, Lever) and the full URL was reconstructed incorrectly; trailing slash or query string malformation.

Related errors


AI-assisted analysis of remoteintech/remote-jobs@b1dd8deb19 (2026-08-13). Data as JSON: /api/errors/3a32e48e014ea575. Report an issue: GitHub.