{"record":{"id":"ef6cf8e096201b59","repo":"remoteintech/remote-jobs","slug":"the-company-blurb-section-is-empty-please-add-a","errorCode":null,"errorMessage":"The \"Company blurb\" section is empty. Please add a description of the company.","messagePattern":"The \"Company blurb\" section is empty\\. Please add a description of the company\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":".github/scripts/validate-companies.js","lineNumber":185,"sourceCode":"  // Check required markdown sections\n  const bodyContent = content.replace(/^---[\\s\\S]*?---/, \"\");\n  for (const section of REQUIRED_SECTIONS) {\n    const sectionPattern = new RegExp(\n      `^##\\\\s+${escapeRegExp(section)}\\\\s*$`,\n      \"m\"\n    );\n    if (!sectionPattern.test(bodyContent)) {\n      errors.push(`Missing required section: \"## ${section}\"`);\n    }\n  }\n\n  // Check that \"Company blurb\" has content (not just the heading)\n  const blurbMatch = bodyContent.match(\n    /^##\\s+Company blurb\\s*\\n([\\s\\S]*?)(?=^##\\s|\\s*$)/m\n  );\n  if (blurbMatch && !blurbMatch[1].trim()) {\n    warnings.push(\n      'The \"Company blurb\" section is empty. Please add a description of the company.'\n    );\n  }\n\n  return { errors, warnings };\n}\n\nfunction isValidUrl(str) {\n  try {\n    const url = new URL(str);\n    return url.protocol === \"https:\" || url.protocol === \"http:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction escapeRegExp(str) {\n  return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/remoteintech/remote-jobs/blob/b1dd8deb1945e5ff58f9e9c35e318f53c8871930/.github/scripts/validate-companies.js#L167-L203","documentation":"Warning at lines 179-187. After the required-section check, a regex captures the body between `## Company blurb` and the next `##` heading (or end of file). If the captured group trims to empty, a WARNING (not an error) is pushed. Warnings increment results.summary.warnings but do not cause exit 1, so they don't block the PR — they're advisory.","triggerScenarios":"The `## Company blurb` heading is present but the contributor forgot to write the paragraph; only blank lines or whitespace follow the heading; the body was deleted in a merge leaving the heading orphaned.","commonSituations":"Contributor adds the heading as a placeholder intending to fill it later; markdown editor collapses empty paragraphs; copy-paste from a template that included only headings.","solutions":["Write at least one descriptive sentence under `## Company blurb`.","Re-run the validator and confirm the warning clears (exit code stays 0 if no errors)."],"exampleFix":"// before\n## Company blurb\n\n\n## Remote status\n// after\n## Company blurb\n\nAcme builds developer tools used by teams worldwide.\n\n## Remote status","handlingStrategy":"validation","validationCode":"function blurbHasContent(body) {\n  const m = body.match(/^##\\s+Company blurb\\s*\\n([\\s\\S]*?)(?=^##\\s|\\s*$)/m);\n  return m ? m[1].trim().length > 0 : false;\n}","typeGuard":"function hasNonEmptyBlurb(body) {\n  const m = body.match(/^##\\s+Company blurb\\s*\\n([\\s\\S]*?)(?=^##\\s|\\s*$)/m);\n  return !!m && m[1].trim().length > 0;\n}","tryCatchPattern":null,"preventionTips":["Write the blurb immediately when adding the heading rather than as a follow-up.","Treat the warning as a content-quality signal; it won't block merge but will be reported in the PR comment."],"tags":["markdown","sections","content","warning"],"backgroundTag":null,"analyzedSha":"b1dd8deb1945e5ff58f9e9c35e318f53c8871930","analyzedAt":"2026-08-13T04:09:00.804Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}