{"record":{"id":"9664fb1370e9f4c2","repo":"santifer/career-ops","slug":"config-profile-yml-cv-sections-names-names","errorCode":null,"errorMessage":"⚠️  config/profile.yml cv.sections names ${names}, which matched no section in this CV. The CV also renders ${unrecognized.size} section title(s) the section-order alias table doesn't recognize (${titles}) — if one of those is the section you meant, its title needs an entry in SECTION_ALIASES in generate-pdf.mjs. Otherwise the name has no effect and can be dropped.","messagePattern":"⚠️  config/profile\\.yml cv\\.sections names (.+?), which matched no section in this CV\\. The CV also renders (.+?) section title\\(s\\) the section-order alias table doesn't recognize \\((.+?)\\) — if one of those is the section you meant, its title needs an entry in SECTION_ALIASES in generate-pdf\\.mjs\\. Otherwise the name has no effect and can be dropped\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"generate-pdf.mjs","lineNumber":819,"sourceCode":"    }\n  }\n\n  // It is worth one when the CV also renders titles the alias table can't name,\n  // because then \"not in this CV\" may be a misreading: the section could be\n  // sitting right there under a heading nothing could identify.\n  //\n  // Whether that is what happened is not knowable here — an unresolved name may\n  // equally be an optional section with no entries. So the report states only\n  // what is checkable (this name matched nothing; these titles are unidentified)\n  // and leaves the conclusion to the reader. Deliberately not conditioned on\n  // whether the document changed: a name that did nothing did nothing, whether\n  // or not its neighbours moved, and treating \"output identical\" as the failure\n  // signal misreads an order that was already satisfied.\n  const reportUnresolved = () => {\n    if (unresolved.length === 0 || unrecognized.size === 0) return;\n    const names = unresolved.map(name => `\"${displayTitle(name)}\"`).join(', ');\n    const titles = [...unrecognized.values()].map(title => `\"${title}\"`).join(', ');\n    console.warn(`⚠️  config/profile.yml cv.sections names ${names}, which matched no section in this CV. The CV also renders ${unrecognized.size} section title(s) the section-order alias table doesn't recognize (${titles}) — if one of those is the section you meant, its title needs an entry in SECTION_ALIASES in generate-pdf.mjs. Otherwise the name has no effect and can be dropped.`);\n  };\n  if (chosen.length < 2) {\n    reportUnresolved();\n    return html;\n  }\n\n  // The slots are the named sections' own positions, in document order; the\n  // sections fill them in the configured order. No separate sibling check is\n  // needed: every accepted block is balanced, so they all sit at the same\n  // nesting level by construction.\n  const slots = [...chosen].sort((a, b) => a.start - b.start);\n\n  let out = '';\n  let cursor = 0;\n  for (let i = 0; i < slots.length; i++) {\n    out += html.slice(cursor, slots[i].start);\n    out += html.slice(chosen[i].start, chosen[i].end);\n    cursor = slots[i].end;","sourceCodeStart":801,"sourceCodeEnd":837,"githubUrl":"https://github.com/santifer/career-ops/blob/60398d6549a46f5266929538af21cfab94badc75/generate-pdf.mjs#L801-L837","documentation":"After resolving cv.sections names, generate-pdf.mjs reports names that matched no section block in the rendered CV (unresolved) only when the CV also renders titles the SECTION_ALIASES alias table cannot identify (unrecognized). The likely cause is that the section exists under a heading the table doesn't map, so the configured name had nothing to attach to; the fix is a new SECTION_ALIASES entry.","triggerScenarios":"cv.md uses a custom heading like '## Toolbox' (not in SECTION_ALIASES), cv.sections lists 'skills', and the rendered HTML contains the 'Toolbox' title — unresolved and unrecognized are both non-empty, so reportUnresolved() fires. It also fires regardless of whether the rest of the reorder changed anything.","commonSituations":"Renaming section headings in cv.md for personal style; non-English headings after translating cv.md; a new optional section type added to the template without extending the alias table.","solutions":["Check the unrecognized titles quoted in the warning — if one is the section you meant, add a mapping in SECTION_ALIASES in generate-pdf.mjs (custom title -> canonical key)","Otherwise drop the ineffective name from cv.sections; the warning explicitly states the name has no effect","If the section truly is absent (optional section stripped for having no entries), no action is needed — the warning only appears when unrecognized titles also exist"],"exampleFix":"// before (generate-pdf.mjs)\nconst SECTION_ALIASES = new Map([\n  ['skills', 'skills'],\n  // 'Toolbox' unrecognized\n]);\n\n// after\nconst SECTION_ALIASES = new Map([\n  ['skills', 'skills'],\n  ['toolbox', 'skills'],\n]);","handlingStrategy":"validation","validationCode":"// Before relying on cv.sections, check every configured name maps to something\n// the rendered CV actually contains under a known alias:\nfunction unmatchedNames(configuredKeys, renderedHeadings, aliasToKey) {\n  const known = new Set(renderedHeadings.map(h => aliasToKey[h.toLowerCase().trim()]).filter(Boolean));\n  return configuredKeys.filter(k => !known.has(k));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["When you rename a cv.md heading, add the mapping to SECTION_ALIASES in the same change","Watch for this warning after translating cv.md — localized headings are the top source of unrecognized titles"],"tags":["cli","alias-table","cv-generation","config","warning"],"backgroundTag":"alias-table-missing-entry","analyzedSha":"60398d6549a46f5266929538af21cfab94badc75","analyzedAt":"2026-08-20T23:00:06.764Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}