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*$)/mView on GitHub (pinned to b1dd8deb19)
Solutions
- Supply the absolute URL with `https://`.
- Remove any wrapping characters or whitespace.
- 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
- Leave careers_url absent if you don't have a real careers page rather than guessing.
- Use absolute https URLs only, never relative paths.
- Verify the ATS link (Greenhouse/Lever) resolves before committing.
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
- Invalid `website` URL: "${data.website}". Must be a full URL
- Usage: node validate-companies.js <file1.md> [file2.md ...]
- Missing YAML frontmatter. The file must start with `---` fol
- Missing required field: `${field}`
- Invalid `region`: "${data.region}". Must be one of: ${VALID_
AI-assisted analysis of remoteintech/remote-jobs@b1dd8deb19 (2026-08-13).
Data as JSON: /api/errors/3a32e48e014ea575.
Report an issue: GitHub.