Files
wehub-resource-sync d083df1fdb
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 2s
Web CI / web typecheck + build (push) Failing after 1s
Release Please / release-please (push) Failing after 1s
CodeQL Analysis / Analyze (go) (push) Failing after 16s
chore: import upstream snapshot with attribution
2026-07-13 12:02:43 +08:00

2.3 KiB
Raw Permalink Blame History

ATS Normalization Test Fixture

This file is a regression fixture for the text normalization pass added in generate-pdf.mjs (issue #1). It contains the Unicode artifacts that can cause parsing errors or display issues in ATS systems and legacy parsers. Use it to verify that the normalizer converts them to ASCII-safe equivalents.

Problematic Unicode (normalizer must convert these)

Name Codepoint Sample line Converts to
Em-dash U+2014 Built and sold a SaaS — now shipping AI in production. Built and sold a SaaS - now shipping AI in production.
En-dash U+2013 20202024 at Acme Corp. 2020-2024 at Acme Corp.
Curly double quote U+201C / U+201D "Led the migration" was a real bullet. "Led the migration" was a real bullet.
Curly single quote U+2018 / U+2019 The team's velocity tripled. The team's velocity tripled.
Ellipsis U+2026 And so on… And so on...
Zero-width space U+200B Helloworld (there is a ZWSP between the two words) Helloworld (removed)
Non-breaking space U+00A0 5 years experience 5 years experience (regular space)

Writing quality guidelines (writer must follow these)

The normalizer does NOT fix writing style. These are enforced by the rules in modes/_shared.md and should never appear in generated CV text in the first place.

  • "passionate about machine learning"
  • "results-oriented professional with a proven track record"
  • "leveraged cutting-edge LLM technology"
  • "spearheaded a strategic initiative"
  • "facilitated cross-functional synergies"
  • "crafted robust, scalable solutions"
  • "in today's fast-paced digital world"
  • "5+ years of experience in artificial intelligence"
  • "demonstrated ability to drive innovative outcomes"

How to verify the normalizer

# From the project root, after editing generate-pdf.mjs:
node --check generate-pdf.mjs

# Quick smoke test of the normalizer logic (no Playwright needed):
node -e "
import('./generate-pdf.mjs').catch(()=>{});
" 2>/dev/null || true

For an end-to-end test, generate a CV PDF from a known dirty HTML file and inspect the output:

node generate-pdf.mjs /tmp/dirty-cv.html /tmp/clean-cv.pdf --format=a4
# Expected log line:
# 🧹 ATS normalization: N replacements (em-dash=X, smart-double-quote=Y, ...)